class Rasti::Types::MultiCaster

Attributes

errors[R]
type[R]
value[R]

Public Class Methods

cast!(type, value) { |multi_caster| ... } click to toggle source
# File lib/rasti/types/multi_caster.rb, line 5
def self.cast!(type, value)
  multi_caster = new type, value
  result = yield multi_caster
  multi_caster.raise_if_error!
  result
end
new(type, value) click to toggle source
# File lib/rasti/types/multi_caster.rb, line 12
def initialize(type, value)
  @type = type
  @value = value
  @errors = ::Hash.new { |h,k| h[k] = [] }
end

Public Instance Methods

cast(type:, value:, error_key:) click to toggle source
# File lib/rasti/types/multi_caster.rb, line 18
def cast(type:, value:, error_key:)
  type.cast value

rescue CompoundError => ex
  ex.errors.each do |inner_error_key, messages|
    errors["#{error_key}.#{inner_error_key}"] += messages
  end

rescue => ex
  errors[error_key] << ex.message
end
raise_if_error!() click to toggle source
# File lib/rasti/types/multi_caster.rb, line 30
def raise_if_error!
  raise MultiCastError.new(type, value, errors) unless errors.empty?
end