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
72
73
74
75
76
77
78
79
80
|
# File 'lib/shikashi/pick_argument.rb', line 39
def pick(*args)
klass = args.pick_by_class Class
hash_key = args.pick_by_class Symbol
ary = []
if klass
ary = self.select{|x| x.instance_of? klass}
if ary.size > 1
raise ArgumentError, "ambiguous parameters of class #{klass}"
end
else
ary = []
end
if hash_key
each do |x|
if x.instance_of? Hash
if x[hash_key]
ary << x[hash_key]
end
end
end
if ary.size > 1
raise ArgumentError, "ambiguous parameters of class #{klass} and key '#{hash_key}'"
end
end
if ary.size == 1
return ary.first
end
unless block_given?
raise ArgumentError, "missing mandatory argument '#{hash_key}' or of class #{klass}"
end
yield
end
|