Hello!
I want to create class methods at run-time, so I use
Object#const_missing. But, I must to know the name of
the class method which was called. Is there a way to do
this via the Ruby C API (or in Ruby in general)?
I.e. when the user calls Foo.bar, I need to know (inside
const_missing) that somebody tried to call the class
method 'bar' of Foo.
Regards,
···
--
University of Athens I bet the human brain
Physics Department is a kludge --Marvin Minsky
Elias Athanasopoulos wrote:
Hello!
I want to create class methods at run-time, so I use
Object#const_missing. But, I must to know the name of
the class method which was called. Is there a way to do this via the Ruby C API (or in Ruby in general)?
I.e. when the user calls Foo.bar, I need to know (inside
const_missing) that somebody tried to call the class
method 'bar' of Foo.
Is this what you want?
class Object
def self.const_missing(name)
const_set(name, kl = Class.new)
class << kl
def method_missing(m, *args)
puts "tried to call #{m} in #{self}"
end
end
kl
end
end
Foo.bar # ==> tried to call bar in Foo
David A. Black wrote:
Hi --
Elias Athanasopoulos wrote:
> Hello!
>
> I want to create class methods at run-time, so I use
> Object#const_missing. But, I must to know the name of
> the class method which was called. Is there a way to do
> this via the Ruby C API (or in Ruby in general)?
>
> I.e. when the user calls Foo.bar, I need to know (inside
> const_missing) that somebody tried to call the class
> method 'bar' of Foo.
Is this what you want?
class Object
def self.const_missing(name)
const_set(name, kl = Class.new)
class << kl
def method_missing(m, *args)
puts "tried to call #{m} in #{self}"
end
end
kl
end
end
Foo.bar # ==> tried to call bar in Foo
*Much* cooler than my answer! 
Or in C:
static VALUE
class_method_missing(int argc, VALUE * argv, VALUE klass)
{
char * methodName = rb_id2name(SYM2ID(argv[0]));
....
-- Richard
···
On Mon, 12 Jul 2004, Joel VanderWerf wrote: