Commit 1dac8d431366e738a776fedccaa065727f514314

Authored by Pavel Mitin
Committed by Ben Johnson
1 parent 32542af8
Exists in master

NodeDefinder was renamed EigenMethodDefiner.

Method 'define_method_for_node_or_leaf' was removed.

Signed-off-by: Ben Johnson <bjohnson@binarylogic.com>
Showing 1 changed file with 11 additions and 21 deletions   Show diff stats
lib/settingslogic.rb
... ... @@ -54,35 +54,25 @@ class Settingslogic &lt; Hash
54 54 end
55 55 end
56 56  
57   - module NodeDefinder
58   -
59   - def singleton(obj)
60   - class << obj; self; end
61   - end
62   -
63   - private
64   -
  57 + module EigenMethodDefiner
65 58 def method_missing(name, *args, &block)
66 59 if key?(name.to_s)
67   - define_method_for_node_or_leaf name
  60 + define_eigen_method name.to_s
  61 + value = self[name.to_s]
  62 + value.extend EigenMethodDefiner if value.is_a? Hash
  63 + value
68 64 else
69 65 super
70 66 end
71 67 end
72 68  
73   - def define_method_for_node_or_leaf(name)
74   - if self[name.to_s].is_a? Hash
75   - node = self[name.to_s]
76   - node.extend NodeDefinder
77   - singleton(self).send(:define_method, name) { node }
78   - node
79   - else
80   - leaf = self[name.to_s]
81   - singleton(self).send(:define_method, name) { leaf }
82   - leaf
  69 + private
  70 +
  71 + def define_eigen_method(name)
  72 + eigen_class = class << self; self; end
  73 + eigen_class.send(:define_method, name) { self[name] }
83 74 end
84   - end
85 75 end
86 76  
87   - include NodeDefinder
  77 + include EigenMethodDefiner
88 78 end
... ...