Sha256: 3791d4216cd55a3f923788ccf3a2193bdf709f51ce9c7d6cbac8c5a79e8c91a7

Contents?: true

Size: 677 Bytes

Versions: 3

Compression:

Stored size: 677 Bytes

Contents

require 'dry/types/decorator'

module Dry
  module Types
    class Safe
      include Dry::Equalizer(:type, :options)
      include Decorator
      include Builder

      def call(input)
        result = try(input)

        if result.respond_to?(:input)
          result.input
        else
          input
        end
      end
      alias_method :[], :call

      def try(input, &block)
        type.try(input, &block)
      rescue TypeError, ArgumentError => e
        result = failure(input, e.message)
        block ? yield(result) : result
      end

      private

      def decorate?(response)
        super || response.kind_of?(Constructor)
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
dry-types-0.9.2 lib/dry/types/safe.rb
dry-types-0.9.1 lib/dry/types/safe.rb
dry-types-0.9.0 lib/dry/types/safe.rb