Module: StringEnhancer::PatternMatcher

Defined in:
lib/string_enhancer/pattern_matcher.rb

Constant Summary collapse

PATTERNS =

Predefined patterns for common use cases

{
  email: /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i,
  url: %r{\Ahttps?://[^\s/$.?#].[^\s]*\z},
  phone: /\A\+?[\d\s\-()]{10,}\z/,
  date: /\A\d{4}-\d{2}-\d{2}\z/,
  time: /\A([01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?\z/,
  ip_address: /\A(\d{1,3}\.){3}\d{1,3}\z/,
  credit_card: /\A\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}\z/,
  hex_color: /\A#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})\z/
}.freeze

Class Method Summary collapse

Class Method Details

.extract_patterns(str) ⇒ Object



22
23
24
25
26
27
28
# File 'lib/string_enhancer/pattern_matcher.rb', line 22

def self.extract_patterns(str)
  matches = {}
  PATTERNS.each do |name, pattern|
    matches[name] = str.scan(pattern)
  end
  matches
end

.match_pattern(str, pattern_name) ⇒ Object

Raises:

  • (PatternMatchError)


15
16
17
18
19
20
# File 'lib/string_enhancer/pattern_matcher.rb', line 15

def self.match_pattern(str, pattern_name)
  pattern = PATTERNS[pattern_name.to_sym]
  raise PatternMatchError, "Unknown pattern: #{pattern_name}" unless pattern
  
  pattern.match?(str)
end

.sanitize(str, pattern_name) ⇒ Object

Raises:

  • (PatternMatchError)


34
35
36
37
38
39
# File 'lib/string_enhancer/pattern_matcher.rb', line 34

def self.sanitize(str, pattern_name)
  pattern = PATTERNS[pattern_name.to_sym]
  raise PatternMatchError, "Unknown pattern: #{pattern_name}" unless pattern
  
  str.gsub(pattern, '')
end

.validate_format(str, pattern_name) ⇒ Object



30
31
32
# File 'lib/string_enhancer/pattern_matcher.rb', line 30

def self.validate_format(str, pattern_name)
  match_pattern(str, pattern_name)
end