dry-logic Join the chat at https://gitter.im/dry-rb/chat

Gem Version
Build Status
Dependency Status
Code Climate
Test Coverage
Inline docs

Predicate logic and rule composition used by:

Synopsis

require 'dry/logic'
require 'dry/logic/predicates'

include Dry::Logic

user_present = Rule::Key.new(Predicates[:filled?], name: :user)

has_min_age = Rule::Key.new(Predicates[:int?], name: [:user, :age])
  & Rule::Key.new(Predicates[:gt?].curry(18), name: [:user, :age])

user_rule = user_present & has_min_age

user_rule.(user: { age: 19 })
# #{:age=>19}} rule=# options={:evaluator=>#, :name=>[:user, :age]}>>

user_rule.(user: { age: 18 })
# #{:age=>18}} rule=# options={:evaluator=>#, :name=>[:user, :age]}>>

user_rule.(user: { age: 'seventeen' }).inspect
#{:age=>"seventeen"}} rule=# options={:evaluator=>#, :name=>[:user, :age]}>>

user_rule.(user: { }).inspect
#{}} rule=# options={:evaluator=>#, :name=>:user}>>

puts user_rule.({}).inspect
# options={:evaluator=>#, :name=>:user}>>

License

See LICENSE file.