Módulo: Mongoid::Traversable

Estendido por:
ActiveSupport::Concern
Incluído em:
Componível
Definido em:
lib/mongoid/traversable.rb

Visão geral

Módulo Mixin incluído no Mongoid::Document para fornecer comportamento ao atravessar o gráfico do documento .

Definido sob namespace

Módulos: ClassMethods, DiscriminatorAssignment, DiscriminatorRetrieval

Recolhimento do Resumo do método de classe

Recolhimento do Resumo do método de instância

Detalhes do método de classe

.__redefine(Proprietário, nome, valor) ➤ 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.



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# Arquivo 'lib/mongoid/traversable.rb', linha 18

def __redefine(Proprietário(a), name, valor)
  se Proprietário(a).singleton_class?
    Proprietário(a).redefine_method(name) { valor }
    Proprietário(a).enviar(:public, name)
  end
  Proprietário(a).redefine_singleton_method(name) { valor }
  Proprietário(a).singleton_class.enviar(:public, name)
  Proprietário(a).redefine_singleton_method("#{name}=") fazer |new_value|
    se Proprietário(a).igual?(auto)
      valor = new_value
    mais
      ::Mongoid::Atravessável.redefinir(auto, name, new_value)
    end
  end
  Proprietário(a).singleton_class.enviar(:public, "#{name}=")
end

Detalhes do método de instância

#_children(reset: false) ➤ Array<Document>

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.

Obter todos os Documents para este Document

Retorna:

  • (Array <Document>)

    Todos os documentos filhos na hierarquia.



237
238
239
240
241
242
243
244
245
246
247
248
# Arquivo 'lib/mongoid/traversable.rb', linha 237

def _children(redefinir: false)
  # Veja a discussão acima sobre o método `_parent', sobre o motivo da variável
  # aqui precisa ter dois sublinhados.
  #
  # rubocop:disable Naming/MemoizedInstanceVariableName
  se reiniciar
    @__children = nada
  mais
    @__children ||= collection_children
  end
  # rubocop:enable Naming/MemoizedInstanceVariableName
end

#_descendentes(redefinição: falsa) ➤ Array<Documento>

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.

GET todos os descendentes Documents deste Document recursivamente. Isso é usado ao chamar operações de persistência de atualização a partir do document raiz , em que as alterações em toda a árvore precisam ser determinadas. Observe que a persistência dos documentos incorporados sempre será preferida, pois são chamadas otimizadas... Essa operação pode ficar cara em domínios com grandes hierarquias.

Retorna:

  • (Array <Document>)

    Todos os documentos descendentes na hierarquia.



260
261
262
263
264
265
266
267
268
269
270
271
# Arquivo 'lib/mongoid/traversable.rb', linha 260

def _descendentes(redefinir: false)
  # Veja a discussão acima sobre o método `_parent', sobre o motivo da variável
  # aqui precisa ter dois sublinhados.
  #
  # rubocop:disable Naming/MemoizedInstanceVariableName
  se reiniciar
    @__descendentes = nada
  mais
    @__descendentes ||= collection_descendentes
  end
  # rubocop:enable Naming/MemoizedInstanceVariableName
end

#_parentMongoid::Document | nil

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.

Recupera o documento pai deste documento.

Retorna:



109
110
111
# Arquivo 'lib/mongoid/traversable.rb', linha 109

def _parent
  @__parent || nada
end

#_parent=(documento) ➤ 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.

Define o documento pai deste documento.

Parâmetros:

  • documento (Mongoid::Document | nil)

    o documento a ser definido como documento pai .



121
122
123
# Arquivo 'lib/mongoid/traversable.rb', linha 121

def _parent=(documento)
  @__parent = documento
end

#_reset_memoized_descendentes!nulo

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.

Redefine os descendentes memoizados no objeto. Chamado internamente quando uma array incorporada muda de tamanho.

Retorna:

  • (nil)

    nil.



387
388
389
390
391
# Arquivo 'lib/mongoid/traversable.rb', linha 387

def _reset_memoized_descendentes!
  _parent&._reset_memoized_descendentes!
  _children redefinir: true
  _descendentes redefinir: true
end

#_rootDocument

Retornar o documento raiz no grafo de objeto . Se o documento atual for o objeto raiz no gráfico, ele retornará self.

Exemplos:

Obtenha o documento raiz na hierarquia.

document._root

Retorna:

  • (Documento)

    O documento raiz na hierarquia.



