at posts/single.html

Ruby 1.9.0 で tDiary を動かしてみる (Ruby1.8.5と共用できるよ)

前の日記の続き。 1.8/1.9両対応なんて無理ですかねぇ?ってことなので、 1.8.5 と 1.9.0 の両方で動くように頑張ってみた。

いまのところ、日記の表示、日記の更新(tDiary, Wikiスタイル)までできた。 でも、ツッコミを入れるとエラーになったり、キャッシュを消さないと動かなかったりと、まだまだ不安定すぎる。 それに jdate プラグインを入れると動かない。

とりあえず今はここまでだなぁ。

compatible.rb

tDiary で使う範囲で、 1.8と1.9で非互換なメソッドを吸収する compatible.rb を作ってみた。

  • 1.9 で無くなったメソッドを復活させる (String#to_a, String#each)
  • 1.9 で追加されたメソッドに(適当に)対応させる (String#force_encoding, String#bytesize)
unless "".respond_to?('to_a')
  class String
    def to_a
      [ self ]
    end
  end
end

unless "".respond_to?('force_encoding')
  class String
    def force_encoding(encoding)
    end
  end
end

unless "".respond_to?('bytesize')
  class String
    alias bytesize size
  end
end

class String
  def method_missing(name, *args, &block)
    each_line.__send__(name, *args, &block)
  end
end

index.rb, update.rb

  • 起動オプションに --encoding=EUC-JP を付ける (ここだけ1.8非互換)
  • $defout を $stdout に
  • body.size.to_s を body.bytesize.to_s に
  • 出力直前に body の encoding を ASCII-8BIT に変更 (なぜかこうしないと 1.9 でエラーになる)

String#bytesize と String#force_encoding は compatible.rb で定義しているので 1.8 でも OK 。

tdiary.rb

plugin/00default.rb

以下の箇所が EUC-JP だと動かない。とりあえず保留(ダメじゃん)。

if /[\x80-\xff]/

plugin/ja/05referer.rb

エスケープ文字を「\」から「\\」へ変更。

関連する日記