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

パルカワ2

PerlとRubyとイチャラブ

わからない

package MyApp::Types;
use strict;
use warnings;
use utf8;
use Mouse::Util::TypeConstraints;

subtype 'PositiveInt'
    => as 'Int'
    => where { $_ > 0 }
    => message { "($_)は正の数ではありません" };

subtype 'UserId'
    => as 'PositiveInt'
    => where { $_ <= 300 }
    => message { "($_)は300以下ではありません" };

subtype 'AdminUserId'
    => as 'UserId'
    => where { $_ == 1 }
    => message { "($_)は管理ユーザーではありません" };

1;

上のようなMyApp::Typesというのを作ってモデルとかで

sub search_user {
    state $rule = Data::Validator->new(
        user_id => {isa => 'AdminUserId'},
    );

    my $args = $rule->validate(user_id => 400);

    ...;
}

とかやると"(400)は管理ユーザーではありません"ってエラーが出るんですけど、本当は"(400)は300以下ではありません"って出したいんだけど、無理なのかな。