56 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| module Gitlab
 | |
|   module Suggestions
 | |
|     class CommitMessage
 | |
|       DEFAULT_SUGGESTION_COMMIT_MESSAGE =
 | |
|         'Apply %{suggestions_count} suggestion(s) to %{files_count} file(s)'
 | |
| 
 | |
|       def initialize(user, suggestion_set, custom_message = nil)
 | |
|         @user = user
 | |
|         @suggestion_set = suggestion_set
 | |
|         @custom_message = custom_message
 | |
|       end
 | |
| 
 | |
|       def message
 | |
|         project = suggestion_set.target_project
 | |
|         user_defined_message = @custom_message.presence || project.suggestion_commit_message.presence
 | |
|         message = user_defined_message || DEFAULT_SUGGESTION_COMMIT_MESSAGE
 | |
| 
 | |
|         Gitlab::StringPlaceholderReplacer
 | |
|           .replace_string_placeholders(message, PLACEHOLDERS_REGEX) do |key|
 | |
|           PLACEHOLDERS[key].call(user, suggestion_set)
 | |
|         end
 | |
|       end
 | |
| 
 | |
|       def self.format_paths(paths)
 | |
|         paths.sort.join(', ')
 | |
|       end
 | |
| 
 | |
|       private_class_method :format_paths
 | |
| 
 | |
|       private
 | |
| 
 | |
|       attr_reader :user, :suggestion_set
 | |
| 
 | |
|       PLACEHOLDERS = {
 | |
|         'branch_name' => ->(user, suggestion_set) { suggestion_set.branch },
 | |
|         'files_count' => ->(user, suggestion_set) { suggestion_set.file_paths.length },
 | |
|         'file_paths' => ->(user, suggestion_set) { format_paths(suggestion_set.file_paths) },
 | |
|         'project_name' => ->(user, suggestion_set) { suggestion_set.target_project.name },
 | |
|         'project_path' => ->(user, suggestion_set) { suggestion_set.target_project.path },
 | |
|         'user_full_name' => ->(user, suggestion_set) { user.name },
 | |
|         'username' => ->(user, suggestion_set) { user.username },
 | |
|         'suggestions_count' => ->(user, suggestion_set) { suggestion_set.suggestions.size }
 | |
|       }.freeze
 | |
| 
 | |
|       # This regex is built dynamically using the keys from the PLACEHOLDER struct.
 | |
|       # So, we can easily add new placeholder just by modifying the PLACEHOLDER hash.
 | |
|       # This regex will build the new PLACEHOLDER_REGEX with the new information
 | |
|       PLACEHOLDERS_REGEX = Regexp.union(PLACEHOLDERS.keys.map do |key|
 | |
|         Regexp.new(Regexp.escape(key))
 | |
|       end).freeze
 | |
|     end
 | |
|   end
 | |
| end
 |