Module: PatternMatchable
- Defined in:
- lib/pattern_matchable.rb,
lib/pattern_matchable/version.rb
Constant Summary collapse
- VERSION =
"0.2.0"
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.const_missing(klass_name) ⇒ Object
42 43 44 |
# File 'lib/pattern_matchable.rb', line 42 def self.const_missing(klass_name) self.refining(Object.const_get(klass_name)) end |
.refining(*klasses) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/pattern_matchable.rb', line 16 def self.refining(*klasses) Module.new { klasses.each do |klass| refine klass do def deconstruct_keys(keys) if defined? super super.then { |result| result.merge((keys - result.keys).to_h { [_1, public_send(_1)] }) } else keys.to_h { [_1, public_send(_1)] } end end def respond_to?(name, ...) name == :deconstruct_keys || super end end define_singleton_method(:const_missing) { |nested_name| PatternMatchable.refining Object.const_get("#{klass.name}::#{nested_name}") } end } end |
Instance Method Details
#deconstruct_keys(keys) ⇒ Object
4 5 6 |
# File 'lib/pattern_matchable.rb', line 4 def deconstruct_keys(keys) keys.to_h { [_1, public_send(_1)] } end |