2012-04-14 3 views
1

내 Sinatra 응용 프로그램 구조가 이와 비슷한 경우. Sinatra Help에서 복사 됨여러 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 
 

두 응용 프로그램이 도우미, 레지스터 및 자산 팩과 같은 구성을 필요로하는 경우 질문이 생깁니다. 코드를 복제하지 않고 두 응용 프로그램간에 일관성을 유지하려면 어떻게해야합니까? 이런 식으로 할 수 있을까요?

 

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 
 

답변

3

상속을 사용하는 것이 어떻습니까?

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

class LoginScreen < MyBase 
end 

class MyApp < MyBase 
    use LoginScreen 
end 

이 방법은 MyBase에 속하는 모든 응용 프로그램간에 공유됩니다.

관련 문제