Sha256: ba5e39a13ec16f19774fbe2bb4862c304d29b70c82e1749a7eb121097c70b972

Contents?: true

Size: 1.55 KB

Versions: 13

Compression:

Stored size: 1.55 KB

Contents

module Protobuf
  module Rpc
    class Buffer

      attr_accessor :mode, :data, :size

      MODES = [:read, :write]

      # constantize this so we don't re-initialize the regex every time we need it
      SIZE_REGEX = /^\d+-/

      def initialize(mode = :read)
        @flush = false
        @data = ""
        @size = 0
        self.mode = mode
      end

      def mode=(mode)
        if MODES.include?(mode)
          @mode = mode
        else
          @mode = :read
        end
      end

      def write(force_mode = true)
        if force_mode && reading?
          self.mode = :write
        elsif !force_mode && reading?
          fail 'You chose to write the buffer when in read mode'
        end

        @size = @data.length
        "#{@size}-#{@data}"
      end

      def <<(data)
        @data << data
        if reading?
          get_data_size
          check_for_flush
        end
      end

      def set_data(data) # rubocop:disable Style/AccessorMethodName
        @data = data.to_s
        @size = @data.size
      end

      def reading?
        mode == :read
      end

      def writing?
        mode == :write
      end

      def flushed?
        @flush
      end

      def get_data_size # rubocop:disable Style/AccessorMethodName
        if @size == 0 || @data.match(SIZE_REGEX)
          sliced_size = @data.slice!(SIZE_REGEX)
          @size = sliced_size.delete('-').to_i unless sliced_size.nil?
        end
      end

      private

      def check_for_flush
        @flush = true if !@size.nil? && @data.length == @size
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
protobuf-3.6.12 lib/protobuf/rpc/buffer.rb
protobuf-3.6.11 lib/protobuf/rpc/buffer.rb
protobuf-3.6.10 lib/protobuf/rpc/buffer.rb
protobuf-3.7.0.pre2 lib/protobuf/rpc/buffer.rb
protobuf-3.6.9 lib/protobuf/rpc/buffer.rb
protobuf-3.7.0.pre1 lib/protobuf/rpc/buffer.rb
protobuf-3.7.0.pre0 lib/protobuf/rpc/buffer.rb
protobuf-3.6.7 lib/protobuf/rpc/buffer.rb
protobuf-3.6.6 lib/protobuf/rpc/buffer.rb
protobuf-3.6.2 lib/protobuf/rpc/buffer.rb
protobuf-3.6.1 lib/protobuf/rpc/buffer.rb
protobuf-3.6.0 lib/protobuf/rpc/buffer.rb
protobuf-3.5.5 lib/protobuf/rpc/buffer.rb