なんか表示に使うためのインスタンス変数がそれぞれ別の名前だったりするんで、似たようなことを何度も何度も書かされたのがちょっとせつない。 trunk とか追いかけてないので、2.2.0 用。 カテゴリ表示、日毎表示、月毎表示、長年日記に対応しているはず。 一応ごくごく簡単に動作確認はしたけど、まあなんかおかしくても知らん(ぉぃ
diff -urp tdiary-2.2.0.orig/index.rb tdiary-2.2.0/index.rb
--- tdiary-2.2.0.orig/index.rb 2007-01-08 14:55:23.000000000 +0900
+++ tdiary-2.2.0/index.rb 2008-07-04 11:05:42.000000000 +0900
@@ -103,6 +103,15 @@ begin
<body>Wait or <a href="#{$!.path}">Click here!</a></body>
</html>]
end
+rescue TDiary::NotFound
+ if @cgi then
+ print @cgi.header( 'status' => CGI::HTTP_STATUS['NOT_FOUND'], 'type' => 'text/html' )
+ else
+ print "Status: 404 Not Found\n"
+ print "Content-Type: text/html\n\n"
+ end
+ puts "<h1>404 Not Found</h1>"
+ puts "<div>#{' ' * 500}</div>"
rescue Exception
if @cgi then
print @cgi.header( 'status' => CGI::HTTP_STATUS['SERVER_ERROR'], 'type' => 'text/html' )
diff -urp tdiary-2.2.0.orig/misc/plugin/category.rb tdiary-2.2.0/misc/plugin/category.rb
--- tdiary-2.2.0.orig/misc/plugin/category.rb 2007-09-27 22:57:22.000000000 +0900
+++ tdiary-2.2.0/misc/plugin/category.rb 2008-07-04 11:29:24.000000000 +0900
@@ -109,6 +109,8 @@ def category_list_sections
years = info.years
r = ''
+ raise ::TDiary::NotFound if @categorized.empty? and bot?
+
@categorized.keys.sort.each do |c|
info.category = c
if @category_icon[c]
diff -urp tdiary-2.2.0.orig/tdiary.rb tdiary-2.2.0/tdiary.rb
--- tdiary-2.2.0.orig/tdiary.rb 2007-12-15 22:55:06.000000000 +0900
+++ tdiary-2.2.0/tdiary.rb 2008-07-04 12:07:13.000000000 +0900
@@ -406,6 +406,7 @@ module TDiary
class PermissionError < TDiaryError; end
class PluginError < TDiaryError; end
class BadStyleError < TDiaryError; end
+ class NotFound < TDiaryError; end
#
# class IOBase
@@ -1711,6 +1717,14 @@ EOS
@diary ? @diary.last_modified : Time::at( 0 )
end
+ def eval_rhtml( prefix = '' )
+ if not @diary and @conf.bot?
+ raise NotFound
+ else
+ super(prefix)
+ end
+ end
+
protected
def load( date )
if not @diary or (@diary.date.dup + 12*60*60).gmtime.strftime( '%Y%m%d' ) != date.dup.gmtime.strftime( '%Y%m%d' ) then
@@ -1788,10 +1802,24 @@ EOS
end
#
+ # class TDiaryMonthBase
+ # base of TDiaryMonth and TDiaryNYear
+ #
+ class TDiaryMonthBase < TDiaryView
+ def eval_rhtml( prefix = '' )
+ if @diaries.empty? and @conf.bot?
+ raise NotFound
+ else
+ super(prefix)
+ end
+ end
+ end
+
+ #
# class TDiaryMonth
# show month mode view
#
- class TDiaryMonth < TDiaryView
+ class TDiaryMonth < TDiaryMonthBase
def initialize( cgi, rhtml, conf )
super
@@ -1822,7 +1850,7 @@ EOS
# class TDiaryNYear
# show nyear mode view
#
- class TDiaryNYear < TDiaryView
+ class TDiaryNYear < TDiaryMonthBase
def initialize(cgi, rhtml, conf)
super
つーか、ハードタブ使ってるコードの diff ってどう取るのが正しいんだろ。 ちゃんとパッチあたるんかな、これ。 まあ、大した分量じゃないんで手パッチでもね。
ちなみに、Ruby のコードに diff の p オプション使ったことなかったんで試しに使ってみたら、なんか微妙にうまくいってるところもあって大変微妙。 対応してないなら全くうまくいかないと思うんで、一応対応してるってことなんかな。
ともあれ、こんなんでもよければ叩き台にでもしてください。> しばたさん
(補足)
「存在するけど非表示の日記」については考慮してないので、実質的に表示するものが無くてもデータとして非表示にした分が存在する場合には 404 にならないはず。 まあ、ありえない日付を延々と辿られるのが嫌だって話が出発点だし、この程度は許容範囲だと思うけど。
(/補足)
ほんとは TDiary::TDiaryBase に
def has_data? true end
みたいなメソッドを作っておいて、do_eval_rhtml メソッドではこれを使って分岐。 制御する必要のあるサブクラスではそれぞれ has_data? をオーバーライド。
…… っていう感じにしたかったんだけど、date 系の場合は initialize の時点で必要なデータが揃うのに、category 系の場合プラグイン内じゃないと必要なデータが揃わなくて、それが実行されるのは do_eval_rhtml の最後のとこだっていうのがネックになって諦めた。 少なくとも @categorized を埋める部分をプラグインから TDiaryCategoryView に移さなきゃならなくなって、そうするともう大掛かりすぎるでしょ。
んで結局、表示すべきデータの有無を一つのインターフェイスに纏められない時点で、それぞれのクラスの分を別々に書いても同じことだってことになって、あんな感じでお茶を濁した形。
なんつーか、TDiaryCategoryView なんていうクラスがある時点で、具体的な処理をやる部分がプラグイン (少なくとも今の形式のプラグイン) になってるのは変な気はしないでもない。 過去のしがらみっぽい気がするけど、trunk はどうなってんのかな。
昨日買ってちょろっとやったんだけど、サイレントヒル好きの心をくすぐる良い雰囲気を醸し出してる。
…… のだが…… (以下、文章はうろおぼえの超適当)
見たまえげれげれ君、呪いのゲームはすべてこの同じメールアドレスから送信されているんだ。 このアドレスはずっと以前につぶれて今では廃屋になっている病院のものだ。 廃屋からゲームが送られてくるなんておかしいだろう。 だから君はその廃屋を調べに行きたまえ。
…… みたいな流れにポカーンてなって萎えた。 もうどっからツッコんでいいものやら。 ついさっきまでホラーゲームだったのに、いきなりシュールギャグの世界になったのかと思ったよ。
行かねーよ、ばか。
なのに行ってしまう主人公げれげれ。あほか。 っていうかなんつー名前付けてんの、わし。 や、だって名前入力画面がやたらドラクエっぽくてつい。 とんぬらとどっちにするか迷ったんだけどさ。
まあ、これが主人公がアホなのをいいことに言葉巧みに操ろうというなんちゃら先生の策略なんであれば許せる…… か?
今日の新事実。「メールアドレスは建物に付属する」 もうね(ry
>ハードタブ使ってるコードの diff ってどう取るのが正しいんだろ。 <br>>diff --help | grep -i tab <br> -E --ignore-tab-expansion Ignore changes due to tab expansion. <br> -t --expand-tabs Expand tabs to spaces in output. <br> -T --initial-tab Make tabs line up by prepending a tab. <br> --tabsize=NUM Tab stops are every NUM (default 8) print columns. <br> <br>--expand-tabs あたりでどうでしょう? <br>
> --expand-tabs <br> <br>どっかに貼るときはいいけど、パッチとしては使えないような…… <br>
patch の方に空白とかタブを上手いこと無視するオプションがありますよん。 <br>
あら、そうすか。知らんかった。
マクロスFの感想の書き込みの時間が微妙に変わってきているのはなんかあるんでしょうか? <br> <br>TBSは今日も3:30すぎから〜 <br>
や、別に意味は無いですけど。 <br>見てすぐ書くときもあれば、しばらく経ってから書くこともありという感じで、なんとなくです。
ひとまず、パッチを trunk に採用しました。ありがとうございました!
tDiary にはお世話になってるので、多少なりと貢献できたなら嬉しいです :-)