Sha256: 1cf789d1aa2cd89090d6c93836cf9fd0d8c78e40d99d02a552cccd54c1f8b122

Contents?: true

Size: 864 Bytes

Versions: 3

Compression:

Stored size: 864 Bytes

Contents

require "yaml"

module Lignite
  class Connection
    # An adapter that delegates to another connection
    # and records the communication
    class Tap < Connection
      include Bytes

      def initialize(conn, filename)
        raise "File #{filename} exists, will not overwrite" if File.exist?(filename)
        @conn = conn
        @filename = filename
        @packets = []
      end

      # @param payload [ByteString]
      def send(payload)
        r = @conn.send(payload)
        @packets << { "SEND" => bin_to_hex(payload) }
        r
      end

      # @return [ByteString] a complete message
      def receive
        s = @conn.receive
        @packets << { "RECV" => bin_to_hex(s) }
        s
      end

      def close
        y = YAML.dump(@packets)
        File.write(@filename, y)
        super
        @conn.close
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
lignite-0.6.0 lib/lignite/connection/tap.rb
lignite-0.5.0 lib/lignite/connection/tap.rb
lignite-0.4.0 lib/lignite/connection/tap.rb