Skip to content

Commit

Permalink
Refactoring: NodeDefinder module was introduced.
Browse files Browse the repository at this point in the history
Signed-off-by: Ben Johnson <bjohnson@binarylogic.com>
  • Loading branch information
MitinPavel authored and binarylogic committed Sep 2, 2009
1 parent ae0fd35 commit 32542af
Showing 1 changed file with 17 additions and 11 deletions.
28 changes: 17 additions & 11 deletions lib/settingslogic.rb
Original file line number Diff line number Diff line change
Expand Up @@ -53,30 +53,36 @@ def initialize(hash_or_file = self.class.source)
self.update hash
end
end

def singleton(obj)
class << obj; self; end
end

private
module NodeDefinder

def singleton(obj)
class << obj; self; end
end

private

def method_missing(name, *args, &block)
if key?(name.to_s)
find_and_define name
define_method_for_node_or_leaf name
else
super
end
end

def find_and_define(name)
def define_method_for_node_or_leaf(name)
if self[name.to_s].is_a? Hash
node = self.class.new self[name.to_s]
node = self[name.to_s]
node.extend NodeDefinder
singleton(self).send(:define_method, name) { node }
node
else
value = self[name.to_s]
singleton(self).send(:define_method, name) { value }
value
leaf = self[name.to_s]
singleton(self).send(:define_method, name) { leaf }
leaf
end
end
end

include NodeDefinder
end

0 comments on commit 32542af

Please sign in to comment.