Sha256: c128a79862c71cb3d63bdbec7af1d695e18f80d56836048e39c3555cb93ea37a
Contents?: true
Size: 1.94 KB
Versions: 1
Compression:
Stored size: 1.94 KB
Contents
# encoding: utf-8 require "mongoid/relations/cascading/strategy" require "mongoid/relations/cascading/delete" require "mongoid/relations/cascading/destroy" require "mongoid/relations/cascading/nullify" module Mongoid # :nodoc: module Relations #:nodoc: # This module defines the behaviour for setting up cascading deletes and # nullifies for relations, and how to delegate to the approriate strategy. module Cascading extend ActiveSupport::Concern included do class_attribute :cascades self.cascades = [] end # Perform all cascading deletes, destroys, or nullifies. Will delegate to # the appropriate strategy to perform the operation. # # @example Execute cascades. # document.cascade! # # @since 2.0.0.rc.1 def cascade! cascades.each do |name| if !metadata || !metadata.versioned? meta = relations[name] strategy = meta.cascade_strategy strategy.new(self, meta).cascade end end end # Get the cascading definitions. # # @note Refactored from using delegate for class load performance. # # @example Get the cascades. # model.cascades # # @return [ Array<String> ] The cascading relation names. def cascades self.class.cascades end module ClassMethods #:nodoc: # Attempt to add the cascading information for the document to know how # to handle associated documents on a removal. # # @example Set up cascading information # Movie.cascade(metadata) # # @param [ Metadata ] metadata The metadata for the relation. # # @return [ Class ] The class of the document. # # @since 2.0.0.rc.1 def cascade(metadata) tap { self.cascades += [ metadata.name.to_s ] if metadata.dependent? } end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
mongoid-2.3.0 | lib/mongoid/relations/cascading.rb |