8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/class_kit/value_helper.rb', line 8
def parse(type:, value:)
if type == Time
if value.is_a?(Time)
value
elsif value.is_a?(Integer) || value.is_a?(Float) || value.is_a?(BigDecimal)
Time.at(value)
else
Time.parse(value)
end
elsif type == Date
if value.is_a?(Date)
value
elsif value.is_a?(Integer)
Date.at(value)
else
Date.parse(value)
end
elsif type == DateTime
if value.is_a?(DateTime)
value
elsif value.is_a?(Integer)
DateTime.at(value)
else
DateTime.parse(value)
end
elsif type == :bool
if value == true || value == false
value
elsif(/(true|t|yes|y|1)$/i === value.to_s.downcase)
true
elsif (/(false|f|no|n|0)$/i === value.to_s.downcase)
false
elsif value != nil
raise 'Unable to parse bool'
end
elsif type == Integer
Integer(value)
elsif type == Float
Float(value)
elsif type == BigDecimal
if value.is_a?(BigDecimal)
value
else
value = value.to_s
raise 'Unable to parse BigDecimal' unless value =~ /\A-?\d+(\.\d*)?/
BigDecimal(value)
end
elsif type == String
String(value)
elsif type == Regexp
Regexp.new(value)
elsif type == Hash
raise 'Unable to parse Hash' unless value.is_a?(Hash)
value
elsif type == Array
raise 'Unable to parse Array' unless value.is_a?(Array)
value
else
raise 'Unable to parse'
end
rescue => e
raise ClassKit::Exceptions::InvalidParseValueError,
"Unable to parse value: #{value} into type: #{type}. Error: #{e}"
end
|