Event / Observer, управляемый Ruby on Rails - PullRequest
5 голосов
/ 15 января 2011

У меня есть приложение, которое поддается модели событий / слушателей.Публикуется несколько различных типов данных (событие), тогда много разных вещей могут или не должны воздействовать на эти данные (слушатели).Нет определенного порядка, в котором слушатели должны находиться, и каждый слушатель должен определить, нужно ли ему воздействовать на событие.

Какие инструменты для приложений Rails существуют для выполнения этой задачи?Я надеюсь, что мне не придется делать это самому (хотя, я могу. Это не так уж важно.)

Редактировать: Шаблон наблюдателя может быть лучшим выбором для этого

Ответы [ 4 ]

5 голосов
/ 15 января 2011

Выезд EventMachine . Это очень популярная библиотека обработки событий для Ruby. Это выглядит довольно хорошо, и многие другие библиотеки, кажется, используют это в своих интересах ( Cramp ).

Вот хорошее введение: http://rubylearning.com/blog/2010/10/01/an-introduction-to-eventmachine-and-how-to-avoid-callback-spaghetti/

5 голосов
/ 15 января 2011

Возможно, вы захотите подключиться к классу Observer ActiveRecord.

http://api.rubyonrails.org/v3.2.13/classes/ActiveRecord/Observer.html

С его помощью ваши модели могут выполнять пользовательскую логику для нескольких событий жизненного цикла:

http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

Если я правильно понимаю ваше намерение, все, что вам нужно сделать, это вызвать методы, представляющие действие вашего слушателя, для события из этих обратных вызовов.

3 голосов
/ 08 ноября 2013

Возможно, вы захотите использовать ActiveSupport :: Notifications.instrument.

Это универсальный мост для разъединения отправки события к реагированию на событие. Он предназначен для выполнения всех прослушивателей во время одного веб-запроса, в отличие от EventMachine, который ориентирован на выполнение множества одновременных действий.

0 голосов
/ 28 декабря 2013

Я создал рубиновый гем, точно отвечающий этому варианту использования: event_dispatcher

Этот гем предоставляет простую реализацию наблюдателя, позволяющую вам подписываться и прослушивать события в вашем приложении с помощьюпростой и эффективный способ.

...