Module: Mongoid::Association::Depending
- Extended by:
- ActiveSupport::Concern
- Included in:
- Mongoid::Association
- Defined in:
- lib/mongoid/association/depending.rb
Overview
This module defines the behavior for setting up cascading deletes and nullifies for associations, and how to delegate to the appropriate strategy.
Constant Summary collapse
- STRATEGIES =
The valid dependent strategies.
%i[ delete_all destroy nullify restrict_with_exception restrict_with_error ]
Class Method Summary collapse
-
.define_dependency!(association) ⇒ Class
Attempt to add the cascading information for the document to know how to handle associated documents on a removal.
-
.validate!(association) ⇒ Object
Validates that an association's dependent strategy is within the allowed enumeration.
Instance Method Summary collapse
-
#apply_destroy_dependencies! ⇒ Object
Perform all cascading deletes, destroys, or nullifies.
Class Method Details
.define_dependency!(association) ⇒ Class
Attempt to add the cascading information for the document to know how to handle associated documents on a removal.
55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/mongoid/association/depending.rb', line 55 def self.define_dependency!(association) validate!(association) association.inverse_class.tap do |klass| if klass.dependents_owner != klass klass.dependents = [] klass.dependents_owner = klass end klass.dependents.push(association) if association.dependent && !klass.dependents.include?(association) end end |
.validate!(association) ⇒ Object
Validates that an association's dependent strategy is within the allowed enumeration.
75 76 77 78 79 80 81 |
# File 'lib/mongoid/association/depending.rb', line 75 def self.validate!(association) return if STRATEGIES.include?(association.dependent) raise Errors::InvalidDependentStrategy.new(association, association.dependent, STRATEGIES) end |
Instance Method Details
#apply_destroy_dependencies! ⇒ Object
Perform all cascading deletes, destroys, or nullifies. Will delegate to the appropriate strategy to perform the operation.
88 89 90 91 92 93 94 |
# File 'lib/mongoid/association/depending.rb', line 88 def apply_destroy_dependencies! self.class._all_dependents.each do |association| if dependent = association.try(:dependent) send("_dependent_#{dependent}!", association) end end end |