From 90c1a0faef5ad08629a13c876da931eec6a627a0 Mon Sep 17 00:00:00 2001 From: Thorsten Eckel Date: Fri, 1 Sep 2017 13:59:12 +0200 Subject: [PATCH] Refactoring: Improved folder structure for Mixins. --- .../unit/common/mixin/dynamic_attribute.rb | 36 +++++++++++++++++++ .../import/common/model/skip/blank/base.rb | 4 +-- .../model/skip/missing_mandatory/base.rb | 4 +-- lib/sequencer/unit/mixin/dynamic_attribute.rb | 34 ------------------ 4 files changed, 40 insertions(+), 38 deletions(-) create mode 100644 lib/sequencer/unit/common/mixin/dynamic_attribute.rb delete mode 100644 lib/sequencer/unit/mixin/dynamic_attribute.rb diff --git a/lib/sequencer/unit/common/mixin/dynamic_attribute.rb b/lib/sequencer/unit/common/mixin/dynamic_attribute.rb new file mode 100644 index 000000000..12e410d7c --- /dev/null +++ b/lib/sequencer/unit/common/mixin/dynamic_attribute.rb @@ -0,0 +1,36 @@ +class Sequencer + class Unit + module Common + module Mixin + module DynamicAttribute + + def self.included(base) + + class << base + + def inherited(base) + base.extend(Forwardable) + base.instance_delegate [:attribute] => base + end + + def attribute + @attribute ||= begin + if uses.size != 1 + raise "DynamicAttribute classes can use exactly one attribute. Found #{uses.size}." + end + uses.first + end + end + end + end + + private + + def attribute_value + @attribute_value ||= state.use(attribute) + 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 70a78da2b..6cc1b8eb7 100644 --- a/lib/sequencer/unit/import/common/model/skip/blank/base.rb +++ b/lib/sequencer/unit/import/common/model/skip/blank/base.rb @@ -1,4 +1,4 @@ -require 'sequencer/unit/mixin/dynamic_attribute' +require 'sequencer/unit/common/mixin/dynamic_attribute' class Sequencer class Unit @@ -9,7 +9,7 @@ class Sequencer module Blank class Base < Sequencer::Unit::Base prepend ::Sequencer::Unit::Import::Common::Model::Mixin::SkipOnProvidedInstanceAction - include ::Sequencer::Unit::Mixin::DynamicAttribute + include ::Sequencer::Unit::Common::Mixin::DynamicAttribute 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 14cf05759..40e360e65 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 @@ -1,4 +1,4 @@ -require 'sequencer/unit/mixin/dynamic_attribute' +require 'sequencer/unit/common/mixin/dynamic_attribute' class Sequencer class Unit @@ -9,7 +9,7 @@ class Sequencer module MissingMandatory class Base < Sequencer::Unit::Base prepend ::Sequencer::Unit::Import::Common::Model::Mixin::SkipOnProvidedInstanceAction - include ::Sequencer::Unit::Mixin::DynamicAttribute + include ::Sequencer::Unit::Common::Mixin::DynamicAttribute provides :instance_action diff --git a/lib/sequencer/unit/mixin/dynamic_attribute.rb b/lib/sequencer/unit/mixin/dynamic_attribute.rb deleted file mode 100644 index df7e1b707..000000000 --- a/lib/sequencer/unit/mixin/dynamic_attribute.rb +++ /dev/null @@ -1,34 +0,0 @@ -class Sequencer - class Unit - module Mixin - module DynamicAttribute - - def self.included(base) - - class << base - - def inherited(base) - base.extend(Forwardable) - base.instance_delegate [:attribute] => base - end - - def attribute - @attribute ||= begin - if uses.size != 1 - raise "DynamicAttribute classes can use exactly one attribute. Found #{uses.size}." - end - uses.first - end - end - end - end - - private - - def attribute_value - @attribute_value ||= state.use(attribute) - end - end - end - end -end