module Mongoid::Persistable::Logical

Defines behavior for logical bitwise operations.

@since 4.0.0

Public Instance Methods

bit(operations) click to toggle source

Performs an atomic $bit operation on the field with the provided hash of bitwise ops to execute in order.

@example Execute the bitwise operations.

person.bit(age: { :and => 12 }, val: { and: 10, or: 12 })

@param [ Hash ] operations The bitwise operations.

@return [ Document ] The document.

@since 4.0.0

# File lib/mongoid/persistable/logical.rb, line 24
def bit(operations)
  prepare_atomic_operation do |ops|
    process_atomic_operations(operations) do |field, values|
      value = attributes[field]
      values.each do |op, val|
        value = value & val if op.to_s == "and"
        value = value | val if op.to_s == "or"
      end
      process_attribute field, value if executing_atomically?
      attributes[field] = value
      ops[atomic_attribute_name(field)] = values
    end
    { "$bit" => ops } unless ops.empty?
  end
end