Módulo: Mongoide::Interceptable

Ampliado por:
ActiveSupport::Preocupación
Incluido en:
Componible
Definido en:
lib/mongoid/interceptable.rb

Overview

Este módulo contiene todos los ganchos de devolución de llamada para Mongoid.

Colapso delresumen constante

DEVOLUCIONES DE LLAMADAS =
[
  :después de la construcción,
  :después de crear,
  :después de destruir,
  :después de encontrar,
  :después de inicializar,
  :after_save,
  :después del toque,
  :después de la actualización,
  :después de insertar,
  :después de la validación,
  :alrededor_crear,
  :alrededor_destruir,
  :alrededor_guardar,
  :alrededor_de_actualizar,
  :alrededor_insertar,
  :antes_de_crear,
  :antes_de_destruir,
  :antes de guardar,
  :antes_de_actualizar,
  :antes de actualizar,
  :antes_de_la_validación,
].freeze

Colapso del resumen del método de instancia

Detalles del método de instancia

#_mongoid_run_child_after_callbacks(lista_de_devoluciones_de_llamadas: []) ⇒ Objeto

Ejecutar las devoluciones de llamadas posteriores.

Parámetros:

  • lista de devolución de llamada (Matriz<ActiveSupport::Callbacks::CallbackSequence, ActiveSupport::Callbacks::Filtros::Entorno>) (predeterminado: [])

    Lista de pares de secuencia de devolución de llamada y entorno.



250
251
252
253
254
255
# Archivo 'lib/mongoid/interceptable.rb', línea 250

def _mongoid_run_child_después_de_las_devoluciones_de_llamadas(callback_list: [])
  lista de devolución de llamada.revertir_cada hacer |siguiente_secuencia, env|
    siguiente_secuencia.invocar_después(env)
    return false Si env.detenido
  end
end

#_mongoid_run_child_before_callbacks(tipo, hijos: [], lista_de_devoluciones_de_llamadas: []) ⇒ Objeto

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

Ejecutar las devoluciones de llamadas anteriores del tipo dado para los documentos incrustados.

Parámetros:

  • kind ( Símbolo) -

    El tipo de devolución de llamada a ejecutar.

  • niños (Matriz) (predeterminado: [])

    Niños en los que se ejecutarán devoluciones de llamadas.

  • lista de devolución de llamada (Matriz<ActiveSupport::Callbacks::CallbackSequence, ActiveSupport::Callbacks::Filtros::Entorno>) (predeterminado: [])

    Lista de pares de secuencias de devolución de llamada y entornos. Esta lista se usará posteriormente para ejecutar las devoluciones de llamada en orden inverso.



229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
# Archivo 'lib/mongoid/interceptable.rb', línea 229

def _mongoid_ejecutar_hijo_antes_de_las_devoluciones_de_llamadas(kind, hijos: [], callback_list: [])
  niños.cada hacer |niño|
    cadena = niño.__devoluciones de llamadas[tipo de devolución de llamada infantil(kind, niño)]
    env = Soporte activo::Devoluciones de llamada::Filtros::Entorno.Nuevo(niño, false, nulo)
    siguiente_secuencia = devoluciones de llamadas de compilación(cadena)
    a no ser que siguiente_secuencia.¿final?
      Mongoid.logger.advertir("Lasdevoluciones de llamadas están deshabilitadas para documentos incrustados. Se omiten las devoluciones de llamadas para #{child.class.name}. ")
      Mongoid.logger.advertir("Parahabilitar las devoluciones de llamadas para documentos incrustados, configure Mongoid::Config.around_callbacks_for_embeds en verdadero.")
    end
    siguiente_secuencia.invocar_antes(env)
    return false Si env.detenido
    env.valor = !env.detenido
    lista de devolución de llamada << [siguiente_secuencia, env]
  end
  lista de devolución de llamada
end

#_mongoid_run_child_callbacks(tipo, hijos: nulo, &bloque) ⇒ Objeto

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

Ejecute las devoluciones de llamadas para documentos incrustados.

Parámetros:

  • kind ( Símbolo) -

    El tipo de devolución de llamada a ejecutar.

  • niños (Matriz) (predeterminado: nulo)

    Secundarios en los que se ejecutarán las devoluciones de llamada. Si es nulo, las devoluciones de llamada se ejecutarán en todos los secundarios del documento que se puedan conectar en cascada.



153
154
155
156
157
158
159
160
161
162
163
# Archivo 'lib/mongoid/interceptable.rb', línea 153

def _mongoid_run_child_callbacks(kind, hijos: nulo, Ybloque)
  Si Mongoid::Config.alrededor de devoluciones de llamadas para incrustaciones
    _mongoid_ejecutar_devoluciones_de_llamadas_secundarias_con_alrededor(kind,
                                             hijos: niños,
                                             Ybloque)
  else
    _mongoid_ejecutar_devoluciones_de_llamadas_secundarias_sin_alrededor(kind,
                                                hijos: niños,
                                                Ybloque)
  end
end

