class ActiveGraph::Node::Query::QueryProxy::Link
Attributes
clause[R]
Public Class Methods
converted_key(model, key)
click to toggle source
# File lib/active_graph/node/query/query_proxy_link.rb 122 def converted_key(model, key) 123 if key.to_sym == :id 124 model ? model.id_property_name : :uuid 125 else 126 key 127 end 128 end
converted_keys(model, arg)
click to toggle source
# File lib/active_graph/node/query/query_proxy_link.rb 118 def converted_keys(model, arg) 119 arg.is_a?(Hash) ? Hash[arg.map { |key, value| [converted_key(model, key), value] }] : arg 120 end
converted_value(model, key, value)
click to toggle source
# File lib/active_graph/node/query/query_proxy_link.rb 130 def converted_value(model, key, value) 131 model.declared_properties.value_for_where(key, value) 132 end
for_arg(model, clause, arg, *args)
click to toggle source
# File lib/active_graph/node/query/query_proxy_link.rb 112 def for_arg(model, clause, arg, *args) 113 default = [Link.new(clause, arg, *args)] 114 115 Link.for_clause(clause, arg, model, *args) || default 116 end
for_args(model, clause, args, association = nil)
click to toggle source
# File lib/active_graph/node/query/query_proxy_link.rb 102 def for_args(model, clause, args, association = nil) 103 if [:where, :where_not].include?(clause) && args[0].is_a?(String) # Better way? 104 [for_arg(model, clause, args[0], *args[1..-1])] 105 elsif [:rel_where, :rel_where_not].include?(clause) 106 args.map { |arg| for_arg(model, clause, arg, association) } 107 else 108 args.map { |arg| for_arg(model, clause, arg) } 109 end 110 end
for_association(name, value, n_string, model)
click to toggle source
# File lib/active_graph/node/query/query_proxy_link.rb 69 def for_association(name, value, n_string, model) 70 neo_id = value.try(:neo_id) || value 71 fail ArgumentError, "Invalid value for '#{name}' condition" if not neo_id.is_a?(Integer) 72 73 [ 74 new(:match, ->(v, _) { "(#{v})#{model.associations[name].arrow_cypher}(#{n_string})" }), 75 new(:where, ->(_, _) { {"ID(#{n_string})" => neo_id.to_i} }) 76 ] 77 end
for_clause(clause, arg, model, *args)
click to toggle source
# File lib/active_graph/node/query/query_proxy_link.rb 23 def for_clause(clause, arg, model, *args) 24 method_to_call = "for_#{clause}_clause" 25 return unless respond_to?(method_to_call) 26 27 send(method_to_call, arg, model, *args) 28 end
for_order_clause(arg, model)
click to toggle source
# File lib/active_graph/node/query/query_proxy_link.rb 98 def for_order_clause(arg, model) 99 [new(:order, ->(v, _) { arg.is_a?(String) ? arg : {v => converted_keys(model, arg)} })] 100 end
for_rel_order_clause(arg, _)
click to toggle source
# File lib/active_graph/node/query/query_proxy_link.rb 94 def for_rel_order_clause(arg, _) 95 [new(:order, ->(_, v) { arg.is_a?(String) ? arg : {v => arg} })] 96 end
for_rel_where_clause(arg, _, association)
click to toggle source
We don't accept strings here. If you want to use a string, just use where.
# File lib/active_graph/node/query/query_proxy_link.rb 80 def for_rel_where_clause(arg, _, association) 81 arg.each_with_object([]) do |(key, value), result| 82 rel_class = association.relationship_class if association.relationship_class 83 val = rel_class ? converted_value(rel_class, key, value) : value 84 result << new(:where, ->(_, rel_var) { {rel_var => {key => val}} }) 85 end 86 end
for_rel_where_not_clause(*args)
click to toggle source
# File lib/active_graph/node/query/query_proxy_link.rb 88 def for_rel_where_not_clause(*args) 89 for_rel_where_clause(*args).each do |link| 90 link.instance_variable_set('@clause', :where_not) 91 end 92 end
for_where_clause(arg, model, *args)
click to toggle source
# File lib/active_graph/node/query/query_proxy_link.rb 30 def for_where_clause(arg, model, *args) 31 node_num = 1 32 result = [] 33 if arg.is_a?(Hash) 34 arg.each do |key, value| 35 if model && model.association?(key) 36 result += for_association(key, value, "n#{node_num}", model) 37 node_num += 1 38 else 39 result << new_for_key_and_value(model, key, value) 40 end 41 end 42 elsif arg.is_a?(String) 43 result << new(:where, arg, args) 44 end 45 result 46 end
Also aliased as: for_node_where_clause
for_where_not_clause(*args)
click to toggle source
# File lib/active_graph/node/query/query_proxy_link.rb 49 def for_where_not_clause(*args) 50 for_where_clause(*args).each do |link| 51 link.instance_variable_set('@clause', :where_not) 52 end 53 end
new(clause, arg, args = [])
click to toggle source
# File lib/active_graph/node/query/query_proxy_link.rb 8 def initialize(clause, arg, args = []) 9 @clause = clause 10 @arg = arg 11 @args = args 12 end
new_for_key_and_value(model, key, value)
click to toggle source
# File lib/active_graph/node/query/query_proxy_link.rb 55 def new_for_key_and_value(model, key, value) 56 key = converted_key(model, key) 57 58 val = if !model 59 value 60 elsif key == model.id_property_name && value.is_a?(ActiveGraph::Node) 61 value.id 62 else 63 converted_value(model, key, value) 64 end 65 66 new(:where, ->(v, _) { {v => {key => val}} }) 67 end
Public Instance Methods
args(var, rel_var)
click to toggle source
# File lib/active_graph/node/query/query_proxy_link.rb 14 def args(var, rel_var) 15 if @arg.respond_to?(:call) 16 @arg.call(var, rel_var) 17 else 18 [@arg] + @args 19 end 20 end