lib/core/facets/enumerable/mash.rb in facets-2.9.3 vs lib/core/facets/enumerable/mash.rb in facets-3.0.0
- old
+ new
@@ -1,33 +1,66 @@
-require 'facets/enumerable/graph'
+module Enumerable
+
+ # Like `#map`/`#collect`, but generates a Hash. The block is expected
+ # to return two values: the key and the value for the new hash.
+ #
+ # numbers = (1..3)
+ # squares = numbers.mash{ |n| [n, n*n] } # { 1=>1, 2=>4, 3=>9 }
+ # sq_roots = numbers.mash{ |n| [n*n, n] } # { 1=>1, 4=>2, 9=>3 }
+ #
+ # CREDIT: Andrew Dudzik (adudzik), Trans
+
+ def mash(&yld)
+ if yld
+ h = {}
+ each do |*kv|
+ r = yld[*kv]
+ case r
+ when Hash
+ nk, nv = *r.to_a[0]
+ when Range
+ nk, nv = r.first, r.last
+ else
+ nk, nv = *r
+ end
+ h[nk] = nv
+ end
+ h
+ else
+ Enumerator.new(self,:graph)
+ end
+ end
+
+end
+