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

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.

Exemplos:

Ligue para method_missing.

document.method_missing(:test)

Parâmetros:

  • name (string | Símbolo)

    O nome do método.

  • *args (Objeto...)

    Os argumentos do método.

Retorna:

  • (Objeto)

    O resultado da chamada de método.



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.

Exemplos:

Defina um método de leitor para um atributo.

model.define_dynamic_before_type_cast_reader(:field)

Parâmetros:

  • name (string)

    O nome do campo.



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.

Exemplos:

Defina um método de leitura.

model.define_dynamic_reader(:field)

Parâmetros:

  • name (string)

    O nome do campo.



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.

Exemplos:

Defina um método de escritor.

model.define_dynamic_writer(:field)

Parâmetros:

  • name (string)

    O nome do campo.



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.

Exemplos:

Inspecione os campos dinâmicos.

document.inspect_dynamic_fields

Retorna:

  • (string)

    Uma array de valores de campo dinâmicos impressos de forma bonita.



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.

Exemplos:

Processe o atributo.

document.process_attribute(name, value)

Parâmetros:

  • name (Símbolo)

    O nome do campo.

  • valor (Objeto)

    O valor do campo.



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.

Exemplos:

Este objeto responde ao método?

person.respond_to?(:title)

Parâmetros:

  • name (Array)

    O nome do método.

  • include_private (verdadeiro | falso) (padrão para: false)

Retorna:

  • (verdadeiro | falso)

    Verdadeiro se for, falso se não for.



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