Oh, good call with BasicObject. I see its docs (
http://www.ruby-doc.org/core-2.1.1/BasicObject.html) mention this exact
case:

Access to classes and modules from the Ruby standard library can be
obtained in a BasicObject<http://www.ruby-doc.org/core-2.1.1/BasicObject.html>
subclass
by referencing the desired constant from the root like ::File or
::Enumerator. Like
method_missing<http://www.ruby-doc.org/core-2.1.1/BasicObject.html#method-i-method_missing>,
const_missing can be used to delegate constant lookup to Object:

class MyObjectSystem < BasicObject
  def self.const_missing(name)
    ::Object.const_get(name)
  endend



On Sun, Mar 2, 2014 at 10:15 AM, Xavier Noria <[email protected]> wrote:

> Interesting.
>
> The problem is that the const_missing in Delegator issues
> ::Object.const_get by hand. Essentially this is the situation (modulus I
> still need coffee :):
>
>   class Object
>     def self.const_missing(cname)
>       1
>     end
>   end
>
>   class C < BasicObject
>     def self.const_missing(cname)
>       ::Object.const_get(cname)
>     end
>   end
>
>   C::A # => 1
>
> The problem there is that Delegator effectively throws the namespace by
> calling const_get on Object.
>
> To have the constant autoloaded MyThing.const_missing should be invoked
> instead for Rails to know it should look into that namespace as one of
> possible candidates (it can because self.name returns "MyThing").
>
> In general, to play by the rules const_missing in a class should call
> super if if is not able to find the constant, but Delegate cannot assume a
> lot since it inherits from BasicObject. On the other hand I don't quite see
> the point in that implementation, doing Object.const_get sounds quite
> arbitrary to me at first sight, doesn't make a lot of sense to me.
>
> I don't have a workaround to propose right now, let me think about it, but
> that's more or less the situation.
>
>  --
> You received this message because you are subscribed to a topic in the
> Google Groups "Ruby on Rails: Core" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/rubyonrails-core/PjGUK72BmFA/unsubscribe
> .
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/rubyonrails-core.
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to