class Quickery::CallbacksBuilder

Attributes

quickery_builder[R]

Public Class Methods

new(quickery_builder:) click to toggle source
# File lib/quickery/callbacks_builder.rb, line 5
def initialize(quickery_builder:)
  @quickery_builder = quickery_builder
end

Public Instance Methods

build_callbacks() click to toggle source
# File lib/quickery/callbacks_builder.rb, line 9
def build_callbacks
  build_callback_to_depender_model
  build_callback_to_dependee_model
  build_callback_to_each_intermediate_model
end

Private Instance Methods

build_callback_to_dependee_model() click to toggle source

add callback to sync changes when dependee_column has been updated

# File lib/quickery/callbacks_builder.rb, line 25
def build_callback_to_dependee_model
  last_association_chain = @quickery_builder.association_chains.last
  last_association_chain.model.quickery_association_chain_dependees ||= []
  last_association_chain.model.quickery_association_chain_dependees << last_association_chain
end
build_callback_to_depender_model() click to toggle source

add callback to immediately sync value after a record has been created / updated

# File lib/quickery/callbacks_builder.rb, line 18
def build_callback_to_depender_model
  first_association_chain = @quickery_builder.association_chains.first
  first_association_chain.model.quickery_association_chain_dependers ||= []
  first_association_chain.model.quickery_association_chain_dependers << first_association_chain
end
build_callback_to_each_intermediate_model() click to toggle source

also add callbacks to sync changes when intermediary associations have been changed (this does not include first and last builder)

# File lib/quickery/callbacks_builder.rb, line 32
def build_callback_to_each_intermediate_model
  last_association_chain = @quickery_builder.association_chains.last
  last_association_chain.parent_association_chains(include_self: true)[1..-2].each do |association_chain|
    association_chain.model.quickery_association_chain_intermediaries ||= []
    association_chain.model.quickery_association_chain_intermediaries << association_chain
  end
end