Sha256: c1d15ab1c51ab74c7d0e0df17b7c0927d6c55c46b04d68aba159c4341d4f37f2

Contents?: true

Size: 907 Bytes

Versions: 1

Compression:

Stored size: 907 Bytes

Contents

module DeadlySerious
  module Engine

    # Restrict IO class that opens ONLY
    # when trying to read something.
    #
    # Also, used to reopend lost connections.
    #
    # By "restrict", I mean it implements
    # just a few IO operations.
    class LazyIo
      def initialize(channel)
        @channel = channel
      end

      def gets
        open_reader
        @io.gets
      end

      def each(&block)
        open_reader
        @io.each &block
      end

      def <<(element)
        open_writer
        @io << element
      end

      def closed?
        @io.nil? || @io.closed?
      end

      def close
        @io.close
        @io = nil
      end

      private

      def open_reader
        if closed?
          @io = @channel.open_reader
        end
      end

      def open_writer
        if closed?
          @io = @channel.open_writer
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
deadly_serious-0.5.0 lib/deadly_serious/engine/lazy_io.rb