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) ⇒ Pattern
A new instance of 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.
-
#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) ⇒ 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.
55 56 57 58 |
# File 'lib/mustermann/pattern.rb', line 55 def initialize(string, uri_decode: true, **) @uri_decode = uri_decode @string = string.dup end |
Class Method Details
.new(string, **options) ⇒ Pattern
Returns a new instance of Pattern.
38 39 40 41 42 43 44 45 |
# File 'lib/mustermann/pattern.rb', line 38 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 super(string, ) end |
.supported?(option) ⇒ Boolean
Returns Whether or not option is supported.
28 29 30 |
# File 'lib/mustermann/pattern.rb', line 28 def self.supported?(option) .include? option end |
.supported_options ⇒ Array<Symbol> .supported_options(*list) ⇒ Array<Symbol>
List of supported options.
19 20 21 22 23 24 |
# File 'lib/mustermann/pattern.rb', line 19 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.
85 86 87 |
# File 'lib/mustermann/pattern.rb', line 85 def ===(string) raise NotImplementedError, 'subclass responsibility' end |
#=~(string) ⇒ Integer?
Returns nil if pattern does not match the string, zero if it does.
77 78 79 |
# File 'lib/mustermann/pattern.rb', line 77 def =~(string) 0 if self === string end |
#match(string) ⇒ MatchData, ...
Returns MatchData or similar object if the pattern matches.
70 71 72 |
# File 'lib/mustermann/pattern.rb', line 70 def match(string) SimpleMatch.new(string) if self === string end |
#named_captures ⇒ Array<String>
Returns capture names.
91 92 93 |
# File 'lib/mustermann/pattern.rb', line 91 def named_captures {} end |
#names ⇒ Hash{String}: Array<Integer>
Returns capture names mapped to capture index.
97 98 99 |
# File 'lib/mustermann/pattern.rb', line 97 def names [] end |
#params(string = nil, captures: nil) ⇒ Hash{String: String, Array<String>}?
Returns Sinatra style params if pattern matches.
103 104 105 106 107 108 109 110 111 112 |
# File 'lib/mustermann/pattern.rb', line 103 def params(string = nil, captures: nil) return unless captures ||= match(string) params = named_captures.map do |name, positions| values = positions.map { |pos| map_param(name, captures[pos]) }.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.
61 62 63 |
# File 'lib/mustermann/pattern.rb', line 61 def to_s @string.dup end |