Эквивалент сигналов Джанго для рельсов? - PullRequest
4 голосов
/ 08 августа 2009

В Rails самые близкие, что я видел, к Сигналам Джанго Наблюдатели . Проблема с ними заключается в том, что они ограничены вызовом обратных вызовов для жестко закодированных событий, связанных с жизненным циклом модели.

Сигналы Django могут создаваться где угодно, запускаться где угодно и обрабатываться где угодно. Обратные вызовы жизненного цикла модели - это просто обычные сигналы, которые приходят встроенными и запускаются ORM.

Кто-нибудь знает аналогичное общее решение для Rails? Это может быть какая-то общая библиотека Ruby, не привязанная к Rails, что было бы еще лучше.


Редактировать: Обозреватель - самая близкая вещь, но это не то, что я ищу. Это решение один-ко-многим. Любой может слушать, но только исходный объект может публиковать сообщения. Я бы хотел что-то, где вы объявляете сигнал, и любой может его запустить, а также обработать. Кроме того, мне не нравится тот факт, что Ruby Observer указывает, что у обработчика есть метод #update. Я хотел бы иметь возможность передавать ссылку на любой метод с соответствующей подписью.

Я мог бы использовать Ruby Observer для реализации своего собственного такого брокера, но я пытаюсь узнать, сделал ли это кто-то уже.

Ответы [ 5 ]

3 голосов
/ 08 августа 2009

Я думаю, что более близким эквивалентом, чем Rails Observer, является стандартный модуль Ruby Observable . Он позволяет вам добавить список наблюдателей к объекту, а затем объект может отправлять уведомления наблюдателям, когда он изменяется.

1 голос
/ 21 августа 2014

А как насчет драгоценного камня "Wisper"? https://github.com/krisleech/wisper

Wisper - это библиотека Ruby для развязки и управления зависимостями. ваших объектов Ruby, используя Pub / Sub.

Обычно используется как альтернатива обратным вызовам ActiveRecord и Наблюдатели уменьшают связь между уровнями данных и доменов.

0 голосов
/ 26 февраля 2013

Рубиновый камень 'смотрибельный' - самый подходящий https://github.com/jbarnette/watchable

Он имеет синтаксис, который очень знаком Django (и другим фреймворкам, таким как Qt и многие другие).

0 голосов
/ 19 марта 2012

Я только что реализовал гем с этим. https://github.com/pkoch/django_signal/

0 голосов
/ 08 августа 2009

Возможно, действует Act_as_state. Большая часть этой функциональности недавно была включена в Rails.

...