2012-02-03 2 views
1

Я создаю модульное приложение Padrino для монтирования нескольких приложений.Совместное использование фильтров между приложениями

Я монтаж базового приложения для /

class BaseApp < Padrino::Application 
    ... 
end 

Я тогда монтаж других appilications других конечных точек, таких как /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 и у вас их как-то унаследовали? Я понимаю, что эти фильтры - это вызовы методов, а не методы.

Спасибо!

ответ

4

Вы можете использовать стандартный Синатр расширение, поставить под 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 
+0

Спасибо, но не работает - 'NoMethodError: неопределенный метод 'фильтров =' для ClientsApp: Class' –

+0

проверить обновленный код – DAddYE

+0

Спасибо. Обновленный код больше не выдает ошибку, но все маршруты в подклассе теперь возвращают 404. Это как если бы маршруты были перезаписаны/потеряны или что-то в этом роде. Любые другие идеи? –

Смежные вопросы