Estoy buscando una manera de añadir propiedades a mi clase ya definida en tiempo de ejecución, o mejor:Ruby - dinámicamente añadir una propiedad a la clase (en tiempo de ejecución)
class Client
attr_accessor :login, :password
def initialize args = {}
self.login = args[:login]
self.password = args[:password]
end
end
Pero entonces, tengo este hash
{:swift_bic=>"XXXX", :account_name=>"XXXX", :id=>"123", :iban=>"XXXX"}
y quiero que este hash para convertirse en parte de mi instancia de cliente como
client = Client.new :login => 'user', :password => 'xxxxx'
luego con una magia milagrosa
client @@%$%PLIM!!! {:swift_bic=>"XXXX", :account_name=>"XXXX", :id=>"123", :iban=>"XXXX"}
yo sería capaz de acceder a la
client.swift_bic => 'XXXX'
client.account_name => 'XXXX'
client.id => 123
y también me gustaría mantener una estructura de objeto propio como:
Client.new(:login => 'user', :password => 'xxxxx').inspect
#<Client:0x1033c4818 @password='xxxxx', @login='user'>
después de la magia
client.inspect
#<Client:0x1033c4818 @password='xxxxx', @login='user', @swift_bic='XXXX', @account_name='XXXX' @id => '123', @iban => 'XXXX'>
que me daría una ni ce y json formateado bien después de eso
¿Es posible en absoluto?
Obtengo este hash de un servicio web, por lo que no sabría si hay una nueva propiedad allí, y luego tendría que actualizar mi aplicación cada vez que realicen una actualización en su servicio. Por lo tanto, estoy tratando de evitar esto:/
Gracias griegos.
:)
Si toda esta clase está haciendo es almacenar datos, entonces solo usaría OpenStruct. Existe exactamente para este propósito. http://www.ruby-doc.org/core/classes/OpenStruct.html – thorncp