Sinatra + Rack: Sessão: Piscina
Pergunta
Eu estou usando Rack: Sessão: Piscina para sessões baseado em memória. eu gostaria para acessar as variáveis ??de instância piscina que é contactados em Panfletos: Sessão: Piscina para que eu possa ver toda a sessão ativa e dados contidos. Como eu posso fazer que a partir de dentro Sinatra ou no IRB rápida.
Meu pensamento inicial era :: Sinatra: Aplicação :: Rack :: Sessão: Pool, mas que me parece dar à classe e não a instância atual de modo que o variável piscina não é acessível.
Solução
Se você está fazendo isso apenas para o desenvolvimento / depuração / cutucando código com uma vara, você poderia fazer algum patch macaco e fazer a piscina uma variável global.
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
Ou, você poderia escrever um fn wrapper que faz isso para você.
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
#...
Para depuração, o patch macaco provavelmente é mais limpo que você não tem que alterar a chamada use
e você pode embrulhar o monkeypatch com algo que verifica o ambiente para que ele só é usado durante devel, etc, etc.