1

私の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

問題は、2つのアプリケーションが、ヘルパー、レジスター、アセットパックなどの同じ構成を必要とするかどうかです。コードを複製せずに、2つのアプリケーション間で一貫性を保つにはどうすればよいですか。私はこのようなことをすることができますか?


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

4

1 に答える 1

4

継承を使用するのはどうですか?

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

class LoginScreen < MyBase
end

class MyApp < MyBase
  use LoginScreen
end

このようにして、構成は。から派生するすべてのアプリケーション間で共有されますMyBase

于 2012-04-15T00:05:16.927 に答える