UNIVERSAL::tap
最近仕事柄Ruby厨でテスト厨なんですけど、久しぶりにリハビリでPerlモジュール書いてみました。
Rubyには、レシーバを引数にブロック評価してレシーバ自身を返すtapという便利なメソッドがあって、気がつけばよく使っているのでこれをPerlに移植してみました。
http://github.com/masaki/UNIVERSAL-tap
# before my $module = Module->new; $module->foo; $module->bar; $module->baz; $module->run; # after use UNIVERSAL::tap; my $module = Module->new->tap(sub { $_[0]->foo; $_[0]->bar; $_[0]->baz; })->run;
例がアレなのでメリットを感じられない気もしますが、メソッドチェーン最高!という人にはうってつけですね。
shipped MouseX-AttributeHelpers 0.04
最近 Mouse が id:gfx さんの手で凄い勢いで更新されてるわけですが、時間が取れなくてまったく追いつけていません。
そんな中 Mouse 0.31-0.35 あたりでは MouseX-AttributeHelpers がインストールすら出来なくなってしまっていたのですが、これまた id:gfx さんが後方互換性付きの Mouse 0.37 をリリースしてくださったので、MouseX-AttributeHelpers 0.04 を CPAN にあげました。
dependencies のバージョン変更のみのアップデートですが、inc/Mouse.pm も 0.37 になってますので、インストールできない問題はとりあえず回避できているかと思います。
http://search.cpan.org/dist/MouseX-AttributeHelpers/
お急ぎの方はpauseから直接落とすか、cpanf で入れてください。
YAPC::Asia 2009 開催
もう YAPC::Asia も4回目になるんですね。
最近Perlにまったく触れていなかったんだけど、来たら来たで何か書くモチベーションが出た。と、そんなところで昨日の前夜祭で hide-k さんに「Catalyst::Controller::Resources で ActionRole 使えるようにしてよ」的なメッセージをもらったので、対応しました。
http://search.cpan.org/~masaki/Catalyst-Controller-Resources-0.08/
そもそも Catalyst をアップデートしたところ、既存の Resources も動かなくなってしまって、その原因を探すのに結構時間をとられちゃった。本当は今日の hide-k さんのトークまでに CPAN に上げたかったんだけど、無理でした。
結局、ある条件で Resources 継承した Controller で new が何故か2回呼ばれるようになっていて、それで Method Attribute に同じものが2つ代入されて、Catalyst::DispatchType::Chained で「Chained('/foo', '/bar') みたいな複数には対応しないよ」という感じで落ちていたらしい。Method Attribute を動的に injection する箇所を修正して対応。
昨日今日と連続で飲んでて寝不足もひどいので、今日はもう寝ます。
あと前夜祭の Yokohama.pm の発表での話だけど、Schenker はあそこまで出来るんだったら使ってみたいと思った。
ActiveResource だってもっと ActiveRecord っぽく使いたい
はやく AMo ベースの ARes 出ないかな、とか思いながら探したら HyperactiveResource とかいうの見つけた。
まだ validates_presence_of とか基本的なものしか試してないけど、大丈夫そう。
なんで名前を HyperActiveResource にしなかったんだろう。最初読めなかったじゃないか。それにしてもこれ、一個のファイルにいろんな機能詰め込んじゃってるので、ベースにして奇麗に直したいなぁ。
Cucumber で Double Ruby (RR) の mock/stub を使う
合わせて spork も使っているので、Spork.each_run の中に書く。
基本的には
- cucumber/rails/world の後に rr も require する
- Cucumber::Rails::World に RR::Adapters::RRMethods を include させる
後は
- Before で RR.reset を呼んでシナリオ間の影響を抑える
- 必要であれば After で RR.verify を呼んでエクスペクテーションの検証をする
SEE ALSO: http://blog.timurv.ru/2009/4/29/cucumber-with-rr-double-ruby
proxy 環境下の gem でリモートとローカルのリポジトリを一緒に使う
そんな環境の人、あまりいないかもしれないけど。
# .gemrc :sources: - http://gems.rubyforge.org - http://gems.github.com - http://gems.internal.local
こういう特定の環境だと、大体は環境変数 HTTP_PROXY および NO_PROXY を定義して自動で proxy 通るようにしてると思うんだけど、gem が内部で使ってる Net::HTTP は NO_PROXY を自動で解釈してよしなに、というのはやってくれないみたい。
ちょっと探したら http_configuration という gem パッケージがあって、これは RDoc を見たところ Net::HTTP を拡張して no_proxy などを指定することができるようだったので、gem 内でもこれ使うようにパッチ書いてみたら、とりあえず動いてる模様。
webrat + selenium を firefox-3.5 で動かす
webrat-0.4.4 同梱の selenium-server.jar は firefox-3.0.* までしか対応してないっぽいので、ここを参考にやったらとりあえず動きました。
Selenium, webrat and the firefox beta –
ちなみに webrat-0.4.4 は selenium-client-1.2.15 より新しいバージョンには対応していないので注意。selenium-client-1.2.14 で動かすべし 。