Sha256: acfa9a4efe7f618e815f4b37cbe4a17764e21b0706cc4af3bdae2770f61ea36c

Contents?: true

Size: 1001 Bytes

Versions: 8

Compression:

Stored size: 1001 Bytes

Contents

unless Enumerable.method_defined? :chain
  module Enumerable
    def chain(*enums)
      Enumerator::Chain.new(self, *enums)
    end
  end

  Enumerator = Enumerable::Enumerator unless Object.const_defined? :Enumerator # For 1.8.x

  class Enumerator::Chain < Enumerator
    def initialize(*enums)
      @enums = enums
      @rewindable = -1
      self
    end

    def each(*args, &block)
      @enums.each_with_index do |enum, i|
        @rewindable = i
        enum.each(*args, &block)
      end
    end

    def size
      sum = 0
      @enums.each do |enum|
        s = enum.size
        return s if s == nil || s == Float::INFINITY
        sum += s
      end
      sum
    end

    def inspect
      detail = @enums.map(&:inspect).join(', ')
      "#<Enumerator::Chain: [#{detail}]>"
    end

    def rewind
      @rewindable.downto(0) do |i|
        enum = @enums[i]
        enum.rewind if enum.respond_to? :rewind
      end
      self
    end
  end unless Enumerator.const_defined? :Chain
end

Version data entries

8 entries across 8 versions & 3 rubygems

Version Path
files.com-1.0.55 docs/vendor/bundle/ruby/2.5.0/gems/backports-3.12.0/lib/backports/2.6.0/enumerable/chain.rb
backports-3.16.1 lib/backports/2.6.0/enumerable/chain.rb
backports-3.16.0 lib/backports/2.6.0/enumerable/chain.rb
honeybadger-4.5.3 vendor/bundle/ruby/2.6.0/gems/backports-3.15.0/lib/backports/2.6.0/enumerable/chain.rb
backports-3.15.0 lib/backports/2.6.0/enumerable/chain.rb
backports-3.14.0 lib/backports/2.6.0/enumerable/chain.rb
backports-3.13.0 lib/backports/2.6.0/enumerable/chain.rb
backports-3.12.0 lib/backports/2.6.0/enumerable/chain.rb