Sinatra + Rack: Session: Piscine
Question
J'utilise Rack: Session: Piscine pour les sessions à base de mémoire. Je voudrais pour accéder aux variables d'instance du pool qui est mis en contact dans Rack: Session: piscine donc je peux voir toute la session active et contient des données. Comment puis-je faire que de l'intérieur Sinatra ou sur l'invite RIR.
ma première pensée a été :: Sinatra: Application :: :: Session rack: piscine, mais qui me semble donner à la classe et non l'instance actuelle de sorte que le variable piscine est pas accessible.
La solution
Si vous faites cela juste pour le développement / mise au point / piquer code avec un bâton, vous pouvez faire un peu de rapiéçage de singe et faire de la piscine une variable globale.
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, vous pouvez écrire un wrapper fn qui fait pour vous.
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
#...
Pour le débogage, le patch de singe est probablement plus propre que vous ne devez pas changer l'appel use
et vous pouvez envelopper le monkey-patch avec quelque chose qui vérifie l'environnement de sorte qu'il est utilisé au cours devel, etc, etc.