2013-04-02 7 views
1

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

Хотя это не является конечным использованием для такого рода систем, следующий пример, который я считаю, демонстрирует то, что я пытаюсь сделать. Подобно системе мониторинга журналов, такой как splunk, по сути, я пытаюсь создать систему, в которой я могу взять некоторый атрибут от объекта, а затем сравнить его с желаемым значением и выполнить действие, если оценка истинна.

Есть ли библиотека, чтобы сделать это или что-то нужно будет выкачать с нуля. То, как я думал об этом, было бы похоже на следующее:

У меня был бы Актер (не в традиционном смысле параллелизма), в котором бы были атрибуты, с которыми я хочу сравнить. Тогда у меня будет модель Trigger, которая будет иметь указатель на actor_id, атрибут (количество IE), компаратор (<, < =, ==,> =,>), значение и action_id. Action_id будет указывать на объект с помощью метода выполнения, который просто разместил бы код, который должен запускаться при запуске триггера.

Таким образом, в конце концов, триггер будет оценивать что-то вроде:

action.perform if actor.send(attribute) comparator value 

Другой вариант, возможно, более стандартной, кажется, развивать в DSL (IE FQL для Facebook). Будет ли это лучшим и гибким подходом.

Это что-то, что может обрабатывать библиотека, или если нет, это достойная структура для системы, подобной той, которую я предлагаю?

EDIT: Похоже, что DSL может быть самым гибким способом. Tutorials for writing DSL in Ruby

ответ

1

Если я правильно понял вопрос, то, что вы написали, почти правильно, поскольку он стоит. Вы можете отправить операторов сравнения в виде символов:

comparator = :> 
action.perform if actor.send(attribute).send(comparator, value) 
# action will perform if actor's attribute is greater than value 
+0

Интересно, что я действительно не знал, что вы могли бы это сделать, хотя я полагаю, что это имеет смысл, что вы можете. Благодаря! – ajorgensen

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