在应用程序间共享筛选

时间:2012-02-03 08:35:09

标签: ruby sinatra padrino

我正在构建一个模块化的Padrino应用程序来安装多个应用程序。

我正在将基础应用程序安装到/

class BaseApp < Padrino::Application
  ...
end

然后我将其他应用程序安装到其他端点,例如/clients,这些应用程序继承自基础应用程序:

class ClientsApp < BaseApp
  ...
end

这种继承允许我在app.rb类的BaseApp中定义我的所有设置,错误处理和任何包含的机架中间件。

到目前为止一切顺利。 但我还想在应用之间分享beforeafter路由。例如,在我的BaseApp控制器代码中,我想这样做:

BaseApp.controller do
  before do
    ...
  end
  after do
    ...
  end

  get :index do
    ...
  end
end

而不是在我的ClientsApp控制器代码中重复这些过滤器,如下所示:

ClientsApp.controller do
  before do
    ...
  end
  after do
    ...
  end

  get :index do
    ...
  end
end

无论如何我可以干掉这段代码并在BaseApp中指定一次过滤器并以某种方式继承它们吗?我理解这些过滤器是方法调用而不是方法。

谢谢!

1 个答案:

答案 0 :(得分:4)

你可以使用标准的sinatra扩展,放在lib下:

# lib/common_filters.rb
module CommonFilters
  def self.registered(app)
    app.before do
      ...
    end

    app.after do
      ...
    end
  end
end

然后在你的应用中:

# app/app.rb
class MyApp < Padrino::Application
  register CommonFilters
end