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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top