Clase: Mongoid::Attributes::Projector Privado
- Hereda:
-
Objeto
- Objeto
- Mongoid::Attributes::Projector
- 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 los asistentes de proyección.
Las reglas de proyección no son nada triviales. Consulte https://www.mongodb.com/es/docs/manual/reference/method/db.collection.find/#find-projection para la documentación del servidor. El servidor 4.4 (y, presumiblemente, todos los anteriores) requiere que una proyección de campos de contenido sea exclusivamente de exclusión o de inclusión, es decir, no se puede mezclar exclusiones e inclusiones en la misma query. Sin embargo, _id puede excluirse en una proyección que incluya campos de contenido. Los valores de proyección enteros distintos de 0 y 1 no están documentados oficialmente al momento de redactar este documento; ver DOCSP-15266. El servidor 4.4 también permite la especificación de proyección hash anidada además de la notación de puntos, lo cual asumo que Mongoid aún no gestiona.
Resumen de atributos de la instancia colapsar
- #content_projection ⇒ Objeto Solo lectura privado
- #id_projection_value ⇒ Objeto Solo lectura privado
Resumen del método de instancia colapsar
-
#attribute_or_path_allowed?(nombre) ⇒ true | false
privado
Determine si el atributo especificado o una ruta en notación de puntos está permitido por la proyección configurada, si la hay.
-
#initialize(projection) ⇒ Projector
constructor
privado
Una nueva instancia de Projector.
Detalles del Constructor
#inicializar(proyección) ⇒ Proyector
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Devuelve una nueva instancia de Projector.
22 23 24 25 26 27 28 29 30 31 |
# Archivo 'lib/mongoid/attributes/projector.rb', línea 22 def inicializar(proyección) si proyección @content_projection = proyección.dup @content_projection.borrar('_id') @id_projection_value = proyección['_id'] else @content_projection = nulo @id_projection_value = nulo end end |
Detalles de atributo de instancias
#content_projection ⇒ objeto (solo lectura)
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
33 34 35 |
# Archivo 'lib/mongoid/attributes/projector.rb', línea 33 def content_projection @content_projection end |
#id_projection_value ⇒ Object (solo lectura)
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
33 34 35 |
# Archivo 'lib/mongoid/attributes/projector.rb', línea 33 def id_projection_value @id_projection_value end |
Detalles del método de instancia
#attribute_or_path_allowed?(name) ⇒ true | false
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Determine si el atributo especificado o una ruta en notación de puntos está permitido por la proyección configurada, si la hay.
Si no hay una proyección configurada, devuelve verdadero.
45 46 47 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 |
# Archivo 'lib/mongoid/attributes/projector.rb', línea 45 def attribute_or_path_allowed?(Nombre) # Manejo especial para _id. si Nombre == '_id' Resultado = id_projection_value.nil? || value_inclusionary?(id_projection_value) 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 return value_inclusionary?(Valor) si item si content_inclusionary? # Encuentra un artículo 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, = content_projection.detectar hacer |ruta, _valor| (ruta + '.').start_with?(Nombre + '.') end return true si item end !content_inclusionary? end |