Clase: Mongoid::Attributes::Projector Privado

Hereda:
Objeto
  • Objeto
Mostrar todo
Definido en:
lib/mongoid/attributes/projector.rb

Overview

Esta clase forma parte de una API privada. Evita usar esta clase si es posible, ya que puede ser eliminada o modificada en el futuro.

Este módulo define ayudantes de proyección.

Las reglas de proyección no son triviales. Consulte www.mongodb.com/es/docs/manual/reference/method/db.collection.find/#find-projection para obtener la documentación del4.4 servidor. El servidor (y presumiblemente todos los anteriores) requiere que la proyección de los campos de contenido sea excluyente o inclusiva; es decir, no se pueden combinar exclusiones e inclusiones en la misma consulta. Sin embargo, _id sí se puede excluir en una proyección que incluya campos de contenido. Los valores de proyección enteros distintos 0 de y no 1 están documentados oficialmente al momento de escribir este artículo; consulte DOCSP-.15266 El4.4 servidor también permite la especificación de proyecciones hash anidadas, además de la notación de puntos, que supongo que Mongoid aún no gestiona.

Resumen de atributos de la instancia colapsar

Resumen del método de instancia colapsar

Detalles del constructor

#inicializar(proyección) ⇒ Proyector

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve una nueva instancia de Proyector.



24
25
26
27
28
29
30
31
32
33
# Archivo 'lib/mongoid/attributes/projector.rb', línea 24

def inicializar(proyección)
  si proyección
    @proyección_de_contenido = proyección.dup
    @proyección_de_contenido.borrar('_id')
    @id_projection_value = proyección['_id']
  else
    @proyección_de_contenido = nulo
    @id_projection_value = nulo
  end
end

Detalles de los atributos de instancia

#content_projectionobjeto (solo lectura)

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.



36
37
38
# Archivo 'lib/mongoid/attributes/projector.rb', línea 36

def content_projection
  @proyección_de_contenido
end

#id_projection_valueObject (solo lectura)

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.



35
36
37
# Archivo 'lib/mongoid/attributes/projector.rb', línea 35

def id_projection_value
  @id_projection_value
end

Detalles del método de instancia

#attribute_or_path_allowed?(name) ⇒ true | false

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Determinar si el atributo especificado, o una ruta de notación de puntos, está permitido por la proyección configurada, si la hay.

Si no hay ninguna proyección configurada, devuelve verdadero.

Parámetros:

  • Nombre (string)

    El nombre del atributo o una ruta de notación de puntos.

Devuelve:

  • (true | false)

    Si el atributo está permitido por proyección.



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
# Archivo 'lib/mongoid/attributes/projector.rb', línea 48

def attribute_or_path_allowed?(Nombre)
  # Manejo especial para _id.
  si Nombre == '_id'
    Resultado = a menos que id_projection_value.nil?
      ¿valor_inclusivo?(id_projection_value)
    else
      true
    end
    return Resultado
  end

  si content_projection.nil?
    # Sin proyección (a diferencia de una proyección vacía).
    # Se permiten todos los atributos.
    return true
  end

  # Encuentra un elemento que coincida o sea padre del nombre/ruta solicitada.
  # Esto maneja el caso cuando, por ejemplo, la proyección fue
  # {foo: true} y queremos saber si foo.bar está permitido.
  item, Valor = content_projection.detectar hacer |ruta, Valor|
    (Nombre + '.').start_with?(ruta + '.')
  end
  si item
    return ¿valor_inclusivo?(Valor)
  end

  si content_inclusionary?
    # Busque un elemento que sea un hijo estricto del nombre/ruta solicitados.
    # Esto maneja el caso cuando, por ejemplo, la proyección fue
    # {"foo.bar" => true} y queremos saber si foo está permitido.
    # (Es como un contenedor de barras.)
    item, Valor = content_projection.detectar hacer |ruta, Valor|
      (ruta + '.').start_with?(Nombre + '.')
    end
    si item
      return true
    end
  end

  !content_inclusionary?
end