From 1dac8d431366e738a776fedccaa065727f514314 Mon Sep 17 00:00:00 2001 From: Pavel Mitin Date: Wed, 2 Sep 2009 12:17:40 +0800 Subject: [PATCH] NodeDefinder was renamed EigenMethodDefiner. Method 'define_method_for_node_or_leaf' was removed. --- lib/settingslogic.rb | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/lib/settingslogic.rb b/lib/settingslogic.rb index 5fb93fe..fc80e63 100644 --- a/lib/settingslogic.rb +++ b/lib/settingslogic.rb @@ -54,35 +54,25 @@ class Settingslogic < Hash end end - module NodeDefinder - - def singleton(obj) - class << obj; self; end - end - - private - + module EigenMethodDefiner def method_missing(name, *args, &block) if key?(name.to_s) - define_method_for_node_or_leaf name + define_eigen_method name.to_s + value = self[name.to_s] + value.extend EigenMethodDefiner if value.is_a? Hash + value else super end end - def define_method_for_node_or_leaf(name) - if self[name.to_s].is_a? Hash - node = self[name.to_s] - node.extend NodeDefinder - singleton(self).send(:define_method, name) { node } - node - else - leaf = self[name.to_s] - singleton(self).send(:define_method, name) { leaf } - leaf + private + + def define_eigen_method(name) + eigen_class = class << self; self; end + eigen_class.send(:define_method, name) { self[name] } end - end end - include NodeDefinder + include EigenMethodDefiner end -- libgit2 0.21.0