make_schema_at が external クラスも読むようになっている
既存のDBに接続してテーブル情報などを取得して、DBIx::Class::Schema のテーブルクラスを作成してくれる Schema::Loader の make_schema_at
が自分で定義した外部クラスファイルも見てくれるようになっていた。
perl -Ilib -MDBIx::Class::Schema::Loader=make_schema_at,dump_to_dir:tmp -e 'make_schema_at("MyApp::Schema", { components => [qw/ResultSetManager UTF8Columns/]}, ["dbi:mysql:myapp","root"])'
などとすると、./tmp にスキーマクラスをダンプしてくれるのだけど、-Ilib している中にすでに MyApp::Schema::User とかがかいてあると、それも作成するクラスにくっつけてくれる。
便利だ。
HTML::Widget
試用中。
perlコード内でフォーム生成するのは違和感ありすぎるし、気に入らない。うーむ。
DBIx::Class vs mysql vs UTF-8
それ、0.7以降(多分)ならconnectionやconnect上書きしなくてもこうかけるよ。
__PACKAGE__->connection(
'dbi:mysql:foo',
'root',
{
on_connect_do => ['SET NAMES utf8'],
},
);
HTML::TreeBuilderのエスケープ処理がよくなっている
のやつ、最近の更新で直ってるみたいだ。
HTML::Widget を試してみようとインストールしようとしたら、エスケープ関係のテストでこけて、それを追ってみたら気づいた。
--- ONLY 消し忘れ
追加実装をしているときのテスト書くときは結構 --- ONLY
とか消し忘れてそのままコミットしてしまうなぁ。
デフォルトで出来るテストスクリプトにそれのチェックするのも入れるかな。
他になんかあるかな。
prototype &
run {
my $block = shift;
is(process($block->foo), $block->bar, $block->name);
};
って引数に関数渡せる。
これは perldoc perlsub の Prototypes の項目に載ってる
An "&" requires an anonymous subroutine, which, if passed as the first argument, does not require the "sub" keyword or a subsequent comma.
プロトタイプで & を第一引数に指定した場合その無名関数には sub つけなくても良い。
これは割と使えそうだ。
たとえば、STDERRとかになんか出力しちゃううざいモジュールを使ってtestを書いているときに
sub execute(&) {
my ($out, $err);
tie_output( *STDOUT, $out );
tie_output( *STDERR, $err );
my $res = shift->();
untie *STDOUT;
untie *STDERR;
$res;
}
とか作っとくと
my $res = execute { $suck_module_output_stderr->method };
とかでSTDERRだすことなくそのモジュールのテストかける。いいのー。
grep とかな実装しかあんまりみないから新鮮に見えるのかな。
OSXもうだめかもわからん
run_like が成功するときと失敗するときがあってこまった。
run_like input => 'results';
みたいなときなんかinputのフィルタがかからないときがあったりして失敗してるくさく、なんだと思ったら、うちのOSXの問題だったみたいだ。
use_ok
を1個するだけのテストでも何回もやってるとこけたりする。ひどい。。
こけるときも毎回違う出力。
$ prove -lv t/04simpleuse.t
t/04simpleuse....dubious
Test returned status 0 (wstat 10, 0xa)
FAILED--1 test script could be run, alas--no output ever seen
とかよくわからんのだったり、
$ prove -lv t/04simpleuse.t
zsh: segmentation fault prove -lv t/04simpleuse.t
セグフォってみたり。。
$ prove -lv t/04simpleuse.t
Operator or semicolon missing before %opts at /System/Library/Perl/5.8.6/Pod/Usage.pm line 487.
Ambiguous use of % resolved as operator % at /System/Library/Perl/5.8.6/Pod/Usage.pm line 487.
Bareword "key3" not allowed while "strict subs" in use at /System/Library/Perl/5.8.6/Pod/Usage.pm line 482.
Bareword "opts" not allowed while "strict subs" in use at /System/Library/Perl/5.8.6/Pod/Usage.pm line 482.
Compilation failed in require at /usr/bin/prove line 12.
BEGIN failed--compilation aborted at /usr/bin/prove line 12.
こんなすごいのもでたよ。
再起動したらとりあえずなんか直ったくさいけど。もー、やばいわうちのmac。
HDDぶっこわれてんかなーとおもってfsckってみたけど問題なさげだったし。なんだろうほんと。
Test::Base
のpod一通り読んで、手持ちのアプリのテストを書いてみたりした。
なるほど、なかなか良いわぁ。簡単なテストはフィルタちょろっと書くだけでOKってのはいいな。
大抵のモジュールはSYNOPSIS見れば大体使い方がわかるものだけど(というかそういう風に書くよね)、Test::Baseはドキュメント読んでからじゃないとSYNOPSIS意味不明だったりするのもingyクオリティ。
あと、ドキュメントにもちらほらtypoが。
はてなブックマーク - CLON - 2006/10/08 - 手軽にモジュールのバージョンを得る perl -MDBIx::Class\ 999
kdaiba Perl perldocのどこに書いてあるんだろう
- perldoc -f use
- perldoc perlrun (の-Mのところ)
とかでしょうか。
手軽にモジュールのバージョンを得る perl -MDBIx::Class\ 999
$ perl -MDBIx::Class\ 999 DBIx::Class version 999 required--this is only version 0.07002. BEGIN failed--compilation aborted.
なるほど、こうすれば手軽にモジュールのバージョンを得られるのか。(バージョン指定のuse)
自分の使ってるマシンではaliasでモジュールのバージョンを求めるの設定してるのでいらないけど、そうじゃないところで使うのによさそう。