class Hash
def safe_invert
new_hash = {}
self.each do |k,v|
if v.is_a? Array
v.each { |x| new_hash.add_or_append(x, k) }
else
new_hash.add_or_append(v, k)
end
end
return new_hash
end
def add_or_append(key, value)
if has_key?(key)
self[key] = [value, self[key]].flatten
else
self[key] = value
end
end
end
phone_directory = { 'A' => '1',
'B' => '2',
'M' => '3' }
p phone_directory.safe_invert
p phone_directory.safe_invert.safe_invert