Sha256: 1dd04b34996ab68cf0868aebf920637ba6993437b0dee392ff98899e5dc61098

Contents?: true

Size: 753 Bytes

Versions: 1

Compression:

Stored size: 753 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| modifiable?[key.to_sym] = value }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
business_pipeline-0.2.0 lib/business_pipeline/context.rb