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

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

Overview

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

Resumen del método de instancia colapsar

Gestión dinámica de métodos

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

#method_missing(nombre, *args) ⇒ Objeto

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.

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.

  • *args (objeto...)

    Los argumentos del método.

Devuelve:

  • (objeto)

    El resultado de la llamada al método.



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

def method_missing(Nombre, *args)
  attr = Nombre.to_s
  return super a menos que atributos.has_key?(attr.lector)

  si attr.¿escritor/a?
    getter = attr.lector
    define_dynamic_writer(getter)
    write_attribute(getter, args.primero)
  elsif attr.¿before_type_cast?
    define_dynamic_before_type_cast_reader(attr.lector)
    attribute_will_change!(attr.lector)
    read_attribute_before_type_cast(attr.lector)
  else
    getter = attr.lector
    define_dynamic_reader(getter)
    attribute_will_change!(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 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.

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.



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

def define_dynamic_before_type_cast_reader(Nombre)
  class_eval hacer
    define_method("#{nombre}_before_type_cast") hacer
      attribute_will_change!(Nombre)
      read_attribute_before_type_cast(Nombre)
    end
  end
end

#define_dynamic_reader(name) ⇒ Object

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.

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

Ejemplos:

Define un método de lector.

model.define_dynamic_reader(:field)

Parámetros:

  • Nombre (string)

    El nombre del campo.



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

def define_dynamic_reader(Nombre)
  return a menos que Nombre.valid_method_name?

  class_eval hacer
    define_method(Nombre) hacer
      attribute_will_change!(Nombre)
      read_raw_attribute(Nombre)
    end
  end
end

#define_dynamic_writer(name) ⇒ objeto

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.

Define un método escritor 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.



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

def define_dynamic_writer(Nombre)
  return a menos que Nombre.valid_method_name?

  class_eval hacer
    define_method("#{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:

Inspecciona los campos dinámicos.

document.inspect_dynamic_fields

Devuelve:

  • (string)

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



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

def inspect_dynamic_fields
  claves = atributos.claves - Campos.claves - relaciones.claves - [ '_id', sí mismo.clase.discriminador_clave ]
  claves.map hacer |Nombre|
    "#{name}: #{attributes[name].inspect}"
  end
end

#process_attribute(name, value) ⇒ Object

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.



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

def process_attribute(Nombre, Valor)
  responde = respond_to?("#{name}=")
  si responde
    enviar("#{name}=", Valor)
  else
    write_attribute(Nombre, 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_privada (true | false) (por defecto: false)

Devuelve:

  • (true | false)

    Verdadero si lo hace, falso si no.



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

def respond_to?(Nombre, incluir_privada = false)
  super || (
    atributos &&
    atributos.has_key?(Nombre.to_s.lector)
  )
end