trabajo-afectivo/lib/sequencer/unit/import/common/model/update.rb
2022-01-01 14:38:12 +01:00

60 lines
1.7 KiB
Ruby

# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
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