Module: Predicate::Factory

Extended by:
Factory
Included in:
Predicate, Expr, Factory
Defined in:
lib/predicate/factory.rb

Instance Method Summary collapse

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

#contradictionObject



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, options = nil)
  _factor_predicate([:match, sexpr(left), sexpr(right)] + (options.nil? ? [] : [options]))
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

#placeholderObject



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

#tautologyObject



4
5
6
# File 'lib/predicate/factory.rb', line 4

def tautology
  _factor_predicate([:tautology, true])
end