Sha256: 05a90052c58058b0dd1f0d16ac5371b98fb06255957df46fed9e20a52ad8b3c6

Contents?: true

Size: 1.42 KB

Versions: 66

Compression:

Stored size: 1.42 KB

Contents

module Neo4j
  module ActiveNode
    module Unpersisted
      # The values in this Hash are returned and used outside by reference
      # so any modifications to the Array should be in-place
      def deferred_create_cache
        @deferred_create_cache ||= {}
      end

      def defer_create(association_name, object, options = {})
        clear_deferred_nodes_for_association(association_name) if options[:clear]

        deferred_nodes_for_association(association_name) << object
      end

      def deferred_nodes_for_association(association_name)
        deferred_create_cache[association_name.to_sym] ||= []
      end

      def pending_deferred_creations?
        !deferred_create_cache.values.all?(&:empty?)
      end

      def clear_deferred_nodes_for_association(association_name)
        deferred_nodes_for_association(association_name.to_sym).clear
      end

      private

      def process_unpersisted_nodes!
        deferred_create_cache.dup.each do |association_name, nodes|
          association_proxy = association_proxy(association_name)

          nodes.each do |node|
            if node.respond_to?(:changed?)
              node.save if node.changed? || !node.persisted?
              fail "Unable to defer node persistence, could not save #{node.inspect}" unless node.persisted?
            end

            association_proxy << node
          end
        end

        @deferred_create_cache = {}
      end
    end
  end
end

Version data entries

66 entries across 66 versions & 2 rubygems

Version Path
neo4j-8.0.17 lib/neo4j/active_node/unpersisted.rb
neo4j-8.0.16 lib/neo4j/active_node/unpersisted.rb
neo4j-8.0.15 lib/neo4j/active_node/unpersisted.rb
neo4j-8.0.13 lib/neo4j/active_node/unpersisted.rb
neo4j-8.0.12 lib/neo4j/active_node/unpersisted.rb
neo4j-8.0.11 lib/neo4j/active_node/unpersisted.rb