Hi --
I'm building a view hierarchy from a file, and I would like it to add getter methods for every subview created. For example, I should be able to write:
window.bottom_panel.save_button.left = 20
I played around with singleton classes and define_method, am I close? I wonder if it is illegal to do 'class << self end' within a method - I get the error 'class definition in method body'
hierarchy.each do |key, value|
view = Object::const_get( key[1] ).new
class << self end
self.class.class_eval do
define_method( key[1] ) do
return view
end
end
end
hierarchy = {
[:bottom_panel, :Panel] => {
[:save_button, :Button] => {}
}
}
I just *know* there's a way to do this with inject...
But
meanwhile, see if this is of any use. It's a whole little
self-contained simulation.
def cascade_from_hierarchy(base,hierarchy)
label, kind = *hierarchy.keys[0]
rest = hierarchy.values[0]
view = kind.new
(class << base; self; end).class_eval do
define_method(label) { view }
end
cascade_from_hierarchy(view,rest) unless rest.empty?
end
class Panel; end
class Button; end
class Window; end
window = Window.new
hierarchy = {
[:bottom_panel, Panel] => {
[:save_button, Button] => {}
}
}
cascade_from_hierarchy(window,hierarchy)
p window.bottom_panel.save_button # #<Button:0x1ceb58>
__END__
David
···
On Sun, 12 Mar 2006, Mike Austin wrote:
--
David A. Black (dblack@wobblini.net)
Ruby Power and Light, LLC (http://www.rubypowerandlight.com)
"Ruby for Rails" chapters now available
from Manning Early Access Program! http://www.manning.com/books/black