Sha256: 853fbdd7bd70bfbeea956b43c633f80a759e5ae34b6b37c7ffefa5122ed3e34e

Contents?: true

Size: 1.61 KB

Versions: 2

Compression:

Stored size: 1.61 KB

Contents

# frozen_string_literal: true

module Dry
  module Effects
    module Errors
      module Error
      end

      class UnhandledEffectError < RuntimeError
        include Error

        attr_reader :effect

        def initialize(effect, message = Undefined)
          @effect = effect

          super(
            Undefined.default(message) {
              "Effect #{effect.inspect} not handled. "\
              'Effects must be wrapped with corresponding handlers'
            }
          )
        end
      end

      class MissingStateError < UnhandledEffectError
        def initialize(effect)
          message = "Value of +#{effect.scope}+ is not set, "\
                    'you need to provide value with an effect handler'

          super(effect, message)
        end
      end

      class UndefinedStateError < RuntimeError
        include Error

        def initialize(effect)
          message = "+#{effect.scope}+ is not defined, you need to assign it first "\
                    'by using a writer, passing initial value to the handler, or '\
                    'providing a fallback value'

          super(message)
        end
      end

      class EffectRejectedError < RuntimeError
        include Error
      end

      class ResolutionError < RuntimeError
        include Error

        def initialize(key)
          super("Key +#{key.inspect}+ cannot be resolved")
        end
      end

      class InvalidValueError < ArgumentError
        include Error

        def initialize(value, scope)
          super("#{value.inspect} is invalid and cannot be assigned to #{scope}")
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dry-effects-0.1.0.alpha2 lib/dry/effects/errors.rb
dry-effects-0.1.0.alpha lib/dry/effects/errors.rb