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_termsObject



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

#formaldefObject



7
8
9
# File 'lib/predicate/nodes/var.rb', line 7

def formaldef
  self[1]
end

#free_variablesObject



15
16
17
# File 'lib/predicate/nodes/var.rb', line 15

def free_variables
  @free_variables ||= [ [formaldef, semantics] ]
end

#priorityObject



5
# File 'lib/predicate/nodes/var.rb', line 5

def priority; 100; end

#semanticsObject



11
12
13
# File 'lib/predicate/nodes/var.rb', line 11

def semantics
  self[2]
end