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 とかいうの見つけた。

GitHub - taryneast/hyperactiveresource: HyperActiveResource extends ActiveResource so it works properly and behaves more like ActiveRecord. Note: you will need to replace ActiveResource's validations.rb for this to work!!! (see wiki for more info). This plugin is aimed at Rails 2.3.X A lot of the functionality here is being drawn into Rails 3.0 Active Resource. See wiki for more info.

まだ validates_presence_of とか基本的なものしか試してないけど、大丈夫そう。

なんで名前を HyperActiveResource にしなかったんだろう。最初読めなかったじゃないか。それにしてもこれ、一個のファイルにいろんな機能詰め込んじゃってるので、ベースにして奇麗に直したいなぁ。

Cucumber で Double Ruby (RR) の mock/stub を使う

合わせて spork も使っているので、Spork.each_run の中に書く。

基本的には

  1. cucumber/rails/world の後に rr も require する
  2. 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

gist:160099 · GitHub

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 内でもこれ使うようにパッチ書いてみたら、とりあえず動いてる模様。

パッチはこちら。RubyGems with HTTP_PROXY/NO_PROXY · GitHub

webrat + selenium を firefox-3.5 で動かす

webrat-0.4.4 同梱の selenium-server.jar は firefox-3.0.* までしか対応してないっぽいので、ここを参考にやったらとりあえず動きました。

Selenium, webrat and the firefox beta –

http://gist.github.com/155454

ちなみに webrat-0.4.4 は selenium-client-1.2.15 より新しいバージョンには対応していないので注意。selenium-client-1.2.14 で動かすべし 。