class Neo4j::Core::QueryClauses::Clause

Constants

AND
COMMA_SPACE
PRETTY_NEW_LINE
UNDERSCORE

Attributes

arg[RW]
options[R]
param_vars_added[R]
params[RW]

Public Class Methods

clause_color() click to toggle source
    # File lib/neo4j/core/query_clauses.rb
155 def clause_color
156   ANSI::CYAN
157 end
clause_join() click to toggle source
    # File lib/neo4j/core/query_clauses.rb
151 def clause_join
152   ''
153 end
clause_string(clauses, pretty) click to toggle source
    # File lib/neo4j/core/query_clauses.rb
142 def clause_string(clauses, pretty)
143   join_string = pretty ? clause_join + PRETTY_NEW_LINE : clause_join
144 
145   strings = clause_strings(clauses)
146   stripped_string = strings.join(join_string)
147   stripped_string.strip!
148   pretty && strings.size > 1 ? PRETTY_NEW_LINE + stripped_string : stripped_string
149 end
from_arg(arg, params, options = {}) click to toggle source
    # File lib/neo4j/core/query_clauses.rb
126 def from_arg(arg, params, options = {})
127   new(arg, params, options) if !arg.respond_to?(:empty?) || !arg.empty?
128 end
from_args(args, params, options = {}) click to toggle source
    # File lib/neo4j/core/query_clauses.rb
121 def from_args(args, params, options = {})
122   args.flatten!
123   args.map { |arg| from_arg(arg, params, options) }.tap(&:compact!)
124 end
from_key_and_single_value(key, value) click to toggle source
    # File lib/neo4j/core/query_clauses.rb
159 def from_key_and_single_value(key, value)
160   value.to_sym == :neo_id ? "ID(#{key})" : "#{key}.#{value}"
161 end
keyword() click to toggle source
    # File lib/neo4j/core/query_clauses.rb
113 def keyword
114   self::KEYWORD
115 end
keyword_downcase() click to toggle source
    # File lib/neo4j/core/query_clauses.rb
117 def keyword_downcase
118   keyword.downcase
119 end
new(arg, params, options = {}) click to toggle source
   # File lib/neo4j/core/query_clauses.rb
21 def initialize(arg, params, options = {})
22   @arg = arg
23   @options = options
24   @params = params
25   @param_vars_added = []
26 end
paramaterize_key!(key) click to toggle source
    # File lib/neo4j/core/query_clauses.rb
164 def self.paramaterize_key!(key)
165   key.tr_s!('^a-zA-Z0-9', UNDERSCORE)
166   key.gsub!(/^_+|_+$/, '')
167 end
to_cypher(clauses, pretty = false) click to toggle source
    # File lib/neo4j/core/query_clauses.rb
130 def to_cypher(clauses, pretty = false)
131   string = clause_string(clauses, pretty)
132 
133   final_keyword = if pretty
134                     "#{clause_color}#{keyword}#{ANSI::CLEAR}"
135                   else
136                     keyword
137                   end
138 
139   "#{final_keyword} #{string}" if !string.empty?
140 end

Public Instance Methods

_nested_value_hash?(value) click to toggle source
    # File lib/neo4j/core/query_clauses.rb
102 def _nested_value_hash?(value)
103   value.values.any? { |v| v.is_a?(Hash) }
104 end
_use_key_for_var?(value, prefer) click to toggle source
    # File lib/neo4j/core/query_clauses.rb
 98 def _use_key_for_var?(value, prefer)
 99   _nested_value_hash?(value) || prefer == :var
100 end
add_param(key, value) click to toggle source
    # File lib/neo4j/core/query_clauses.rb
169 def add_param(key, value)
170   @param_vars_added << key
171   @params.add_param(key, value)
172 end
add_params(keys_and_values) click to toggle source
    # File lib/neo4j/core/query_clauses.rb
174 def add_params(keys_and_values)
175   @param_vars_added += keys_and_values.keys
176   @params.add_params(keys_and_values)
177 end
attributes_from_key_and_value(_key, value) click to toggle source
    # File lib/neo4j/core/query_clauses.rb
106 def attributes_from_key_and_value(_key, value)
107   return nil unless value.is_a?(Hash)
108 
109   value.values.map(&:class) == [Hash] ? value.first[1] : value
110 end
from_hash(value) click to toggle source
   # File lib/neo4j/core/query_clauses.rb
44 def from_hash(value)
45   fail ArgError if !respond_to?(:from_key_and_value)
46 
47   value.map do |k, v|
48     from_key_and_value k, v
49   end
50 end
from_string(value) click to toggle source
   # File lib/neo4j/core/query_clauses.rb
52 def from_string(value)
53   value
54 end
label_from_key_and_value(key, value, prefer = :var) click to toggle source
   # File lib/neo4j/core/query_clauses.rb
