class Definition::Types::Type

Attributes

coerce[RW]
klass[RW]
test[RW]

Public Class Methods

new(name, klass, &coerce) click to toggle source
Calls superclass method Definition::Types::Base::new
# File lib/definition/types/type.rb, line 8
def initialize(name, klass, &coerce)
  raise "#{klass.inspect} is not a class" unless klass.is_a?(Class)

  self.klass = klass
  self.coerce = coerce
  super(name, context: { class: klass })
end

Public Instance Methods

conform(value) click to toggle source
# File lib/definition/types/type.rb, line 16
def conform(value)
  value = coerce.call(value) if coerce && !valid?(value)

  try_conform(value)
end

Private Instance Methods

try_conform(value) click to toggle source
# File lib/definition/types/type.rb, line 28
def try_conform(value)
  if valid?(value)
    ConformResult.new(value)
  else
    ConformResult.new(value, errors: [
                        ConformError.new(self, "Is of type #{value.class.name} instead of #{klass.name}")
                      ])
  end
end
valid?(value) click to toggle source
# File lib/definition/types/type.rb, line 24
def valid?(value)
  value.is_a?(klass)
end