Sha256: 09ac0a1ae3614d149a540c14cafd8a1faf389ce98fd353a9c5b792c2b621924c

Contents?: true

Size: 1.4 KB

Versions: 2

Compression:

Stored size: 1.4 KB

Contents

module ExpectedBehavior
  module ActsAsArchival
    module AssociationOperation
      class Base

        attr_reader :model, :head_archive_number

        def initialize(model, head_archive_number)
          @model = model
          @head_archive_number = head_archive_number
        end

        def execute
          each_archivable_association do |association|
            act_on_association(association) if association_conditions_met? association
          end
        end

        protected

        def each_archivable_association
          model.class.reflect_on_all_associations.each do |association|
            yield(association) if archivable_association?(association)
          end
        end

        def archivable_association?(association)
          association.macro.to_s =~ /^has/ &&
            association.klass.archival? &&
            association.options[:through].nil?
        end

        def association_conditions_met?(_association)
          true
        end

        def act_on_association(association)
          key = association.respond_to?(:foreign_key) ? association.foreign_key : association.primary_key_name
          scope = association.klass.where(key => model.id)
          act_on_archivals(scope)
        end

        def act_on_archivals(_scope)
          raise NotImplementedError.new("The #{self.class} hasn't implemented 'act_on_archivals(scope)'")
        end

      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
acts_as_archival-1.3.0 lib/expected_behavior/association_operation/base.rb
acts_as_archival-1.2.0 lib/expected_behavior/association_operation/base.rb