■ソースコード
------------------------------
require "rss/1.0"
require "rss/maker"
rss = RSS::Maker.make("1.0") do |maker|
maker.channel.about = "http://www.example.com/feed"
maker.channel.title = "フィードのタイトル"
maker.channel.description = "フィードの要約"
maker.channel.link = "http://www.example.com/"
item = maker.items.new_item
item.title = "記事のタイトル"
item.link = "http://www.example.com/articles/20061126"
end
rss.output_encoding = "Shift_JIS"
puts rss.to_s
------------------------------
私は RSS はおろか、taxo タグのなんたるかも知りませんが。以下のタグの出力を抑制したいということでよろしいしょうか。
< <taxo:topics> < <rdf:Bag/> < </taxo:topics>
Ruby 1.9 の nightly build に添付の RSS ライブラリ Ver.0.1.6 だと、taxonomy.rb に以下の行を付加すれば、出力を抑制できるようです。
/usr/lib/ruby/1.8/rss # vi taxonomy.rb 84 def to_s(need_convert=true, indent=calc_indent) 85 rv = tag(indent) do |next_indent| 86 [ 87 Bag_element(need_convert, next_indent), 88 other_element(need_convert, next_indent), 89 ] 90 end 91 '' # 追加 92 end
上記の場所が見つからない場合は、以下のように探してみてください。
/usr/lib/ruby/1.8/rss # cat -n taxonomy.rb | grep to_s 84 def to_s(need_convert=true, indent=calc_indent) 168 def to_s(need_convert=true, indent=calc_indent)
なお、ライブラリの直接の変更でなくスイッチかなにかで抑制できないかもどうかも確認してみましたが、ざっと読んだ限りではそのようなスイッチは存在しないようです。
あまり良い方法が思い浮かばなかったので、回答する気はなかったのですが、ライブラリ変更は最後の最後の手段だと思うので、とりあえずそうではない方法を。参考になれば幸いです。
モジュールの使用は、ライブラリの読み込み状況で変わってくるので、rss/taxonomy.rbの読み込みを抑止すれば良いと思います。
正攻法で読み込みを辞めさせる方法は無いと思うので、本当は読んでないのに読んだ事にしてしまいます。
$LOADED_FEATURES.push("rss/taxonomy.rb")#既に読んだ事にして読み込みロック require "rss/1.0" require "rss/maker" rss = RSS::Maker.make("1.0") do |maker| maker.channel.about = "http://www.example.com/feed" maker.channel.title = "フィードのタイトル" maker.channel.description = "フィードの要約" maker.channel.link = "http://www.example.com/" item = maker.items.new_item item.title = "記事のタイトル" item.link = "http://www.example.com/articles/20061126" end rss.output_encoding = "Shift_JIS" puts rss.to_s
初めの一行を追加するだけです。
いかにも対処療法的クイックハックでなんですが、パッと手間無く思いついたのはこれぐらいでした。
1.8.5 では taxonomy.rb に to_s がないようです。
中身が空っぽだし、Feed Validator にも This feed does not validate なんて言われるので消したかったのですが。