Classe: Mongoid::Association::Referenced::HasMany::Enumerable
- Herda:
-
Objeto
- Objeto
- Mongoid::Association::Referenced::HasMany::Enumerable
- 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
-
#_added ➤ Object
As três principais variáveis de instância são collections de documentos.
-
#_added Documentos que foram anexados.(Documentosqueforamanexados.) ➤ Objeto
As três principais variáveis de instância são collections de documentos.
-
#_loaded ➤ Object
As três principais variáveis de instância são collections de documentos.
-
#_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.
-
#_unloaded ➤ Object
As três principais variáveis de instância são collections de documentos.
-
#_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.
Recolhimento do Resumo do método de instância
-
#<<(documento) ➤ Document (também: #push)
Anexar um documento ao enumerável.
-
#==(outro) ➤ verdadeiro | false
Verifique se o enumerável é igual ao outro objeto.
-
#===(outro) ➤ verdadeiro | false
Verifique a igualdade do enumerável em relação ao objeto fornecido para declarações de caso .
-
#_loaded? ➤ verdadeiro | false
O enumerável foi _loaded? Isso será verdade se os critérios tiverem sido executados ou carregarmos manualmente a coisa toda.
-
#algum?(*args) ➤ verdadeiro | false
Retorna se a associação tem algum documento, opcionalmente sujeito aos filtros fornecidos.
-
#as_json(options = {}) ➤ Hash
Enviar #as_json para as entradas, sem codificação.
-
#clear ➤ Array<Document>
Limpa todos os documentos neste enumerável.
-
#clone ➤ Array<Document>
Clona cada documento no enumerável.
-
#delete(document) {|doc| ... } ⇒ Document
Exclua o documento fornecido do enumerável.
-
#delete_if(&block) ➤ Array<Document>
Exclui todos os documento no enumerável para onde o bloqueio retorna verdadeiro.
-
#cada ➤ verdadeiro
A iteração sobre este enumerável tem que lidar com alguns cenários diferentes.
-
#vazio? ➤ verdadeiro | false
O enumerável está vazio? Determinará se a contagem é zero com base no fato de ser _loaded ou não.
-
#first(limit = nil) ⇒ Document
Obtenha o primeiro documento no enumerável.
-
#in_memory ➤ Array<Document>
Retornar todos os documentos no enumerável que foram carregados ou adicionados.
-
#incluir?(doc) ➤ verdadeiro | false
O destino inclui o documento fornecido?
-
#inicializar(destino, base = nil, associação = nil) ➤ Enumerável
construtor
Inicialize o novo enumerável com um critério ou uma array.
-
#inspecionar ➤ string
A inspeção apenas inspecionará as entradas quanto a uma boa impressão em estilo array.
-
#last(limit = nil) ⇒ Document
Obtenha o último documento no enumerável.
-
#marshard_dump ➤ Array<Object>
Fornece os dados necessários para um proxy enumerável a partir de um proxy enumerável.
-
#março_load(data) ➤ Array<Object>
Carrega os dados necessários paraMarshard.load um proxy enumerável.
-
#reset ⇒ false
Redefina o enumerável de volta ao seu estado persistente.
-
#reinício_unloaded(critérios) ➤ Objeto
Redefine o objeto de critérios descarregado subjacente com um novo.
-
#respond_to?(nome, include_private = false) ➤ true | false
Este enumerável responde ao método fornecido?
-
#tamanho ➤ Inteiro (também: #comprimento)
Obtém o tamanho total deste enumerável.
-
#to_json(opções = {}) ➤ string
Enviar #to_json para as entradas.
-
#uniq ➤ Array<Document>
Retornar todos os documentos exclusivos no enumerável.
Detalhes do construtor
#initialize(target, base = nil, association = nil) ⇒ Enumerable
Inicialize o novo enumerável com um critério ou uma array.
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.
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.
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 .
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.
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.
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.
452 453 454 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 452 def as_json( = {}) entradas.as_json() end |
#clear ➤ Array<Document>
Limpa todos os documentos neste enumerável. Se for passado um bloco, ele produzirá cada documento que está na memória.
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 |
#clone ➤ Array<Document>
Isso carrega todos os documentos na memória.
Clona cada documento no 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.
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>
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.
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 |
#cada ➤ verdadeiro
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.
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.
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
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.
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>
Quando passado um bloco , ele produz a cada documento.
Retornar todos os documentos no enumerável que foram carregados ou adicionados.
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?
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 |
#inspecionar ➤ string
A inspeção apenas inspecionará as entradas quanto a uma boa impressão em estilo array.
296 297 298 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 296 def inspecionar entradas.inspecionar end |
#last(limit = nil) ⇒ Document
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.
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.
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.
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 |
#reset ⇒ false
Redefina o enumerável de volta ao seu estado persistente.
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.
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?
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 |
#tamanho ➤ Inteiro 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.
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.
440 441 442 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 440 def to_json( = {}) entradas.to_json() end |
#uniq ⇒ Array<Document>
Esta operação carrega todos os documentos do banco de banco de dados.
Retornar todos os documentos exclusivos no enumerável.
464 465 466 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 464 def uniq entradas.uniq end |