class Neo4j::Cypher::ClauseList

Attributes

clause_list[RW]
variables[RW]

Public Class Methods

new(variables = []) click to toggle source
   # File lib/neo4j-cypher/clause_list.rb
 8 def initialize(variables = [])
 9   @variables = variables
10   @lists_of_clause_list = [[]]
11   @curr_clause_list = @lists_of_clause_list.first
12   @insert_order = 0
13 end

Public Instance Methods

create_variable(var) click to toggle source

def debug

@curr_clause_list.each_with_index { |c, i| puts "  #{i} #{c.clause_type.inspect}, #{c.to_cypher} - #{c.class} id: #{c.object_id} order #{c.insert_order}" }

end

   # File lib/neo4j-cypher/clause_list.rb
80 def create_variable(var)
81   raise "Already included #{var}" if @variables.include?(var)
82   @variables << var
83   "v#{@variables.size}".to_sym
84 end
delete(clause_or_context) click to toggle source
   # File lib/neo4j-cypher/clause_list.rb
71 def delete(clause_or_context)
72   c = clause_or_context.respond_to?(:clause) ? clause_or_context.clause : clause_or_context
73   @curr_clause_list.delete(c)
74 end
depth() click to toggle source
   # File lib/neo4j-cypher/clause_list.rb
48 def depth
49   @lists_of_clause_list.count
50 end
each() { |c| ... } click to toggle source
   # File lib/neo4j-cypher/clause_list.rb
27 def each
28   @curr_clause_list.each { |c| yield c }
29 end
empty?() click to toggle source
   # File lib/neo4j-cypher/clause_list.rb
15 def empty?
16   !first
17 end
find(clause_type) click to toggle source
   # File lib/neo4j-cypher/clause_list.rb
23 def find(clause_type)
24   @curr_clause_list.find { |c| c.clause_type == clause_type }
25 end
group_by_clause() click to toggle source
   # File lib/neo4j-cypher/clause_list.rb
86 def group_by_clause
87   prev_clause = nil
88   inject([]) do |memo, clause|
89     memo << [] if clause.clause_type != prev_clause
90     prev_clause = clause.clause_type
91     memo.last << clause
92     memo
93   end
94 end
include?(clause_type) click to toggle source
   # File lib/neo4j-cypher/clause_list.rb
19 def include?(clause_type)
20   !!find(clause_type)
21 end
insert(clause) click to toggle source
   # File lib/neo4j-cypher/clause_list.rb
52 def insert(clause)
53   ctype = clause.clause_type
54 
55   if Clause::ORDER.include?(ctype)
56     # which list should we add the cluase to, the root or the sub list ?
57     # ALl the start and return clauses should move to the clause_list
58     c = (depth > 1 && (ctype == :start || ctype == :return)) ? @lists_of_clause_list.first : @curr_clause_list
59     c << clause
60     @insert_order += 1
61     clause.insert_order = @insert_order
62     c.sort!
63   end
64   self
65 end
join_group(list) click to toggle source
   # File lib/neo4j-cypher/clause_list.rb
96 def join_group(list)
97   list.map { |c| c.to_cypher }.join(list.first.separator)
98 end
last() click to toggle source
   # File lib/neo4j-cypher/clause_list.rb
67 def last
68   @curr_clause_list.last
69 end
pop() click to toggle source
   # File lib/neo4j-cypher/clause_list.rb
37 def pop
38   @lists_of_clause_list.pop
39   @curr_clause_list = @lists_of_clause_list.last
40   @curr_clause_list.sort!
41   self
42 end
prefix(list) click to toggle source
    # File lib/neo4j-cypher/clause_list.rb
105 def prefix(list)
106   (depth > 1) && !prefix_for_depth_2.include?(list.first.clause_type) ? '' : "#{list.first.prefix} "
107 end
prefix_for_depth_2() click to toggle source
    # File lib/neo4j-cypher/clause_list.rb
109 def prefix_for_depth_2
110   if include?(:match) && include?(:where)
111     [:set, :delete, :create, :remove, :where]
112   else
113     [:set, :delete, :create, :remove]
114   end
115 
116 end
push() click to toggle source
   # File lib/neo4j-cypher/clause_list.rb
31 def push
32   @lists_of_clause_list << []
33   @curr_clause_list = @lists_of_clause_list.last
34   self
35 end
return_clause() click to toggle source
   # File lib/neo4j-cypher/clause_list.rb
44 def return_clause
45   @curr_clause_list.find{|r| r.respond_to?(:return_items)}
46 end
to_cypher() click to toggle source
    # File lib/neo4j-cypher/clause_list.rb
100 def to_cypher
101   # Sub lists, like in with clause should not have a clause prefix like WHERE or MATCH
102   group_by_clause.map { |list| "#{prefix(list)}#{join_group(list)}" }.join(' ')
103 end