Class: Mustermann::Composite
- Defined in:
- lib/mustermann/composite.rb
Overview
Class for pattern objects composed of multiple patterns using binary logic.
Direct Known Subclasses
Constant Summary
Constants included from Mustermann
CompileError, DEFAULT_TYPE, Error, ExpandError, ParseError
Instance Attribute Summary collapse
-
#operator ⇒ Object
readonly
Returns the value of attribute operator.
-
#patterns ⇒ Object
readonly
Returns the value of attribute patterns.
Attributes inherited from Pattern
Class Method Summary collapse
-
.new(*patterns, **options) ⇒ Mustermann::Pattern
A new composite pattern.
- .supported?(option, type: nil, **options) ⇒ Boolean
Instance Method Summary collapse
- #==(pattern) ⇒ Object
- #===(string) ⇒ Object
- #eql?(pattern) ⇒ Boolean
-
#expand(behavior = nil, values = {}) ⇒ String
Expanding is supported by almost all patterns (notable exceptions are Shell, Regular and Simple).
- #hash ⇒ Object
-
#initialize(patterns, operator: :|, **options) ⇒ Composite
constructor
A new instance of Composite.
- #match(string) ⇒ Object
- #params(string) ⇒ Object
-
#to_s ⇒ String
The string representation of the pattern.
-
#to_templates ⇒ Array<String>
Generates a list of URI template strings representing the pattern.
Methods inherited from Pattern
#+, #=~, #named_captures, #names, #peek, #peek_match, #peek_params, #peek_size, supported_options, #to_proc, #|
Methods included from Mustermann
Constructor Details
#initialize(patterns, operator: :|, **options) ⇒ Composite
Returns a new instance of Composite.
27 28 29 30 |
# File 'lib/mustermann/composite.rb', line 27 def initialize(patterns, operator: :|, **) @operator = operator.to_sym @patterns = patterns.flat_map { |p| patterns_from(p, **) } end |
Instance Attribute Details
#operator ⇒ Object (readonly)
Returns the value of attribute operator.
8 9 10 |
# File 'lib/mustermann/composite.rb', line 8 def operator @operator end |
#patterns ⇒ Object (readonly)
Returns the value of attribute patterns.
8 9 10 |
# File 'lib/mustermann/composite.rb', line 8 def patterns @patterns end |
Class Method Details
.new(*patterns, **options) ⇒ Mustermann::Pattern
Returns a new composite pattern.
18 19 20 21 22 23 24 25 |
# File 'lib/mustermann/composite.rb', line 18 def self.new(*patterns, **) patterns = patterns.flatten case patterns.size when 0 then raise ArgumentError, 'cannot create empty composite pattern' when 1 then patterns.first else super(patterns, **) end end |
.supported?(option, type: nil, **options) ⇒ Boolean
12 13 14 15 |
# File 'lib/mustermann/composite.rb', line 12 def self.supported?(option, type: nil, **) return true if super Mustermann[type || Mustermann::DEFAULT_TYPE].supported?(option, **) end |
Instance Method Details
#==(pattern) ⇒ Object
33 34 35 |
# File 'lib/mustermann/composite.rb', line 33 def ==(pattern) patterns == patterns_from(pattern) end |
#===(string) ⇒ Object
48 49 50 |
# File 'lib/mustermann/composite.rb', line 48 def ===(string) patterns.map { |p| p === string }.inject(operator) end |
#eql?(pattern) ⇒ Boolean
38 39 40 |
# File 'lib/mustermann/composite.rb', line 38 def eql?(pattern) patterns.eql? patterns_from(pattern) end |
#expand(behavior = nil, values = {}) ⇒ String
This method is only implemented by certain subclasses.
Expanding is supported by almost all patterns (notable exceptions are Shell, Regular and Simple).
Union Mustermann::Composite patterns (with the | operator) support expanding if all patterns they are composed of also support it.
69 70 71 72 73 |
# File 'lib/mustermann/composite.rb', line 69 def (behavior = nil, values = {}) raise NotImplementedError, 'expanding not supported' unless respond_to? :expand @expander ||= Mustermann::Expander.new(*patterns) @expander.(behavior, values) end |
#hash ⇒ Object
43 44 45 |
# File 'lib/mustermann/composite.rb', line 43 def hash patterns.hash | operator.hash end |
#match(string) ⇒ Object
58 59 60 |
# File 'lib/mustermann/composite.rb', line 58 def match(string) with_matching(string, :match) end |
#params(string) ⇒ Object
53 54 55 |
# File 'lib/mustermann/composite.rb', line 53 def params(string) with_matching(string, :params) end |
#to_s ⇒ String
Returns the string representation of the pattern.
82 83 84 |
# File 'lib/mustermann/composite.rb', line 82 def to_s simple_inspect end |
#to_templates ⇒ Array<String>
This method is only implemented by certain subclasses.
Generates a list of URI template strings representing the pattern.
Note that this transformation is lossy and the strings matching these templates might not match the pattern (and vice versa).
This comes in quite handy since URI templates are not made for pattern matching. That way you can easily use a more precise template syntax and have it automatically generate hypermedia links for you.
Template generation is supported by almost all patterns (notable exceptions are Shell, Regular and Simple). Union Mustermann::Composite patterns (with the | operator) support template generation if all patterns they are composed of also support it.
76 77 78 79 |
# File 'lib/mustermann/composite.rb', line 76 def to_templates raise NotImplementedError, 'template generation not supported' unless respond_to? :to_templates patterns.flat_map(&:to_templates).uniq end |