class Monga::Connections::Buffer
Constants
- EMPTY
Attributes
buffer[R]
buffer_size[R]
Public Class Methods
new()
click to toggle source
# File lib/monga/connections/buffer.rb, line 8 def initialize @buffer = "" @position = 0 @buffer_size = 0 @response = [] end
Public Instance Methods
append(data)
click to toggle source
# File lib/monga/connections/buffer.rb, line 15 def append(data) @buffer << data @buffer_size += data.bytesize end
each() { |doc| ... }
click to toggle source
# File lib/monga/connections/buffer.rb, line 20 def each while doc = parse_buffer yield doc end end
parse_buffer()
click to toggle source
# File lib/monga/connections/buffer.rb, line 26 def parse_buffer return if @buffer_size == 0 if @position == 0 parse_doc if parse_meta else parse_doc end if @number_returned == 0 if @buffer_size == @position @buffer.clear @buffer_size = 0 else @buffer = @buffer[@position, @buffer_size-@position] @buffer_size -= @position end @position = 0 @response unless @response.empty? end end
parse_doc()
click to toggle source
# File lib/monga/connections/buffer.rb, line 66 def parse_doc if @number_returned == @response[7] @current_pos = @position @str_io = nil end while @number_returned > 0 break if @buffer_size - @position < 4 doc_length = ::BinUtils.get_int32_le(@buffer, @position) break if @buffer_size - @position < doc_length @number_returned -= 1 @position += doc_length end if @number_returned == 0 @str_io = StringIO.new @buffer[@current_pos..@position] @str_io.rewind @response[7].times do @response[-1] << BSON::Document.from_bson(@str_io) end end end
parse_meta()
click to toggle source
# File lib/monga/connections/buffer.rb, line 49 def parse_meta @response.clear return if @buffer_size < 36 @response << ::BinUtils.get_int32_le(@buffer, @position) @response << ::BinUtils.get_int32_le(@buffer, @position += 4) @response << ::BinUtils.get_int32_le(@buffer, @position += 4) @response << ::BinUtils.get_int32_le(@buffer, @position += 4) @response << ::BinUtils.get_int32_le(@buffer, @position += 4) @response << ::BinUtils.get_int64_le(@buffer, @position += 4) @response << ::BinUtils.get_int32_le(@buffer, @position += 8) @number_returned = ::BinUtils.get_int32_le(@buffer, @position += 4) @response << @number_returned @position += 4 @response << [] end