module ActiveGraph::Node::Dependent::QueryProxyMethods

methods used to resolve association dependencies

Public Instance Methods

each_for_destruction(owning_node) { |obj| ... } click to toggle source

Used as part of `dependent: :destroy` and may not have any utility otherwise. It keeps track of the node responsible for a cascading `destroy` process. @param owning_node [#dependent_children] source_object The node that called this method. Typically, we would use QueryProxy's `source_object` method but this is not always available, so we require it explicitly.

   # File lib/active_graph/node/dependent/query_proxy_methods.rb
10 def each_for_destruction(owning_node)
11   target = owning_node.called_by || owning_node
12   objects = pluck(identity).compact.reject do |obj|
13     target.dependent_children.include?(obj)
14   end
15 
16   objects.each do |obj|
17     obj.called_by = target
18     target.dependent_children << obj
19     yield obj
20   end
21 end
unique_nodes(association, self_identifer, other_node, other_rel, ids = []) click to toggle source

This will match nodes who only have a single relationship of a given type. It's used by `dependent: :delete_orphans` and `dependent: :destroy_orphans` and may not have much utility otherwise. @param [ActiveGraph::Node::HasN::Association] association The Association object used throughout the match. @param [String, Symbol] other_node The identifier to use for the other end of the chain. @param [String, Symbol] other_rel The identifier to use for the relationship in the optional match. @return [ActiveGraph::Node::Query::QueryProxy]

   # File lib/active_graph/node/dependent/query_proxy_methods.rb
29 def unique_nodes(association, self_identifer, other_node, other_rel, ids = [])
30   fail 'Only supported by in QueryProxy chains started by an instance' unless source_object
31   return false if send(association.name).empty?
32   unique_nodes_query(association, self_identifer, other_node, other_rel, ids)
33     .proxy_as(association.target_class, other_node)
34 end

Private Instance Methods

unique_nodes_query(association, self_identifer, other_node, other_rel, ids) click to toggle source
   # File lib/active_graph/node/dependent/query_proxy_methods.rb
38 def unique_nodes_query(association, self_identifer, other_node, other_rel, ids)
39   base = query.with(identity).proxy_as_optional(source_object.class, self_identifer)
40               .send(association.name, other_node, other_rel)
41   base = base.where(id: ids) if ids.present?
42   base.query
43       .with(other_node)
44       .match("()#{association.arrow_cypher(:orphan_rel)}(#{other_node})")
45       .with(other_node, count: 'count(*)')
46       .where('count = $one', one: 1)
47       .break
48 end