Módulo: Mongoid::Attributes::Dynamic
- Estendido por:
- ActiveSupport::Concern
- Definido em:
- lib/mongoid/attributes/dynamic.rb
Visão geral
Este módulo contém o comportamento para atributos dinâmicos.
Recolhimento do Resumo do método de instância
-
#define_dynamic_before_type_cast_reader(nome) ➤ Objeto
privado
Defina um método de leitor para um atributo dinâmico antes da conversão de tipo.
-
#define_dynamic_reader(nome) ➤ Objeto
privado
Defina um método de leitor para um atributo dinâmico.
-
#define_dynamic_writer(nome) ➤ Objeto
privado
Defina um método de escritor para um atributo dinâmico.
-
#inspect_dynamic_fields ➤ string
Obtenha uma array de campos dinâmicos inspecionados para o documento.
-
#method_missing(name, *args) ➤ Object
privado
Usado para permitir métodos de acesso para atributos dinâmicos.
-
#process_attribute(nome, valor) ➤ Objeto
Se o atributo for dinâmico, adicione um campo para ele com um tipo de objeto e defina o valor.
-
#respond_to?(nome, include_private = false) ➤ true | false
Substituir respond_to? então ele responde adequadamente por atributos dinâmicos.
Manipulação de métodos dinâmicos
Esta classe lida com métodos dinâmicos através do método method_missing
#method_missing(name, *args) ➤ Object
Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.
Usado para permitir métodos de acesso para atributos dinâmicos.
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/mongoid/attributes/dynamic.rb', linha 122 def method_missing(name, *Args) atr = name.to_s Método super a menos que attributes.has_key?(atr.leitor) se atr.escritor? getter = atr.leitor define_dynamic_writer(getter) write_attribute(getter, Args.primeiro) elsif atr.before_type_cast? define_dynamic_before_type_cast_reader(atr.leitor) attribute_ will_change!(atr.leitor) read_attribute_before_type_cast(atr.leitor) mais getter = atr.leitor define_dynamic_reader(getter) attribute_ will_change!(atr.leitor) read_raw_attribute(getter) end end |
Detalhes do método de instância
#define_dynamic_before_type_cast_reader(nome) ➤ Objeto
Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.
Defina um método de leitor para um atributo dinâmico antes da conversão de tipo.
54 55 56 57 58 59 60 61 |
# File 'lib/mongoid/attributes/dynamic.rb', linha 54 def define_dynamic_before_type_cast_reader(name) class_eval fazer define_method("#{name}_before_type_cast") fazer attribute_ will_change!(name) read_attribute_before_type_cast(name) end end end |
#define_dynamic_reader(nome) ➤ Objeto
Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.
Defina um método de leitor para um atributo dinâmico.
35 36 37 38 39 40 41 42 43 44 |
# File 'lib/mongoid/attributes/dynamic.rb', linha 35 def define_dynamic_reader(name) Método a menos que name.valid_method_name? class_eval fazer define_method(name) fazer attribute_ will_change!(name) read_raw_attribute(name) end end end |
#define_dynamic_writer(nome) ➤ Objeto
Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.
Defina um método de escritor para um atributo dinâmico.
71 72 73 74 75 76 77 78 79 |
# File 'lib/mongoid/attributes/dynamic.rb', linha 71 def define_dynamic_writer(name) Método a menos que name.valid_method_name? class_eval fazer define_method("#{name}=") fazer |valor| write_attribute(name, valor) end end end |
#inspect_dynamic_fields ➤ string
Obtenha uma array de campos dinâmicos inspecionados para o documento.
104 105 106 107 108 109 |
# File 'lib/mongoid/attributes/dynamic.rb', linha 104 def inspect_dynamic_fields keys = attributes.keys - Campos.keys - relações.keys - ["_id", auto.classe.discriminator_key] Método keys.map fazer |name| "#{nome}: #{atributos[nome].inspecione}" end end |
#process_attribute(nome, valor) ➤ Objeto
Se o atributo for dinâmico, adicione um campo para ele com um tipo de objeto e defina o valor.
89 90 91 92 93 94 95 96 |
# File 'lib/mongoid/attributes/dynamic.rb', linha 89 def process_attribute(name, valor) responde = respond_to?("#{name}=") se !responde write_attribute(name, valor) mais enviar("#{name}=", valor) end end |
#respond_to?(nome, include_private = false) ➤ true | false
Substituir respond_to? então ele responde adequadamente por atributos dinâmicos.
20 21 22 23 24 25 |
# File 'lib/mongoid/attributes/dynamic.rb', linha 20 def respond_to?(name, include_private = false) super || ( attributes && attributes.has_key?(name.to_s.leitor) ) end |