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