2008年02月19日(火)

Patch for gcalapi 0.1.0 : イベントが削除できない問題対策

mhc2gcalに関するりばにしの記事

mhc2gcal の 0.2.0 をリリースした矢先に,イベントが削除できないというコメントをいただき,当方でも確認してみたところ削除できない模様.ということで調査.

Google Calendar との接続に利用させてもらっている gcalapi では,イベントを削除する際に DELETE ではなく POST を利用している模様.この手法自体は Firewall などで DELETE が使えない環境向けに用意されている手法らしいので問題なし.
問題は POST を呼び出す do_post メソッドを呼ぶ際に BODY として “DELETE uri.path” という文字列が指定されている部分.この部分は,本来 DELETE を使うときと同様,何も入れなくていいのではなかろうか?と推測.試しに空っぽの文字列(という表現であっているのか?)を入れてみたところ,ビンゴ.見事動作しました.

ということで,イベントを削除するメソッドを定義している service_base.rb に以下のパッチを適用することで対処,動くようにはなると思います.(念のため,元の部分はコメントアウトになってます.弱気?)

*** service_base.rb.0.1.0       2008-01-03 16:49:28.000000000 +0900
--- service_base.rb     2008-02-18 23:00:33.000000000 +0900
***************
*** 98,104 ****
uri = URI.parse(feed)
res = do_post(uri,
{"X-HTTP-Method-Override" => "DELETE"},
!                "DELETE " + uri.path)
logger.info("-- delete en (#{res.message}) --") if logger
res
end
--- 98,105 ----
uri = URI.parse(feed)
res = do_post(uri,
{"X-HTTP-Method-Override" => "DELETE"},
!                  "")
! #                "DELETE " + uri.path)
logger.info("-- delete en (#{res.message}) --") if logger
res
end

ちなみに,今まで動いていたものが何故急に動かなくなったのかは不明.昔は許可していた仕様が,変更になったのかな?今回のように DELETE の代替として POST を使っているのであれば,その BODY が空欄であるのは至極自然な気はする.

2009年10月26日追記:最新版の使い方はこちらをご参照ください.

2008年02月19日00時26分 | Permalink | このエントリーを含むはてなブックマーク |
Trackback URL
Comment

試してみました。私のところでもうまく動作するようになりました。
調査・修正ありがとうございます。
googleが件のパラメータをちゃんと処理するようになったので
しょうかね。
にしても、私がmhcに依存している以上に、周囲の人間は
私の予定把握のために私がmhc2gcalで提示している
カレンダーに依存していることがわかった数日でした。

kuboaki at 2008年02月21日11時02分
Comment Form

Currently you have JavaScript disabled. In order to post comments, please make sure JavaScript and Cookies are enabled, and reload the page. Click here for instructions on how to enable JavaScript in your browser.