ブロック渡し
永和さんでの勉強会でもらったフィードバックより。
AP4R にメッセージをキューイングする際の API でブロック渡しもできるようにしてみました。
- 旧
ShopController < ApplicationController def order # 注文処理とか ... # で、決済処理なんかを非同期化 async_dispatch({:order_id => 1, :user_id => 1}, {:action => 'payment'}) end def payment # 決済処理とか end end
- 新
ShopController < ApplicationController def order # 注文処理とか ... # で、決済処理なんかを非同期化 ap4r.async_to({:action => 'payment'}) do body :order_id, 1 body :user_id, 1 end end def payment # 決済処理とか end end
ブロック内で呼べるメソッドには、body 以外に header や http_header なんてのも用意して、ヘッダ情報の指定を可能にしてみました。ちなみに以前のようなブロックをとらない書き方も残していますが、引数の順番は入れ替えました。({データ},{宛先}) の並びから、({宛先},{データ}) の並びに変更しています。
あと、さりげなく API の名前も変わっています。 (^^;
以前はプラグインのなかで ApplicationController に AP4R モジュールを include していましたが、クライアント用のクラスをつくってインスタンスを渡すようにしました。たぶんこのほうが変に名前空間を汚さずに済みますし、AP4R の提供している API だってことも一目で分かるのでいいかな、と。