class ActiveGraph::Core::QueryClauses::WhereClause

Constants

ARG_HAS_QUESTION_MARK_REGEX
KEYWORD
PAREN_SURROUND_REGEX

Public Class Methods

clause_join() click to toggle source
    # File lib/active_graph/core/query_clauses.rb
283 def clause_join
284   Clause::AND
285 end
clause_strings(clauses) click to toggle source
    # File lib/active_graph/core/query_clauses.rb
275 def clause_strings(clauses)
276   clauses.flat_map do |clause|
277     Array(clause.value).map do |v|
278       (clause.options[:not] ? 'NOT' : '') + (v.to_s.match(PAREN_SURROUND_REGEX) ? v.to_s : "(#{v})")
279     end
280   end
281 end

Private Class Methods

from_args(args, params, options = {}) click to toggle source
    # File lib/active_graph/core/query_clauses.rb
315 def from_args(args, params, options = {})
316   query_string, params_arg = args
317 
318   if query_string.is_a?(String) && (query_string.match(ARG_HAS_QUESTION_MARK_REGEX) || params_arg.is_a?(Hash))
319     if params_arg.is_a?(Hash)
320       params.add_params(params_arg)
321     else
322       param_var = params.add_params(question_mark_param: params_arg)[0]
323       query_string = query_string.gsub(ARG_HAS_QUESTION_MARK_REGEX, "\\1$#{param_var}\\2")
324     end
325 
326     [from_arg(query_string, params, options)]
327   else
328     super
329   end
330 end

Public Instance Methods

from_key_and_value(key, value, previous_keys = []) click to toggle source
    # File lib/active_graph/core/query_clauses.rb
264 def from_key_and_value(key, value, previous_keys = [])
265   case value
266   when Hash then hash_key_value_string(key, value, previous_keys)
267   when NilClass then "#{key} IS NULL"
268   when Regexp then regexp_key_value_string(key, value, previous_keys)
269   else
270     key_value_string(key, value, previous_keys)
271   end
272 end

Private Instance Methods

hash_key_value_string(key, value, previous_keys) click to toggle source
    # File lib/active_graph/core/query_clauses.rb
290 def hash_key_value_string(key, value, previous_keys)
291   value.map do |k, v|
292     if k.to_sym == :neo_id
293       v = Array(v).map { |item| (item.respond_to?(:neo_id) ? item.neo_id : item).to_i }
294       key_value_string("ID(#{key})", v)
295     else
296       "#{key}.#{from_key_and_value(k, v, previous_keys + [key])}"
297     end
298   end.join(AND)
299 end
regexp_key_value_string(key, value, previous_keys) click to toggle source
    # File lib/active_graph/core/query_clauses.rb
301 def regexp_key_value_string(key, value, previous_keys)
302   pattern = (value.casefold? ? '(?i)' : '') + value.source
303 
304   param = [previous_keys + [key]].join(UNDERSCORE)
305   self.class.paramaterize_key!(param)
306 
307   param = add_param(param, pattern)
308 
309   "#{key} =~ $#{param}"
310 end