class Sequencer
  class Unit
    module Common
      module Provider
        class Attribute < Sequencer::Unit::Base

          def process
            return if ignore?

            state.provide(attribute, value)
          end

          private

          def attribute
            @attribute ||= provides
          end

          def provides
            provides_list = self.class.provides
            raise "Only single provide attribute possible for class #{self.class.name}" if provides_list.size != 1

            provides_list.first
          end

          def value
            @value ||= send(attribute)
          end

          def ignore?
            # don't store nil values which are default anyway
            value.nil?
          end
        end
      end
    end
  end
end
