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