Inicialização Ruby DRY com argumento Hash
Eu me pego usando argumentos de hash para construtores bastante, especialmente ao escrever DSLs para configuração ou outros bits da API aos quais o usuário final será exposto. O que acabo fazendo é algo como o seguinte:
class Example
PROPERTIES = [:name, :age]
PROPERTIES.each { |p| attr_reader p }
def initialize(args)
PROPERTIES.each do |p|
self.instance_variable_set "@#{p}", args[p] if not args[p].nil?
end
end
end
Não há mais maneira idiomática de conseguir isso? A constante de descarte e o símbolo na conversão de cordas parecem particularmente notórios.