Sha256: ede7d49a916165e438096adb4bdcbb9cedb9fedfb15ad011f4526a3a0b87afef

Contents?: true

Size: 774 Bytes

Versions: 2

Compression:

Stored size: 774 Bytes

Contents

module Datacaster
  class Caster < Base
    def initialize(name, &block)
      raise "Expected block" unless block_given?

      @name = name
      @cast = block
    end

    def cast(object)
      intermediary_result = super(object)
      object = intermediary_result.value

      result = @cast.(object)

      raise TypeError.new("Either Datacaster::Result or Dry::Monads::Result " \
        "should be returned from cast block") unless [Datacaster::Result, Dry::Monads::Result].any? { |k| result.is_a?(k) }

      if result.is_a?(Dry::Monads::Result)
        result = result.success? ? Datacaster.ValidResult(result.value!) : Datacaster.ErrorResult(result.failure)
      end

      result
    end

    def inspect
      "#<Datacaster::#{@name}Caster>"
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
datacaster-2.0.2 lib/datacaster/caster.rb
datacaster-2.0.1 lib/datacaster/caster.rb