[#46033] cgi をするときのデバック方法について — Nobuyuki Inaba <nobuyuki.inaba@...>

稲葉と申します。

15 messages 2009/05/22
[#46034] Re: cgi をするときのデバック方法について — rubikitch@... 2009/05/23

From: Nobuyuki Inaba <nobuyuki.inaba@gmail.com>

[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

この警告も直しておきます。


報告ありがとうございました。

In This Thread