Sha256: 08a64fb0a8b37ca99629643c2ed1b19bc3ee131e7b1b2c7fef05324b361db015

Contents?: true

Size: 746 Bytes

Versions: 2

Compression:

Stored size: 746 Bytes

Contents

# frozen_string_literal: true

require 'ostruct'

module BusinessPipeline
  class Context < OpenStruct
    def self.build(context = {})
      context.is_a?(self) ? context : new(context)
    end

    def initialize(*)
      super
      @failure = false
    end

    def fail
      @failure = true
    end

    def fail!(additional_context = {})
      update!(additional_context)
      self.fail
      throw :early_stop, self
    end

    def failure?
      !!@failure
    end

    def succeed!(additional_context = {})
      update!(additional_context)
      throw :early_stop, self
    end

    def success?
      !failure?
    end

    private def update!(context)
      context.each { |key, value| self[key.to_sym] = value }
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
business_pipeline-0.3.1 lib/business_pipeline/context.rb
business_pipeline-0.3.0 lib/business_pipeline/context.rb