Sha256: 1feb1db1d5ff8c2a6a6795291b666af5cb938a480429a2d1b75f7f72f9e3d92c

Contents?: true

Size: 1.76 KB

Versions: 2

Compression:

Stored size: 1.76 KB

Contents

module Grizzly
  class Collection < Array
    include Grizzly::Enumerable

    %i[
      each collect! map! sort_by! * pop shift drop_while take_while bsearch_index
      bsearch combination delete_if each_index keep_if find_index index permutation
      repeated_combination repeated_permutation reverse_each rindex max min
    ].each do |method_name|
      define_method(method_name) do |*args, &block|
        subgroup super(*args, &block)
      end
    end

    %i[
      values_at rotate compact reverse intersection & | + union - difference
      flatten drop take
    ].each do |method_name|
      define_method(method_name) do |*args|
        new_collection super(*args)
      end
    end

    def transpose(*args)
      result = super
      if self.all? { |collection| collection.is_a?(self.class) }
        result = result.map { |collection| new_collection(collection) }
      end
      new_collection(result)
    end

    def product(*args)
      result = super
      return result if is_self?(result)
      return result unless result.is_a?(Array)

      result.map {|product| new_collection(product)}
    end

    def last(*args)
      result = super
      return result if args == []

      subgroup(result)
    end

    def slice(*args)
      result = super
      return result if args.count == 1 && args.first.is_a?(Integer)

      subgroup(result)
    end

    def slice!(*args)
      result = super
      return result if args.count == 1 && args.first.is_a?(Integer)

      subgroup(result)
    end

    def [](*args)
      result = super
      return result if args.count == 1 && args.first.is_a?(Integer)

      subgroup(result)
    end

    def sample(*args, **karg)
      subgroup(super)
    end

    def shuffle(*args, **kargs)
      new_collection(super)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
grizzly-rb-1.1.0 lib/grizzly/collection.rb
grizzly-rb-1.0.0 lib/grizzly/collection.rb