我正在构建一个模块化的Padrino应用程序来安装多个应用程序。
我正在将基础应用程序安装到/
class BaseApp < Padrino::Application
...
end
然后我将其他应用程序安装到其他端点,例如/clients
,这些应用程序继承自基础应用程序:
class ClientsApp < BaseApp
...
end
这种继承允许我在app.rb
类的BaseApp
中定义我的所有设置,错误处理和任何包含的机架中间件。
到目前为止一切顺利。 但我还想在应用之间分享before
和after
路由。例如,在我的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
中指定一次过滤器并以某种方式继承它们吗?我理解这些过滤器是方法调用而不是方法。
谢谢!
答案 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