module Synchronisable::DSL::Associations::ClassMethods

Public Instance Methods

associations_for(attrs) click to toggle source

Builds hash with association as key and array of ids as value.

@param attrs [Hash] local record attributes

@return [Hash<Synchronisable::Association, Array>] associations hash

@raise [MissedAssocationsError] raised when the given

attributes hash doesn't required associations
# File lib/synchronisable/dsl/associations.rb, line 33
def associations_for(attrs)
  ensure_required_associations(attrs)

  intersection = self.associations.map { |key, _| key } & attrs.keys
  Hash[intersection.map { |key| [self.associations[key], [*attrs[key]]] }]
end
inherited(subclass) click to toggle source
Calls superclass method
# File lib/synchronisable/dsl/associations.rb, line 14
def inherited(subclass)
  super
  subclass.associations = {}
end

Private Instance Methods

ensure_required_associations(attrs) click to toggle source
# File lib/synchronisable/dsl/associations.rb, line 42
def ensure_required_associations(attrs)
  missing = required_associations - attrs.keys
  if missing.present?
    raise MissedAssociationsError, I18n.t(
      'errors.missed_associations',
      keys: missing, attrs: attrs
    )
  end
end
required_associations() click to toggle source
# File lib/synchronisable/dsl/associations.rb, line 52
def required_associations
  self.associations.select { |_, a| a.required }.keys
end