Question about classes in Rails

Let me start by stating the fact that I consider myself a ruby / rails
novice (above newb, just enought to be dangerous, perhaps ... :slight_smile: )

I have an issue that relates to the ruby-openx gem, which allows ruby
to talk to an OpenX ad-server via XMLRPC, However, I think my problem
is kind of a more basic problem related to Rails, but I am sure it is
also probably due to the way that certain things are implemented in
the gem, so I'm hopeful I can get some basic guidance here on a
problem that has me stumped.

OpenX::Services::Base has a section of code that the other modules /
classes in the openx gem use when they extend this base class to
retrieve the connection to the OpenX server that looks like this:

@@connection = nil
...
def connection= c
  @@connection = c
end

def connection
  unless @@connection and @@connection.id
    @@connection = Session.new(configuration['url'])
    @@connection.create( configuration['username'],
                         configuration['password']
                       )
  end
  @@connection
end

The connection is saved as a class variable, and evidently in Rails,
at least in production mode or when config.cache_classes = true,
classes appear to persist past an initial request so they don't have
to be reloaded on every request.

The OpenX XMLRPC API expects authenticated sessions to pass back a
session id that is retrieved when you successfully login via the
XMLRPC API. The OpenX::Services::Session class handles this just fine.

However, what ends up happening is that the session times out due to
lack of activity, and the XMLRPC API does not provide a way to tell if
a session is expired or not, so it typically causes 500 internal
server errors in the Rails app that's trying to communicate with
OpenX.

What I would like to do is basically have a private copy of the openx
classes that exists only during a rails request and do not persist
past the end of the request, independent of the config.cache_classes
setting. I believe this would solve the problem well enough for me to
be able to use as a work-around.

Is it possible to do in Rails what I am asking? I think the reason
this is not an issue with the library as written is that it was not
written with Rails usage in mind, but for usage with either a cron job
or a CLI ruby script instead; however, I have a need for it to operate
properly in a Rails environment.

I'm not keen on either re-writing the gem code, nor am I interested in
keeping the session alive via a cron job, as that's a hack IMO, and
not a solution.

So, if anyone has any thoughts, I'd love to hear them. Thanks.

The gem's code can be found at http://github.com/aasmith/openx, for
anyone who is curious.