class RgGen::Core::InputBase::InputMatcher
Constants
- COMPRESS_BLANK_PATTERN
- DELETE_BLANK_PATTERN
Public Class Methods
new(pattern_or_patterns, **options, &converter)
click to toggle source
# File lib/rggen/core/input_base/input_matcher.rb, line 7 def initialize(pattern_or_patterns, **options, &converter) @options = options @converter = converter @patterns = format_patterns(pattern_or_patterns) end
Public Instance Methods
match(rhs)
click to toggle source
# File lib/rggen/core/input_base/input_matcher.rb, line 13 def match(rhs) rhs .to_s .yield_self { |s| ignore_blanks? && delete_blanks(s) || s } .yield_self(&method(:match_patterns)) end
match_automatically?()
click to toggle source
# File lib/rggen/core/input_base/input_matcher.rb, line 20 def match_automatically? @options.fetch(:match_automatically, true) end
Private Instance Methods
convert_match_data(match_data)
click to toggle source
# File lib/rggen/core/input_base/input_matcher.rb, line 72 def convert_match_data(match_data) @converter&.call(match_data) || match_data end
delete_blanks(rhs)
click to toggle source
# File lib/rggen/core/input_base/input_matcher.rb, line 57 def delete_blanks(rhs) rhs .strip .gsub(DELETE_BLANK_PATTERN, '') .gsub(COMPRESS_BLANK_PATTERN, ' ') end
expand_patterns(pattern_or_patterns)
click to toggle source
# File lib/rggen/core/input_base/input_matcher.rb, line 35 def expand_patterns(pattern_or_patterns) Array(pattern_or_patterns).each_with_object({}) do |pattern, patterns| if pattern.is_a? Hash patterns.update(pattern) else patterns[patterns.size] = pattern end end end
format_patterns(pattern_or_patterns)
click to toggle source
# File lib/rggen/core/input_base/input_matcher.rb, line 26 def format_patterns(pattern_or_patterns) if @options.fetch(:match_wholly, true) expand_patterns(pattern_or_patterns) .transform_values { |pattern| /\A#{pattern}\z/ } else expand_patterns(pattern_or_patterns) end end
ignore_blanks?()
click to toggle source
# File lib/rggen/core/input_base/input_matcher.rb, line 45 def ignore_blanks? @options.fetch(:ignore_blanks, true) end
match_patterns(rhs)
click to toggle source
# File lib/rggen/core/input_base/input_matcher.rb, line 64 def match_patterns(rhs) index, match_data = @patterns .transform_values { |pattern| pattern.match(rhs) } .max_by { |_, m| m && m[0].length || 0 } match_data && [convert_match_data(match_data), index] end