Módulo: Mongo::Id Privado

Incluido en:
supervisión, Protocolo::Mensaje, Servidor::Conexión
Definido en:
lib/mongo/id.rb

Overview

Este módulo es parte de una API privada. Deberías evitar usar este módulo si es posible, ya que puede ser removido o cambiado en el futuro.

Este módulo abstrae la funcionalidad para generar IDs enteros únicos secuenciales para instancias de la clase. Define el método #next_id en la clase que lo incluye. La implementación garantiza que los ID serán únicos incluso cuando se llamen desde varios hilos.

Las clases que incluyen Id no deben acceder directamente a @@id o @@id_lock; en cambio, deben invocar a #next_id en #initialize y guardar el resultado en la instancia que se está creando.

Ejemplos:

Incluya el módulo Id.

class Foo
  include Mongo::Id
end

f = Foo.new
foo.next_id # => 1
foo.next_id # => 2

Guarde la ID en la instancia de la clase que la incluye.

class Bar
  include Mongo::Id

  attr_reader :id

  def initialize
    @id = self.class.next_id
  end
end

a = Bar.new
a.id # => 1
b = Bar.new
b.id # => 2

Desde:

  • 2.7.0

Resumen del método de clase colapsar

Detalles del método de clase

.incluido(klass) ⇒ objeto

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Desde:

  • 2.7.0



55
56
57
58
59
60
61
62
63
64
65
66
# Archivo 'lib/mongo/id.rb', línea 55

def sí mismo.incluido(klass)
  klass.class_variable_set(:@@id, 0)
  klass.class_variable_set(bloquear, Mutex (exclusión mutua).Nuevo)

  klass.define_singleton_method(siguiente_id) hacer
    klass.class_variable_get(bloquear).sincronizar hacer
      ID = class_variable_get(:@@id)
      klass.class_variable_set(:@@id, ID + 1)
      klass.class_variable_get(:@@id)
    end
  end
end