module Mongoid::Association::Depending
Constants
- STRATEGIES
Public Instance Methods
apply_archive_dependencies!()
click to toggle source
# File lib/mongoid/archivable/depending.rb, line 9 def apply_archive_dependencies! self.class._all_dependents.each do |association| dependent = association.try(:dependent) next if !dependent || dependent.in?(%i[delete_all destroy]) send(:"_dependent_#{dependent}!", association) end end
Private Instance Methods
_association_archivable?(association)
click to toggle source
# File lib/mongoid/archivable/depending.rb, line 52 def _association_archivable?(association) relations[association.name].class_name.constantize.try(:archivable?) end
_dependent_archive!(association)
click to toggle source
# File lib/mongoid/archivable/depending.rb, line 19 def _dependent_archive!(association) return unless _warn_association_archivable?(association) relation = send(association.name) return unless relation if relation.is_a?(Enumerable) relation.entries relation.each(&:archive) elsif relation.try(:archivable?) relation.archive end end
_dependent_archive_all!(association)
click to toggle source
# File lib/mongoid/archivable/depending.rb, line 31 def _dependent_archive_all!(association) return unless _warn_association_archivable?(association) relation = send(association.name) return unless relation relation.set(archive_at: Time.zone.now) # TODO: this code enables dependency recursion. Untested. # dependents = relation.respond_to?(:dependents) && relation.dependents # if dependents && dependents.reject {|dep| dep.try(:dependent).in?(%i[delete_all destroy]) }.blank? # relation.set(archive_at: Time.zone.now) # else # ::Array.wrap(send(association.name)).each { |rel| rel.archive } # end end
_warn_association_archivable?(association)
click to toggle source
# File lib/mongoid/archivable/depending.rb, line 46 def _warn_association_archivable?(association) result = _association_archivable?(association) Mongoid.logger.warn "Non-archivable association: #{association.name}" unless result result end