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
|
# File 'lib/data_model/builtin/time.rb', line 14
def read(val, coerce: false)
args = Arguments.new(type_args)
err = Error.new
if val.nil? && args.optional
return [val, err]
end
if val.nil?
err.add(missing_error(Time))
return [val, err]
end
if val.is_a?(String) && coerce
begin
val = Time.parse(val)
rescue ArgumentError
err.add(type_error(Time, val))
return [val, err]
end
end
if !val.is_a?(Time)
err.add(type_error(Time, val))
return [val, err]
end
if args.earliest && (val < T.must(args.earliest))
error = earliest_error(T.must(args.earliest), val)
err.add(error)
end
if args.latest && (val > T.must(args.latest))
error = latest_error(T.must(args.latest), val)
err.add(error)
end
return [val, err]
end
|