class Sequencer class Unit module Import module Common module Model class Update < Sequencer::Unit::Base include ::Sequencer::Unit::Import::Common::Model::Mixin::HandleFailure prepend ::Sequencer::Unit::Import::Common::Model::Mixin::Skip::Action skip_any_action uses :instance, :mapped provides :action def process # check if no instance is given - so we can't update it return if !instance # lock the current instance for write access instance.with_lock do # delete since we have an update and # the record is already created mapped.delete(:created_by_id) # assign regular attributes instance.assign_attributes(mapped) action = changed? ? :updated : :unchanged state.provide(:action, action) end rescue => e handle_failure(e) end private def changed? logger.debug { "Changed instance attributes: #{changes.inspect}" } changes.present? end def changes @changes ||= begin if instance.has_changes_to_save? # dry run instance.changes_to_save else # live run instance.previous_changes end end end end end end end end end