Módulo: Mongo::Id Private

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

Overview

Este módulo forma parte de una API privada. Debe evitar su uso siempre que sea posible, ya que podría eliminarse o modificarse en el futuro.

Este módulo abstrae la funcionalidad para generar identificadores enteros únicos y secuenciales para las instancias de la clase. Define el método #next_id en la clase que lo incluye. La implementación garantiza que los identificadores sean únicos incluso al ser llamados desde varios subprocesos.

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

Ejemplos:

Incluir el módulo Id.

class Foo
  include Mongo::Id
end

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

Guarde el ID en la instancia de la clase incluidora.

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

Colapso delresumen del método de clase

Detalles del método de clase

.incluido(clase) ⇒ Objeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Desde:

  • 2.7.0



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

def yo.incluido(klass)
  klass.conjunto_de_variables_de_clase(:@@identificación, 0)
  klass.conjunto_de_variables_de_clase(:@@id_lock, Mutex.Nuevo)

  klass.definir_método_singleton(:siguiente_id) hacer
    klass.obtención de variable de clase(:@@id_lock).sincronizar hacer
      ID. = obtención de variable de clase(:@@identificación)
      klass.conjunto_de_variables_de_clase(:@@identificación, ID. + 1)
      klass.obtención de variable de clase(:@@identificación)
    end
  end
end