1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
class Array
def method_missing_with_magic_map(method, *args, &block)
method_missing_without_magic_map(method, *args, &block)
rescue NoMethodError
error = $!
begin
re = /(map|collect|select|each|reject)_([\\w\\_]+\\??)/
if (match = method.to_s.match(re))
iterator, callmethod = match[1..2]
return self.send(iterator) {|item| item.send callmethod}
end
return self.map {|item| item.send method.to_s.singularize.to_sym}
rescue NoMethodError
nil
end
raise error
end
alias_method :method_missing_without_magic_map, :method_missing
alias_method :method_missing, :method_missing_with_magic_map
end
class String
def method_missing_with_singularize(method, *args, &block)
return self.gsub(/e?s\Z/,'') if method.to_s == "singularize"
method_missing_without_singularize(method, *args, &block)
end
alias_method :method_missing_without_singularize, :method_missing
alias_method :method_missing, :method_missing_with_singularize
end
|