Classe: Mongoid::Attributes::Projetor Privado

Herda:
Objeto
  • Objeto
mostrar tudo
Definido em:
lib/mongoid/attributes/projector.rb

Visão geral

Esta classe faz parte de uma API privada. Evite usar essa classe, se possível, pois ela pode ser removida ou alterada no futuro.

Este módulo define os auxiliares de projeção.

As regras de projeção não são triviais. Consulte Www.mongodb.com/pt-br/docs/manual/reference/method/db.collection.find/#find-projection para obter a documentação do servidor . O servidor 4.4 (e presumivelmente todos os mais antigos) exige que uma projeção para campos de conteúdo seja de exclusão ou de inclusão, ou seja, não é possível misturar exclusões e inclusões na mesma query. No entanto, _id pode ser excluído em uma projeção que inclui campos de conteúdo. Valores de projeção inteiros diferentes de 0 e 1 não estão oficialmente documentados no momento em que este documento foi escrito; consulte DOCSP-15266. O servidor 4.4 também permite a especificação de projeção de hash aninhado, além da notação de ponto, com a qual presumi que o Mongoid ainda não lida.

Recolhimento do Resumo do atributo de instância

Recolhimento do Resumo do método de instância

Detalhes do construtor

#initialize(projeção) ➤ Projetor

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.

Retorna uma nova instância do Projetor.



24
25
26
27
28
29
30
31
32
33
# Arquivo 'lib/mongoid/attributes/projector.rb', linha 24

def inicializar(projeção)
  se projeção
    @content_projection = projeção.dup
    @content_projection.excluir('_id')
    @id_projection_value = projeção['_id']
  mais
    @content_projection = nada
    @id_projection_value = nada
  end
end

Detalhes do atributo da instância

#conteúdo_projeçãoObjeto (somente leitura)

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.



36
37
38
# Arquivo 'lib/mongoid/attributes/projector.rb', linha 36

def conteúdo_projeção
  @content_projection
end

#id_projection_value ➤ Objeto (somente leitura)

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.



35
36
37
# Arquivo 'lib/mongoid/attributes/projector.rb', linha 35

def id_projection_value
  @id_projection_value
end

Detalhes do método de instância

#atributo_or_path_allowed?(nome) ➤ verdadeiro | false

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.

Determine se o atributo especificado, ou um caminho de notação de ponto , é permitido pela projeção configurada, se houver.

Se não houver nenhuma projeção configurada , retorna verdadeiro.

Parâmetros:

  • name (string)

    O nome do atributo ou um caminho de notação de ponto .

Retorna:

  • (verdadeiro | falso)

    Se o atributo é permitido pela projeção.



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# Arquivo 'lib/mongoid/attributes/projector.rb', linha 48

def Atributo_or_path_allowed?(name)
  # Manuseio especial para _id.
  se name == '_id'
    Resultado = a menos que id_projection_value.nada?
      value_inclusionary?(id_projection_value)
    mais
      true
    end
    Método Resultado
  end

  se conteúdo_projeção.nada?
    # Sem projeção (em oposição a uma projeção vazia).
    # Todos os atributos são permitidos.
    Método true
  end

  # Encontre um item que corresponda ou seja pai do nome/caminhos solicitado.
  # Isso lida com o caso quando, por exemplo, a projeção foi
  # {foo: true} e queremos saber sefoo.bar é permitido.
  item, valor = conteúdo_projeção.detectar fazer |caminho, valor|
    (name + '.').start_with?(caminho + '.')
  end
  se item
    Método value_inclusionary?(valor)
  end

  se Content_inclusionary?
    # Encontre um item que seria um filho estrito do nome/caminhos solicitados.
    # Isso lida com o caso quando, por exemplo, a projeção foi
    # {"foo.bar" => true} e queremos saber sefoo é permitido.
    # ( É como um contêiner de barras .)
    item, valor = conteúdo_projeção.detectar fazer |caminho, valor|
      (caminho + '.').start_with?(name + '.')
    end
    se item
      Método true
    end
  end

  !Content_inclusionary?
end