Module: Predicate::Factory
Instance Method Summary collapse
- #and(left, right = nil) ⇒ Object
- #between(middle, lower_bound, upper_bound) ⇒ Object
- #comp(op, h) ⇒ Object
- #contradiction ⇒ Object
- #from_hash(h, op = :eq) ⇒ Object
- #identifier(name) ⇒ Object
- #in(left, right) ⇒ Object (also: #among)
- #intersect(identifier, values) ⇒ Object
- #literal(literal) ⇒ Object
- #match(left, right, options = nil) ⇒ Object
- #native(arg) ⇒ Object
- #not(operand) ⇒ Object
- #opaque(arg) ⇒ Object
- #or(left, right = nil) ⇒ Object
- #placeholder ⇒ Object
- #qualified_identifier(qualifier, name) ⇒ Object
- #tautology ⇒ Object
Instance Method Details
#and(left, right = nil) ⇒ Object
24 25 26 |
# File 'lib/predicate/factory.rb', line 24 def and(left, right = nil) _factor_predicate([:and, sexpr(left), sexpr(right)]) end |
#between(middle, lower_bound, upper_bound) ⇒ Object
62 63 64 65 |
# File 'lib/predicate/factory.rb', line 62 def between(middle, lower_bound, upper_bound) _factor_predicate [:and, [:gte, sexpr(middle), sexpr(lower_bound)], [:lte, sexpr(middle), sexpr(upper_bound)]] end |
#comp(op, h) ⇒ Object
51 52 53 |
# File 'lib/predicate/factory.rb', line 51 def comp(op, h) from_hash(h, op) end |
#contradiction ⇒ Object
8 9 10 |
# File 'lib/predicate/factory.rb', line 8 def contradiction _factor_predicate([:contradiction, false]) end |
#from_hash(h, op = :eq) ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/predicate/factory.rb', line 67 def from_hash(h, op = :eq) if h.empty? tautology else terms = h.to_a.map{|(k,v)| if v.is_a?(Array) [:in, sexpr(k), sexpr(v)] else [op, sexpr(k), sexpr(v)] end } terms = terms.size == 1 ? terms.first : terms.unshift(:and) _factor_predicate terms end end |
#identifier(name) ⇒ Object
12 13 14 |
# File 'lib/predicate/factory.rb', line 12 def identifier(name) _factor_predicate([:identifier, name]) end |
#in(left, right) ⇒ Object Also known as: among
36 37 38 39 40 41 42 43 |
# File 'lib/predicate/factory.rb', line 36 def in(left, right) left, right = sexpr(left), sexpr(right) if right.literal? && right.empty_value? contradiction else _factor_predicate([:in, left, right]) end end |
#intersect(identifier, values) ⇒ Object
46 47 48 49 |
# File 'lib/predicate/factory.rb', line 46 def intersect(identifier, values) identifier = sexpr(identifier) if identifier.is_a?(Symbol) _factor_predicate([:intersect, identifier, values]) end |
#literal(literal) ⇒ Object
83 84 85 |
# File 'lib/predicate/factory.rb', line 83 def literal(literal) _factor_predicate([:literal, literal]) end |
#match(left, right, options = nil) ⇒ Object
91 92 93 |
# File 'lib/predicate/factory.rb', line 91 def match(left, right, = nil) _factor_predicate([:match, sexpr(left), sexpr(right)] + (.nil? ? [] : [])) end |
#native(arg) ⇒ Object
95 96 97 |
# File 'lib/predicate/factory.rb', line 95 def native(arg) _factor_predicate([:native, arg]) end |
#not(operand) ⇒ Object
32 33 34 |
# File 'lib/predicate/factory.rb', line 32 def not(operand) _factor_predicate([:not, sexpr(operand)]) end |
#opaque(arg) ⇒ Object
87 88 89 |
# File 'lib/predicate/factory.rb', line 87 def opaque(arg) _factor_predicate([:opaque, arg]) end |
#or(left, right = nil) ⇒ Object
28 29 30 |
# File 'lib/predicate/factory.rb', line 28 def or(left, right = nil) _factor_predicate([:or, sexpr(left), sexpr(right)]) end |
#placeholder ⇒ Object
20 21 22 |
# File 'lib/predicate/factory.rb', line 20 def placeholder Placeholder.new end |
#qualified_identifier(qualifier, name) ⇒ Object
16 17 18 |
# File 'lib/predicate/factory.rb', line 16 def qualified_identifier(qualifier, name) _factor_predicate([:qualified_identifier, qualifier, name]) end |
#tautology ⇒ Object
4 5 6 |
# File 'lib/predicate/factory.rb', line 4 def tautology _factor_predicate([:tautology, true]) end |