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,35 +54,25 @@ class Settingslogic &lt; Hash
54 end 54 end
55 end 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 def method_missing(name, *args, &block) 58 def method_missing(name, *args, &block)
66 if key?(name.to_s) 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 else 64 else
69 super 65 super
70 end 66 end
71 end 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 end 74 end
84 - end  
85 end 75 end
86 76
87 - include NodeDefinder 77 + include EigenMethodDefiner
88 end 78 end