Module: Predicate::Var
- Includes:
- Expr
- Defined in:
- lib/predicate/nodes/var.rb
Constant Summary
Constants included
from Expr
Expr::OP_NEGATIONS
Instance Method Summary
collapse
Methods included from Expr
#!, #&, #and_split, #attr_split, #bind, #constant_variables, #constants, #contradiction?, #dyadic_priority, #identifier?, #literal?, #opaque?, #qualify, #rename, #sexpr, #tautology?, #to_hash, #to_postgres, #to_s, #to_sequel, #unqualify, #|
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, #sexpr, #tautology, #var, #vars
Instance Method Details
#dig_terms ⇒ Object
19
20
21
22
23
24
25
26
27
28
29
30
|
# File 'lib/predicate/nodes/var.rb', line 19
def dig_terms
@dig_terms ||= case formaldef
when String
formaldef.split(".").map{|elm|
elm =~ /^\d+$/ ? elm.to_i : elm.to_sym
}
when Array
formaldef
else
raise ArgumentError, "Unrecognized variable def `#{formaldef}`"
end
end
|
#evaluate(on) ⇒ Object
32
33
34
35
36
37
38
39
40
41
42
43
|
# File 'lib/predicate/nodes/var.rb', line 32
def evaluate(on)
case semantics
when :dig
dig_terms.inject(on){|ctx,elm| ctx.dig(elm) }
when :send
dig_terms.inject(on){|ctx,elm| ctx.__send__(elm.to_sym) }
when :public_send
dig_terms.inject(on){|ctx,elm| ctx.public_send(elm.to_sym) }
else
raise ArgumentError, "Unrecognized variable semantics `#{semantics}`"
end
end
|
7
8
9
|
# File 'lib/predicate/nodes/var.rb', line 7
def formaldef
self[1]
end
|
#free_variables ⇒ Object
15
16
17
|
# File 'lib/predicate/nodes/var.rb', line 15
def free_variables
@free_variables ||= [ [formaldef, semantics] ]
end
|
#priority ⇒ Object
5
|
# File 'lib/predicate/nodes/var.rb', line 5
def priority; 100; end
|
#semantics ⇒ Object
11
12
13
|
# File 'lib/predicate/nodes/var.rb', line 11
def semantics
self[2]
end
|