Sha256: 975dec8d1fa39ee1426b7b917c3b7dc7d5f249d676ed7ce8b75ae06bec9a7d45

Contents?: true

Size: 1.08 KB

Versions: 1

Compression:

Stored size: 1.08 KB

Contents

# frozen_string_literal: true

module Darthjee
  module CoreExt
    module Array
      autoload :HashBuilder, 'darthjee/core_ext/array/hash_builder'

      def mapk(*keys)
        keys.inject(self) do |enum, key|
          enum.map { |hash| hash[key] }
        end
      end

      def procedural_join(mapper = proc(&:to_s))
        return '' if empty?
        list = dup
        prev = first
        list[0] = mapper.call(prev).to_s

        list.inject do |string, val|
          j = yield(prev, val) if block_given?
          "#{string}#{j}#{mapper.call(val)}".tap do
            prev = val
          end
        end
      end

      def chain_map(*methods, &block)
        result = methods.inject(self) do |array, method|
          array.map(&method)
        end

        return result unless block_given?
        result.map(&block)
      end

      def as_hash(keys)
        Array::HashBuilder.new(self, keys).build
      end

      def random
        self[rand(size)]
      end

      def random!
        slice!(rand(size))
      end
    end
  end
end

class Array
  include Darthjee::CoreExt::Array
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
darthjee-core_ext-1.7.0 lib/darthjee/core_ext/array.rb