Sinatra - Overriding Rack Classes

时间:2013-03-14 08:07:52

标签: ruby sinatra rack

我有一个很小的Sinatra项目,我需要覆盖Rack::Auth::Basic#valid?。目前我已将此覆盖放置在我的应用程序的主文件中,但随着事情变得更大,这似乎会混淆源代码......

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 个答案:

答案 0 :(得分:1)

我不相信Sinatra有这个“标准”。但这不应该太难。

您可以做的最简单的事情是创建一个rack_overrides.rb并要求app.rb

Sinatra没有像自动加载这样的功能(就像Rails一样),因此它不会从lib/或其他目录中神奇地拾取内容。

哦,只是出于好奇:为什么你需要覆盖Rack::Auth::Basic#valid?