From: James Hughes Date: 2006-01-24T07:15:36+09:00 Subject: Re: Inserting (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 wrote: > On 1/20/06, 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