Module: Sequel::Plugins::AssociationDependencies

Module | Sequel::Plugins::AssociationDependencies
In: | lib/sequel/plugins/association_dependencies.rb

The AssociationDependencies plugin allows you do easily set up before and/or after destroy hooks for destroying, deleting, or nullifying associated model objects. The following association types support the following dependency actions:

- :many_to_many - :nullify (removes all related entries in join table)
- :many_to_one - :delete, :destroy
- :one_to_many - :delete, :destroy, :nullify (sets foreign key to NULL for all associated objects)

This plugin works directly with the association datasets and does not use any cached association values. The :delete action will delete all associated objects from the database in a single SQL call. The :destroy action will load each associated object from the database and call the destroy method on it.

To set up an association dependency, you must provide a hash with association name symbols and dependency action values. You can provide the hash to the plugin call itself or to the add_association_dependencies method:

      Business.plugin :association_dependencies, :address=>delete
      # or:
      Artist.plugin :association_dependencies
      Artist.add_association_dependencies :albums=>:destroy, :reviews=>:delete, :tags=>:nullify

### Methods

apply configure

### Classes and Modules

Module Sequel::Plugins::AssociationDependencies::ClassMethods
Module Sequel::Plugins::AssociationDependencies::InstanceMethods

### Constants

ASSOCIATION_MAPPING | = | {:one_to_many=>:before, :many_to_one=>:after, :many_to_many=>:before} |  | Mapping of association types to when the dependency calls should be made (either :before for in before_destroy or :after for in after_destroy)
DEPENDENCE_ACTIONS | = | [:delete, :destroy, :nullify] |  | The valid dependence actions

### Public Class methods

apply(model, hash={})

Initialize the association_dependencies hash for this model.

[Source]

        # File lib/sequel/plugins/association_dependencies.rb, line 32
    32:       def self.apply(model, hash={})
    33:         model.instance_eval{@association_dependencies = {:before_delete=>[], :before_destroy=>[], :before_nullify=>[], :after_delete=>[], :after_destroy=>[]}}
    34:       end

configure(model, hash={})

Call add_association_dependencies with any dependencies given in the plugin call.

[Source]

        # File lib/sequel/plugins/association_dependencies.rb, line 37
    37:       def self.configure(model, hash={})
    38:         model.add_association_dependencies(hash) unless hash.empty?
    39:       end

[Validate]