Module: Mongoid::Persistable::Incrementable

Extended by:
ActiveSupport::Concern
Included in:
Mongoid::Persistable
Defined in:
lib/mongoid/persistable/incrementable.rb

Overview

Defines behavior for $inc operations.

Instance Method Summary collapse

Instance Method Details

#inc(increments) ⇒ Document

Increment the provided fields by the corresponding values. Values can be positive or negative, and if no value exists for the field it will be set with the provided value.

Examples:

Increment the fields.

document.inc(score: 10, place: 1, lives: -10)

Parameters:

  • increments (Hash)

    The field/inc increment pairs.

Returns:



21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/mongoid/persistable/incrementable.rb', line 21

def inc(increments)
  prepare_atomic_operation do |ops|
    process_atomic_operations(increments) do |field, value|
      increment = value.is_a?(BigDecimal) ? value.to_f : value
      current = attributes[field]
      new_value = (current || 0) + increment
      process_attribute field, new_value if executing_atomically?
      attributes[field] = new_value
      ops[atomic_attribute_name(field)] = increment
    end
    { "$inc" => ops } unless ops.empty?
  end
end