module Mongo::Operation::ReadPreference

Adds behaviour for updating the options and the selector for operations that need to take read preference into account.

@since 2.0.0

Constants

SLAVE_OK

The constant for slave ok flags.

@since 2.0.6

Private Instance Methods

message(server) click to toggle source
# File lib/mongo/operation/read_preference.rb, line 55
def message(server)
  if server.features.op_msg_enabled?
    command_op_msg(server, selector, options)
  else
    sel = update_selector_for_read_pref(selector, server)
    opts = update_options_for_slave_ok(options, server)
    Protocol::Query.new(db_name, query_coll, sel, opts)
  end
end
slave_ok?(server) click to toggle source
# File lib/mongo/operation/read_preference.rb, line 41
def slave_ok?(server)
  (server.cluster.single? && !server.mongos?) || (read && read.slave_ok?)
end
update_options_for_slave_ok(opts, server) click to toggle source
# File lib/mongo/operation/read_preference.rb, line 45
def update_options_for_slave_ok(opts, server)
  if slave_ok?(server)
    opts.dup.tap do |o|
      (o[:flags] ||= []) << SLAVE_OK
    end
  else
    opts
  end
end
update_selector_for_read_pref(sel, server) click to toggle source
# File lib/mongo/operation/read_preference.rb, line 32
def update_selector_for_read_pref(sel, server)
  if read && server.mongos? && read_pref = read.to_mongos
    sel = sel[:$query] ? sel : { :$query => sel }
    sel.merge(:$readPreference => read_pref)
  else
    sel
  end
end