#_mongoid_run_child_callbacks_with_around(tipo, hijos: nulo, &bloque) ⇒ Objeto

Ejecutar las devoluciones de llamadas del tipo dado para documentos incrustados, incluidas las devoluciones de llamadas cercanas.

Parámetros:

  • kind ( Símbolo) -

    El tipo de devolución de llamada a ejecutar.

  • niños (Matriz) (predeterminado: nulo)

    Secundarios en los que se ejecutarán las devoluciones de llamada. Si es nulo, las devoluciones de llamada se ejecutarán en todos los secundarios del documento que se puedan conectar en cascada.

    @api privado



174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
# Archivo 'lib/mongoid/interceptable.rb', línea 174

def _mongoid_ejecutar_devoluciones_de_llamadas_secundarias_con_alrededor(kind, hijos: nulo, Ybloque)
  niños = (niños || niños en cascada(kind))
  con_hijos = !Mongoid::Config.evitar_múltiples_llamadas_de_devoluciones_de_llamadas_integradas

  return bloque&.llamada Si niños.¿vacío?

  fibras = niños.map hacer |niño|
    Fibra.Nuevo hacer
      niño.ejecutar_devoluciones de llamadas(tipo de devolución de llamada infantil(kind, niño), con_hijos: con_hijos) hacer
        Fibra.rendimiento
      end
    end
  end

  fibras.cada hacer |fibra|
    fibra.reanudar
    propagar Mongoid::Errors::Devolución de llamada inválida a no ser que fibra.alive?
  end

  bloque&.llamada

  fibras.marcha atrás.cada(Y:resume)
end

#_mongoid_run_child_callbacks_without_around(tipo, hijos: nulo, &bloque) ⇒ Objeto

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

Ejecutar las devoluciones de llamadas del tipo dado para documentos incrustados sin necesidad de realizar devoluciones de llamadas.

Parámetros:

  • kind ( Símbolo) -

    El tipo de devolución de llamada a ejecutar.

  • niños (Matriz) (predeterminado: nulo)

    Secundarios en los que se ejecutarán las devoluciones de llamada. Si es nulo, las devoluciones de llamada se ejecutarán en todos los secundarios del documento que se puedan conectar en cascada.



207
208
209
210
211
212
213
214
215
216
217
218
# Archivo 'lib/mongoid/interceptable.rb', línea 207

def _mongoid_ejecutar_devoluciones_de_llamadas_secundarias_sin_alrededor(kind, hijos: nulo, Ybloque)
  niños = (niños || niños en cascada(kind))
  lista de devolución de llamada = _mongoid_ejecutar_hijo_antes_de_las_devoluciones_de_llamadas(kind, hijos: niños)
  return false Si lista de devolución de llamada == false
  valor = bloque&.llamada
  lista de devolución de llamada.cada hacer |_siguiente_secuencia, env|
    env.valor &&= valor
  end
  return false Si _mongoid_run_child_después_de_las_devoluciones_de_llamadas(callback_list: lista de devolución de llamada) == false

  valor
end

#callback_executable?(tipo) ⇒ verdadero | falso

¿El tipo de devolución de llamada proporcionado es ejecutable por este documento?

Ejemplos:

¿Es ejecutable la devolución de llamada?

document.callback_executable?(:save)

Parámetros:

  • kind ( Símbolo) -

    El tipo de devolución de llamada.

Devuelve:

  • (verdadero | falso)

    Si se puede ejecutar la función de retorno.



62
63
64
# Archivo 'lib/mongoid/interceptable.rb', línea 62

def ¿callback_ejecutable?(kind)
  respond_to?("_#{tipo}_devoluciones de llamada")
end

#in_callback_state?(tipo) ⇒ true | false

¿El documento se encuentra actualmente en un estado que potencialmente podría requerir la ejecución de devoluciones de llamadas?

Ejemplos:

¿El documento está en un estado de devolución de llamada?

document.in_callback_state?(:update)

Parámetros:

  • kind ( Símbolo) -

    El tipo de devolución de llamada.

Devuelve:

  • (verdadero | falso)

    Si el documento está en un estado de devolución de llamada.



75
76
77
# Archivo 'lib/mongoid/interceptable.rb', línea 75

def ¿en_estado_de_devolución_de_llamada?(kind)
  [ :crear, :destruir ].¿incluir?(kind) || ¿nuevo_registro? || ¿marcado_para_destruir? || ¿cambió?
end

#devoluciones_de_llamadas_pendientesMatriz<Símbolo><Symbol>

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 las devoluciones de llamadas almacenadas para ejecutarse más tarde.

Devuelve:

  • (Matriz<Símbolo><Symbol>)

    Símbolos de método de las devoluciones de llamadas pendientes almacenadas.



262
263
264
# Archivo 'lib/mongoid/interceptable.rb', línea 262

def devoluciones de llamadas pendientes
  @devoluciones_de_llamadas_pendientes ||= [].to_set
end

#pendientes_devoluciones_de_llamadas=(valor) ⇒ Matriz<Símbolo><Symbol>

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

