Class: Neo4j::Cypher::ClauseList
- Inherits:
-
Object
- Object
- Neo4j::Cypher::ClauseList
- Includes:
- Enumerable
- Defined in:
- lib/neo4j-cypher/clause_list.rb
Instance Attribute Summary collapse
-
#clause_list ⇒ Object
Returns the value of attribute clause_list.
-
#variables ⇒ Object
Returns the value of attribute variables.
Instance Method Summary collapse
-
#create_variable(var) ⇒ Object
def debug @curr_clause_list.each_with_index { |c, i| puts “ #i #cc.clause_typec.clause_type.inspect, #cc.to_cypher - #cc.class id: #cc.object_id order #cc.insert_order” } end.
- #delete(clause_or_context) ⇒ Object
- #depth ⇒ Object
- #each ⇒ Object
- #empty? ⇒ Boolean
- #find(clause_type) ⇒ Object
- #group_by_clause ⇒ Object
- #include?(clause_type) ⇒ Boolean
-
#initialize(variables = []) ⇒ ClauseList
constructor
A new instance of ClauseList.
- #insert(clause) ⇒ Object
- #join_group(list) ⇒ Object
- #last ⇒ Object
- #pop ⇒ Object
- #prefix(list) ⇒ Object
- #prefix_for_depth_2 ⇒ Object
- #push ⇒ Object
- #return_clause ⇒ Object
- #to_cypher ⇒ Object
Constructor Details
#initialize(variables = []) ⇒ ClauseList
Returns a new instance of ClauseList.
8 9 10 11 12 13 |
# File 'lib/neo4j-cypher/clause_list.rb', line 8 def initialize(variables = []) @variables = variables @lists_of_clause_list = [[]] @curr_clause_list = @lists_of_clause_list.first @insert_order = 0 end |
Instance Attribute Details
#clause_list ⇒ Object
Returns the value of attribute clause_list.
5 6 7 |
# File 'lib/neo4j-cypher/clause_list.rb', line 5 def clause_list @clause_list end |
#variables ⇒ Object
Returns the value of attribute variables.
5 6 7 |
# File 'lib/neo4j-cypher/clause_list.rb', line 5 def variables @variables end |
Instance Method Details
#create_variable(var) ⇒ Object
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
80 81 82 83 84 |
# File 'lib/neo4j-cypher/clause_list.rb', line 80 def create_variable(var) raise "Already included #{var}" if @variables.include?(var) @variables << var "v#{@variables.size}".to_sym end |
#delete(clause_or_context) ⇒ Object
71 72 73 74 |
# File 'lib/neo4j-cypher/clause_list.rb', line 71 def delete(clause_or_context) c = clause_or_context.respond_to?(:clause) ? clause_or_context.clause : clause_or_context @curr_clause_list.delete(c) end |
#depth ⇒ Object
48 49 50 |
# File 'lib/neo4j-cypher/clause_list.rb', line 48 def depth @lists_of_clause_list.count end |
#each ⇒ Object
27 28 29 |
# File 'lib/neo4j-cypher/clause_list.rb', line 27 def each @curr_clause_list.each { |c| yield c } end |
#empty? ⇒ Boolean
15 16 17 |
# File 'lib/neo4j-cypher/clause_list.rb', line 15 def empty? !first end |
#find(clause_type) ⇒ Object
23 24 25 |
# File 'lib/neo4j-cypher/clause_list.rb', line 23 def find(clause_type) @curr_clause_list.find { |c| c.clause_type == clause_type } end |
#group_by_clause ⇒ Object
86 87 88 89 90 91 92 93 94 |
# File 'lib/neo4j-cypher/clause_list.rb', line 86 def group_by_clause prev_clause = nil inject([]) do |memo, clause| memo << [] if clause.clause_type != prev_clause prev_clause = clause.clause_type memo.last << clause memo end end |
#include?(clause_type) ⇒ Boolean
19 20 21 |
# File 'lib/neo4j-cypher/clause_list.rb', line 19 def include?(clause_type) !!find(clause_type) end |
#insert(clause) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/neo4j-cypher/clause_list.rb', line 52 def insert(clause) ctype = clause.clause_type if Clause::ORDER.include?(ctype) # which list should we add the cluase to, the root or the sub list ? # ALl the start and return clauses should move to the clause_list c = (depth > 1 && (ctype == :start || ctype == :return)) ? @lists_of_clause_list.first : @curr_clause_list c << clause @insert_order += 1 clause.insert_order = @insert_order c.sort! end self end |
#join_group(list) ⇒ Object
96 97 98 |
# File 'lib/neo4j-cypher/clause_list.rb', line 96 def join_group(list) list.map { |c| c.to_cypher }.join(list.first.separator) end |
#last ⇒ Object
67 68 69 |
# File 'lib/neo4j-cypher/clause_list.rb', line 67 def last @curr_clause_list.last end |
#pop ⇒ Object
37 38 39 40 41 42 |
# File 'lib/neo4j-cypher/clause_list.rb', line 37 def pop @lists_of_clause_list.pop @curr_clause_list = @lists_of_clause_list.last @curr_clause_list.sort! self end |
#prefix(list) ⇒ Object
105 106 107 |
# File 'lib/neo4j-cypher/clause_list.rb', line 105 def prefix(list) (depth > 1) && !prefix_for_depth_2.include?(list.first.clause_type) ? '' : "#{list.first.prefix} " end |
#prefix_for_depth_2 ⇒ Object
109 110 111 112 113 114 115 116 |
# File 'lib/neo4j-cypher/clause_list.rb', line 109 def prefix_for_depth_2 if include?(:match) && include?(:where) [:set, :delete, :create, :remove, :where] else [:set, :delete, :create, :remove] end end |
#push ⇒ Object
31 32 33 34 35 |
# File 'lib/neo4j-cypher/clause_list.rb', line 31 def push @lists_of_clause_list << [] @curr_clause_list = @lists_of_clause_list.last self end |
#return_clause ⇒ Object
44 45 46 |
# File 'lib/neo4j-cypher/clause_list.rb', line 44 def return_clause @curr_clause_list.find{|r| r.respond_to?(:return_items)} end |
#to_cypher ⇒ Object
100 101 102 103 |
# File 'lib/neo4j-cypher/clause_list.rb', line 100 def to_cypher # Sub lists, like in with clause should not have a clause prefix like WHERE or MATCH group_by_clause.map { |list| "#{prefix(list)}#{join_group(list)}" }.join(' ') end |