2012-04-14 3 views
1

Si ma structure d'application Sinatra est similaire à celle-ci. Copié de Sinatra AideComment inclure la configuration dans plusieurs applications sinatra

 

require 'sinatra/base' 

class LoginScreen Sinatra::Base 
    enable :sessions 

    get('/login') { haml :login } 

    post('/login') do 
    if params[:name] == 'admin' && params[:password] == 'admin' 
     session['user_name'] = params[:name] 
    else 
     redirect '/login' 
    end 
    end 
end 

class MyApp Sinatra::Base 
    # middleware will run before filters 
    use LoginScreen 

    before do 
    unless session['user_name'] 
     halt "Access denied, please login." 
    end 
    end 

    get('/') { "Hello #{session['user_name']}." } 
end 
 

La question serait si les deux applications nécessitent la même configuration tels que, les aides, les registres et pack d'actifs. Comment puis-je le rendre cohérent entre les deux application sans dupliquer le code. Est-ce que je pourrais faire quelque chose comme ça?

 

require 'sinatra/base' 

class LoginScreen Sinatra::Base 
    include_relative("config_file.rb") 
    enable :sessions 

    get('/login') { haml :login } 

    post('/login') do 
    if params[:name] == 'admin' && params[:password] == 'admin' 
     session['user_name'] = params[:name] 
    else 
     redirect '/login' 
    end 
    end 
end 

class MyApp Sinatra::Base 
    # middleware will run before filters 
    include_relative("config_file.rb") 
    use LoginScreen 

    before do 
    unless session['user_name'] 
     halt "Access denied, please login." 
    end 
    end 

    get('/') { "Hello #{session['user_name']}." } 
end 

config_file.rb 
helpers Sinatra::Helper1 
helpers Sinatra::Helper2 
helpers Sinatra::Helper3 
register Sinatra1 
register Sinatra2 
register Sinatra3 
 

Répondre

3

Comment utiliser l'héritage?

class MyBase < Sinatra::Base 
    configure do 
    helpers Sinatra::Helper1 
    register Sinatra1 
    end 
end 

class LoginScreen < MyBase 
end 

class MyApp < MyBase 
    use LoginScreen 
end 

Cette configuration ainsi se partager entre toutes les applications qui descendent de MyBase.

Questions connexes