class Hash

Public Class Methods

hmap(obj, &block) click to toggle source

map an Enumerable into a Hash, like Hash[obj.map … ]

# File lib/hmap/hmap.rb, line 16
def hmap(obj, &block)
  Hash[
    obj.map do |*args|
      block.call(*args)
    end.compact
  ]
end
map(obj, &block) click to toggle source

create Hash from given keys and mapped values

# File lib/hmap/hmap.rb, line 6
def map(obj, &block)
  res = obj.map do |*args|
    block.call(*args)
  end

  Hash[obj.zip res]
end

Public Instance Methods

hmap(&block) click to toggle source

map the block's results back to a hash

# File lib/hmap/hmap.rb, line 28
def hmap(&block)
  clone.hmap!(&block)
end
hmap!(&block) click to toggle source
# File lib/hmap/hmap.rb, line 32
def hmap!(&block)
  data = Hash.hmap(self, &block)
  clear
  merge! data
end
kmap(&block) click to toggle source

map keys, but preserve associated values ie. apidock.com/rails/v4.2.7/Hash/transform_keys

# File lib/hmap/hmap.rb, line 41
def kmap(&block)
  clone.kmap!(&block)
end
kmap!(&block) click to toggle source
# File lib/hmap/hmap.rb, line 45
def kmap!(&block)
  hmap! do |k, v|
    [ block.arity <= 1 ? block.call(k) : block.call(k, v), v ]
  end
end
vmap(&block) click to toggle source

map values, but preserve associated keys ie. apidock.com/rails/v4.2.7/Hash/transform_values

# File lib/hmap/hmap.rb, line 54
def vmap(&block)
  clone.vmap!(&block)
end
vmap!(&block) click to toggle source
# File lib/hmap/hmap.rb, line 58
def vmap!(&block)
  each do |k, v|
    self[k] = block.arity <= 1 ? block.call(v) : block.call(k, v)
  end
end