# File lib/hashery/core_ext.rb, line 58 def rekey(key_map=nil, &block) if !(key_map or block) block = lambda{|k| k.to_sym} end key_map ||= {} hash = {} (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 hash2 = {} if block case block.arity when 0 raise ArgumentError, "arity of 0 for #{block.inspect}" when 2 hash.each do |k,v| nk = block.call(k,v) hash2[nk] = v end else hash.each do |k,v| nk = block[k] hash2[nk] = v end end else hash2 = hash end hash2 end