class Torque::PostgreSQL::Associations::Builder::BelongsToMany

Public Class Methods

add_default_callbacks(model, reflection) click to toggle source
# File lib/torque/postgresql/associations/builder/belongs_to_many.rb, line 42
def self.add_default_callbacks(model, reflection)
  model.before_validation ->(o) do
    o.association(reflection.name).default(&reflection.options[:default])
  end
end
add_destroy_callbacks(model, reflection) click to toggle source
# File lib/torque/postgresql/associations/builder/belongs_to_many.rb, line 97
def self.add_destroy_callbacks(model, reflection)
  model.after_destroy lambda { |o| o.association(reflection.name).handle_dependency }
end
add_touch_callbacks(model, reflection) click to toggle source
# File lib/torque/postgresql/associations/builder/belongs_to_many.rb, line 48
def self.add_touch_callbacks(model, reflection)
  foreign_key = reflection.foreign_key
  n           = reflection.name
  touch       = reflection.options[:touch]

  callback = ->(changes_method) do
    ->(record) do
      BelongsToMany.touch_record(record, record.send(changes_method), foreign_key,
        n, touch, belongs_to_touch_method)
    end
  end

  model.after_create callback.call(:saved_changes), if: :saved_changes?
  model.after_update callback.call(:saved_changes), if: :saved_changes?
  model.after_destroy callback.call(:changes_to_save)
  model.after_touch callback.call(:changes_to_save)
end
define_callbacks(model, reflection) click to toggle source
Calls superclass method
# File lib/torque/postgresql/associations/builder/belongs_to_many.rb, line 20
def self.define_callbacks(model, reflection)
  super
  add_touch_callbacks(model, reflection)   if reflection.options[:touch]
  add_default_callbacks(model, reflection) if reflection.options[:default]
end
define_readers(mixin, name) click to toggle source
# File lib/torque/postgresql/associations/builder/belongs_to_many.rb, line 26
          def self.define_readers(mixin, name)
            mixin.class_eval <<-CODE, __FILE__, __LINE__ + 1
              def #{name}
                association(:#{name}).reader
              end
            CODE
          end
define_validations(model, reflection) click to toggle source
Calls superclass method
# File lib/torque/postgresql/associations/builder/belongs_to_many.rb, line 101
def self.define_validations(model, reflection)
  if reflection.options.key?(:required)
    reflection.options[:optional] = !reflection.options.delete(:required)
  end

  if reflection.options[:optional].nil?
    required = model.belongs_to_many_required_by_default
  else
    required = !reflection.options[:optional]
  end

  super

  if required
    model.validates_presence_of reflection.name, message: :required
  end
end
define_writers(mixin, name) click to toggle source
# File lib/torque/postgresql/associations/builder/belongs_to_many.rb, line 34
          def self.define_writers(mixin, name)
            mixin.class_eval <<-CODE, __FILE__, __LINE__ + 1
              def #{name}=(value)
                association(:#{name}).writer(value)
              end
            CODE
          end
macro() click to toggle source
# File lib/torque/postgresql/associations/builder/belongs_to_many.rb, line 8
def self.macro
  :belongs_to_many
end
valid_dependent_options() click to toggle source
# File lib/torque/postgresql/associations/builder/belongs_to_many.rb, line 16
def self.valid_dependent_options
  [:restrict_with_error, :restrict_with_exception]
end
valid_options(options) click to toggle source
Calls superclass method
# File lib/torque/postgresql/associations/builder/belongs_to_many.rb, line 12
def self.valid_options(options)
  super + [:touch, :optional, :default, :dependent, :primary_key, :required]
end