Module: Mongoid::Criteria::Queryable::Storable Private
- Incluido en:
- Mongoid::Criterios::Consultable
- Definido en:
- lib/mongoid/criterios/consultable/almacenable.rb
Overview
Este módulo forma parte de una API privada. Debe evitar su uso siempre que sea posible, ya que podría eliminarse o modificarse en el futuro.
Este módulo encapsula métodos que escriben expresiones de consulta en el selector de Criterios.
The query expressions must have already been expanded as necessary. The methods of this module do not perform processing on expression values.
Methods in this module do not handle negation - if negation is needed, it must have already been handled upstream of these methods.
Colapso del resumen del método de instancia
-
#add_field_expression(field, value) ⇒ Storable
privada
Agrega una expresión de campo a la consulta.
-
#add_logical_operator_expression(operador, op_expr) ⇒ Almacenable
privada
Adds a logical operator expression to the selector.
-
#add_one_expression(campo, value) ⇒ Storable
privada
Adds an arbitrary expression to the query.
-
#add_operator_expression(operador, op_expr) ⇒ Almacenable
privada
Adds an operator expression to the selector.
Detalles del método de instancia
#add_field_expression(campo, valor) ⇒ Almacenable
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Agrega una expresión de campo a la consulta.
field must be a field name, and it must be a string. The upstream code must have converted other field/key types to the simple string form by the time this method is invoked.
value Puede ser de cualquier tipo, se escribe en el selector sin cambios.
This method performs no processing on the provided field value.
Mutates the receiver.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# Archivo 'lib/mongoid/criteria/queryable/storable.rb', línea 36 def agregar_expresión_de_campo(Campo, valor) a no ser que Campo.is_a?(String) propagar ArgumentError, "Elcampo debe ser una cadena: #{campo}" end Si Campo.empezar_con?('$') propagar ArgumentError, "Elcampo no puede ser un operador (es decir, comenzar con $): #{campo}" end Si selector[Campo] #Ya tenemos una restricción por el campo que estamos probando # para restringir, combinar las restricciones. Si valor.is_a?(Picadillo) && selector[Campo].is_a?(Picadillo) && valor.claves.¿todo? { |clave| llaves = clave.a_s llaves.empezar_con?('$') && !selector[Campo].claves.map(Y:a_s).¿incluir?(llaves) } entonces # Se pueden combinar varios operadores en el mismo campo mediante # adding them to the existing hash. nuevo_valor = selector[Campo].unir(valor) selector.store(Campo, nuevo_valor) elsif selector[Campo] != valor add_operator_expression('$y ', [{Campo => valor}]) end else selector.store(Campo, valor) end yo end |
#add_logical_operator_expression(operador, op_expr) ⇒ Almacenable
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Adds a logical operator expression to the selector.
Este método solo maneja operadores lógicos ($and, $nor y $or). Si se llama con otro operador, genera un error ArgumentError. Tenga en cuenta que en MQL, $not es un operador de campo, no de consulta; por lo tanto, este método no lo maneja.
Este método toma el operador y su expresión de valor por separado para comodidad de quienes lo llaman. Se puede considerar que gestiona el almacenamiento del hash {operator => op_expr}.
Si el selector consta de una sola condición, que es el operador especificado (en el nivel superior), la nueva condición dada en op_expr se añade a las condiciones existentes para el operador especificado. Por ejemplo, si el selector está actualmente:
{'$or' => [{'hello' => 'world'}]}
… y el operador es '$or' y op_expr es [{'test' => 123'}], el selector resultante será:
{'$or' => [{'hello' => 'world'}, {'test' => 123}]}
This method always adds the new conditions as additional requirements; in other words, it does not implement the ActiveRecord or/nor behavior where the receiver becomes one of the operands. It is expected that code upstream of this method implements such behavior.
Este método no simplifica valores (es decir, si el selector está vacío y el operador es $and, op_expr se escribe en el selector con $and, incluso si $and puede, en principio, omitirse). Se espera que dicha simplificación ya haya sido realizada por el código fuente.
This method mutates the receiver.
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# Archivo 'lib/mongoid/criteria/queryable/storable.rb', línea 108 def agregar_expresión_de_operador_lógico(operador, op_expr) a no ser que operador.is_a?(String) propagar ArgumentError, "Operator must be a string: #{operator}" end a no ser que %w($and $nor $or).¿incluir?(operador) propagar ArgumentError, "This method only handles logical operators ($and, $nor, $or). Operator given: #{operator}" end a no ser que op_expr.is_a?(Arreglo) propagar Errors::Consulta no válida, "#{operador} el argumento debe ser una matriz: #{Errors::InvalidQuery.truncate_expr(op_expr)}" end Si selector.longitud == 1 && selector.claves.primera == operador nuevo_valor = selector.values.primera + op_expr selector.store(operador, nuevo_valor) elsif operador == '$y ' || selector.¿vacío? # $and can always be added to top level and it will be combined # with whatever other conditions exist. Si current_value = selector[operador] nuevo_valor = current_value + op_expr selector.store(operador, nuevo_valor) else selector.store(operador, op_expr) end else # Es necesario agregar otros operadores por separado Si selector[operador] agregar_expresión_de_operador_lógico('$y ', [operador => op_expr]) else selector.store(operador, op_expr) end end yo end |
#add_one_expression(campo, valor) ⇒ Almacenable
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Adds an arbitrary expression to the query.
El campo puede ser un nombre de campo o un operador.
Mutates the receiver.
223 224 225 226 227 228 229 230 231 232 233 |
# Archivo 'lib/mongoid/criteria/queryable/storable.rb', línea 223 def add_one_expression(Campo, valor) a no ser que Campo.is_a?(String) propagar ArgumentError, "Elcampo debe ser una cadena: #{campo}" end Si Campo.empezar_con?('$') add_operator_expression(Campo, valor) else agregar_expresión_de_campo(Campo, valor) end end |
#add_operator_expression(operador, op_expr) ⇒ Almacenable
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Adds an operator expression to the selector.
Este método toma el operador y su expresión de valor por separado para comodidad de quienes lo llaman. Se puede considerar que gestiona el almacenamiento del hash {operator => op_expr}.
El valor del operador puede ser de cualquier tipo.
Si el selector ya contiene el operador especificado (en el nivel superior), la nueva condición dada en op_expr se añade a las condiciones existentes para el operador especificado. Esto es sencillo para $and; para otros operadores lógicos, este método añade las nuevas condiciones al operador existente. Por ejemplo, si el selector está actualmente:
{'foo' => 'bar', '$or' => [{'hello' => 'world'}]}
… y el operador es '$or' y op_expr es {'test' => 123'}, el selector resultante será:
{'foo' => 'bar', '$or' => [{'hello' => 'world'}, {'test' => 123}]}
This does not implement an OR between the existing selector and the new operator expression - handling this is the job of upstream methods. This method simply stores op_expr into the selector on the assumption that the existing selector is the correct left hand side of the operation already.
Para operadores de nivel de consulta no lógicos como $where y $text, si ya hay un operador de nivel superior con el mismo nombre, op_expr se agrega al selector a través de un operador $and de nivel superior, produciendo así un selector que tiene ambos valores de operador.
Este método no simplifica valores (es decir, si el selector está actualmente vacío y el operador es $and, op_expr se escribe en el selector con $and incluso si $and puede, en principio, omitirse).
This method mutates the receiver.
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 |
# Archivo 'lib/mongoid/criteria/queryable/storable.rb', línea 188 def add_operator_expression(operador, op_expr) a no ser que operador.is_a?(String) propagar ArgumentError, "Operator must be a string: #{operator}" end a no ser que operador.empezar_con?('$') propagar ArgumentError, "Eloperador debe comenzar con $: #{operador}" end Si %w($and $nor $or).¿incluir?(operador) return agregar_expresión_de_operador_lógico(operador, op_expr) end # For other operators, if the operator already exists in the # consulta, agregue la nueva condición con $and, de lo contrario agregue el # nueva condición al nivel superior. Si selector[operador] agregar_expresión_de_operador_lógico('$y ', [{operador => op_expr}]) else selector.store(operador, op_expr) end yo end |