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

Ampliado por:
ActiveSupport::Concern
Definido en:
lib/mongoid/attributes/dynamic.rb

Overview

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

Resumen del método de instancia colapsar

Gestión dinámica de métodos

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 usa para permitir métodos de acceso para atributos dinámicos.

Ejemplos:

Llamar a través de method_missing.

document.method_missing(:test)

Parámetros:

  • Nombre (String | 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 method_missing(Nombre, *args)
  attr = Nombre.to_s
  return super a menos que atributos.has_key?(attr.lector)
  si attr.¿escritor?
    getter = attr.lector
    define_escritor_dinámico(getter)
    write_attribute(getter, args.primero)
  elsif attr.¿before_type_cast?
    define_dynamic_before_type_cast_reader(attr.lector)
    ¡El atributo cambiará!(attr.lector)
    leer_atributo_antes_de_la_conversión_de_tipo(attr.lector)
  else
    getter = attr.lector
    define_dynamic_reader(getter)
    ¡El atributo cambiará!(attr.lector)
    read_raw_attribute(getter)
  end
end

Detalles del método de instancia

#define_dynamic_before_type_cast_reader(name) ⇒ Object

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:

Definir un método lector para un atributo.

model.define_dynamic_before_type_cast_reader(:field)

Parámetros:

  • Nombre (string)

    El nombre del campo.



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

def define_dynamic_before_type_cast_reader(Nombre)
  class_eval 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 (string)

    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_dynamic_reader(Nombre)
  return a menos que Nombre.¿nombre_del_método_válido?

  class_eval hacer
    definir_método(Nombre) hacer
      ¡El atributo cambiará!(Nombre)
      read_raw_attribute(Nombre)
    end
  end
end

#define_dynamic_writer(name) ⇒ 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 (string)

    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 menos que Nombre.¿nombre_del_método_válido?

  class_eval hacer
    definir_método("#{name}=") hacer |Valor|
      write_attribute(Nombre, Valor)
    end
  end
end

#inspect_dynamic_fieldsString

Obtenga un arreglo de campos dinámicos inspeccionados para el documento.

Ejemplos:

Inspeccione los campos dinámicos.

document.inspect_dynamic_fields

Devuelve:

  • (string)

    Un arreglo de valores de campos dinámicos impresos en bonito.



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

def inspect_dynamic_fields
  claves = atributos.claves - campos.claves - relaciones.claves - ["_identificación", sí mismo.clase.discriminador_clave]
  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 process_attribute(Nombre, Valor)
  responde = respond_to?("#{name}=")
  si !responde
    write_attribute(Nombre, Valor)
  else
    enviar("#{name}=", Valor)
  end
end

#respond_to?(nombre, include_private = false) ⇒ true | false

Sobrescribir respond_to? por lo que responde correctamente a los atributos dinámicos.

Ejemplos:

¿Responde este objeto al método?

person.respond_to?(:title)

Parámetros:

  • Nombre (arreglo)

    El nombre del método.

  • incluir_privado (true | false) (por defecto: false)

Devuelve:

  • (true | false)

    Verdadero si lo hace, 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.to_s.lector)
  )
end