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
-
#_children(reset: false) ➤ Array<Document>
privado
Leve todos os
Documents
para esteDocument
. -
#_descendentes(redefinição: falsa) ➤ Array<Document>
privado
Obtenha todos os descendentes
Documents
desteDocument
recursivamente. -
#_parent ⇒ Mongoid::Document | nil
privado
Recupera o documento pai deste documento.
-
#_parent=(documento) ➤ Objeto
privado
Define o documento pai deste documento.
-
#_reset_memoized_descendentes! ➤ nulo
privado
Redefine os descendentes memoizados no objeto.
-
#_root ⇒ Document
Retornar o documento raiz no grafo de objeto .
-
#_root? ➤ verdadeiro | false
Este documento é o documento raiz da hierarquia?
-
#collection_children ➤ Array<Document>
privado
Colete todos os filhos deste documento.
-
#collection_descendentes ➤ Array<Document>
privado
Colete todos os descendentes deste documento.
-
#flag_descendents_persisted ➤ Array<Document>
Marca todos os descendentes como persistentes.
-
#hereditário? ➤ verdadeiro | false
Determina se o documento é uma subclasse de outro documento.
-
#parentize(documento) ➤ Documento
Define uma associação pai/filho.
-
#remove_child(child) ➤ Objeto
Remova um documento filho deste pai.
-
#reinício_persisted_descendentes ➤ Array<Document>
Depois que os descendentes persistirem, podemos chamar isso para mover todas as suas alterações e sinalizá-las como persistentes em uma chamada.
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.
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
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.
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 |
#_parent ⇒ Mongoid::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.
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.
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.
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 |
#_root ⇒ Document
Retornar o documento raiz no grafo de objeto . Se o documento atual for o objeto raiz no gráfico, ele retornará self.
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?
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.
279 280 281 282 283 284 285 286 287 288 |
# Arquivo 'lib/mongoid/traversable.rb', linha 279 def collection_children [].toque fazer |crianças| .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.
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 = [] = _children = {} até que .vazio? = = [] .cada fazer |criança| próximo se [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. [criança] = true se criança._id crianças << criança += criança._children end end crianças end |
#flag_descendentes_persisted ➤ DocumentoArray >
Marca todos os descendentes como persistentes.
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.
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.
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
.
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. 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.
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 |