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
|
# File 'lib/safe_nested_calls.rb', line 18
def safe_nested_method(*params)
p = params
if params.respond_to?(:size) && params.size == 1 && params[0].is_a?(Hash)
p = params[0]
end
if p.empty?
return self
end
if p.is_a? Array
name = p.shift
if name.class != Symbol
raise ArgumentError, 'Parameters must be symbols'
end
if self.respond_to?(name)
self.send(name).safe_nested_method(*p)
else
return nil
end
elsif p.is_a? Hash
name, args = p.shift
if name.class != Symbol
raise ArgumentError, 'Parameters must be symbols'
end
if self.respond_to?(name)
if args == :none
self.send(name).safe_nested_method(*[p])
else
self.send(name, *args).safe_nested_method(*p)
end
else
return nil
end
end
end
|