Problemas al leer array de objetos


#1

f = flickr.photos.getSizes(390890953).sizes
f
=> {:Original=>#<Flickr::Size:0x28ca060 @height=1200, @width=1600,
@source=“http://farm1.static.flickr.com/175/390890953_fd08378420_o.jpg”,
@url=“http://www.flickr.com/photo_zoom.gne?id=390890953&size=o”,
@label=“Original”>, :Large=>#<Flickr::Size:0x28ca3a8 @height=768,
@width=1024,
@source=“http://farm1.static.flickr.com/175/390890953_fd08378420_b.jpg”,
@url=“http://www.flickr.com/photo_zoom.gne?id=390890953&size=l”,
@label=“Large”>, :Medium=>#<Flickr::Size:0x28ca6a0 @height=375,
@width=500,
@source=“http://farm1.static.flickr.com/175/390890953_fd08378420.jpg”,
@url=“http://www.flickr.com/photo_zoom.gne?id=390890953&size=m”,
@label=“Medium”>, :Small=>#<Flickr::Size:0x28ca998 @height=180,
@width=240,
@source=“http://farm1.static.flickr.com/175/390890953_fd08378420_m.jpg”,
@url=“http://www.flickr.com/photo_zoom.gne?id=390890953&size=s”,
@label=“Small”>, :Square=>#<Flickr::Size:0x28cafb0 @height=75,
@width=75,
@source=“http://farm1.static.flickr.com/175/390890953_fd08378420_s.jpg”,
@url=“http://www.flickr.com/photo_zoom.gne?id=390890953&size=sq”,
@label=“Square”>, :Thumbnail=>#<Flickr::Size:0x28cac90 @height=75,
@width=100,
@source=“http://farm1.static.flickr.com/175/390890953_fd08378420_t.jpg”,
@url=“http://www.flickr.com/photo_zoom.gne?id=390890953&size=t”,
@label=“Thumbnail”>}

Por consola hago esto pero no se como leer los resultados, quiero
obtener el atributo @source de square, he intedo con
f.size.square.source y nada…

Gracias de antemano.


#2

Hola,

=> {:Original=>#<Flickr::Size:0x28ca060 @height=1200, @width=1600,
@source=“http://farm1.static.flickr.com/175/390890953_fd08378420_o.jpg”,

Por consola hago esto pero no se como leer los resultados, quiero
obtener el atributo @source de square, he intedo con
f.size.square.source y nada…

yo primero probaría a hacer un .methods sobre el objeto almacenado en
:Original

Lo lógico sería que si esa variable la quieran tener accesible desde
fuera, tengan definido un accessor, por lo que entre los methods habría
un “source” y puede que un “source=”

Puede que exista uno de esos métodos o algún otro que te devuelva
directamente el valor source, y ésa debería ser la forma recomendada de
acceder a él ya que formaría parte del interfaz público de la clase y si
en el futuro cambia su funcionamiento interno, tu cliente no nota el
cambio.

Para el caso de que no haya un método que te de la variable source, o
para el caso de que el accessor sea privado, todavía se puede jugar un
poco con ruby y sobre tu objeto puedes pedirle un
.instance_variable_get(’@source’) o
.instance_variable_set(’@source’,valor)

Esto último lo recomiendo poco, porque implica usar un api de diferente
manera a como fue diseñada y te deja expuesto a que futuros cambios en
el api dejen tu aplicación fuera de combate. Pero funcionar funciona…

Saludos,

javier ramirez

Estamos de estreno… si necesitas llevar el control de tus gastos
visita http://www.gastosgem.com !!Es gratis!!


#3

yo primero probar�a a hacer un .methods sobre el objeto almacenado en
:Original

Hola Javier

Sacandole el .methods… llegue a collect y agrupandolos despues todo se
hizo mas facil… asi quedo la sentencia final.

flickr.photos.getSizes(390890953).sizes.collect[0][1].source

Gracias,