class Reasonable::Value::Coercer

Public Class Methods

call(types, value) click to toggle source
# File lib/reasonable/value.rb, line 89
def call(types, value)
  coerced = Array(types).reduce(nil) do |memo, type|
    memo || built_in(type, value) || custom(type, value)
  end

  coerced.nil? and raise(TypeError) or coerced
end

Private Class Methods

built_in(type, value) click to toggle source
# File lib/reasonable/value.rb, line 99
def built_in(type, value)
  return unless Kernel.respond_to?(type.to_s)

  Kernel.public_send(type.to_s, value)
rescue ArgumentError, TypeError
  nil
end
custom(type, value) click to toggle source
# File lib/reasonable/value.rb, line 107
def custom(type, value)
  return value if value.is_a?(type)

  Try.(MethodName.(type), value) || reasonable(type, value)
end
reasonable(type, value) click to toggle source
# File lib/reasonable/value.rb, line 113
def reasonable(type, value)
  return unless type.ancestors.include?(Reasonable::Value)
  return unless value.is_a?(Hash)

  type.new(value)
end