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.

[View source]

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

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.

[View source]

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

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.

Obtenha todos os descendentes Documents deste Document recursivamente. Isso é usado ao chamar operações de persistência de atualização a partir do documento raiz , em que as alterações em toda a árvore precisam ser determinadas. Observe que a persistência dos documentos incorporados sempre será preferida, já que 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.

[View source]

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

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:

[View source]

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 .

[View source]

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.

[View source]

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

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.

[View source]

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

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.

[View source]

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

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:

[View source]

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

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.

[View source]

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

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.

[View source]

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

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.

[View source]

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

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:

[View source]

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

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.

[View source]

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

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.

[View source]

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

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