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.

questionAnswers(6)

yourAnswerToTheQuestion