class Emque::Producing::ChangesPayloadGenerator

Attributes

original[R]
translated_attrs[R]
updated[R]

Public Class Methods

new(changeset_data = {}) click to toggle source
# File lib/emque/producing/message/message_with_changeset.rb, line 46
def initialize(changeset_data = {})
  @original = changeset_data[:original] || {}
  @updated = changeset_data[:updated] || {}
  @translated_attrs = changeset_data[:translated_attrs] || {}
end

Public Instance Methods

execute() click to toggle source
# File lib/emque/producing/message/message_with_changeset.rb, line 52
def execute
  translate_attrs if translated_attrs.any?
  {:original => original, :updated => updated, :delta => delta}
end

Private Instance Methods

deep_copy(attr_set) click to toggle source
# File lib/emque/producing/message/message_with_changeset.rb, line 66
def deep_copy(attr_set)
  Oj.load(Oj.dump(attr_set, :mode => :object), :mode => :object)
end
delta() click to toggle source
# File lib/emque/producing/message/message_with_changeset.rb, line 86
def delta
  if original.empty?
    :_created
  elsif updated.empty?
    :_deleted
  else
    _delta = updated
      .reject { |attr, val| original[attr] == val }
      .map { |attr, val|
      [attr, {:original => original[attr], :updated => val}]
    }
    Hash[_delta]
  end
end
stringified_attrs() click to toggle source
# File lib/emque/producing/message/message_with_changeset.rb, line 80
def stringified_attrs
  {}.tap do |new_hash|
    translated_attrs.each_pair { |k,v| new_hash[k.to_s] = v.to_s }
  end
end
translate(attr_set) click to toggle source
# File lib/emque/producing/message/message_with_changeset.rb, line 70
def translate(attr_set)
  deep_copy(attr_set).tap do |cloned_attrs|
    stringified_attrs.each_pair do |old_name, new_name|
      if cloned_attrs.key?(old_name)
        cloned_attrs[new_name] = cloned_attrs.delete(old_name)
      end
    end
  end
end
translate_attrs() click to toggle source
# File lib/emque/producing/message/message_with_changeset.rb, line 61
def translate_attrs
  @original = translate(original)
  @updated = translate(updated)
end