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