400
401
402
403
404
# Arquivo 'lib/mongoid/traversable.rb', linha 400

def _root
  objeto = auto
  objeto = objeto._parent enquanto objeto._parent
  objeto
end

#_root?verdadeiro | false

Este documento é o documento raiz da hierarquia?

Exemplos:

O documento é a raiz?

document._root?

Retorna:

  • (verdadeiro | falso)

    Se o documento for a raiz.



412
413
414
# Arquivo 'lib/mongoid/traversable.rb', linha 412

def _root?
  _parent ? false : true
end

#collection_children ➤ Array<Document>

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.

Colete todos os filhos deste documento.

Retorna:



278
279
280
281
282
283
284
285
286
287
# Arquivo 'lib/mongoid/traversable.rb', linha 278

def collection_children
  [].toque fazer |crianças|
    embedded_relations.cada_pair fazer |name, _association|
      sem_autobuild fazer
        criança = enviar(name)
        crianças.concat(Array.wrap(criança)) se criança
      end
    end
  end
end

#collection_descendentes ➤ Array<Documento>

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.

Colete todos os descendentes deste documento.

Retorna:

  • (Array <Document>)

    Os descendentes.



294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
# Arquivo 'lib/mongoid/traversable.rb', linha 294

def collection_descendentes
  crianças = []
  to_expand = _children
  Expandido = {}

  até que to_expand.vazio?
    expandindo = to_expand
    to_expand = []
    expandindo.cada fazer |criança|
      próximo se Expandido[criança]

      # Não marque expandido se _id for nulo, pois os documentos são comparados por
      # seus _ids, vários documentos incorporados com IDs nulos serão comparados
      # igualmente, e alguns documentos não serão expandidos.
      Expandido[criança] = true se criança._id
      crianças << criança
      to_expand += criança._children
    end
  end

  crianças
end

#flag_descendentes_persisted ➤ DocumentoArray >

Marca todos os descendentes como persistentes.

Retorna:

  • (Array <Document>)

    Os descendentes sinalizados.



320
321
322
323
324
# Arquivo 'lib/mongoid/traversable.rb', linha 320

def flag_descendentes_persisted
  _descendentes.cada fazer |criança|
    criança.new_record = false
  end
end

#hereditário?verdadeiro | false

Determina se o documento é uma subclasse de outro documento.

Exemplos:

Verifique se o documento é uma subclasse

Square.new.hereditary?

Retorna:

  • (verdadeiro | falso)

    Verdadeiro se hereditário, falso se não.



332
333
334
# Arquivo 'lib/mongoid/traversable.rb', linha 332

def hereditário?
  auto.classe.hereditário?
end

#parentize(documento) ➤ Documento

Define uma associação pai/filho. Isso é usado para objetos recém-criados para que eles possam ser adicionados corretamente ao gráfico.

Exemplos:

Defina o documento pai .

document.parentize(parent)

Parâmetros:

  • documento (Documento)

    O documento pai .

Retorna:



345
346
347
# Arquivo 'lib/mongoid/traversable.rb', linha 345

def parentizar(documento)
  auto._parent = documento
end

#remove_child(child) ➤ Objeto

Remova um documento filho deste pai. Se um incorporado, defina como nulo, caso contrário, remova muitos incorporados.

Isso é chamado a partir do comando de persistência do RemoveEmbedded .

Exemplos:

Remova a criança.

document.remove_child(child)

Parâmetros:

  • criança (Documento)

    O documento secundário (incorporado) a ser removido.



358
359
360
361
362
363
364
365
366
367
# Arquivo 'lib/mongoid/traversable.rb', linha 358

def remove_child(criança)
  name = criança.association_name
  se criança.embedded_one?
    attributes.excluir(criança._association.store_as)
    remove_ivar(name)
  mais
    relação = enviar(name)
    relação._remove(criança)
  end
end

#reinício_persisted_descendentes ➤ Array<Documento>

Depois que os descendentes persistirem, podemos chamar isso para mover todas as suas alterações e sinalizá-las como persistentes em uma chamada.

Retorna:

  • (Array <Document>)

    Os descendentes.



373
374
375
376
377
378
379
# Arquivo 'lib/mongoid/traversable.rb', linha 373

def reinício_persisted_descendentes
  _descendentes.cada fazer |criança|
    criança.move_changes
    criança.new_record = false
  end
  _reset_memoized_descendentes!
end