class SynchronizedModel::MessageReceive

Attributes

message[R]

Public Class Methods

new(message) click to toggle source
# File lib/synchronized_model/message_receive.rb, line 7
def initialize(message)
  @message = Hash[message.map { |k, v| [k.to_sym, v] }]
end

Public Instance Methods

call() click to toggle source
# File lib/synchronized_model/message_receive.rb, line 11
def call
  if model
    update_model
  else
    log_model_not_found
  end
end

Private Instance Methods

active_record?() click to toggle source
# File lib/synchronized_model/message_receive.rb, line 53
def active_record?
  model.respond_to? :updated_at_was
end
chronological_update?(_model) click to toggle source
# File lib/synchronized_model/message_receive.rb, line 39
def chronological_update?(_model)
  !(updated_dates[:was] && updated_dates[:was] >= updated_dates[:current])
end
log_model_not_found() click to toggle source
# File lib/synchronized_model/message_receive.rb, line 61
def log_model_not_found
  log_message = "Skipped Message ID: #{message[:id]}. " \
  "No #{message[:resource]} model configured with SynchronizedModel"
  SynchronizedModel.logger.info(log_message)
end
model() click to toggle source
# File lib/synchronized_model/message_receive.rb, line 57
def model
  @model ||= SynchronizedModel::ModelMessage.new(message).model
end
sequel_save() click to toggle source
# File lib/synchronized_model/message_receive.rb, line 32
def sequel_save
  model.save
  unless model.errors.empty?
    fail "Load from queue failed -#{model.class} uuid #{model.uuid}"
  end
end
update_model() click to toggle source
# File lib/synchronized_model/message_receive.rb, line 21
def update_model
  if chronological_update?(model)
    model.updated_at = updated_dates[:current]
    active_record? ? model.save! : sequel_save
  else
    log_message = "Outdated message for #{model.class} " \
    "ID: #{model.id}"
    SynchronizedModel.logger.info(log_message)
  end
end
updated_dates() click to toggle source
# File lib/synchronized_model/message_receive.rb, line 43
def updated_dates
  if active_record?
    { was: model.updated_at_was, current: model.updated_at }
  else
    change = model.column_change(:updated_at) ||
             [(model.updated_at - 1.day), model.updated_at]
    { was: change[0], current: change[1] }
  end
end