Sha256: 00daf06a0aea6e35add89ac653c5de9f547edd22af1a3352a2fc46cb87a581fd

Contents?: true

Size: 1.48 KB

Versions: 5

Compression:

Stored size: 1.48 KB

Contents

class Card
  before_validation :validation_phase, if: -> { validation_phase_callback? }
  around_save :storage_phase
  after_commit :integration_phase, if: -> { integration_phase_callback? }

  class Director
    # Validation, Storage, and Integration phase handling
    module Phases
      def validation_phase_callback?
        !@only_storage_phase && head?
      end

      def integration_phase_callback?
        !@only_storage_phase && main?
      end

      def prepare_for_phases
        @card.prepare_for_phases unless running?
        @running = true
        @subdirectors.each(&:prepare_for_phases)
      end

      def validation_phase
        run_stage :initialize
        run_stage :prepare_to_validate
        run_stage :validate
      ensure
        # @card.expire_pieces if @card.errors.any?
        @card.errors.empty?
      end

      # Unlike other phases, the storage phase takes a block,
      # because it is called by an "around" callback
      def storage_phase &block
        catch_up_to_stage :prepare_to_store
        run_stage :store, &block
        run_stage :finalize
        raise ActiveRecord::RecordInvalid, @card if @card.errors.any?
      ensure
        @from_trash = nil
      end

      def integration_phase
        return if @abort

        @card.restore_changes_information
        run_stage :integrate
        run_stage :after_integrate
        run_stage :integrate_with_delay
      ensure
        @card.clear_changes_information unless @abort
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
card-1.101.3 lib/card/director/phases.rb
card-1.101.2 lib/card/director/phases.rb
card-1.101.1 lib/card/director/phases.rb
card-1.101.0 lib/card/director/phases.rb
card-1.100.0 lib/card/director/phases.rb