class Monga::Request
Constants
- FLAGS
- OP_CODES
Attributes
connection[R]
request_id[R]
Public Class Methods
new(connection, db_name, collection_name, options = {})
click to toggle source
# File lib/monga/request.rb, line 18 def initialize(connection, db_name, collection_name, options = {}) @connection = connection @db_name = db_name @collection_name = collection_name @options = options check_flags @request_id = self.class.request_id end
Private Class Methods
op_name(op = nil)
click to toggle source
# File lib/monga/request.rb, line 110 def self.op_name(op = nil) op ? @op_name = op : @op_name end
request_id()
click to toggle source
# File lib/monga/request.rb, line 103 def self.request_id @@request_id ||= 0 @@request_id += 1 @@request_id >= 2**32 ? @@request_id = 1 : @@request_id @@request_id end
Public Instance Methods
callback_perform() { |err, resp| ... }
click to toggle source
Fire and wait
# File lib/monga/request.rb, line 43 def callback_perform @connection.send_command(command, @request_id) do |data| err, resp = parse_response(data) if block_given? yield(err, resp) else err ? raise(err) : resp end end end
command()
click to toggle source
# File lib/monga/request.rb, line 28 def command header + body end
header()
click to toggle source
# File lib/monga/request.rb, line 32 def header ::BinUtils.append_int32_le!(nil, command_length, @request_id, 0, op_code) end
parse_response(data)
click to toggle source
# File lib/monga/request.rb, line 54 def parse_response(data) if Exception === data [data, nil] else flags = data[4] docs = data.last if flags & 2**0 > 0 Monga::Exceptions::CursorNotFound.new(docs.first) elsif flags & 2**1 > 0 Monga::Exceptions::QueryFailure.new(docs.first) elsif docs.first && (docs.first["err"] || docs.first["errmsg"]) Monga::Exceptions::QueryFailure.new(docs.first) else [nil, data] end end end
perform()
click to toggle source
Fire and Forget
# File lib/monga/request.rb, line 37 def perform @connection.send_command(command, @request_id) self end
Private Instance Methods
check_flags()
click to toggle source
Ouch!
# File lib/monga/request.rb, line 75 def check_flags return unless @options[:query] self.class::FLAGS.each do |k, byte| v = @options[:query].delete(k) @options[k] = v if v end end
command_length()
click to toggle source
# File lib/monga/request.rb, line 99 def command_length Monga::HEADER_SIZE + body.size end
flags()
click to toggle source
# File lib/monga/request.rb, line 83 def flags flags = 0 self.class::FLAGS.each do |k, byte| flags = flags | 1 << byte if @options[k] end flags end
full_name()
click to toggle source
# File lib/monga/request.rb, line 91 def full_name [@db_name, @collection_name] * "." end
op_code()
click to toggle source
# File lib/monga/request.rb, line 95 def op_code OP_CODES[self.class.op_name] end