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: