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/asserter.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/exists.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/postgres/pg_array.rb,
lib/predicate/postgres/rewriter.rb,
lib/predicate/processors/binder.rb,
lib/predicate/processors/renamer.rb,
lib/predicate/nodes/contradiction.rb,
lib/predicate/postgres/ext/factory.rb,
lib/predicate/processors/qualifier.rb,
lib/predicate/postgres/ext/to_sequel.rb,
lib/predicate/processors/unqualifier.rb,
lib/predicate/postgres/pg_array/empty.rb,
lib/predicate/postgres/pg_array/literal.rb,
lib/predicate/nodes/qualified_identifier.rb,
lib/predicate/postgres/pg_array/overlaps.rb
Defined Under Namespace
Modules: And, BinaryFunc, Contradiction, DyadicComp, Empty, Eq, Exists, Expr, Factory, Grammar, Gt, Gte, HasSize, Identifier, In, Intersect, Literal, Lt, Lte, Match, NadicBool, Native, Neq, Not, Opaque, Or, Postgres, QualifiedIdentifier, SetOp, Subset, Sugar, Superset, Tautology, UnaryFunc, Var, Version
Classes: Asserter, 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
_factor_predicate, and, comp, contradiction, empty, from_hash, h, has_size, identifier, in, literal, match, native, not, opaque, or, pg_array_empty, pg_array_literal, pg_array_overlaps, placeholder, qualified_identifier, tautology, var, vars
Constructor Details
#initialize(sexpr) ⇒ Predicate
Returns a new instance of Predicate.
21
22
23
|
# File 'lib/predicate.rb', line 21
def initialize(sexpr)
@sexpr = sexpr
end
|
Instance Attribute Details
#sexpr ⇒ Object
Also known as:
expr
Returns the value of attribute sexpr.
24
25
26
|
# File 'lib/predicate.rb', line 24
def sexpr
@sexpr
end
|
Class Method Details
.coerce(arg) ⇒ Object
Also known as:
parse
31
32
33
34
35
36
37
38
39
40
41
42
|
# File 'lib/predicate.rb', line 31
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
49
50
51
|
# File 'lib/predicate.rb', line 49
def currying(var = var(".", :dig), &bl)
Predicate::Dsl.new(var, true).instance_eval(&bl)
end
|
.dsl(var = var(".", :dig), &bl) ⇒ Object
45
46
47
|
# File 'lib/predicate.rb', line 45
def dsl(var = var(".", :dig), &bl)
Predicate::Dsl.new(var, false).instance_eval(&bl)
end
|
Instance Method Details
#! ⇒ Object
101
102
103
|
# File 'lib/predicate.rb', line 101
def !
Predicate.new(!expr)
end
|
#&(other) ⇒ Object
89
90
91
92
93
|
# File 'lib/predicate.rb', line 89
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?
154
155
156
|
# File 'lib/predicate.rb', line 154
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`.
136
137
138
|
# File 'lib/predicate.rb', line 136
def and_split(attr_list)
expr.and_split(attr_list).map{|e| Predicate.new(e)}
end
|
#assert!(tuple = {}) ⇒ Object
129
130
131
|
# File 'lib/predicate.rb', line 129
def assert!(tuple = {})
expr.assert!(tuple)
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.
148
149
150
151
152
|
# File 'lib/predicate.rb', line 148
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
117
118
119
|
# File 'lib/predicate.rb', line 117
def bind(binding)
Predicate.new(expr.bind(binding))
end
|
#call(tuple) ⇒ Object
125
126
127
|
# File 'lib/predicate.rb', line 125
def call(tuple)
expr.evaluate(tuple)
end
|
#constant_variables ⇒ Object
81
82
83
|
# File 'lib/predicate.rb', line 81
def constant_variables
expr.constant_variables
end
|
#constants ⇒ Object
85
86
87
|
# File 'lib/predicate.rb', line 85
def constants
expr.constants
end
|
#contradiction? ⇒ Boolean
73
74
75
|
# File 'lib/predicate.rb', line 73
def contradiction?
expr.contradiction?
end
|
#evaluate(tuple) ⇒ Object
121
122
123
|
# File 'lib/predicate.rb', line 121
def evaluate(tuple)
expr.evaluate(tuple)
end
|
#free_variables ⇒ Object
77
78
79
|
# File 'lib/predicate.rb', line 77
def free_variables
expr.free_variables
end
|
#hash ⇒ Object
159
160
161
|
# File 'lib/predicate.rb', line 159
def hash
expr.hash
end
|
#native? ⇒ Boolean
65
66
67
|
# File 'lib/predicate.rb', line 65
def native?
Native===expr
end
|
#qualify(qualifier) ⇒ Object
105
106
107
|
# File 'lib/predicate.rb', line 105
def qualify(qualifier)
Predicate.new(expr.qualify(qualifier))
end
|
#rename(renaming) ⇒ Object
113
114
115
|
# File 'lib/predicate.rb', line 113
def rename(renaming)
Predicate.new(expr.rename(renaming))
end
|
#tautology? ⇒ Boolean
69
70
71
|
# File 'lib/predicate.rb', line 69
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.
170
171
172
|
# File 'lib/predicate.rb', line 170
def to_hash
expr.to_hash
end
|
#to_postgres(*args) ⇒ Object
46
47
48
|
# File 'lib/predicate/postgres/rewriter.rb', line 46
def to_postgres(*args)
Predicate.new(expr.to_postgres(*args))
end
|
#to_s(scope = nil) ⇒ Object
163
164
165
|
# File 'lib/predicate.rb', line 163
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
109
110
111
|
# File 'lib/predicate.rb', line 109
def unqualify
Predicate.new(expr.unqualify)
end
|
#|(other) ⇒ Object
95
96
97
98
99
|
# File 'lib/predicate.rb', line 95
def |(other)
return self if other.contradiction? or other==self
return other if contradiction?
Predicate.new(expr | other.expr)
end
|