Class: Mustermann::Pattern Abstract
- Inherits:
-
Object
- Object
- Mustermann::Pattern
- Defined in:
- lib/mustermann/pattern.rb
Overview
Superclass for all pattern implementations.
Direct Known Subclasses
Class Method Summary collapse
-
.new(string, **options) ⇒ Mustermann::Pattern
A new instance of Mustermann::Pattern.
-
.supported?(option) ⇒ Boolean
Whether or not option is supported.
-
.supported_options(*list) ⇒ Object
List of supported options.
Instance Method Summary collapse
-
#===(string) ⇒ Boolean
Whether or not the pattern matches the given string.
-
#=~(string) ⇒ Integer?
Nil if pattern does not match the string, zero if it does.
-
#expand(**values) ⇒ String
Expanded string.
-
#initialize(string, **options) ⇒ Pattern
constructor
A new instance of Pattern.
-
#match(string) ⇒ MatchData, ...
MatchData or similar object if the pattern matches.
-
#named_captures ⇒ Array<String>
Capture names.
-
#names ⇒ Hash{String: Array<Integer>}
Capture names mapped to capture index.
-
#params(string = nil, captures: nil, offset: 0) ⇒ Hash{String: String, Array<String>}?
Sinatra style params if pattern matches.
-
#to_s ⇒ String
The string representation of the pattern.
Constructor Details
#initialize(string, **options) ⇒ Pattern
Returns a new instance of Pattern.
57 58 59 60 |
# File 'lib/mustermann/pattern.rb', line 57 def initialize(string, uri_decode: true, **) @uri_decode = uri_decode @string = string.to_s.dup end |
Class Method Details
.new(string, **options) ⇒ Mustermann::Pattern
Returns a new instance of Mustermann::Pattern.
39 40 41 42 43 44 45 46 47 |
# File 'lib/mustermann/pattern.rb', line 39 def self.new(string, ignore_unknown_options: false, **) unless unsupported = .keys.detect { |key| not supported?(key) } raise ArgumentError, "unsupported option %p for %p" % [unsupported, self] if unsupported end @map ||= Tool::EqualityMap.new @map.fetch(string, ) { super(string, ) } end |
.supported?(option) ⇒ Boolean
Returns Whether or not option is supported.
29 30 31 |
# File 'lib/mustermann/pattern.rb', line 29 def self.supported?(option) .include? option end |
.supported_options ⇒ Array<Symbol> .supported_options(*list) ⇒ Array<Symbol>
List of supported options.
20 21 22 23 24 25 |
# File 'lib/mustermann/pattern.rb', line 20 def self.(*list) @supported_options ||= [] = @supported_options.concat(list) += superclass. if self < Pattern end |
Instance Method Details
#===(string) ⇒ Boolean
Needs to be overridden by subclass.
Returns Whether or not the pattern matches the given string.
87 88 89 |
# File 'lib/mustermann/pattern.rb', line 87 def ===(string) raise NotImplementedError, 'subclass responsibility' end |
#=~(string) ⇒ Integer?
Returns nil if pattern does not match the string, zero if it does.
79 80 81 |
# File 'lib/mustermann/pattern.rb', line 79 def =~(string) 0 if self === string end |
#expand(**values) ⇒ String
This method is only implemented by certain subclasses.
Returns expanded string.
135 136 137 |
# File 'lib/mustermann/pattern.rb', line 135 def (**values) raise NotImplementedError, "expanding not supported by #{self.class}" end |
#match(string) ⇒ MatchData, ...
Returns MatchData or similar object if the pattern matches.
72 73 74 |
# File 'lib/mustermann/pattern.rb', line 72 def match(string) SimpleMatch.new(string) if self === string end |
#named_captures ⇒ Array<String>
Returns capture names.
93 94 95 |
# File 'lib/mustermann/pattern.rb', line 93 def named_captures {} end |
#names ⇒ Hash{String: Array<Integer>}
Returns capture names mapped to capture index.
99 100 101 |
# File 'lib/mustermann/pattern.rb', line 99 def names [] end |
#params(string = nil, captures: nil, offset: 0) ⇒ Hash{String: String, Array<String>}?
Returns Sinatra style params if pattern matches.
105 106 107 108 109 110 111 112 113 114 |
# File 'lib/mustermann/pattern.rb', line 105 def params(string = nil, captures: nil, offset: 0) return unless captures ||= match(string) params = named_captures.map do |name, positions| values = positions.map { |pos| map_param(name, captures[pos + offset]) }.flatten values = values.first if values.size < 2 and not always_array? name [name, values] end Hash[params] end |
#to_s ⇒ String
Returns the string representation of the pattern.
63 64 65 |
# File 'lib/mustermann/pattern.rb', line 63 def to_s @string.dup end |