Sha256: 280ae21ff8beb20b261b548880f69d4e09cf6f5a4083fe58c0d6fe87aa213f62

Contents?: true

Size: 672 Bytes

Versions: 1

Compression:

Stored size: 672 Bytes

Contents

module Rupture
  module Map
    def map?
      true
    end

    def assoc(*kvs)
      into(kvs.seq.partition(2))
    end

    def into(other)
      other.seq.reduce(as_map) do |map, (k,v)|
        map.put(k,v)
      end
    end

    def update(key, fn = nil, *args, &block)
      if fn
        assoc(key, fn.call(self[key], *args, &block))
      else
        assoc(key, yield(self[key]))
      end
    end

    def update_each(keys, *args, &block)
      map = as_map
      keys.each do |key|
        update(key, *args, &block)
      end
      map
    end

    def destruct(*keys)
      vals = keys.seq.map(self)
      block_given? ? yield(*vals) : vals
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rupture-0.2.0 lib/rupture/map.rb