83 def label_from_key_and_value(key, value, prefer = :var)
84   case value
85   when String, Symbol, Array, NilClass then value
86   when Class, Module then value.name
87   when Hash
88     if value.values.map(&:class) == [Hash]
89       value.first.first
90     elsif !_use_key_for_var?(value, prefer)
91       key
92     end
93   else
94     fail ArgError, value
95   end
96 end
node_from_key_and_value(key, value, options = {}) click to toggle source
   # File lib/neo4j/core/query_clauses.rb
56 def node_from_key_and_value(key, value, options = {})
57   prefer = options[:prefer] || :var
58   var = var_from_key_and_value(key, value, prefer)
59   label = label_from_key_and_value(key, value, prefer)
60 
61   attributes = attributes_from_key_and_value(key, value)
62 
63   prefix_value = value
64   if value.is_a?(Hash)
65     prefix_value = (value.keys.join(UNDERSCORE) if value.values.any? { |v| v.is_a?(Hash) })
66   end
67 
68   prefix_array = [key, prefix_value].tap(&:compact!).join(UNDERSCORE)
69   formatted_attributes = attributes_string(attributes, "#{prefix_array}#{UNDERSCORE}")
70   "(#{var}#{format_label(label)}#{formatted_attributes})"
71 end
value() click to toggle source
   # File lib/neo4j/core/query_clauses.rb
28 def value
29   return @value if @value
30 
31   [String, Symbol, Integer, Hash, NilClass].each do |arg_class|
32     from_method = "from_#{arg_class.name.downcase}"
33     return @value = send(from_method, @arg) if @arg.is_a?(arg_class) && respond_to?(from_method)
34   end
35 
36   fail ArgError
37 rescue ArgError => arg_error
38   message = "Invalid argument for #{self.class.keyword}.  Full arguments: #{@arg.inspect}"
39   message += " | Invalid part: #{arg_error.arg_part.inspect}" if arg_error.arg_part
40 
41   raise ArgumentError, message
42 end
var_from_key_and_value(key, value, prefer = :var) click to toggle source
   # File lib/neo4j/core/query_clauses.rb
73 def var_from_key_and_value(key, value, prefer = :var)
74   case value
75   when String, Symbol, Class, Module, NilClass, Array then key
76   when Hash
77     key if _use_key_for_var?(value, prefer)
78   else
79     fail ArgError, value
80   end
81 end

Private Instance Methods

array_value?(value, is_set) click to toggle source
    # File lib/neo4j/core/query_clauses.rb
201 def array_value?(value, is_set)
202   value.is_a?(Array) && !is_set
203 end
attributes_string(attributes, prefix = '') click to toggle source
    # File lib/neo4j/core/query_clauses.rb
217 def attributes_string(attributes, prefix = '')
218   return '' if not attributes
219 
220   attributes_string = attributes.map do |key, value|
221     if value.to_s =~ /^{.+}$/
222       "#{key}: #{value}"
223     else
224       param_key = "#{prefix}#{key}".gsub(/:+/, '_')
225       param_key = add_param(param_key, value)
226       "#{key}: {#{param_key}}"
227     end
228   end.join(Clause::COMMA_SPACE)
229 
230   " {#{attributes_string}}"
231 end
format_label(label_arg) click to toggle source
    # File lib/neo4j/core/query_clauses.rb
205 def format_label(label_arg)
206   return label_arg.map { |arg| format_label(arg) }.join if label_arg.is_a?(Array)
207 
208   label_arg = label_arg.to_s
209   label_arg.strip!
210   if !label_arg.empty? && label_arg[0] != ':'
211     label_arg = "`#{label_arg}`" unless label_arg[' ']
212     label_arg = ":#{label_arg}"
213   end
214   label_arg
215 end
key_value_string(key, value, previous_keys = [], is_set = false) click to toggle source
    # File lib/neo4j/core/query_clauses.rb
181 def key_value_string(key, value, previous_keys = [], is_set = false)
182   param = (previous_keys << key).join(UNDERSCORE)
183   self.class.paramaterize_key!(param)
184 
185   if value.is_a?(Range)
186     range_key_value_string(key, value, previous_keys, param)
187   else
188     value = value.first if array_value?(value, is_set) && value.size == 1
189 
190     param = add_param(param, value)
191 
192     "#{key} #{array_value?(value, is_set) ? 'IN' : '='} {#{param}}"
193   end
194 end
range_key_value_string(key, value, previous_keys, param) click to toggle source
    # File lib/neo4j/core/query_clauses.rb
196 def range_key_value_string(key, value, previous_keys, param)
197   begin_param, end_param = add_params("#{param}_range_min" => value.begin, "#{param}_range_max" => value.end)
198   "#{key} >= {#{begin_param}} AND #{previous_keys[-2]}.#{key} <#{'=' unless value.exclude_end?} {#{end_param}}"
199 end