module OnebusawaySDK::Internal::Util

def fused_enum(enum, external: false, &close)

Returns:
  • (Enumerable) -
    Parameters:
    • close (Proc) --
    • external (Boolean) --
    • enum (Enumerable) --
      Other tags:
        Api: - private
      def fused_enum(enum, external: false, &close)
        fused = false
        iter = Enumerator.new do |y|
          next if fused
          fused = true
          if external
            loop { y << enum.next }
          else
            enum.each(&y)
          end
        ensure
          close&.call
          close = nil
        end
        iter.define_singleton_method(:rewind) do
          fused = true
          self
        end
        iter
      end