Skip to content

Instantly share code, notes, and snippets.

@roooodcastro
Last active August 29, 2015 14:16
Show Gist options
  • Save roooodcastro/9deff765f67070d16e32 to your computer and use it in GitHub Desktop.
Save roooodcastro/9deff765f67070d16e32 to your computer and use it in GitHub Desktop.
Criação de método baseado em constantes usando Reflection
class ControleEnade < ActiveRecord::Base
ANO_CORRENTE_ENADE_COD = 1
SEMESTRE_CORRENTE_ENADE_COD = 2
INICIO_INSCRICAO = 5
FIM_INSCRICAO = 6
INICIO_JUSTIFICATIVA = 7
FIM_JUSTIFICATIVA = 8
MSG_INSCRITO = 13
MSG_JUSTIFICATIVA = 14
# Cria métodos para leitura e escrita dos valores do controle enade.
# Em resumo, o código abaixo pega todas as constantes definidas acima e cria
# um método para cada com o nome dela em minúsculas, ex: fim_inscricao. Os
# métodos de escrita (ex: fim_inscricao=) também são criados.
(ControleEnade.constants - ActiveRecord::Base.constants).map(&:to_s).each do |nome|
define_singleton_method(nome.downcase) do
ControleEnade.valor_de(ControleEnade.const_get(nome))
end
define_singleton_method("#{nome.downcase}=") do |novo_valor|
ControleEnade.find_by_codigo(ControleEnade.const_get(nome))
.update_attributes!(valor: novo_valor)
end
end
end
# ===============================
# Rails console:
# ===============================
> ControleEnade.fim_inscricao
=> "08/09/2014"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment