30 lines
		
	
	
		
			989 B
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			989 B
		
	
	
	
		
			Ruby
		
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| module Gitlab
 | |
|   class StringPlaceholderReplacer
 | |
|     # This method accepts the following paras
 | |
|     # - string: the string to be analyzed
 | |
|     # - placeholder_regex: i.e. /%{project_path|project_id|default_branch|commit_sha}/
 | |
|     # - block: this block will be called with each placeholder found in the string using
 | |
|     # the placeholder regex. If the result of the block is nil, the original
 | |
|     # placeholder will be returned.
 | |
| 
 | |
|     def self.replace_string_placeholders(string, placeholder_regex = nil, &block)
 | |
|       return string if string.blank? || placeholder_regex.blank? || !block
 | |
| 
 | |
|       replace_placeholders(string, placeholder_regex, &block)
 | |
|     end
 | |
| 
 | |
|     class << self
 | |
|       private
 | |
| 
 | |
|       # If the result of the block is nil, then the placeholder is returned
 | |
|       def replace_placeholders(string, placeholder_regex, &block)
 | |
|         string.gsub(/%{(#{placeholder_regex})}/) do |arg|
 | |
|           yield($~[1]) || arg
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |