diff --git a/lib/sequencer/unit/import/common/model/attributes/add_by_ids.rb b/lib/sequencer/unit/import/common/model/attributes/add_by_ids.rb index 23ab42192..ca17e9353 100644 --- a/lib/sequencer/unit/import/common/model/attributes/add_by_ids.rb +++ b/lib/sequencer/unit/import/common/model/attributes/add_by_ids.rb @@ -6,6 +6,9 @@ class Sequencer module Attributes class AddByIds < Sequencer::Unit::Base include ::Sequencer::Unit::Import::Common::Mapping::Mixin::ProvideMapped + prepend ::Sequencer::Unit::Import::Common::Model::Mixin::Skip::InstanceAction + + skip_any_instance_action def process provide_mapped do diff --git a/lib/sequencer/unit/import/common/model/attributes/check_mandatory.rb b/lib/sequencer/unit/import/common/model/attributes/check_mandatory.rb index dbb1ba529..dbdb4b3ad 100644 --- a/lib/sequencer/unit/import/common/model/attributes/check_mandatory.rb +++ b/lib/sequencer/unit/import/common/model/attributes/check_mandatory.rb @@ -5,7 +5,9 @@ class Sequencer module Model module Attributes class CheckMandatory < Sequencer::Unit::Base - prepend ::Sequencer::Unit::Import::Common::Model::Mixin::SkipOnProvidedInstanceAction + prepend ::Sequencer::Unit::Import::Common::Model::Mixin::Skip::InstanceAction + + skip_any_instance_action uses :mapped provides :instance_action diff --git a/lib/sequencer/unit/import/common/model/create.rb b/lib/sequencer/unit/import/common/model/create.rb index 8aab65fb5..069eb0646 100644 --- a/lib/sequencer/unit/import/common/model/create.rb +++ b/lib/sequencer/unit/import/common/model/create.rb @@ -5,7 +5,9 @@ class Sequencer module Model class Create < Sequencer::Unit::Base include ::Sequencer::Unit::Import::Common::Model::Mixin::HandleFailure - prepend ::Sequencer::Unit::Import::Common::Model::Mixin::SkipOnProvidedInstanceAction + prepend ::Sequencer::Unit::Import::Common::Model::Mixin::Skip::InstanceAction + + skip_any_instance_action uses :mapped, :model_class provides :instance, :instance_action diff --git a/lib/sequencer/unit/import/common/model/mixin/skip/instance_action.rb b/lib/sequencer/unit/import/common/model/mixin/skip/instance_action.rb new file mode 100644 index 000000000..1999f91d4 --- /dev/null +++ b/lib/sequencer/unit/import/common/model/mixin/skip/instance_action.rb @@ -0,0 +1,55 @@ +class Sequencer + class Unit + module Import + module Common + module Model + module Mixin + module Skip + module InstanceAction + + module ClassMethods + + def skip_instance_action(*instance_actions) + declaration_accessor( + key: __method__, + attributes: instance_actions + ) + end + alias skip_instance_actions skip_instance_action + + def skip_any_instance_action + skip_instance_actions(:any) + end + + def skip_instance_action?(instance_action) + logger.debug("Checking if skip is necessary for instance_action #{instance_action.inspect}.") + return false if instance_action.blank? + logger.debug("Checking if skip is necessary for skip_instance_actions #{skip_instance_actions.inspect}.") + return false if skip_instance_actions.blank? + return true if skip_instance_actions.include?(instance_action) + return true if skip_instance_actions.include?(:any) + false + end + end + + def self.prepended(base) + base.extend(ClassMethods) + end + + def process + instance_action = state.optional(:instance_action) + if self.class.skip_instance_action?(instance_action) + logger.debug("Skipping due to provided instance_action #{instance_action.inspect}.") + else + logger.debug("Nope. Won't skip instance_action #{instance_action.inspect}.") + super + end + end + end + end + end + end + end + end + end +end diff --git a/lib/sequencer/unit/import/common/model/mixin/skip_on_provided_instance_action.rb b/lib/sequencer/unit/import/common/model/mixin/skip_on_provided_instance_action.rb deleted file mode 100644 index 2e9964d69..000000000 --- a/lib/sequencer/unit/import/common/model/mixin/skip_on_provided_instance_action.rb +++ /dev/null @@ -1,22 +0,0 @@ -class Sequencer - class Unit - module Import - module Common - module Model - module Mixin - module SkipOnProvidedInstanceAction - - def process - if state.provided?(:instance_action) - logger.debug("Skipping. Attribute 'instance_action' already provided.") - else - super - end - end - end - end - end - end - end - end -end diff --git a/lib/sequencer/unit/import/common/model/mixin/skip_on_skipped_instance.rb b/lib/sequencer/unit/import/common/model/mixin/skip_on_skipped_instance.rb deleted file mode 100644 index 8d849c2e9..000000000 --- a/lib/sequencer/unit/import/common/model/mixin/skip_on_skipped_instance.rb +++ /dev/null @@ -1,26 +0,0 @@ -class Sequencer - class Unit - module Import - module Common - module Model - module Mixin - module SkipOnSkippedInstance - - def self.prepended(base) - base.uses :instance_action - end - - def process - if instance_action == :skipped - logger.debug("Skipping. Attribute 'instance_action' is set to :skipped.") - else - super - end - end - end - end - end - end - end - end -end diff --git a/lib/sequencer/unit/import/common/model/skip/blank/base.rb b/lib/sequencer/unit/import/common/model/skip/blank/base.rb index 6cc1b8eb7..7e0b72f0f 100644 --- a/lib/sequencer/unit/import/common/model/skip/blank/base.rb +++ b/lib/sequencer/unit/import/common/model/skip/blank/base.rb @@ -8,8 +8,10 @@ class Sequencer module Skip module Blank class Base < Sequencer::Unit::Base - prepend ::Sequencer::Unit::Import::Common::Model::Mixin::SkipOnProvidedInstanceAction include ::Sequencer::Unit::Common::Mixin::DynamicAttribute + prepend ::Sequencer::Unit::Import::Common::Model::Mixin::Skip::InstanceAction + + skip_any_instance_action provides :instance_action diff --git a/lib/sequencer/unit/import/common/model/skip/missing_mandatory/base.rb b/lib/sequencer/unit/import/common/model/skip/missing_mandatory/base.rb index 40e360e65..688ac568f 100644 --- a/lib/sequencer/unit/import/common/model/skip/missing_mandatory/base.rb +++ b/lib/sequencer/unit/import/common/model/skip/missing_mandatory/base.rb @@ -8,8 +8,10 @@ class Sequencer module Skip module MissingMandatory class Base < Sequencer::Unit::Base - prepend ::Sequencer::Unit::Import::Common::Model::Mixin::SkipOnProvidedInstanceAction include ::Sequencer::Unit::Common::Mixin::DynamicAttribute + prepend ::Sequencer::Unit::Import::Common::Model::Mixin::Skip::InstanceAction + + skip_any_instance_action provides :instance_action diff --git a/lib/sequencer/unit/import/common/model/update.rb b/lib/sequencer/unit/import/common/model/update.rb index 1a110a9ef..934547b20 100644 --- a/lib/sequencer/unit/import/common/model/update.rb +++ b/lib/sequencer/unit/import/common/model/update.rb @@ -5,7 +5,9 @@ class Sequencer module Model class Update < Sequencer::Unit::Base include ::Sequencer::Unit::Import::Common::Model::Mixin::HandleFailure - prepend ::Sequencer::Unit::Import::Common::Model::Mixin::SkipOnProvidedInstanceAction + prepend ::Sequencer::Unit::Import::Common::Model::Mixin::Skip::InstanceAction + + skip_any_instance_action uses :instance, :mapped provides :instance_action diff --git a/lib/sequencer/unit/import/common/user/attributes/downcase.rb b/lib/sequencer/unit/import/common/user/attributes/downcase.rb index eb0a6499c..948b67261 100644 --- a/lib/sequencer/unit/import/common/user/attributes/downcase.rb +++ b/lib/sequencer/unit/import/common/user/attributes/downcase.rb @@ -5,7 +5,9 @@ class Sequencer module User module Attributes class Downcase < Sequencer::Unit::Base - prepend ::Sequencer::Unit::Import::Common::Model::Mixin::SkipOnSkippedInstance + prepend ::Sequencer::Unit::Import::Common::Model::Mixin::Skip::InstanceAction + + skip_instance_action :skipped uses :mapped diff --git a/lib/sequencer/unit/import/common/user/email/check_validity.rb b/lib/sequencer/unit/import/common/user/email/check_validity.rb index 28f035d4f..c080b5858 100644 --- a/lib/sequencer/unit/import/common/user/email/check_validity.rb +++ b/lib/sequencer/unit/import/common/user/email/check_validity.rb @@ -5,7 +5,9 @@ class Sequencer module User module Email class CheckValidity < Sequencer::Unit::Base - prepend ::Sequencer::Unit::Import::Common::Model::Mixin::SkipOnSkippedInstance + prepend ::Sequencer::Unit::Import::Common::Model::Mixin::Skip::InstanceAction + + skip_instance_action :skipped uses :mapped