Module: Sequel::Plugins::AssociationDependencies::ClassMethods
- Defined in:
- lib/sequel/plugins/association_dependencies.rb
Instance Attribute Summary collapse
-
#association_dependencies ⇒ Object
readonly
A hash specifying the association dependencies for each model.
Instance Method Summary collapse
-
#add_association_dependencies(hash) ⇒ Object
Add association dependencies to this model.
-
#freeze ⇒ Object
Freeze association dependencies when freezing model class.
Instance Attribute Details
#association_dependencies ⇒ Object (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 [r[:remove_all_method]] when :one_to_one [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 |
#freeze ⇒ Object
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 |