DBICで簡単map

http://d.hatena.ne.jp/naoya/20080419/1208579525
naoyaさんのをふと思い出してDBICでの出来るように書いてみた次第。

DBIx::MoCoの場合とは異なりDBICの場合は、
searchメソッドから戻ってくるものはスカラーコンテキストではResultSetなので
無理矢理DBIC::ResultSetにmapメソッドを生やしてみた。

package DBIx::Class::RowCollection;
use strict;
use warnings;
use base 'DBIx::Class';

our $VERSION = '0.01';

{
    use DBIx::Class::ResultSet;
    package DBIx::Class::ResultSet;
    use Params::Validate qw/:all/;
    use strict;
    use warnings;

    sub map {
        my ($self, $code) = validate_pos(@_, 1, { type => CODEREF });
        my @maped = CORE::map &$code, $self->all;
        return wantarray ? @maped : \@maped;
    }

}

=head1 NAME

DBIx::Class::RowCollection - DBIC row collection

=head1 SYNOPSIS

    package CollectionTest::User;
    use strict;
    use warnings;
    use base 'DBIx::Class';
    __PACKAGE__->load_components(qw/RowCollection Core/);

    in your script:
    my @user_names = $schema->resultset('User')->search->map(sub { $_->name });
    my @users      = $schema->resultset('User')->search->map(sub { +{$_->get_columns } });

=head1 DESCRIPTION

    A can be easily called "map".


普通だと

map { $_->name } $rs->all;

と、いった感じで書いてましたが

$rs->map(sub { $_->name } );

と、書けてより直感的かなとおもうます。
mapメソッド内に書くsubがちょっとよけいかな。