Sha256: c32aef4951a7f83bb8b0a2fb55640490a593fb2f66ef9711d02c5864c680953e

Contents?: true

Size: 1.33 KB

Versions: 6

Compression:

Stored size: 1.33 KB

Contents

module DeadlySerious
  module Engine

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

      def filename
        return @channel.io_name if @channel.respond_to?(:io_name)
      end

      def gets
        open_reader
        @io.gets
      end

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

      def each_cons(qty, &block)
        open_reader
        @io.each_cons(qty, &block)
      end

      def each_with_object(object, &block)
        open_reader
        @io.each_with_object(object, &block)
      end

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

      def eof?
        open_reader
        @io.eof?
      end

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

      def close
        @io.close unless closed?
        @io = nil
      end

      def flush
        @io.flush unless closed?
      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

6 entries across 6 versions & 1 rubygems

Version Path
deadly_serious-0.11.0 lib/deadly_serious/engine/lazy_io.rb
deadly_serious-0.10.0 lib/deadly_serious/engine/lazy_io.rb
deadly_serious-0.9.5 lib/deadly_serious/engine/lazy_io.rb
deadly_serious-0.9.4 lib/deadly_serious/engine/lazy_io.rb
deadly_serious-0.9.3 lib/deadly_serious/engine/lazy_io.rb
deadly_serious-0.9.2 lib/deadly_serious/engine/lazy_io.rb