Estoy trabajando en un cliente en Ruby para conectar a la API de Voxbone basada en SOAP, seguramente sea el primer proyecto que aloje en RubyForge. El problema es que me he pasado toda la mañana intentando averiguar como interpretar los datos que recibia como respuesta. Me llegaba un objeto de la clase SOAP::Mapping::Object que a simple vista era un string infumable dentro de un array. Tras dar varias vueltas por listas, blogs y demás encontré en ruby-talk un hilo que inició una persona con el mismo problema, al que le respondieron que podía usar como claves los nombres de los elementos XML como si de un hash se tratara, flipando vamos….
Al final ya tengo los datos tal y como los quiero ver en mi aplicación. Un ejemplo:
irb(main):001:0> require 'vox_api_client'
=> true
irb(main):002:0> vox = VoxboneAPIClient.new
ignored attr: {}version
ignored attr: {}nillable
ignored attr: {}default
ignored element: {http://www.w3.org/2001/XMLSchema}minExclusive
ignored element: {http://www.w3.org/2001/XMLSchema}minLength
ignored element: {http://www.w3.org/2001/XMLSchema}maxLength
=> #
irb(main):003:0> puts vox.get_pop_list.to_yaml
—
BE:
- 81.201.82.21
- 81.201.82.22
- 81.201.82.23
- 81.201.82.24
- 81.201.82.25
- 81.201.82.26
- 81.201.82.27
- 81.201.82.28
- 81.201.82.30
- 81.201.82.31
- 81.201.82.32
- 81.201.82.33
US:
- 81.201.84.21
- 81.201.84.22
- 81.201.84.23
- 81.201.84.24
- 81.201.84.25
- 81.201.84.26
- 81.201.84.27
- 81.201.84.28
- 81.201.84.29
- 81.201.84.30
- 81.201.84.31
- 81.201.84.32
- 81.201.84.33
- 81.201.84.34
=> nil
Este es el método de la API del ejemplo y el que viene a continuación el que lo llama, un poco sucio pero ya lo limpiaré:
def get_pop_list
params = { :UserToken => user_token }
res = @driver.GetPOPList(params)
pops = {}
res.arrayOfPOPs['POP'].each do |pop|
country_code = pop['Name']
ip_addresses = pop['ArrayOfIPs']['IP']
pops[country_code] = ip_addresses
end
return pops
end