Движки Ruby и Rules

Я ищу простой способ позволить пользователям определять набор правил для фильтрации объектов.

Например. пусть они определят что-то вроде «уведомить меня о бронировании, если дата бронирования‹ 30.04.2009 И стоимость> 100.00 »

Более или менее: я хотел бы иметь движок правил Ruby с настраиваемым DSL.

Есть ли такая библиотека? Наткнулся на Ruleby, но он пока не поддерживает настраиваемый DSL.

Как лучше всего это сделать?


person Matt    schedule 04.05.2009    source источник


Ответы (3)


Взгляните на Treetop. Вы можете определить свой DSL как грамматику выражения синтаксического анализа, а затем проанализировать его, чтобы создать свои правила в любом формате, который вам нравится.

person Ian Terrell    schedule 04.05.2009
comment
Привет спасибо за ответ. Treetop действительно выглядит как решение. Может быть, у вас есть ссылка на какой-нибудь веб-сайт с лучшими практиками? Трудно найти что-то хорошее в сети. Я думал о следующем подходе: - позволить пользователям определять свои правила - анализировать их с помощью Treetop - создавать код Ruby на основе этих правил - загружать их в Ruleby - фильтровать мои объекты с помощью механизма правил. Это звучит слишком странно? - person Matt; 06.05.2009
comment
К сожалению, мне тоже не повезло с поиском ресурсов на Treetop. Но ваше решение звучит как правильный подход. Удачи! - person Ian Terrell; 09.05.2009

Взгляните на гем wongi-engine, это новый механизм правил, основанный на алгоритме Рете, который в последнее время привлекает изрядное внимание.

person cwadding    schedule 17.07.2012

Я не знаю точно, как и на каких объектах следует оценивать эти правила, но если это модели ActiveRecord, возможно, Ambition было бы способом пойти. Это позволяет вам писать условия на рубине, например:

User.select { |m| m.name == 'jon' && m.age == 21 }

Это преобразуется в SQL, и вы получите всех пользователей, удовлетворяющих заданным критериям.

person esad    schedule 05.05.2009
comment
Выглядит красиво, но больше не обслуживается. - person Pikachu; 04.01.2013