module Sequel::Plugins::AssociationDependencies::ClassMethods

  1. lib/sequel/plugins/association_dependencies.rb


association_dependencies [R]

A hash specifying the association dependencies for each model. The keys are symbols indicating the type of action and when it should be executed (e.g. :before_delete). Values are an array of method symbols. For before_nullify, the symbols are remove_all_association methods. For other types, the symbols are association_dataset methods, on which delete or destroy is called.

Public Instance methods


Add association dependencies to this model. The hash should have association name symbol keys and dependency action symbol values (e.g. albums: :destroy).

[show source]
   # File lib/sequel/plugins/association_dependencies.rb
54 def add_association_dependencies(hash)
55   hash.each do |association, action|
56     raise(Error, "Nonexistent association: #{association}") unless r = association_reflection(association)
57     type = r[:type]
58     raise(Error, "Invalid dependence action type: association: #{association}, dependence action: #{action}") unless DEPENDENCE_ACTIONS.include?(action)
59     raise(Error, "Invalid association type: association: #{association}, type: #{type}") unless time = ASSOCIATION_MAPPING[type]
60     association_dependencies[:"#{time}_#{action}"] << if action == :nullify
61       case type
62       when :one_to_many , :many_to_many
63         [r[:remove_all_method]]
64       when :one_to_one
65         [r[:setter_method], nil]
66       else
67         raise(Error, "Can't nullify many_to_one associated objects: association: #{association}")
68       end
69     else
70       raise(Error, "Can only nullify many_to_many associations: association: #{association}") if type == :many_to_many
71       r[:dataset_method]
72     end
73   end
74 end

Freeze association dependencies when freezing model class.

[show source]
   # File lib/sequel/plugins/association_dependencies.rb
77 def freeze
78   @association_dependencies.freeze.each_value(&:freeze)
80   super
81 end