Módulo: Mongoid::Atributos::Dinámico

Ampliado por:
ActiveSupport::Preocupación
Definido en:
lib/mongoid/atributos/dynamic.rb

Overview

Este módulo contiene el comportamiento de los atributos dinámicos.

Colapso del resumen del método de instancia

Manejo de métodos dinámicos

Esta clase maneja métodos dinámicos a través del método method_missing

#method_missing(nombre, *args) ⇒ 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.

Se utiliza para permitir métodos de acceso para atributos dinámicos.

Ejemplos:

Llamar a través del método_missing.

document.method_missing(:test)

Parámetros:

  • Nombre (Cadena | Símbolo)

    El nombre del método.

  • *argumentos (Objeto...) -

    Los argumentos del método.

Devuelve:

  • (Objeto) -

    El resultado de la llamada al método.



122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# Archivo 'lib/mongoid/attributes/dynamic.rb', línea 122

def método_faltante(Nombre, *args)
  attr = Nombre.a_s
  return Super a no ser que atributos.has_key?(attr.lector)
  Si attr.¿escritor?
    adquiridor = attr.lector
    define_escritor_dinámico(adquiridor)
    atributo de escritura(adquiridor, args.primera)
  elsif attr.¿antes de la conversión de tipos?
    definir_dinámico_antes_del_lector_de_conversión_de_tipos(attr.lector)
    ¡El atributo cambiará!(attr.lector)
    leer_atributo_antes_de_la_conversión_de_tipo(attr.lector)
  else
    adquiridor = attr.lector
    define_lector_dinámico(adquiridor)
    ¡El atributo cambiará!(attr.lector)
    read_raw_attribute(adquiridor)
  end
end

Detalles del método de instancia

#define_dynamic_before_type_cast_reader(nombre) ⇒ 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.

Define un método lector para un atributo dinámico antes de realizar el type cast.

Ejemplos:

Define un método de lectura para un atributo.

model.define_dynamic_before_type_cast_reader(:field)

Parámetros:

  • Nombre (Cadena) -

    El nombre del campo.



54
55
56
57
58
59
60
61
# Archivo 'lib/mongoid/attributes/dynamic.rb', línea 54

def definir_dinámico_antes_del_lector_de_conversión_de_tipos(Nombre)
  evaluación de clase hacer
    definir_método("#{nombre}_antes_de_la_conversión_de_tipo") hacer
      ¡El atributo cambiará!(Nombre)
      leer_atributo_antes_de_la_conversión_de_tipo(Nombre)
    end
  end
end

#define_dynamic_reader(nombre) ⇒ 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.

Defina un método lector para un atributo dinámico.

Ejemplos:

Definir un método de lectura.

model.define_dynamic_reader(:field)

Parámetros:

  • Nombre (Cadena) -

    El nombre del campo.



35
36
37
38
39
40
41
42
43
44
# Archivo 'lib/mongoid/attributes/dynamic.rb', línea 35

def define_lector_dinámico(Nombre)
  return a no ser que Nombre.¿nombre_del_método_válido?

  evaluación de clase hacer
    definir_método(Nombre) hacer
      ¡El atributo cambiará!(Nombre)
      read_raw_attribute(Nombre)
    end
  end
end

#define_dynamic_writer(nombre) ⇒ 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.

Define un método de escritura para un atributo dinámico.

Ejemplos:

Define un método de escritura.

model.define_dynamic_writer(:field)

Parámetros:

  • Nombre (Cadena) -

    El nombre del campo.



71
72
73
74
75
76
77
78
79
# Archivo 'lib/mongoid/attributes/dynamic.rb', línea 71

def define_escritor_dinámico(Nombre)
  return a no ser que Nombre.¿nombre_del_método_válido?

  evaluación de clase hacer
    definir_método("#{nombre}=") hacer |valor|
      atributo de escritura(Nombre, valor)
    end
  end
end

#inspeccionar_campos_dinámicosCadena

Obtenga una matriz de campos dinámicos inspeccionados para el documento.

Ejemplos:

Inspeccione los campos dinámicos.

document.inspect_dynamic_fields

Devuelve:

  • (Cadena) -

    Una matriz de valores de campos dinámicos bastante impresos.



104
105
106
107
108
109
# Archivo 'lib/mongoid/attributes/dynamic.rb', línea 104

def inspeccionar_campos_dinámicos
  claves = atributos.claves - campos.claves - relaciones.claves - ["_identificación", yo.clase.clave discriminadora]
  return claves.map hacer |Nombre|
    "#{nombre }: #{atributos[nombre]. inspeccionar}"
  end
end

#process_attribute(nombre, valor) ⇒ Objeto

Si el atributo es dinámico, agregue un campo para él con un tipo de objeto y establezca el valor.

Ejemplos:

Procesar el atributo.

document.process_attribute(name, value)

Parámetros:

  • Nombre ( Símbolo) -

    El nombre del campo.

  • valor (Objeto) -

    El valor del campo.



89
90
91
92
93
94
95
96
# Archivo 'lib/mongoid/attributes/dynamic.rb', línea 89

def atributo_de_proceso(Nombre, valor)
  responde = respond_to?("#{nombre}=")
  Si !responde
    atributo de escritura(Nombre, valor)
  else
    Enviar("#{nombre}=", valor)
  end
end

#responder_a?(nombre, incluir_privado = falso) ⇒ verdadero | falso

Anular respond_to? para que responda correctamente a los atributos dinámicos.

Ejemplos:

¿Responde este objeto al método?

person.respond_to?(:title)

Parámetros:

  • Nombre (Matriz)

    El nombre del método.

  • incluir_privado (true | false) (predeterminado: falso)

Devuelve:

  • (verdadero | falso)

    Verdadero si es así, falso si no.



20
21
22
23
24
25
# Archivo 'lib/mongoid/attributes/dynamic.rb', línea 20

def respond_to?(Nombre, incluir_privado = false)
  Super || (
    atributos &&
    atributos.has_key?(Nombre.a_s.lector)
  )
end