Я генерирую некоторые методы на лету. Тело метода варьируется в зависимости от определенных критериев.
Я полагался на class_eval для генерации условного кода.
%Q{
def #{name}
#{
(name != "password") ? "attributes[:#{name}]" :
"encrypt(attributes[:#{name}])"
}
end
}
Недавно я начал использовать define_method. Как создать блоки условного кода при использовании define_method?
Редактировать 1
Вот возможные подходы, которые я рассмотрел:
1) Проверка имени во время выполнения:
define_method(name) do
if name == password
decrypt(attributes[name])
else
attributes[name]
end
end
Это не предпочтительный метод, поскольку проверка выполняется во время выполнения.
2) Условное определение всего метода.
if (name == "password")
define_method(name) do
decrypt(attributes[name])
end
else
define_method(name) do
attributes[name]
end
end
Недостатком этого подхода является необходимость повторять блок кода, просто меняя небольшую часть (так как мой метод содержит несколько строк кода).