123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- # 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
|