Módulo: Mongo::Id Privado

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 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 su lugar, deben llamar 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 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 sí mismo.incluido(klass)
  klass.conjunto_de_variables_de_clase(:@@id, 0)
  klass.conjunto_de_variables_de_clase(:@@id_lock, Mutex (exclusión mutua).Nuevo)

  klass.definir_método_singleton(siguiente_id) hacer
    klass.class_variable_get(:@@id_lock).sincronizar hacer
      ID = class_variable_get(:@@id)
      klass.conjunto_de_variables_de_clase(:@@id, ID + 1)
      klass.class_variable_get(:@@id)
    end
  end
end