Almacena devoluciones de llamada para su posterior ejecución. Un buen ejemplo de uso es retrasar las devoluciones de llamada after_find y after_initialize hasta que se establezcan las asociaciones en el documento. Esto también se puede usar para retrasar la aplicación de los valores predeterminados en un documento.

Parámetros:

  • valor (Matriz<Símbolo><Symbol>)

    Símbolos de método de las devoluciones de llamadas pendientes para almacenar.

Devuelve:

  • (Matriz<Símbolo><Symbol>)

    Símbolos de método de las devoluciones de llamadas pendientes almacenadas.



276
277
278
# Archivo 'lib/mongoid/interceptable.rb', línea 276

def devoluciones_de_llamadas_pendientes=(valor)
  @devoluciones_de_llamadas_pendientes = valor
end

#ejecutar_después_de_devoluciones_de_llamadas(*tipos) ⇒ Objeto

Nota:

ActiveSupport no permite este tipo de comportamiento de forma predeterminada, por lo que Mongoid debe solucionarlo e implementarlo por sí mismo.

Ejecute solo las devoluciones de llamadas posteriores para el evento específico.

Ejemplos:

Ejecute solo las devoluciones de llamadas posteriores a guardar.

model.run_after_callbacks(:save)

Parámetros:

  • *kinds (Symbol...)

    Los acontecimientos que están ocurriendo.

Devuelve:

  • (Objeto) -

    El resultado de la ejecución de la cadena.



90
91
92
93
94
# Archivo 'lib/mongoid/interceptable.rb', línea 90

def ejecutar_después_de_las_devoluciones_de_llamadas(*kinds)
  kinds.cada hacer |kind|
    ejecutar devoluciones de llamadas dirigidas(:después, kind)
  end
end

#ejecutar_antes_de_devoluciones_de_llamadas(*tipos) ⇒ Objeto

Nota:

ActiveSupport no permite este tipo de comportamiento de forma predeterminada, por lo que Mongoid debe solucionarlo e implementarlo por sí mismo.

Ejecute solo las devoluciones de llamadas anteriores para el evento específico.

Ejemplos:

Ejecute solo las devoluciones de llamadas anteriores a guardar.

model.run_before_callbacks(:save, :create)

Parámetros:

  • *kinds (Symbol...)

    Los acontecimientos que están ocurriendo.

Devuelve:

  • (Objeto) -

    El resultado de la ejecución de la cadena.



107
108
109
110
111
# Archivo 'lib/mongoid/interceptable.rb', línea 107

def ejecutar_antes_de_las_devoluciones_de_llamadas(*kinds)
  kinds.cada hacer |kind|
    ejecutar devoluciones de llamadas dirigidas(:antes, kind)
  end
end

#run_callbacks(kind, with_children: true, skip_if: nil, &block) ⇒ Objeto

Ejecutar las devoluciones de llamada para el documento. Esto anula la funcionalidad del soporte activo para enviar devoluciones de llamada en cascada a los documentos incrustados marcados como tales.

Ejemplos:

Ejecutar las devoluciones de llamadas.

run_callbacks :save do
  save!
end

Parámetros:

  • kind ( Símbolo) -

    El tipo de devolución de llamada a ejecutar.

  • con_hijos (true | false) (predeterminado: verdadero)

    La bandera especifica si se deben ejecutar las devoluciones de llamadas del documento incrustado.

  • skip_if (Proc | nil) (predeterminado: nulo)

    Si este procedimiento devuelve verdadero, las devoluciones de llamadas no se activarán, mientras que el bloque dado seguirá siendo llamado.



127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# Archivo 'lib/mongoid/interceptable.rb', línea 127

def ejecutar_devoluciones de llamadas(kind, con_hijos: true, skip_if: nulo, Ybloque)
  Si skip_if&.llamada
    return bloque&.llamada
  end
  Si con_hijos
    niños en cascada(kind).cada hacer |niño|
      Si niño.ejecutar_devoluciones de llamadas(tipo de devolución de llamada infantil(kind, niño), con_hijos: con_hijos) == false
        return false
      end
    end
  end
  Si ¿callback_ejecutable?(kind)
    Super(kind, Ybloque)
  else
    true
  end
end

#ejecutar_devoluciones_de_llamadas_pendientesObjeto

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

Ejecuta las funciones de retorno pendientes. Si la función de retorno es :apply_defaults, aplicaremos los valores por defecto para este documento. De lo contrario, la función de retorno se pasa a la función run_callbacks.



285
286
287
288
289
290
291
292
293
294
# Archivo 'lib/mongoid/interceptable.rb', línea 285

def ejecutar devoluciones de llamadas pendientes
  devoluciones de llamadas pendientes.cada hacer |cb|
    Si [:aplicar_valores_predeterminados, :aplicar valores predeterminados posprocesados].¿incluir?(cb)
      Enviar(cb)
    else
      yo.ejecutar_devoluciones de llamadas(cb, con_hijos: false)
    end
  end
  devoluciones de llamadas pendientes.borrar
end