Module: Gemmy::Patches::HashPatch::InstanceMethods::Rekey
- Defined in:
- lib/gemmy/patches/hash_patch.rb
Instance Method Summary collapse
-
#rekey(key_map = nil, &block) ⇒ Object
facets rekey according to a block, i.e.
Instance Method Details
#rekey(key_map = nil, &block) ⇒ Object
facets rekey according to a block, i.e. 1.rekey &:to_s
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/gemmy/patches/hash_patch.rb', line 63 def rekey(key_map=nil, &block) raise ArgumentError, "argument or block" if key_map && block if !(key_map or block) block = lambda{|k| k.to_sym} end if block hash = dup.clear if block.arity.abs == 1 each_pair do |k, v| hash[block[k]] = v #hash[block[k] || k] = v end else each_pair do |k, v| hash[block[k,v]] = v #hash[block[k,v] || k] = v end end else #hash = dup.clear # to keep default_proc #(keys - key_map.keys).each do |key| # hash[key] = self[key] #end #key_map.each do |from, to| # hash[to] = self[from] if key?(from) #end hash = dup # to keep default_proc key_map.each_pair do |from, to| hash[to] = hash.delete(from) if hash.key?(from) end end hash end |