Classe: Mongoid::Association::Referenced::HasMany::Enumerable

Herda:
Objeto
  • Objeto
mostrar tudo
Estendido por:
Encaminhável
Inclui:
Enumerável
Definido em:
lib/mongoid/association/referenced/has_many/enumerable.rb

Visão geral

Essa classe é o wrapper de todas as associações referenciadas que têm um destino que pode ser um critério ou uma array de documentos carregados. Isso lida com ambos os casos ou uma combinação dos dois.

Recolhimento do Resumo do atributo de instância

Recolhimento do Resumo do método de instância

Detalhes do construtor

#initialize(target, base = nil, association = nil) ⇒ Enumerable

Inicialize o novo enumerável com um critério ou uma array.

Exemplos:

Inicialize o enumerável com um critério.

Enumberable.new(Post.where(:person_id => id))

Inicialize o enumerável com uma array.

Enumerable.new([ post ])

Parâmetros:



262
263
264
265
266
267
268
269
270
271
272
273
274
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 262

def inicializar(Alvo, base = nada, associação = nada)
  @_base = base
  @_association = associação
  se Alvo.is_a?(critério)
    @_added, @executed, @_loaded, @_unloaded = {}, false, {}, Alvo
  mais
    @_added, @executed = {}, true
    @_loaded = Alvo.injetar({}) fazer |_target, doc|
      _target[doc._id] = doc se doc
      _target
    end
  end
end

Detalhes do atributo da instância

#_added ➤ Object

As três principais variáveis de instância são collections de documentos.



21
22
23
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 21

def _added
  @_added
end

#_added Documentos que foram anexados.(Documentosqueforamanexados.) ➤ Objeto

As três principais variáveis de instância são collections de documentos.



21
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 21

attr_accessor :_added, :_loaded, :_unloaded

#_loaded ➤ Object

As três principais variáveis de instância são collections de documentos.



21
22
23
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 21

def _loaded
  @_loaded
end

#_loaded Documentos persistentes que foram _loaded.(Documentos persistentes que foram carregados.) ➤ Objeto

As três principais variáveis de instância são collections de documentos.



21
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 21

attr_accessor :_added, :_loaded, :_unloaded

#_unloaded ➤ Object

As três principais variáveis de instância são collections de documentos.



21
22
23
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 21

def _unloaded
  @_unloaded
end

#_unloaded Um critério que representa Docs persistentes .(Os critérios estão representando documentos persistentes.) ➤ Objeto

As três principais variáveis de instância são collections de documentos.



21
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 21

attr_accessor :_added, :_loaded, :_unloaded

Detalhes do método de instância

#<<(documento) ➤ Documento Também conhecido como: push

Anexar um documento ao enumerável.

Exemplos:

Anexe o documento.

enumerable << document

Parâmetros:

  • documento (Documento)

    O documento a ser anexado.

Retorna:



60
61
62
63
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 60

def <<(documento)
  _added[documento._id] = documento
  auto
end

#==(outro) ➤ verdadeiro | false

Verifique se o enumerável é igual ao outro objeto.

Exemplos:

Verifique a igualdade.

enumerable == []

Parâmetros:

Retorna:

  • (verdadeiro | falso)

    Se os objetos forem iguais.



33
34
35
36
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 33

def ==(Outro)
  Método false a menos que Outro.respond_to?(:entries)
  entradas == Outro.entradas
end

#===(outro) ➤ verdadeiro | false

Verifique a igualdade do enumerável em relação ao objeto fornecido para declarações de caso .

Exemplos:

Verifique a igualdade de maiúsculas e minúsculas.

enumerable === Array

Parâmetros:

  • Outro (Objeto)

    O objeto a ser verificado.

Retorna:

  • (verdadeiro | falso)

    Se os objetos forem iguais em um caso .



47
48
49
50
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 47

def ===(Outro)
  Método false a menos que Outro.respond_to?(:entries)
  entradas === Outro.entradas
end

#_loaded?verdadeiro | false

O enumerável foi _loaded? Isso será verdade se os critérios tiverem sido executados ou carregarmos manualmente a coisa toda.

Exemplos:

O enumerável _loaded?

enumerable._loaded?

Retorna:

  • (verdadeiro | falso)

    Se o enumerável tiver sido _loaded.



