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 | 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 | ... | ... |