Method: Mobj::HashEx#symvert

Defined in:
lib/ext/hash.rb

#symvert(key_converter = :itself, value_converter = key_converter) ⇒ Object



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