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

Defined in:
lib/sequel/plugins/association_dependencies.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#association_dependenciesObject (readonly)

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.



50
51
52
# File 'lib/sequel/plugins/association_dependencies.rb', line 50

def association_dependencies
  @association_dependencies
end

Instance Method Details

#add_association_dependencies(hash) ⇒ Object

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



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/sequel/plugins/association_dependencies.rb', line 54

def add_association_dependencies(hash)
  hash.each do |association, action|
    raise(Error, "Nonexistent association: #{association}") unless r = association_reflection(association)
    type = r[:type]
    raise(Error, "Invalid dependence action type: association: #{association}, dependence action: #{action}") unless DEPENDENCE_ACTIONS.include?(action)
    raise(Error, "Invalid association type: association: #{association}, type: #{type}") unless time = ASSOCIATION_MAPPING[type]
    association_dependencies[:"#{time}_#{action}"] << if action == :nullify
      case type
      when :one_to_many , :many_to_many
        proc{public_send(r[:remove_all_method])}
      when :one_to_one
        proc{public_send(r[:setter_method], nil)}
      else
        raise(Error, "Can't nullify many_to_one associated objects: association: #{association}")
      end
    else
      raise(Error, "Can only nullify many_to_many associations: association: #{association}") if type == :many_to_many
      r[:dataset_method]
    end
  end
end

#freezeObject

Freeze association dependencies when freezing model class.



77
78
79
80
81
# File 'lib/sequel/plugins/association_dependencies.rb', line 77

def freeze
  @association_dependencies.freeze.each_value(&:freeze)

  super
end