dry-logic 
Predicate logic and rule composition used by:
- dry-types for constrained types
- dry-validation for composing validation rules
- your project...?
Synopsis
require 'dry/logic'
require 'dry/logic/predicates'
include Dry::Logic
user_present = Rule::Key.new(Predicates[:key?], name: :user)
has_min_age = Rule::Key.new(
Predicates[:key?]) & Rule::Value.new(:age, Predicates[:gt?].curry(18),
name: :age
)
user_rule = user_present & has_min_age
user_rule.(user: { age: 19 })
# #<Dry::Logic::Result::Value success?=true input=19 rule=#<Dry::Logic::Rule::Value name=:age predicate=#<Dry::Logic::Predicate id=:gt?>>>
user_rule.(user: { age: 18 })
# #<Dry::Logic::Result::Value success?=false input=18 rule=#<Dry::Logic::Rule::Value name=:age predicate=#<Dry::Logic::Predicate id=:gt?>>>
License
See LICENSE file.