Commit 1dac8d431366e738a776fedccaa065727f514314
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 < Hash | @@ -54,35 +54,25 @@ class Settingslogic < 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 |