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
|
# File 'lib/cli/dsl.rb', line 16
def cast(value)
begin
cast_to = @options[:cast] or return value
if cast_to.is_a? Module if cast_to == Integer
value.to_i
elsif cast_to == Float
value.to_f
elsif cast_to.respond_to? :new
cast_to.new(value)
elsif cast_to.respond_to? :load
cast_to.load(value)
else
raise ArgumentError, "can't cast to class or module #{cast_to.class.name}"
end
else
if cast_to.is_a? Proc
cast_to.call(value)
else
raise ArgumentError, "can't cast to instance of #{cast_to.class.name}"
end
end
rescue => e
raise ParsingError::CastError.new(@name, @options[:cast].name, e)
end
end
|