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