summaryrefslogtreecommitdiff
path: root/app/services/snippets/base_service.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/snippets/base_service.rb')
-rw-r--r--app/services/snippets/base_service.rb33
1 files changed, 30 insertions, 3 deletions
diff --git a/app/services/snippets/base_service.rb b/app/services/snippets/base_service.rb
index 81d12997335..5d1fe815d83 100644
--- a/app/services/snippets/base_service.rb
+++ b/app/services/snippets/base_service.rb
@@ -6,12 +6,13 @@ module Snippets
CreateRepositoryError = Class.new(StandardError)
- attr_reader :uploaded_files
+ attr_reader :uploaded_assets, :snippet_files
def initialize(project, user = nil, params = {})
super
- @uploaded_files = Array(@params.delete(:files).presence)
+ @uploaded_assets = Array(@params.delete(:files).presence)
+ @snippet_files = SnippetInputActionCollection.new(Array(@params.delete(:snippet_files).presence))
filter_spam_check_params
end
@@ -22,12 +23,30 @@ module Snippets
Gitlab::VisibilityLevel.allowed_for?(current_user, visibility_level)
end
- def error_forbidden_visibility(snippet)
+ def forbidden_visibility_error(snippet)
deny_visibility_level(snippet)
snippet_error_response(snippet, 403)
end
+ def valid_params?
+ return true if snippet_files.empty?
+
+ (params.keys & [:content, :file_name]).none? && snippet_files.valid?
+ end
+
+ def invalid_params_error(snippet)
+ if snippet_files.valid?
+ [:content, :file_name].each do |key|
+ snippet.errors.add(key, 'and snippet files cannot be used together') if params.key?(key)
+ end
+ else
+ snippet.errors.add(:snippet_files, 'have invalid data')
+ end
+
+ snippet_error_response(snippet, 403)
+ end
+
def snippet_error_response(snippet, http_status)
ServiceResponse.error(
message: snippet.errors.full_messages.to_sentence,
@@ -52,5 +71,13 @@ module Snippets
message
end
+
+ def files_to_commit(snippet)
+ snippet_files.to_commit_actions.presence || build_actions_from_params(snippet)
+ end
+
+ def build_actions_from_params(snippet)
+ raise NotImplementedError
+ end
end
end