353
354
355
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 353

def _loaded?
  !!@executed
end

#algum?(*args) ➤ verdadeiro | false

Retorna se a associação tem algum documento, opcionalmente sujeito aos filtros fornecidos.

Este método retorna verdadeiro se a associação tiver algum documento persistente e se tiver algum documento ainda não persistente.

Se a associação já estiver carregada, esse método inspecionará os documentos carregados e não executará query no banco de banco de dados. Se a associação não for carregada, a versão sem argumentos e sem blocos não carregará a associação; as outras versões (que delegam ao Enumerable) podem ou não carregar a associação completamente, dependendo se ela é iterada para conclusão.

Este método pode receber um parâmetro e um bloco. O comportamento com o parâmetro ou o bloco é delegado ao módulo Enumerable da biblioteca padrão.

Observe que quando Enumerable's any? método é invocado com um bloco e um padrão, ele usa apenas o padrão.

Parâmetros:

  • *args (Objeto...)

    A condição que os documentos devem satisfazer. Consulte a documentação do Enumerable para obter detalhes.

Retorna:

  • (verdadeiro | falso)

    Se a associação tiver algum documento.



225
226
227
228
229
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 225

def algum?(*Args)
  Método super se Args.algum? || block_given?

  !vazio?
end

#as_json(options = {}) ➤ Hash

Enviar #as_json para as entradas, sem codificação.

Exemplos:

Obtenha o enumerável como JSON.

enumerable.as_json

Parâmetros:

  • opções (Hash) (padrão para: {})

    Parâmetros opcionais.

Retorna:

  • (Hash)

    As entradas todas _loaded como um hash.



452
453
454
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 452

def as_json(opções = {})
  entradas.as_json(opções)
end

#clearArray<Document>

Limpa todos os documentos neste enumerável. Se for passado um bloco, ele produzirá cada documento que está na memória.

Exemplos:

Limpe o enumerável.

enumerable.clear

Limpe o enumerável com um bloco.

enumerable.clear do |doc|
  doc.unbind
end

Retorna:

  • (Array <Document>)

    Os _added Docs removidos .



79
80
81
82
83
84
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 79

def Limpar
  se block_given?
    in_memory { |doc| rendimento(doc) }
  end
  _loaded.Limpar e a _added.Limpar
end

#cloneArray<Document>

Observação:

Isso carrega todos os documentos na memória.

Clona cada documento no enumerável.

Exemplos:

Clone o enumerável.

enumerable.clone

Retorna:

  • (Array <Document>)

    Um clone de array do enumerável.



94
95
96
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 94

def clonar
  coletar { |doc| doc.clonar }
end

#delete(document) {|doc| ... } ⇒ Document

Exclua o documento fornecido do enumerável.

Exemplos:

Exclua o documento.

enumerable.delete(document)

Parâmetros:

  • documento (Documento)

    O documento a ser excluído.

Rendimento:

  • (doc)

Retorna:



106
107
108
109
110
111
112
113
114
115
116
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 106

def excluir(documento)
  doc = (_loaded.excluir(documento._id) || _added.excluir(documento._id))
  a menos que doc
    se _unloaded && _unloaded.ONDE(_id: documento._id).existe?
      rendimento(documento) se block_given?
      Método documento
    end
  end
  rendimento(doc) se block_given?
  doc
end

#delete_if(&block) ➤ Array<Document>

Observação:

Esta operação carrega todos os documentos do banco de banco de dados.

Exclui todos os documento no enumerável para onde o bloqueio retorna verdadeiro.

Exemplos:

Exclua todos os documentos correspondentes.

enumerable.delete_if do |doc|
  dod._id == _id
end

Retorna:

  • (Array <Document>)

    Os Docs restantes .



129
130
131
132
133
134
135
136
137
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 129

def delete_if(&noum: bloco ; verb: bloquear)
  load_all!
  Excluído = in_memory.selecione(&noum: bloco ; verb: bloquear)
  Excluído.cada fazer |doc|
    _loaded.excluir(doc._id)
    _added.excluir(doc._id)
  end
  auto
end

#cadaverdadeiro

A iteração sobre este enumerável tem que lidar com alguns cenários diferentes.

