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