Módulo: Mongo::Id Private

Incluído em:
Monitoramento, Protocol::Message, Server::Connection
Definido em:
build/ruby-driver-v2.19/lib/mongo/id.rb

Visão geral

Este módulo faz parte de uma API privada. Você deve evitar usar este módulo, se possível, pois ele pode ser removido ou alterado no futuro.

Este módulo abstrai a funcionalidade para gerar IDs inteiros únicos sequenciais para instâncias da classe. Define o método #next_id na classe que o inclui. A implementação garante que os IDs sejam exclusivos mesmo quando chamados de vários threads.

As classes que incluem ID não devem acessar '@@id' ou `@@id_lock' diretamente; em vez disso, eles devem chamar `#next_id' em `#initialize' e salvar o resultado na instância que está sendo criada.

Exemplos:

Inclua o módulo ID .

class Foo
  include Mongo::Id
end

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

Salve o ID na instância da classe de inclusão .

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

Recolhimento do Resumo do método de classe

Detalhes do método de classe

.include(klass) ➤ Objeto

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Desde:

  • 2.7.0



56
57
58
59
60
61
62
63
64
65
66
67
# File 'build/ruby-driver-v2.19/lib/mongo/id.rb', linha 56

def auto.incluído(classe)
  classe.class_variable_set(:@@id, 0)
  classe.class_variable_set(:@@id_lock, Mutex.Novo)

  classe.define_singleton_method(:next_id) fazer
    classe.class_variable_get(:@@id_lock).sincronizar fazer
      id = class_variable_get(:@@id)
      classe.class_variable_set(:@@id, id + 1)
      classe.class_variable_get(:@@id)
    end
  end
end