Se o enumerável tiver seus critérios _loaded na memória, ele produzirá todos os _loaded Docs e todos os _added Docs.

Se o enumerável não tiver _load os critérios, ele iterará sobre o cursor enquanto carrega os documentos e, em seguida, iterará sobre os _added Docs.

Se nenhum bloco for passado, ele retornará um enumerador contendo todos os Docs.

Exemplos:

Iterar sobre o enumerável.

enumerable.each do |doc|
  puts doc
end

retornar um enumerador contendo todos os Docs


a = enumerable.each

Retorna:

  • (verdadeiro)

    Que o enumerável agora está _loaded.



162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 162

def cada
  a menos que block_given?
    Método to_enum
  end
  se _loaded?
    _loaded.cada_pair fazer |id, doc|
      documento = _added.excluir(doc._id) || doc
      set_base(documento)
      rendimento(documento)
    end
  mais
    descarregado_documents.cada fazer |doc|
      documento = _added.excluir(doc._id) || _loaded.excluir(doc._id) || doc
      _loaded[documento._id] = documento
      set_base(documento)
      rendimento(documento)
    end
  end
  _added.cada_pair fazer |id, doc|
    rendimento(doc)
  end
  @executed = true
end

#vazio?verdadeiro | false

O enumerável está vazio? Determinará se a contagem é zero com base no fato de ser _loaded ou não.

Exemplos:

O enumerável está vazio?

enumerable.empty?

Retorna:

  • (verdadeiro | falso)

    Se o enumerável estiver vazio.



193
194
195
196
197
198
199
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 193

def vazio?
  se _loaded?
    in_memory.vazio?
  mais
    _added.vazio? && !_unloaded.existe?
  end
end

#first(limit = nil) ⇒ Document

Observação:

Adicionar automaticamente uma classificação no _id quando nenhuma outra classificação está definida nos critérios tem o potencial de causar problemas de desempenho ruins. Se você tiver um desempenho ruim inesperado ao usar #first ou #last, use #take em vez disso. Esteja ciente de que #take não garante o pedido.

Obtenha o primeiro documento no enumerável. Verificará primeiro os documentos persistentes. Não carrega o enumerável inteiro.

Exemplos:

Obtenha o primeiro documento.

enumerable.first

Parâmetros:

  • limit (Inteiro) (padrão para: nil)

    O número de documentos a retornar.

Retorna:

  • (Documento)

    O primeiro documento encontrado.



246
247
248
249
250
251
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 246

def primeiro(limit = nada)
  _loaded.tentar(:values).tentar(:first) ||
      _added[(ul = _unloaded.tentar(:first, limit)).tentar(:_id)] ||
      ul ||
      _added.values.tentar(:first)
end

#in_memory ➤ Array<Document>

Observação:

Quando passado um bloco , ele produz a cada documento.

Retornar todos os documentos no enumerável que foram carregados ou adicionados.

Exemplos:

Obtenha os Docs na memória .

enumerable.in_memory

Retorna:

  • (Array <Document>)

    Os Docs armazenados na memória .



309
310
311
312
313
314
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 309

def in_memory
  Docs = (_loaded.values + _added.values)
  Docs.cada fazer |doc|
    rendimento(doc) se block_given?
  end
end

#incluir?(doc) ➤ verdadeiro | false

O destino inclui o documento fornecido?

Exemplos:

O destino inclui o documento?

enumerable.include?(document)

Parâmetros:

  • doc (Documento)

    O documento a ser verificado.

Retorna:

  • (verdadeiro | falso)

    Se o documento estiver no destino.



284
285
286
287
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 284

def incluir?(doc)
  Método super a menos que _unloaded
  _unloaded.ONDE(_id: doc._id).existe? || _added.has_key?(doc._id)
end

#inspecionarstring

A inspeção apenas inspecionará as entradas quanto a uma boa impressão em estilo array.

Exemplos:

Inspecione o enumerável.

enumerable.inspect

Retorna:

  • (string)

    O enumeração inspecionado.



296
297
298
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 296

def inspecionar
  entradas.inspecionar
end

#last(limit = nil) ⇒ Document

Observação:

Adicionar automaticamente uma classificação no _id quando nenhuma outra classificação está definida nos critérios tem o potencial de causar problemas de desempenho ruins. Se você tiver um desempenho ruim inesperado ao usar #first ou #last, use #take em vez disso. Esteja ciente de que #take não garante o pedido.

