Acessar variáveis externas ao reabrir classe [resolvido]

Pessoal,

Quero construir um método que receba um hash e retorne um objeto contendo um acessor para cada chave do hash.

[code]def build(hash)
o = Object.new

hash.each do |k, v|
class << o
attr_accessor k
end

# Inicializando os atributos com o valor correspondente
o.send(k.to_s + '=', v)

end

o
end[/code]O problema é que a variável "k" não é visível na linha 6. Como posso contornar isso sem criar uma variável global?

OK pessoal, resolvi dessa forma:

[code]def build(hash)
o = Object.new

def o.metaclass
class << self; self; end
end

hash.each do |k, v|
o.metaclass.instance_eval do
attr_accessor k
end

# Inicializando os atributos com o valor correspondente
o.send(k.to_s + '=', v)

end

o
end[/code]

EDIT - Sem declarar o método "metaclass"

[code]def build(hash)
o = Object.new

hash.each do |k, v|
(class << o; self; end).instance_eval do
attr_accessor k
end

# Inicializando os atributos com o valor correspondente
o.send(k.to_s + '=', v)

end

o
end[/code]