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.
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/mongoid/attributes/dynamic.rb', linha 120 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.
52 53 54 55 56 57 58 59 |
# File 'lib/mongoid/attributes/dynamic.rb', linha 52 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.
33 34 35 36 37 38 39 40 41 42 |
# File 'lib/mongoid/attributes/dynamic.rb', linha 33 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.
69 70 71 72 73 74 75 76 77 |
# File 'lib/mongoid/attributes/dynamic.rb', linha 69 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.
102 103 104 105 106 107 |
# File 'lib/mongoid/attributes/dynamic.rb', linha 102 def inspect_dynamic_fields keys = attributes.keys - Campos.keys - relações.keys - [ '_id', auto.classe.discriminator_key ] 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.
87 88 89 90 91 92 93 94 |
# File 'lib/mongoid/attributes/dynamic.rb', linha 87 def process_attribute(name, valor) responde = respond_to?("#{name}=") se responde enviar("#{name}=", valor) mais write_attribute(name, valor) end end |
#respond_to?(nome, include_private = false) ➤ true | false
Substituir respond_to? então ele responde adequadamente por atributos dinâmicos.
18 19 20 21 22 23 |
# File 'lib/mongoid/attributes/dynamic.rb', linha 18 def respond_to?(name, include_private = false) super || ( attributes && attributes.has_key?(name.to_s.leitor) ) end |