Forum: Ruby Dynamic finding of missing constants.

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
7359ed44852399295c6247dd9719b81b?d=identicon&s=25 Ola.Bini (Guest)
on 2005-11-25 17:23
(Received via mailing list)
Hi.

I'm doing some slightly interesting things with Ruby, and I wanted to
know
of there's a language way of interrupting the process for finding a
Constant name, like the method_missing method. The closest thing I've
been
able to work out is to rescue the NameError at some toplevel, but this
is
not transparent enough for me. Anyone have good any good suggestions?

Regards
  Ola Bini
4299e35bacef054df40583da2d51edea?d=identicon&s=25 James Gray (bbazzarrakk)
on 2005-11-25 17:31
(Received via mailing list)
On Nov 25, 2005, at 10:22 AM, Ola Bini wrote:

> Hi.
>
> I'm doing some slightly interesting things with Ruby, and I wanted
> to know of there's a language way of interrupting the process for
> finding a Constant name, like the method_missing method.

Yep, const_missing().

James Edward Gray II
956f185be9eac1760a2a54e287c4c844?d=identicon&s=25 decoux (Guest)
on 2005-11-25 17:31
(Received via mailing list)
>>>>> "O" == Ola Bini <Ola.Bini@ki.se> writes:

O> I'm doing some slightly interesting things with Ruby, and I wanted to
know
O> of there's a language way of interrupting the process for finding a
O> Constant name, like the method_missing method.

 You have Module#const_missing

moulon% ri Module#const_missing
--------------------------------------------------- Module#const_missing
     mod.const_missing(sym)    => obj
------------------------------------------------------------------------
     Invoked when a reference is made to an undefined constant in _mod_.
     It is passed a symbol for the undefined constant, and returns a
     value to be used for that constant. The following code is a (very
     bad) example: if reference is made to an undefined constant, it
     attempts to load a file whose name is the lowercase version of the
     constant (thus class +Fred+ is assumed to be in file +fred.rb+). If
     found, it returns the value of the loaded class. It therefore
     implements a perverse kind of autoload facility.

       def Object.const_missing(name)
         @looked_for ||= {}
         str_name = name.to_s
         raise "Class not found: #{name}" if @looked_for[str_name]
         @looked_for[str_name] = 1
         file = str_name.downcase
         require file
         klass = const_get(name)
         return klass if klass
         raise "Class not found: #{name}"
       end

moulon%


Guy Decoux
7359ed44852399295c6247dd9719b81b?d=identicon&s=25 Ola.Bini (Guest)
on 2005-11-25 17:31
(Received via mailing list)
At 17:28 2005-11-25, you wrote:
>James Edward Gray II
Ah, sorry. Thanks for the pointer. I thought I checked for it. But
apparently my brain is fried after to much friday-work.

/O
This topic is locked and can not be replied to.