$r->> any('/abc/:cde', {cde => qr/\d+/} )->to('module#foo');

да это понятно. просто тут либо eq, либо регулярник.

а нам надо было что если там просто скаляр, то он тоже является
регулярником, ну и с числами получается функция по сути.

наиболее частые случаи в плагин бы запхать интересно бы было

> On Tue, 20 Mar 2012 20:57:48 +0400, Ivan Petrov
> <[email protected]> wrote:
>> если для стешей (то есть плейсхолдеры в урле), то можно что-то в таком
>> духе делать (кусок выдран прямо из проекта):
>> 
>>     $self->routes->add_condition(
>>         number => sub {
>>             my ($r, $c, $captures, $pattern) = @_;
>>             $pattern = [ $pattern ] unless ref $pattern eq 'ARRAY';
>>             for (@$pattern) {
>>                 return unless exists $captures->{$_};
>>                 return unless $captures->{$_} =~ /^\d+$/;
>>                 return unless $captures->{$_};
>>             }
>>             return 1;
>>         }
>>     );
>> 
>>     $self->routes->add_condition(
>>         like    => sub {
>>             my ($r, $c, $captures, $pattern) = @_;
>>             return unless 'HASH' eq ref $pattern;
>>             for (keys %$pattern) {
>>                 return unless exists $captures->{$_};
>>                 if ('Regexp' eq ref $pattern->{$_}) {
>>                     return unless $captures->{$_} =~ $pattern->{$_};
>>                     next;
>>                 }
>>                 return unless $captures->{$_} =~ /\Q$pattern->{$_}\E/;
>>             }
>>             return 1;
>>         }
>>     );
>> 
>> 
>> первый кондишен проверяет на корректность id-шники (должна быть
>> цифра), второй на соответствие регулярному выражению.
>> 
>> использование какое-то такое:
>> 
$r->>> any('/abc/:cde')
>>         ->over(number => 'cde')
>>         ->to('module#foo');
>> 
$r->>> any('/abc/:cde/:def')
>>         ->over(number => [ 'cde', 'def' ])
>>         ->to('module#foo');
>> 
$r->>> get('/abc/:cde')
>>         ->over(like => { cde => qr{^\d+$} })
>>         ->to('module#foo');
>> 
>> Получается когда неправильное что-то в урле задано, то просто 404
>> отвечается и все.
>> 
>> Интересно, кто-то оборачивал валидаторы для стешей в плагин? типа
>> самое употребимое (а-ля вышеприведенный лайк и проверка id-шников)

> --
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить