Совместное использование фильтров между приложениями - PullRequest
1 голос
/ 03 февраля 2012

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

Спасибо!

1 Ответ

4 голосов
/ 03 февраля 2012

Вы можете использовать стандартные расширения 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
...