Obtenha o último documento no enumerável. Verificará os novos documentos primeiro. Não carrega o enumerável inteiro.

Exemplos:

Obtenha o último documento.

enumerable.last

Parâmetros:

  • limit (Inteiro) (padrão para: nil)

    O número de documentos a retornar.

Retorna:

  • (Documento)

    O último documento encontrado.



331
332
333
334
335
336
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 331

def último(limit = nada)
  _added.values.tentar(:last) ||
      _loaded.tentar(:values).tentar(:last) ||
      _added[(ul = _unloaded.tentar(:last, limit)).tentar(:_id)] ||
      ul
end

#marshard_dump ➤ Array<Object>

Fornece os dados necessários para um proxy enumerável a partir de um proxy enumerável.

Exemplos:

Despeje o proxy.

Marshal.dump(proxy)

Retorna:

  • (Array<Object>)

    Os dados despejados.



363
364
365
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 363

def março_dump
  [_added, _loaded, _unloaded, @executed]
end

#março_load(data) ➤ Array<Object>

Carrega os dados necessários paraMarshard.load um proxy enumerável.

Exemplos:

Carregue o proxy.

Marshal.load(proxy)

Retorna:

  • (Array<Object>)

    Os dados despejados.



373
374
375
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 373

def março_load(de dados)
  @_added, @_loaded, @_unloaded, @executed = de dados
end

#resetfalse

Redefina o enumerável de volta ao seu estado persistente.

Exemplos:

Redefinir o enumerável.

enumerable.reset

Retorna:

  • (falso)

    Sempre falso.



383
384
385
386
387
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 383

def reiniciar
  _loaded.Limpar
  _added.Limpar
  @executed = false
end

#reinício_unloaded(critérios) ➤ Objeto

Redefine o objeto de critérios descarregado subjacente com um novo. Usei minhas associações HABTM para manter a array subjacente sincronizada.

Exemplos:

Redefinir os documentos descarregados.

enumerable.reset_unloaded(criteria)

Parâmetros:

  • critério (Critérios)

    Os critérios pelos quais substituir.



396
397
398
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 396

def reinício_unloaded(critério)
  @_unloaded = critério se _unloaded.is_a?(critério)
end

#respond_to?(nome, include_private = false) ➤ true | false

Este enumerável responde ao método fornecido?

Exemplos:

O enumerável responde ao método?

enumerable.respond_to?(:sum)

Parâmetros:

  • name (string | Símbolo)

    O nome do método.

  • include_private (verdadeiro | falso) (padrão para: false)

    Se incluir métodos privados.

Retorna:

  • (verdadeiro | falso)

    Se o enumerável responde.



410
411
412
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 410

def respond_to?(name, include_private = false)
  [].respond_to?(name, include_private) || super
end

#tamanhoInteiro Também conhecido como: comprimento

Obtém o tamanho total deste enumerável. Esta é uma combinação de todos os documentos persistentes e não persistentes.

Exemplos:

Obtenha o tamanho.

enumerable.size

Retorna:

  • (Inteiro)

    O tamanho do enumerável.



421
422
423
424
425
426
427
428
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 421

def Tamanho
  contar = (_unloaded ? _unloaded.contar : _loaded.contar)
  se contar.zero?
    contar + _added.contar
  mais
    contar + _added.values.contar { |d| d.new_record? }
  end
end

#to_json(opções = {}) ➤ string

Enviar #to_json para as entradas.

Exemplos:

Obtenha o enumerável como JSON.

enumerable.to_json

Parâmetros:

  • opções (Hash) (padrão para: {})

    Parâmetros opcionais.

Retorna:

  • (string)

    As entradas todas _loaded como uma string.



440
441
442
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 440

def to_json(opções = {})
  entradas.to_json(opções)
end

#uniqArray<Document>

Observação:

Esta operação carrega todos os documentos do banco de banco de dados.

Retornar todos os documentos exclusivos no enumerável.

Exemplos:

Obtenha todos os documentos exclusivos.

enumerable.uniq

Retorna:

  • (Array <Document>)

    Os documentos únicos.



464
465
466
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 464

def uniq
  entradas.uniq
end