2010-04-06 6 views
2

Utilisation Sinatra en Ruby vous pouvez définir les paramètres du serveur en faisant:Sinatra Set Settings (Ruby)

set :myvariable, "MyValue" 

et y accéder partout dans les modèles etc avec settings.myvariable.

Dans mon script, je dois être en mesure de redéfinir ces variables en retombant à un tas de valeurs par défaut. Je me suis dit la meilleure façon de le faire serait d'avoir une fonction qui exécute tous les set de l'appeler au début du serveur Sinatra et quand je dois faire les modifications:

class MyApp < Sinatra::Application 
    helpers do 
    def set_settings 
     s = settings_from_yaml() 
     set :myvariable, s['MyVariable'] || "default" 
    end 
    end 

    # Here I would expect to be able to do: 
    set_settings() 
    # But the function isn't found! 

    get '/my_path' do 
    if things_go_right 
     set_settings 
    end 
    end 
    # Etc 
end 

Comme expliqué dans le code ci-dessus, la fonction set_settings n'est pas trouvée, est-ce que je vais à ce sujet dans le mauvais sens?

Répondre

5

Vous essayez d'appeler set_settings() l'intérieur de la classe portée de MyApp, mais la méthode helper vous utilisé pour définir définit uniquement pour une utilisation à l'intérieur de ce bloc get... do...end.

Si vous voulez set_settings() soit disponible statiquement (à la classe de charge au lieu de temps demande processus), vous devez définir comme une méthode de classe:

class MyApp < Sinatra::Application 

    def self.set_settings 
    s = settings_from_yaml() 
    set :myvariable, s['MyVariable'] || "default" 
    end 

    set_settings 

    get '/my_path' do 
    # can't use set_settings here now b/c it's a class 
    # method, not a helper method. You can, however, 
    # do MyApp.set_settings, but the settings will already 
    # be set for this request. 
    end