Classe: Mongoid::Association::Referenced::HasMany::Enumerable
- Herda:
-
Objeto
- Objeto
- Mongoid::Association::Referenced::HasMany::Enumerable
- Estendido por:
- Encaminhável
- Inclui:
- Enumerável, Aplicá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.
-
#avg(campo) ➤ float | nada
Obtenha a média do campo fornecido para todos os document no enumerável.
-
#clear(&block) ⇒ 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.
-
#max(field = nil) ⇒ Numeric | nil
Obtenha o valor máximo do campo fornecido para todos os documentos no enumerável.
-
#min(field = nil) ⇒ Numeric | nil
Obtenha o valor mínimo do campo fornecido para todos os documentos no enumerável.
-
#pluck(*keys) ⇒ Array | Array<Array>
Arranca os nomes de campo fornecidos dos document no destino.
-
#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.
-
#sum(campo = nil) ➤ Numérico
Obtenha a soma do campo fornecido para todos os documentos no 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.
260 261 262 263 264 265 266 267 268 269 270 271 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 260 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.cada_com_objeto({}) fazer |doc, _target| _target[doc._id] = doc se doc 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.
22 23 24 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 22 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.
22 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 22 attr_accessor :_added, :_loaded, :_unloaded |
#_loaded ➤ Object
As três principais variáveis de instância são collections de documentos.
22 23 24 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 22 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.
22 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 22 attr_accessor :_added, :_loaded, :_unloaded |
#_unloaded ➤ Object
As três principais variáveis de instância são collections de documentos.
22 23 24 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 22 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.
22 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 22 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.
63 64 65 66 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 63 def <<(documento) _added[documento._id] = documento auto end |
#==(outro) ➤ verdadeiro | false
Verifique se o enumerável é igual ao outro objeto.
34 35 36 37 38 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 34 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 .
49 50 51 52 53 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 49 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.
351 352 353 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 351 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.
223 224 225 226 227 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 223 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.
504 505 506 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 504 def as_json( = {}) entradas.as_json() end |
#avg(campo) ➤ float | nada
Obtenha a média do campo fornecido para todos os documentos no enumerável. Quando a associação é carregada, calcula na memória sem consultar o banco de dados.
534 535 536 537 538 539 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 534 def avg(Campo) values = field_values_for(Campo) Método nada se values.vazio? values.soma / values.Tamanho.to_f end |
#clear(&block) ➤ Array<Document>
Limpa todos os documentos neste enumerável. Se for passado um bloco, ele produzirá cada documento que está na memória.
82 83 84 85 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 82 def Limpar(&noum: bloco ; verb: bloquear) in_memory(&noum: bloco ; verb: bloquear) se block_given? _loaded.Limpar e a _added.Limpar end |
#clone ➤ Array<Document>
Isso carrega todos os documentos na memória.
Clona cada documento no enumerável.
95 96 97 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 95 def clonar coletar { |doc| doc.clonar } end |
#delete(document) {|doc| ... } ⇒ Document
Exclua o documento fornecido do enumerável.
107 108 109 110 111 112 113 114 115 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 107 def excluir(documento) doc = _loaded.excluir(documento._id) || _added.excluir(documento._id) se !doc && _unloaded && _unloaded.ONDE(_id: documento._id).existe? rendimento(documento) se block_given? Método documento 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.
128 129 130 131 132 133 134 135 136 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 128 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.
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 161 def cada Método to_enum a menos que block_given? 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.
191 192 193 194 195 196 197 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 191 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.
244 245 246 247 248 249 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 244 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.
307 308 309 310 311 312 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 307 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?
281 282 283 284 285 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 281 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.
294 295 296 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 294 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.
329 330 331 332 333 334 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 329 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.
361 362 363 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 361 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.
371 372 373 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 371 def março_load(de dados) @_added, @_loaded, @_unloaded, @executed = de dados end |
#max(field = nil) ⇒ Numeric | nil
Obtenha o valor máximo do campo fornecido para todos os document no enumerável. Quando a associação é carregada, calcula na memória sem consultar o banco de dados.
567 568 569 570 571 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 567 def max(Campo = nada) Método super() se block_given? field_values_for(Campo).max end |
#min(field = nil) ⇒ Numeric | nil
Obtenha o valor mínimo do campo fornecido para todos os documentos no enumerável. Quando a associação é carregada, calcula na memória sem consultar o banco de dados.
551 552 553 554 555 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 551 def min(Campo = nada) Método super() se block_given? field_values_for(Campo).min end |
#pluck(*keys) ⇒ Array | Array<Array>
Arranca os nomes de campo fornecidos dos documentos no destino. Se a coleção tiver sido carregada, ela coletará dos documentos carregados; caso contrário, ele extrai dos critérios descarregados. Independentemente disso, ele também extrai de quaisquer `document` adicionados.
384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 384 def raspar(*keys) [].toque fazer |Resultados| se _loaded? || _added.algum? classe = @_association.classe preparado = prepare_pluck(keys, document_class: classe) end se _loaded? Docs = _loaded.values.map { |v| BSON::Documento.Novo(v.attributes) } Resultados.concat pluck_from_documents(Docs, preparado[:field_names], document_class: classe) elsif _unloaded critério = se _added.algum? ids_to_exclude = _added.keys _unloaded.não(:_id.Em => ids_to_exclude) mais _unloaded end Resultados.concat critério.raspar(*keys) end se _added.algum? Docs = _added.values.map { |v| BSON::Documento.Novo(v.attributes) } Resultados.concat pluck_from_documents(Docs, preparado[:field_names], document_class: classe) end end end |
#reset ⇒ false
Redefina o enumerável de volta ao seu estado persistente.
418 419 420 421 422 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 418 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.
431 432 433 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 431 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?
445 446 447 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 445 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.
456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 456 def Tamanho # Se _unloaded estiver presente, ele corresponderá ao conjunto de documentos # que pertencem a esta associação, que já foram persistentes # para o banco de dados. Esse conjunto de documentos deve ser considerado quando # calculando o tamanho da associação, junto com qualquer coisa que tenha # já foi adicionado. se _unloaded se _added.algum? # Observe que _added pode incluir registros que _unloaded já # correspondências. Esse é o caso se a associação receber uma array # de itens e alguns deles já eram elementos da associação. # # portanto, precisamos garantir que _unloaded.count exclua quaisquer elementos # que já existe em _added. contar = _unloaded.não(:_id.Em => _added.values.map(&:id)).contar contar + _added.values.contar mais _unloaded.contar end mais _loaded.contar + _added.contar end end |
#soma(campo = nil) ➤ Numérico
Obtenha a soma do campo fornecido para todos os documentos no enumerável. Quando a associação é carregada, calcula na memória sem consultar o banco de dados.
518 519 520 521 522 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 518 def soma(Campo = nada) Método super(Campo || 0) se block_given? field_values_for(Campo).soma || 0 end |
#to_json(opções = {}) ➤ string
Enviar #to_json para as entradas.
492 493 494 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 492 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.
581 582 583 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', linha 581 def uniq entradas.uniq end |