module Grumlin::Typing
Constants
- CASTABLE_TYPES
- TYPES
Public Class Methods
cast(value)
click to toggle source
# File lib/grumlin/typing.rb, line 22 def cast(value) verify_type!(value) return value unless value.is_a?(Hash) type = TYPES[value[:@type]] verify_castable_hash!(value, type) type.call(value[:@value]) end
Private Class Methods
cast_double(value)
click to toggle source
# File lib/grumlin/typing.rb, line 52 def cast_double(value) raise TypeError, "#{value} is not a Double" unless value.is_a?(Float) value end
cast_entity(entity, value)
click to toggle source
# File lib/grumlin/typing.rb, line 58 def cast_entity(entity, value) entity.new(**value) rescue ArgumentError, TypeError raise TypeError, "#{value} cannot be casted to #{entity.name}" end
cast_int(value)
click to toggle source
# File lib/grumlin/typing.rb, line 46 def cast_int(value) raise TypeError, "#{value} is not an Integer" unless value.is_a?(Integer) value end
cast_map(value)
click to toggle source
# File lib/grumlin/typing.rb, line 64 def cast_map(value) Hash[*value].transform_keys do |key| next key.to_sym if key.respond_to?(:to_sym) next cast(key) if key[:@type] raise UnknownMapKey, key, value end.transform_values { |v| cast(v) } rescue ArgumentError raise TypeError, "#{value} cannot be casted to Hash" end
verify_castable_hash!(value, type)
click to toggle source
# File lib/grumlin/typing.rb, line 40 def verify_castable_hash!(value, type) raise TypeError, "#{value} cannot be casted, @type is missing" if value[:@type].nil? raise(UnknownTypeError, value[:@type]) if type.nil? raise TypeError, "#{value} cannot be casted, @value is missing" if value[:@value].nil? end
verify_type!(value)
click to toggle source
# File lib/grumlin/typing.rb, line 36 def verify_type!(value) raise TypeError, "#{value.inspect} cannot be casted" unless CASTABLE_TYPES.include?(value.class) end