Class: Filigree::DestructuringPattern
- Inherits:
-
MultipleObjectPattern
- Object
- BasicPattern
- MultipleObjectPattern
- Filigree::DestructuringPattern
- Defined in:
- lib/filigree/match.rb
Overview
A pattern that matches an instance of a class and destructures it so that the values contained by the object may be matched upon.
Instance Attribute Summary collapse
- #klass ⇒ Class readonly
Attributes inherited from MultipleObjectPattern
Instance Method Summary collapse
-
#<=>(other) ⇒ Integer
Specialized version of the bi-directional comparison operator.
-
#initialize(klass, pattern) ⇒ DestructuringPattern
constructor
Create a new destructuring pattern.
-
#match?(object, env) ⇒ Boolean
Test to see if the object is an instance of the appropriate class, and if so destructure it and test it’s values against the sub-pattern elements.
- #weight ⇒ Object
Methods inherited from MultipleObjectPattern
Methods included from AbstractClass
#abstract_method, extended, #install_icvars, #new
Methods inherited from BasicPattern
Constructor Details
#initialize(klass, pattern) ⇒ DestructuringPattern
Create a new destructuring pattern.
595 596 597 598 |
# File 'lib/filigree/match.rb', line 595 def initialize(klass, pattern) @klass = klass super(pattern) end |
Instance Attribute Details
#klass ⇒ Class (readonly)
565 566 567 |
# File 'lib/filigree/match.rb', line 565 def klass @klass end |
Instance Method Details
#<=>(other) ⇒ Integer
Specialized version of the bi-directional comparison operator.
573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 |
# File 'lib/filigree/match.rb', line 573 def <=>(other) if other.is_a?(DestructuringPattern) if self.klass == other.klass base_compare(other) do self.pattern.zip(other.pattern).inject(0) do |total, pair| total + (pair.first <=> pair.last) end / self.pattern.length end elsif self.klass.subclass_of?(other.klass) then 1 else -1 end else super end end |
#match?(object, env) ⇒ Boolean
Test to see if the object is an instance of the appropriate class, and if so destructure it and test it’s values against the sub-pattern elements.
608 609 610 |
# File 'lib/filigree/match.rb', line 608 def match?(object, env) object.is_a?(@klass) and super(object.destructure(@pattern.length), env) end |
#weight ⇒ Object
612 613 614 |
# File 'lib/filigree/match.rb', line 612 def weight 1 end |