Question

I am using Rack:Session:Pool for memory based sessions. I would like to access the pool instance variables that is contacted in Rack:Session:Pool so I can see all the active session and contained data. How can I do that from within Sinatra or on the irb prompt.

my initial thought was ::Sinatra:Application::Rack::Session:Pool, but that seems to give me the class and not the current instance so the pool variable is not accessible.

Was it helpful?

Solution

If you are doing this just for development/debugging/poking at code with a stick, you could do some monkey patching and make the pool a global variable.

require 'rubygems'
require 'sinatra'
require 'yaml'

class Rack::Session::Pool
  def initialize app,options={}
    super
    $pool=@pool=Hash.new
    @mutex=Mutex.new
  end
end

use Rack::Session::Pool

get '/' do
  y $pool
  ''
end

Or, you could write a wrapper fn that does that for you.

require 'rubygems'
require 'sinatra'
require 'yaml'

module PoolWrapper
  def self.new *args
    middleware = Rack::Session::Pool.new *args
    $pool=middleware.pool
    middleware
  end
end

use PoolWrapper
# same as above 
#...

For debugging, the monkey patch is probably cleaner as you don't have to change the use call and you can wrap the monkeypatch with something that checks the environment so it is only used during devel,etc,etc.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top