読者です 読者をやめる 読者になる 読者になる

パルカワ2

PerlとRubyとイチャラブ

DBICでRowがなかったらエラーを吐く

という処理は何回も書くと思う。だるい。

前回はfindを上書きしようとしていた。
http://hisaichi5518.hatenablog.jp/entry/2013/12/03/175603

# MyApp::Schema::ResultSet
# rowがなければMyApp::Exception::ResultNotFound
sub find_with_exception {
    my $self = shift;
    my $row = $self->find(@_);

    $self->_check_exception($row);

    return $row;
}

sub single_with_exception {
    my $self = shift;
    my $row = $self->single(@_);

    $self->_check_exception($row);

    return $row;
}

sub _check_exception {
    my ($self, $row) = @_;

    if (not defined $row) {
        my ($package, $filename, $line) = caller(1);
        die MyApp::Exception::ResultNotFound->new(
            package => $package,
            file    => $filename,
            line    => $line,
            system_message => "Can't find @{[$self->result_class]} row.",
        );
    }
    return $row;
}
# result_set.t
$rs->single_with_exception({id => 1});

というのをクレイジーパピヨンこと @Maco_Tasu が書いてくれた。
クレイジーパピヨンってなんなんだ。