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)
  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 110
def unacknowledged?(options)
  options[W] == 0
end
validate!(options) click to toggle source
# File lib/mongo/write_concern.rb, line 91
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