Class: Predicate
- Inherits:
-
Object
show all
- Extended by:
- Factory, Sugar
- Defined in:
- lib/predicate.rb,
lib/predicate/dsl.rb,
lib/predicate/sugar.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/var.rb,
lib/predicate/nodes/expr.rb,
lib/predicate/nodes/empty.rb,
lib/predicate/nodes/match.rb,
lib/predicate/placeholder.rb,
lib/predicate/nodes/native.rb,
lib/predicate/nodes/opaque.rb,
lib/predicate/nodes/set_op.rb,
lib/predicate/nodes/subset.rb,
lib/predicate/nodes/literal.rb,
lib/predicate/nodes/has_size.rb,
lib/predicate/nodes/superset.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/nodes/unary_func.rb,
lib/predicate/sequel/to_sequel.rb,
lib/predicate/nodes/binary_func.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, BinaryFunc, Contradiction, DyadicComp, Empty, Eq, Expr, Factory, Grammar, Gt, Gte, HasSize, Identifier, In, Intersect, Literal, Lt, Lte, Match, NadicBool, Native, Neq, Not, Opaque, Or, QualifiedIdentifier, SetOp, Subset, Sugar, Superset, Tautology, UnaryFunc, Var, Version
Classes: Binder, Dsl, Error, NotSupportedError, Placeholder, Qualifier, Renamer, ToS, ToSequel, TypeError, 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 Sugar
between, is_null, match, max_size, min_size
Methods included from Factory
and, comp, contradiction, empty, from_hash, has_size, identifier, in, literal, match, native, not, opaque, or, placeholder, qualified_identifier, tautology, var, vars
Constructor Details
#initialize(sexpr) ⇒ Predicate
Returns a new instance of Predicate.
20
21
22
|
# File 'lib/predicate.rb', line 20
def initialize(sexpr)
@sexpr = sexpr
end
|
Instance Attribute Details
#sexpr ⇒ Object
Also known as:
expr
Returns the value of attribute sexpr.
23
24
25
|
# File 'lib/predicate.rb', line 23
def sexpr
@sexpr
end
|
Class Method Details
.coerce(arg) ⇒ Object
Also known as:
parse
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/predicate.rb', line 30
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
|
.currying(var = var(".", :dig), &bl) ⇒ Object
48
49
50
|
# File 'lib/predicate.rb', line 48
def currying(var = var(".", :dig), &bl)
Predicate::Dsl.new(var, true).instance_eval(&bl)
end
|
.dsl(var = var(".", :dig), &bl) ⇒ Object
44
45
46
|
# File 'lib/predicate.rb', line 44
def dsl(var = var(".", :dig), &bl)
Predicate::Dsl.new(var, false).instance_eval(&bl)
end
|
Instance Method Details
#! ⇒ Object
96
97
98
|
# File 'lib/predicate.rb', line 96
def !
Predicate.new(!expr)
end
|
#&(other) ⇒ Object
84
85
86
87
88
|
# File 'lib/predicate.rb', line 84
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?
145
146
147
|
# File 'lib/predicate.rb', line 145
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`.
127
128
129
|
# File 'lib/predicate.rb', line 127
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.
139
140
141
142
143
|
# File 'lib/predicate.rb', line 139
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
112
113
114
|
# File 'lib/predicate.rb', line 112
def bind(binding)
Predicate.new(expr.bind(binding))
end
|
#call(tuple) ⇒ Object
120
121
122
|
# File 'lib/predicate.rb', line 120
def call(tuple)
expr.evaluate(tuple)
end
|
#constant_variables ⇒ Object
76
77
78
|
# File 'lib/predicate.rb', line 76
def constant_variables
expr.constant_variables
end
|
#constants ⇒ Object
80
81
82
|
# File 'lib/predicate.rb', line 80
def constants
expr.constants
end
|
#contradiction? ⇒ Boolean
68
69
70
|
# File 'lib/predicate.rb', line 68
def contradiction?
expr.contradiction?
end
|
#evaluate(tuple) ⇒ Object
116
117
118
|
# File 'lib/predicate.rb', line 116
def evaluate(tuple)
expr.evaluate(tuple)
end
|
#free_variables ⇒ Object
72
73
74
|
# File 'lib/predicate.rb', line 72
def free_variables
expr.free_variables
end
|
#hash ⇒ Object
150
151
152
|
# File 'lib/predicate.rb', line 150
def hash
expr.hash
end
|
#native? ⇒ Boolean
60
61
62
|
# File 'lib/predicate.rb', line 60
def native?
Native===expr
end
|
#qualify(qualifier) ⇒ Object
100
101
102
|
# File 'lib/predicate.rb', line 100
def qualify(qualifier)
Predicate.new(expr.qualify(qualifier))
end
|
#rename(renaming) ⇒ Object
108
109
110
|
# File 'lib/predicate.rb', line 108
def rename(renaming)
Predicate.new(expr.rename(renaming))
end
|
#tautology? ⇒ Boolean
64
65
66
|
# File 'lib/predicate.rb', line 64
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.
161
162
163
|
# File 'lib/predicate.rb', line 161
def to_hash
expr.to_hash
end
|
#to_s(scope = nil) ⇒ Object
154
155
156
|
# File 'lib/predicate.rb', line 154
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
104
105
106
|
# File 'lib/predicate.rb', line 104
def unqualify
Predicate.new(expr.unqualify)
end
|
#|(other) ⇒ Object
90
91
92
93
94
|
# File 'lib/predicate.rb', line 90
def |(other)
return self if other.contradiction? or other==self
return other if contradiction?
Predicate.new(expr | other.expr)
end
|