[#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:46014] 複数バージョンのRubyに対応するRSS::Makerの使い方

From: Kazuhiro NISHIYAMA <zn@...>
Date: 2009-05-13 08:50:52 UTC
List: ruby-list #46014
西山和広です。

http://www.cozmixng.org/~rwiki/?cmd=view;name=RSS+Parser%3A%3ATutorial.ja
を参考にして RSS::Maker を使ってみたのですが、いくつかひっかかった点が
あります。

現在の対象環境がetchのruby1.8 (ruby 1.8.5)で、lenny に上げたときにも
動くようにしようと思って、いろんなバージョンで試しています。

まず、1.8.5 や 1.8.6 だとatom が生成できなくて、atom 以外で
author= が NoMethodError になりました。
これは古いバージョンだから仕方がないのかもしれません。

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)
でチェックするようにしたのですが、もっと良い方法はないのでしょうか?

atomに対応しているバージョンで生成されたatomの中をみると
dc:date が2個ずつ入っているのですが、これは問題ないのでしょうか?

最後に、これが一番困ったのですが、1.8.7 以降だと maker.image で
ひっかかって0.91 が生成できませんでした。

% cat sample-rss.rb 
#!/usr/bin/ruby -Ku
# -*- coding: utf-8 -*-

require "rss"

%w"0.91 1.0 2.0 atom".each do |version|
  begin
    # avoid NoMethodError: undefined method `make' for nil:NilClass
    next unless RSS::Maker::MAKERS.include?(version)
    rss = RSS::Maker.make(version) do |maker|
      maker.channel.about = "http://example.com/index.rss"
      maker.channel.title = "Example"
      maker.channel.description = "Example Site"
      maker.channel.link = "http://example.com/"

      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

      maker.items.do_sort = true

      maker.items.new_item do |item|
        item.link = "http://example.com/article.html"
        item.title = "Sample Article"
        item.date = Time.parse("2004/11/1 10:10")
      end

      maker.items.new_item do |item|
        item.link = "http://example.com/article2.html"
        item.title = "Sample Article2"
        item.date = Time.parse("2004/11/2 10:10")
      end
    end
    rss.to_s # TODO: write to file
    STDERR.puts "OK: #{version}"
  rescue
    STDERR.puts "NG: #{version}: #{$!}"
  end
end
% ruby-1.8.6 -v sample-rss.rb
ruby 1.8.6 (2009-03-31 patchlevel 368) [i686-linux]
OK: 0.91
OK: 1.0
OK: 2.0
% ruby-1.8.7 -v sample-rss.rb
ruby 1.8.7 (2009-04-08 patchlevel 160) [i686-linux]
NG: 0.91: required variables of maker.image are not set: url, title
OK: 1.0
OK: 2.0
OK: atom
% ruby18 -v sample-rss.rb
ruby 1.8.8dev (2009-05-09 revision 23381) [i686-linux]
NG: 0.91: required variables of maker.image are not set: url, title
OK: 1.0
OK: 2.0
OK: atom
% ruby-1.9.1 -v sample-rss.rb
ruby 1.9.1p129 (2009-05-12 revision 23411) [i686-linux]
NG: 0.91: required variables of maker.image are not set: url, title
OK: 1.0
OK: 2.0
OK: atom
% 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
NG: 0.91: required variables of maker.image are not set: url, title
OK: 1.0
OK: 2.0
OK: atom
%

$ ruby1.8 -v sample-rss.rb 
ruby 1.8.5 (2006-08-25) [i486-linux]
OK: 0.91
OK: 1.0
OK: 2.0
$


-- 
|ZnZ(ゼット エヌ ゼット)
|西山和広(Kazuhiro NISHIYAMA)

In This Thread

Prev Next