[ruby-list:46019] Re: 複数バージョンのRubyに対応するRSS::Makerの使い方
From:
Kouhei Sutou <kou@...>
Date:
2009-05-14 12:42:07 UTC
List:
ruby-list #46019
須藤です。
In <85k54lv12f.wl%zn@mbf.nifty.com>
"[ruby-list:46014] 複数バージョンのRubyに対応するRSS::Makerの使い方" on Wed, 13 May 2009 17:50:52 +0900,
Kazuhiro NISHIYAMA <zn@mbf.nifty.com> wrote:
> http://www.cozmixng.org/~rwiki/?cmd=view;name=RSS+Parser%3A%3ATutorial.ja
> を参考にして RSS::Maker を使ってみたのですが、いくつかひっかかった点が
> あります。
> まず、1.8.5 や 1.8.6 だとatom が生成できなくて、atom 以外で
> author= が NoMethodError になりました。
> これは古いバージョンだから仕方がないのかもしれません。
うーん、まぁ、そうですね。
こんなのを入れると条件分岐しなくてもよくなると思います。
require 'rss'
module RSS
module Maker
class ChannelBase
attr_writer :author unless method_defined?(:author=)
end
end
end
> Tutorial.ja だと 0.91 を生成するときに
> RSS::Maker.makeの第一引数を"0.91"に変更
> するだけで出来るように書いてあるのですが、
> maker.channel.language = "ja"
> も追加しないと生成できませんでした。
すいません。チュートリアルの方が追いついていませんでした。
リファレンスマニュアルの方だけ直して安心していました。
> 1.8.5 や 1.8.6 だと atom に対応していないので、生成しないように
> したかったのですが、そのまま RSS::Maker.make を呼び出すと
> NoMethodError になるのが困りました。
> typo が見つけにくくなるのが嫌で NoMethodError はあまり rescue したくないので、
> RSS::Maker::MAKERS.include?(version)
> でチェックするようにしたのですが、もっと良い方法はないのでしょうか?
RSS Parserの最新版にはRSS::Maker.supported?(version)を追加し
て、手元のスクリプトでは
unless RSS::Maker.respond_to?(:supported?)
def RSS::Maker.supported?(version)
RSS::Maker::MAKERS.include?(version)
end
end
としておく、というのはどうでしょうか?
# supported?じゃなくてsupport?の方がよいかしら。
> atomに対応しているバージョンで生成されたatomの中をみると
> dc:date が2個ずつ入っているのですが、これは問題ないのでしょうか?
あ、バグです。前に直したつもりだったんですが。。。
> 最後に、これが一番困ったのですが、1.8.7 以降だと maker.image で
> ひっかかって0.91 が生成できませんでした。
これもバグです。直しておきます。
> case version
> when "0.91"
> maker.channel.language = "ja"
> when "atom"
> # avoid NoMethodError: undefined method `author=' for #<RSS::Maker::RSS09::Channel:...>
> maker.channel.author = "Bob"
> maker.channel.date = Time.now
> end
一応、自分に関係ない要素は無視するようになっているので、ここ
の条件分岐はいらなくなると思います。(author=問題が解決でき
れば)
> % ruby-trunk -v sample-rss.rb
> ruby 1.9.2dev (2009-05-11 trunk 23390) [i686-linux]
> /home/kazu/opt/ruby-trunk/lib/ruby/1.9.1/rss/content/1.0.rb:2: warning: loading in progress, circular require considered harmful - /home/kazu/opt/ruby-trunk/lib/ruby/1.9.1/rss/content.rb
> /home/kazu/opt/ruby-trunk/lib/ruby/1.9.1/rss/content/2.0.rb:2: warning: loading in progress, circular require considered harmful - /home/kazu/opt/ruby-trunk/lib/ruby/1.9.1/rss/content.rb
> /home/kazu/opt/ruby-trunk/lib/ruby/1.9.1/rss/dublincore/1.0.rb:2: warning: loading in progress, circular require considered harmful - /home/kazu/opt/ruby-trunk/lib/ruby/1.9.1/rss/dublincore.rb
> /home/kazu/opt/ruby-trunk/lib/ruby/1.9.1/rss/dublincore/2.0.rb:2: warning: loading in progress, circular require considered harmful - /home/kazu/opt/ruby-trunk/lib/ruby/1.9.1/rss/dublincore.rb
> /home/kazu/opt/ruby-trunk/lib/ruby/1.9.1/rss/dublincore/atom.rb:2: warning: loading in progress, circular require considered harmful - /home/kazu/opt/ruby-trunk/lib/ruby/1.9.1/rss/dublincore.rb
この警告も直しておきます。
報告ありがとうございました。