Class: PatternMatch::PatternKeywordArgStyleDeconstructor

Inherits:
PatternDeconstructor show all
Defined in:
lib/pattern-match/core.rb

Instance Attribute Summary

Attributes inherited from Pattern

#next, #parent, #prev

Instance Method Summary collapse

Methods inherited from PatternElement

#quantifier?

Methods inherited from Pattern

#!@, #&, #ancestors, #append, #quantified?, #quantifier?, #quasibinding, #root, #root?, #to_a, #validate, #vars, #|

Constructor Details

#initialize(klass, checker, getter, *keyarg_subpatterns) ⇒ PatternKeywordArgStyleDeconstructor

Returns a new instance of PatternKeywordArgStyleDeconstructor.



230
231
232
233
234
235
236
237
# File 'lib/pattern-match/core.rb', line 230

def initialize(klass, checker, getter, *keyarg_subpatterns)
  spec = normalize_keyword_arg(keyarg_subpatterns)
  super(*spec.values)
  @klass = klass
  @checker = checker
  @getter = getter
  @spec = spec
end

Instance Method Details

#inspectObject



249
250
251
# File 'lib/pattern-match/core.rb', line 249

def inspect
  "#<#{self.class.name}: klass=#{@klass.inspect}, spec=#{@spec.inspect}>"
end

#match(vals) ⇒ Object



239
240
241
242
243
244
245
246
247
# File 'lib/pattern-match/core.rb', line 239

def match(vals)
  super do |val|
    next false unless val.kind_of?(@klass)
    next false unless @spec.keys.all? {|k| val.__send__(@checker, k) }
    @spec.all? do |k, pat|
      pat.match([val.__send__(@getter, k)]) rescue false
    end
  end
end