Sha256: 67c73fe15abecb84f9173943bcc2015c2fa75d48584cf3e7ef4428bc51112c90
Contents?: true
Size: 1.43 KB
Versions: 39
Compression:
Stored size: 1.43 KB
Contents
module ActiveGraph module Node 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).concat(Array(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
39 entries across 39 versions & 1 rubygems