This problem maybe results from a bad understanding of what I'm trying
to do. Anyway, is it possible to call a method when creating a new class
or inheriting from another class?
Currently my code looks somehow like this:
class A
class << self
attr_reader :x
def prepare
# do something
end
def fixate
# do something
end
def foo(a)
# do something with a and @x
end
end
end
class B < A
prepare
@x = "something"
foo("bar")
def method1
# do something else
end
fixate
end
Now in an ideal world, the definition of class B would be simply:
class B < A
@x = "something"
def method1
# do something
end
end
and A.setup and A.fixate should be automagically invoked whenever
defining a descendant from class A.
Does somebody know a solution for how this can be done? The only
possible way of doing this I could come up with is to wrap the
definition part into a block and pass this block to a method that calls
these functions and evaluates the block using class_eval. Something in
the line of (untested):
class C < A
wrapper do
@x = "something"
def method1
# do something
end
end
end
But I'm not sure if this solution really is an advantage.
Cheers,
Thomas.
> Does somebody know a solution for how this can be done?
see Class#inherited:
>> class A
>> def self.inherited(klass)
>> p "wow I got childs:"+klass.to_s
>> end
>> end
=> nil
>> class A2 < A
>> end
"wow I got childs:A2"
=> nil
>> Class.new(A2)
"wow I got childs:#<Class:0x2bd54e0>"
=> #<Class:0x2bd54e0>
Gennady.
harp:~ > cat a.rb
class A
class << self
def setup
puts "<#{ self }> invoking setup..."
end
def inherited klass
klass.setup
end
end
end
class B < A
end
harp:~ > ruby a.rb
<B> invoking setup...
hth.
-a
--
===============================================================================
| email :: ara [dot] t [dot] howard [at] noaa [dot] gov
| phone :: 303.497.6469
| My religion is very simple. My religion is kindness.
| --Tenzin Gyatso
===============================================================================
Thanks for this reference to "inherited" -- I didn't know about this
method and its purpose. As so often with ruby, the solution is somehow
self-evident/explanatory in retrospect.
Regards,
Thomas.