James Hughes
1/23/2006 10:16:00 PM
(Sorry for that last bit of noise, itchy tab-key finger...)
So what I ended up with is I took advantage of the fact that my
third-party lib provides an accessor for the class variable I was
trying to get at. I use this in my helper module, which reopens the
class and which in turn is mixed in to my subclasses (A and B in the
contrived example) and all is well. Apologies to all for whom all this
was blindingly obvious. As it is for me, _now_.
jh
On 1/21/06, James Hughes <hughes.james@gmail.com> wrote:
> On 1/20/06, dblack@wobblini.net <dblack@wobblini.net> wrote:
> > >> Does this help at all?
> >
> > [...]
> >
> > > Hmm. Not sure yet. While I try to wrap my head around what's going on
> > > with the const_missing and const_get magic above, here is the short
> > > script I wrote to try and simulate the real-world problem I'm trying
> > > to solve. Note that the derived class (A) is trying to access a class
> > > variable and not a constant as in your example.
> >
> > Whoops, I misread.
> >
> > > module Foo
> > > class Bar
> > > @@classvar = "Boo!"
> > > end
> > > end
> > >
> > > module FooBarHelper
> > > class << Foo::Bar
> > > def amethod
> > > puts @@classvar
> >
> > The class variables of Foo::Bar's singleton class are not the same as
> > those of Foo::Bar, so you'd want to avoid opening up the singleton
> > class.
>
> Ah, is that what I'm doing? ;) Must reread the pickaxe chapters on
> Ruby's object system...
>
> > You can do this instead:
> >
> > class Foo::Bar
> > def self.amethod
> > puts @@classvar
> > end
> > end
>
> Right. This was my interim solution. However, as mentioned previously
> in this thread, Foo::Bar is a third party gem (the ActiveLDAP module,
> just to add some context to all this), and I want to avoid having to
> maintain my additions to this everytime the lib gets a new release.
>
> >
> > As things stand there's no need for the FooBarHelper module at all:
>
> Yes, unless I'm trying to avoid directly modifying a third party
> module as outlined above.
> Just to add a bit more context to what I'm trying to achieve here, the
> class variable I'm trying to access is a ruby-ldap connection object.
> If my only option is to modify ActiveLDAP itself as you've suggested
> here, then that's the way I'll go. Is that my only option? Thanks for
> your responses so far.
>
> jh
>
> --
> James Hughes
> Web application developer
> Centre for Health Services and Policy Research
> Vancouver, BC
>
>
--
James Hughes
Web application developer
Centre for Health Services and Policy Research
Vancouver, BC