martes, 3 de junio de 2008

Problemillas con simple-rss

Me he encontrado con un par de problemillas utilizando simple-rss. El primero es que no se lleva muy bien con los RSS que no están en UTF-8.

La solución es bastante simple y consiste en añadirle una llamada a Iconv en el método initialize

encoding = check_encoding(@source)
@source = Iconv.conv(UTF_8,encoding,@source) if encoding != UTF_8


Donde check_encoding es una copia del método check_encoding de REXML::Encoding. Este método lee el atributo 'encoding' de la cabecera del xml que estamos parseando.

En mi caso no he podido usar directamente una llamada a ese método porque en la versión de ruby que tengo en el servidor (ruby 1.8.6 (2007-03-13 patchlevel 0)) ese método no es correcto

TODO: Actualizar la versión de ruby del servidor...

El otro problema lo he tenido guardando en memcached un objeto SimpleRSS, que devuelve el error:

TypeError: singleton can't be dumped


El error es debido a que memcached hace una llamada a Marshal.dump para serializar, y en simple-rss tenemos esta línea, que extiende la clase Hash

def item.method_missing(name, *args) self[name] end


Haciendo que no sea serializable:

>> item = Hash.new
=> {}
>> Marshal.dump(item)
=> "\004\b{\000"
>> def item.method_missing(name, *args) self[name] end
=> nil
>> Marshal.dump(item)
TypeError: singleton can't be dumped
from (irb):4:in `dump'
from (irb):4
>> item.singleton_methods
=> ["method_missing"]

Así que he tenido que comentarla. El único efecto que tiene es que en lugar de acceder a los elementos usando item.title hay que utilizar item[:title].

No hay comentarios:

Publicar un comentario