module Mongo::WriteConcern

Base module for all write concern specific behaviour.

@since 2.0.0

Constants

DEFAULT

The default write concern is to acknowledge on a single server.

@since 2.0.0

FSYNC

The file sync write concern.

@since 2.0.0

GET_LAST_ERROR

The GLE command name.

@since 2.0.0

J

The journal write concern.

@since 2.0.0

W

The number of servers write concern.

@since 2.0.0

WTIMEOUT

The wtimeout write concern.

@since 2.0.0

Public Instance Methods

get(options) click to toggle source

Get a write concern mode for the provided options.

@example Get a write concern mode.

Mongo::WriteConcern.get(: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.

@return [ Unacknowledged, Acknowledged ] The appropriate concern.

@raise [ Error::InvalidWriteConcern ] If the write concern is invalid.

@since 2.0.0

# File lib/mongo/write_concern.rb, line 78
def get(options)
  return options if options.is_a?(Unacknowledged) || options.is_a?(Acknowledged)
  if options
    validate!(options)
    if unacknowledged?(options)
      Unacknowledged.new(options)
    else
      Acknowledged.new(options)
    end
  end
end

Private Instance Methods

unacknowledged?(options) click to toggle source

Determine if the options are for an unacknowledged write concern.

@api private

@param [ Hash ] options The options to check.

@return [ true, false ] If the options are unacknowledged.

@since 2.0.0

# File lib/mongo/write_concern.rb, line 111
def unacknowledged?(options)
  options[W] == 0
end
validate!(options) click to toggle source
# File lib/mongo/write_concern.rb, line 92
def validate!(options)
  if options[W]
    if options[W] == 0 && (options[J] || options[FSYNC])
      raise Mongo::Error::InvalidWriteConcern.new
    elsif options[W].is_a?(Integer) && options[W] < 0
      raise Mongo::Error::InvalidWriteConcern.new
    end
  end
end