28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/ext/hash.rb', line 28
def symvert(key_converter = :itself, value_converter = key_converter)
each.with_object({}) do |(k, v), o|
key = if key_converter.p?
key_converter.call(k, v)
elsif k.respond_to?(key_converter.sym)
k.__send__(key_converter.sym)
else
k
end
value = if value_converter.p?
value_converter.arity == 1 ? value_converter.call(v) : value_converter.call(k, v)
elsif v.respond_to?(value_converter.sym)
v.__send__(value_converter.sym)
else
v
end
o[key] = value
end
end
|