Sha256: a1c27b75115cb145c9012eaf6243091c500fed8b234f67b290f29b8efa2a777c

Contents?: true

Size: 1.31 KB

Versions: 1

Compression:

Stored size: 1.31 KB

Contents

module DirtyPipeline
  class Transition
    def Failure(error)
      railway.switch_to(:undo)
      throw :fail_transition, error
    end

    def Success(changes = nil)
      case railway.active
      when "call"
        railway.switch_to(:finalize) if respond_to?(:finalize)
      when "finalize"
        railway.switch_to(:call)
      end
      throw :success, changes.to_h
    end
    def self.finalize(*args, **kwargs)
      event, pipeline, *args = args
      instance = new(event, pipeline.railway, *args, **kwargs)
      return unless instance.respond_to?(:finalize)
      instance.finalize(pipeline.subject)
    end

    def self.undo(*args, **kwargs)
      event, pipeline, *args = args
      instance = new(event, pipeline.railway, *args, **kwargs)
      return unless instance.respond_to?(:undo)
      instance.undo(pipeline.subject)
    end

    def self.call(*args, **kwargs)
      event, pipeline, *args = args
      instance = new(event, pipeline.railway, *args, **kwargs)
      pipeline.railway[:undo] << event
      pipeline.railway[:finalize] << event
      instance.call(pipeline.subject)
    end

    attr_reader :event, :railway
    def initialize(event, railway, *, **)
      @event = event
      @railway = railway
    end

    def cache(key)
      event.cache.fetch(key) { event.cache[key] = yield }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dirty_pipeline-0.6.3 lib/dirty_pipeline/transition.rb