Class: Predicate
- Inherits:
-
Object
show all
- Extended by:
- Factory
- Defined in:
- lib/predicate.rb,
lib/predicate/sequel.rb,
lib/predicate/factory.rb,
lib/predicate/grammar.rb,
lib/predicate/version.rb,
lib/predicate/nodes/eq.rb,
lib/predicate/nodes/gt.rb,
lib/predicate/nodes/in.rb,
lib/predicate/nodes/lt.rb,
lib/predicate/nodes/or.rb,
lib/predicate/nodes/and.rb,
lib/predicate/nodes/gte.rb,
lib/predicate/nodes/lte.rb,
lib/predicate/nodes/neq.rb,
lib/predicate/nodes/not.rb,
lib/predicate/nodes/expr.rb,
lib/predicate/nodes/match.rb,
lib/predicate/placeholder.rb,
lib/predicate/nodes/native.rb,
lib/predicate/nodes/opaque.rb,
lib/predicate/nodes/literal.rb,
lib/predicate/nodes/intersect.rb,
lib/predicate/nodes/tautology.rb,
lib/predicate/processors/to_s.rb,
lib/predicate/nodes/identifier.rb,
lib/predicate/nodes/nadic_bool.rb,
lib/predicate/sequel/to_sequel.rb,
lib/predicate/nodes/dyadic_comp.rb,
lib/predicate/processors/binder.rb,
lib/predicate/processors/renamer.rb,
lib/predicate/nodes/contradiction.rb,
lib/predicate/processors/qualifier.rb,
lib/predicate/processors/unqualifier.rb,
lib/predicate/nodes/qualified_identifier.rb
Defined Under Namespace
Modules: And, Contradiction, DyadicComp, Eq, Expr, Factory, Grammar, Gt, Gte, Identifier, In, Intersect, Literal, Lt, Lte, Match, NadicBool, Native, Neq, Not, Opaque, Or, QualifiedIdentifier, Tautology, Version
Classes: Binder, NotSupportedError, Placeholder, Qualifier, Renamer, ToS, ToSequel, UnboundError, Unqualifier
Constant Summary
collapse
- TupleLike =
->(t){ t.is_a?(Hash) }
- SexprLike =
->(x) { x.is_a?(Array) && x.first.is_a?(Symbol) }
- VERSION =
"#{Version::MAJOR}.#{Version::MINOR}.#{Version::TINY}"
Instance Attribute Summary collapse
-
#sexpr ⇒ Object
(also: #expr)
readonly
Returns the value of attribute sexpr.
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Factory
and, between, comp, contradiction, from_hash, identifier, in, intersect, literal, match, native, not, opaque, or, placeholder, qualified_identifier, tautology
Constructor Details
#initialize(sexpr) ⇒ Predicate
Returns a new instance of Predicate.
16
17
18
|
# File 'lib/predicate.rb', line 16
def initialize(sexpr)
@sexpr = sexpr
end
|
Instance Attribute Details
#sexpr ⇒ Object
Also known as:
expr
Returns the value of attribute sexpr.
19
20
21
|
# File 'lib/predicate.rb', line 19
def sexpr
@sexpr
end
|
Class Method Details
.coerce(arg) ⇒ Object
Also known as:
parse
25
26
27
28
29
30
31
32
33
34
35
36
|
# File 'lib/predicate.rb', line 25
def coerce(arg)
case arg
when Predicate then arg
when TrueClass then tautology
when FalseClass then contradiction
when Symbol then identifier(arg)
when Proc then native(arg)
when Hash then from_hash(arg)
else
raise ArgumentError, "Unable to coerce `#{arg}` to a predicate"
end
end
|
Instance Method Details
#! ⇒ Object
83
84
85
|
# File 'lib/predicate.rb', line 83
def !
Predicate.new(!expr)
end
|
#&(other) ⇒ Object
71
72
73
74
75
|
# File 'lib/predicate.rb', line 71
def &(other)
return self if other.tautology? or other==self
return other if tautology?
Predicate.new(expr & other.expr)
end
|
#==(other) ⇒ Object
Also known as:
eql?
132
133
134
|
# File 'lib/predicate.rb', line 132
def ==(other)
other.is_a?(Predicate) && (other.expr==expr)
end
|
#and_split(attr_list) ⇒ Object
Splits this predicate, say P, as too predicates P1 & P2 such that ‘P <=> P1 & P2` and P2 makes no reference to any attribute in `attr_list`.
114
115
116
|
# File 'lib/predicate.rb', line 114
def and_split(attr_list)
expr.and_split(attr_list).map{|e| Predicate.new(e)}
end
|
#attr_split ⇒ Object
Returns a hash ‘(attr -> Pattr)` associating attribute names to predicates, so that each predicate `Pattr` only makes reference to the corresponding attribute name `attr`, while the conjunction of `Pattr`s is still equivalent to the original predicate.
A ‘nil` key may map a predicate that still makes references to more than one attribute.
126
127
128
129
130
|
# File 'lib/predicate.rb', line 126
def attr_split
expr.attr_split.each_pair.each_with_object({}) do |(k,v),h|
h[k] = Predicate.new(v)
end
end
|
#bind(binding) ⇒ Object
99
100
101
|
# File 'lib/predicate.rb', line 99
def bind(binding)
Predicate.new(expr.bind(binding))
end
|
#call(tuple) ⇒ Object
107
108
109
|
# File 'lib/predicate.rb', line 107
def call(tuple)
expr.evaluate(tuple)
end
|
#constant_variables ⇒ Object
63
64
65
|
# File 'lib/predicate.rb', line 63
def constant_variables
expr.constant_variables
end
|
#constants ⇒ Object
67
68
69
|
# File 'lib/predicate.rb', line 67
def constants
expr.constants
end
|
#contradiction? ⇒ Boolean
55
56
57
|
# File 'lib/predicate.rb', line 55
def contradiction?
expr.contradiction?
end
|
#evaluate(tuple) ⇒ Object
103
104
105
|
# File 'lib/predicate.rb', line 103
def evaluate(tuple)
expr.evaluate(tuple)
end
|
#free_variables ⇒ Object
59
60
61
|
# File 'lib/predicate.rb', line 59
def free_variables
expr.free_variables
end
|
#hash ⇒ Object
137
138
139
|
# File 'lib/predicate.rb', line 137
def hash
expr.hash
end
|
#native? ⇒ Boolean
47
48
49
|
# File 'lib/predicate.rb', line 47
def native?
Native===expr
end
|
#qualify(qualifier) ⇒ Object
87
88
89
|
# File 'lib/predicate.rb', line 87
def qualify(qualifier)
Predicate.new(expr.qualify(qualifier))
end
|
#rename(renaming) ⇒ Object
95
96
97
|
# File 'lib/predicate.rb', line 95
def rename(renaming)
Predicate.new(expr.rename(renaming))
end
|
#tautology? ⇒ Boolean
51
52
53
|
# File 'lib/predicate.rb', line 51
def tautology?
expr.tautology?
end
|
#to_hash ⇒ Object
If possible, converts this predicate back to a ‘{ attr: value, … }` hash. Raises an IllegalArgumentError if the predicate cannot be represented that way.
148
149
150
|
# File 'lib/predicate.rb', line 148
def to_hash
expr.to_hash
end
|
#to_s(scope = nil) ⇒ Object
141
142
143
|
# File 'lib/predicate.rb', line 141
def to_s(scope = nil)
expr.to_s(scope)
end
|
#to_sequel ⇒ Object
11
12
13
|
# File 'lib/predicate/sequel.rb', line 11
def to_sequel
expr.to_sequel
end
|
#unqualify ⇒ Object
91
92
93
|
# File 'lib/predicate.rb', line 91
def unqualify
Predicate.new(expr.unqualify)
end
|
#|(other) ⇒ Object
77
78
79
80
81
|
# File 'lib/predicate.rb', line 77
def |(other)
return self if other.contradiction? or other==self
return other if contradiction?
Predicate.new(expr | other.expr)
end
|