class Mongo::WriteConcern::Base

Defines common behavior for write concerns.

@since 2.7.0

Attributes

options[R]

@return [ Hash ] The write concern options.

Public Class Methods

new(options) click to toggle source

Instantiate a new write concern given the options.

@api private

@example Instantiate a new write concern mode.

Mongo::WriteConcern::Acknowledged.new(:w => 1)

@param [ Hash ] options The options to instantiate with.

@option options :w [ Integer, String ] The number of servers or the

custom mode to acknowledge.

@option options :j [ true, false ] Whether to acknowledge a write to

the journal.

@option options :fsync [ true, false ] Should the write be synced to

disc.

@option options :wtimeout [ Integer ] The number of milliseconds to

wait for acknowledgement before raising an error.

@since 2.0.0

# File lib/mongo/write_concern/base.rb, line 45
def initialize(options)
  options = Options::Mapper.transform_keys_to_symbols(options)
  options = Options::Mapper.transform_values_to_strings(options).freeze

  if options[:w]
    if options[:w] == 0 && options[:j]
      raise Error::InvalidWriteConcern, "Invalid write concern options: :j cannot be true when :w is 0: #{options.inspect}"
    elsif options[:w] == 0 && options[:fsync]
      raise Error::InvalidWriteConcern, "Invalid write concern options: :fsync cannot be true when :w is 0: #{options.inspect}"
    elsif options[:w].is_a?(Integer) && options[:w] < 0
      raise Error::InvalidWriteConcern, "Invalid write concern options: :w cannot be negative (#{options[:w]}): #{options.inspect}"
    end
  end

  if options[:journal]
    raise Error::InvalidWriteConcern, "Invalid write concern options: use :j for journal: #{options.inspect}"
  end

  @options = options
end