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