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 | 1件のコメント | このエントリーを含むはてなブックマーク