Class: Neo4j::Cypher::AbstractFilter

Inherits:
Object
  • Object
show all
Includes:
Clause
Defined in:
lib/neo4j-cypher/abstract_filter.rb

Direct Known Subclasses

Collection, Foreach, Predicate

Defined Under Namespace

Classes: FilterProp

Constant Summary

Constants included from Clause

Clause::NAME, Clause::ORDER

Instance Attribute Summary

Attributes included from Clause

#clause_list, #clause_type, #eval_context, #expr, #insert_order

Instance Method Summary collapse

Methods included from Clause

#<=>, #alias_name, #as_alias, #as_alias?, #clause_position, #create_clause_args_for, #initialize, #match_value, #match_value=, #prefix, #referenced!, #referenced?, #separator, #to_prop_string, #valid_clause?, #var_name, #var_name=

Instance Method Details

#filter_arg(input) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/neo4j-cypher/abstract_filter.rb', line 20

def filter_arg(input)
  var = NodeVar.as_var(clause_list, 'x')

  if input.is_a?(Neo4j::Cypher::Property)
    filter_input = Property.new(var)
    filter_input.expr = 'x'
    filter_input.eval_context
  else
    input.referenced!
    var.eval_context
  end
end

#filter_exec(arg, &block) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/neo4j-cypher/abstract_filter.rb', line 48

def filter_exec(arg, &block)
  clause_list.push
  begin
    ret = RootClause::EvalContext.new(self).instance_exec(arg, &block)
  rescue NoMethodError
    if arg.kind_of?(Neo4j::Cypher::Context::Variable)
    # Try again, maybe we are using the Ruby &: method shortcut
      ret = FilterProp.new(arg).instance_eval(&block)
    else
      raise
    end
  end

  filter = clause_list.empty? ? ret.clause.to_cypher : clause_list.to_cypher
  clause_list.pop
  filter
end

#filter_expr(input, selector_token, &block) ⇒ Object



66
67
68
69
70
71
72
73
# File 'lib/neo4j-cypher/abstract_filter.rb', line 66

def filter_expr(input, selector_token, &block)
  expr = "(x in #{filter_value(input)}"
  arg = filter_arg(input)
  filter = filter_exec(arg, &block)
  expr << "#{selector_token}#{filter})"
  # WHERE all(x in nodes(v1) WHERE x.age > 30)
  expr
end

#filter_initialize(input_context, method_name, selector_token, &block) ⇒ Object



6
7
8
9
10
# File 'lib/neo4j-cypher/abstract_filter.rb', line 6

def filter_initialize(input_context, method_name, selector_token, &block)
  input = input_context.clause
  fe = filter_expr(input, selector_token, &block)
  @cypher = "#{method_name}#{fe}"
end

#filter_value(input) ⇒ Object



33
34
35
# File 'lib/neo4j-cypher/abstract_filter.rb', line 33

def filter_value(input)
  input.is_a?(Neo4j::Cypher::Property) ? input.expr : input.return_value
end

#return_valueObject



12
13
14
# File 'lib/neo4j-cypher/abstract_filter.rb', line 12

def return_value
  @cypher
end

#to_cypherObject



16
17
18
# File 'lib/neo4j-cypher/abstract_filter.rb', line 16

def to_cypher
  @cypher
end