class Datacaster::Caster

Public Class Methods

new(name, &block) click to toggle source
# File lib/datacaster/caster.rb, line 3
def initialize(name, &block)
  raise "Expected block" unless block_given?

  @name = name
  @cast = block
end

Public Instance Methods

call(object) click to toggle source
Calls superclass method Datacaster::Base#call
# File lib/datacaster/caster.rb, line 10
def call(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
inspect() click to toggle source
# File lib/datacaster/caster.rb, line 26
def inspect
  "#<Datacaster::#{@name}Caster>"
end