module ValidateMyRoutes::Validate::ConvertToType
ConvertToType
module provides single method convert_to_type
to convert value into type to_type. Conversion can fail with InvalidTypeError.
Constants
- BOOLEAN_TYPES
- Boolean
- COMPOSITE_TYPES
- SIMPLE_TYPES
Public Class Methods
convert_to_type(value, to_type)
click to toggle source
# File lib/validate_my_routes/validate/convert_to_type.rb, line 14 def convert_to_type(value, to_type) return value if already_of_type?(value, to_type) if SIMPLE_TYPES.include?(to_type) parse_simple_type(value, to_type) elsif COMPOSITE_TYPES.include?(to_type) parse_composite_type(value, to_type) elsif BOOLEAN_TYPES.include?(to_type) parse_boolean(value) else raise_unknown_type(to_type) end rescue ArgumentError raise_with_invalid_type(value, to_type) end
Private Class Methods
already_of_type?(value, typ)
click to toggle source
# File lib/validate_my_routes/validate/convert_to_type.rb, line 32 def already_of_type?(value, typ) (typ.is_a?(Class) || typ.is_a?(Module)) && value.is_a?(typ) end
parse_boolean(value)
click to toggle source
# File lib/validate_my_routes/validate/convert_to_type.rb, line 58 def parse_boolean(value) if value.to_s.casecmp('false').zero? false elsif value.to_s.casecmp('true').zero? true else raise_with_invalid_type(value, Boolean) end end
parse_composite_type(value, to_type)
click to toggle source
# File lib/validate_my_routes/validate/convert_to_type.rb, line 48 def parse_composite_type(value, to_type) if to_type == Array value.split(',') elsif to_type == Hash Hash[value.split(',').map { |item| item.split(':') }] else raise_unknown_type(to_type) end end
parse_simple_type(value, to_type)
click to toggle source
# File lib/validate_my_routes/validate/convert_to_type.rb, line 36 def parse_simple_type(value, to_type) if to_type == Integer Integer(value) elsif [Float, String].include?(to_type) Kernel.send(to_type.to_s.to_sym, value) elsif to_type.respond_to? :parse to_type.parse(value) else raise_unknown_type(to_type) end end
raise_unknown_type(type)
click to toggle source
# File lib/validate_my_routes/validate/convert_to_type.rb, line 73 def raise_unknown_type(type) raise ValidateMyRoutes::Errors::InvalidTypeError, "don't know how to convert type '#{type}'" end
raise_with_invalid_type(value, type)
click to toggle source
# File lib/validate_my_routes/validate/convert_to_type.rb, line 68 def raise_with_invalid_type(value, type) raise ValidateMyRoutes::Errors::InvalidTypeError, "'#{value}' is not a valid '#{type}'" end