2013-03-14 63 views
2

我有一個很小的Sinatra項目,我需要覆蓋Rack::Auth::Basic#valid?。目前,我已經把這個覆蓋在我的應用程序的主文件,但似乎雜亂的來源,事情變得越來越大......Sinatra - 最重要的機架類別

require "sinatra/base" 

module Rack::Auth 
    class Basic 
    def valid?(auth) 
     # My overrides go here... 
    end 
    end 
end 

class App < Sinatra::Base 
    use Rack::Auth::Basic, "CustomRealm" do |username, password| 
    # Authentication 
    end 

    get "/" do 
    erb :index 
    end 
end 

我想將覆蓋移動到外部文件。我的項目結構是沿

* views 
|------ index.erb 
* config.ru 
* app.rb 
* README.md 
* LICENSE.md 
* Gemfile 
* Gemfile.lock 

線的東西我在哪裏可以移動Rack::Auth覆蓋,這樣我可以從裏面app.rb使用它們?我試圖把它們放在lib/rack/auth/basic.rb上,但那根本不起作用......什麼是Sinatra標準?

回答

1

我不相信在Sinatra有這樣的「標準」。但這不應該太難。

你可以做的最簡單的事情就是創建一個rack_overrides.rb並且需要你的app.rb

Sinatra沒有像自動加載的功能(如Rails),所以它不會神奇地從lib/或其他目錄中拿起東西。

哦,剛剛出於好奇:爲什麼你需要重寫Rack::Auth::Basic#valid?

+0

+1。作爲替代方案,我會將代碼放在'lib/rack/auth.rb'中,因爲如果Rack不是外部庫,那麼這樣做會如此。 – iain 2013-03-14 21:45:59