【发布时间】:2012-08-28 15:11:06
【问题描述】:
我觉得我要在这里重新发明轮子了,所以在我这样做之前......
我有大量需要处理的数据,处理这些数据的“规则”会随着时间的推移而发展,所以我认为实现一个简单的规则引擎是有必要的。
注意我不是在寻找自然语言解析器,我希望所有规则都是 ruby procs。
我可以想象语法看起来像:
engine = SimpleRulesEngine.new
rule = engine.add_rule(priority: 10) do |row|
row.name != 'George'
end
rule.action do |row|
puts "Yikes, name is not George!, it was #{row.name}"
row.update_attribute :name, 'George'
end
engine.process collection
我想知道是否有任何现有的模式或宝石可以帮助解决这个问题。似乎最接近的一个是ruleby,但似乎没有得到积极维护,而且对于我的问题来说似乎太复杂了。
谢谢!
请注意,这是与Ruby & Rules Engines 类似的问题,但不同之处在于,我不关心自然语言处理和规则存储。
【问题讨论】:
-
没有更多细节很难提供帮助;到目前为止,您似乎有一个“规则应该触发”块和一个“规则操作”块。最多看起来像一个简单的 DSL,即使你忽略了一个瘦 DSL 包装器,也有一些相当清晰的 Ruby。
-
你可能想看看 gem state_machine
-
@DaveNewton,我认为你完全正确。下面是我想出的解决方案。感谢您将我推向正确的方向
标签: ruby-on-rails ruby dsl