Ну все просто – похоже все-таки косяк в роутерах, $auth портится на втором бридже, хотя не должен.<br>Напишите тесты и отправьте Себастьяну.<br><br><div class="gmail_quote">2010/5/25 Eugene Ardarov <span dir="ltr"><<a href="mailto:spleenjack@gmail.com">spleenjack@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">Если задать второй бридж ДО роута на /gift/, то срабатывают два бриджа<br>
- что логично. Но вот что я сам не понял - это работает только если<br>
есть промежуточный роут до /about/. Вот скрипт, который не проходит<br>
два последних теста для роута, где нет точки до /about/ :<br>
<br>
#!/usr/bin/env perl<br>
<br>
use strict;<br>
use warnings;<br>
<br>
use FindBin;<br>
use lib "$FindBin::Bin/lib";<br>
use lib "$FindBin::Bin/../lib";<br>
<br>
use Test::More;<br>
<br>
use MojoX::Routes;<br>
use MojoX::Routes::Match;<br>
use Mojo::Transaction::HTTP;<br>
<br>
# auth#check -> album#allow -> gift#index (with intermediate route<br>
to /about/)<br>
my $r1 = MojoX::Routes->new;<br>
my $auth1 = $r1->bridge->to('auth#check');<br>
$auth1->route('/about/')->to('pref#about');<br>
$auth1->bridge->to('album#allow');<br>
$auth1->route('/gift/')->to('gift#index');<br>
<br>
# auth#check -> gift#index (album#allow defined after /gift/)<br>
my $r2 = MojoX::Routes->new;<br>
my $auth2 = $r2->bridge->to('auth#check');<br>
$auth2->route('/about/')->to('pref#about');<br>
$auth2->route('/gift/')->to('gift#index');<br>
$auth2->bridge->to('album#allow');<br>
<br>
# auth#check -> gift#index (without intermediate route to<br>
/about/). album#allow disappeared O_o<br>
my $r3 = MojoX::Routes->new;<br>
my $auth3 = $r3->bridge->to('auth#check');<br>
#$auth3->route('/about/')->to('pref#about');<br>
$auth3->bridge->to('album#allow');<br>
$auth3->route('/gift/')->to('gift#index');<br>
<br>
my $tx = Mojo::Transaction::HTTP->new;<br>
$tx->req->method('GET');<br>
$tx->req->url->parse('/gift');<br>
<br>
my $m1 = MojoX::Routes::Match->new($tx)->match($r1);<br>
is($m1->stack->[0]->{controller}, 'auth');<br>
is($m1->stack->[0]->{action}, 'check');<br>
is($m1->stack->[1]->{controller}, 'album');<br>
is($m1->stack->[1]->{action}, 'allow');<br>
is($m1->stack->[2]->{controller}, 'gift');<br>
is($m1->stack->[2]->{action}, 'index');<br>
is(@{ $m1->stack }, 3);<br>
<br>
my $m2 = MojoX::Routes::Match->new($tx)->match($r2);<br>
is($m2->stack->[0]->{controller}, 'auth');<br>
is($m2->stack->[0]->{action}, 'check');<br>
is($m2->stack->[1]->{controller}, 'gift');<br>
is($m2->stack->[1]->{action}, 'index');<br>
is(@{ $m2->stack }, 2);<br>
<br>
my $m3 = MojoX::Routes::Match->new($tx)->match($r3);<br>
is($m3->stack->[0]->{controller}, 'auth');<br>
is($m3->stack->[0]->{action}, 'check');<br>
is($m3->stack->[1]->{controller}, 'album');<br>
is($m3->stack->[1]->{action}, 'allow');<br>
is($m3->stack->[2]->{controller}, 'gift');<br>
is($m3->stack->[2]->{action}, 'index');<br>
is(@{ $m3->stack }, 3);<br>
<br>
25 мая 2010 г. 9:11 пользователь Oleg Zhelo <<a href="mailto:oleg.zhelo@gmail.com">oleg.zhelo@gmail.com</a>> написал:<br>
<div><div></div><div class="h5">> Что-то никак не могу никому объяснить, что меня беспокоит в этом<br>
> случае. Или мне кажется, что меня не понимают, или я не понимаю, что<br>
> мне отвечают... Короче, еще одна попытка :)<br>
> #!/usr/bin/perl<br>
> use common::sense;<br>
> use lib qw(../lib lib);<br>
> $ENV{MOJO_APP} ||= 'App';<br>
> use Mojolicious::Commands;<br>
> Mojolicious::Commands->start;<br>
><br>
> package App;<br>
> use base 'Mojolicious';<br>
> use common::sense;<br>
><br>
> sub startup {<br>
> my $self = shift;<br>
> my $r = $self->routes;<br>
> my $auth = $r->bridge->to('auth#check');<br>
> $auth->route('/about/')->to('pref#about');<br>
> $auth->route('/gift/')->to('gift#index');<br>
> my $album = $auth->bridge->to('album#allow');<br>
> $album->route('/album/create/')->to('album#create');<br>
> }<br>
> =WTF<br>
> Какого хера для /gift вызывается App::Album::allow ?! Если такое<br>
> поведение нормально, то, на мой взгяд, bridge вообще бесполезны.<br>
> Dispatching "App::Album::allow".<br>
> Dispatching "App::Gift::index".<br>
> А так работает:<br>
> $auth->route('/gift/')->to('gift#index');<br>
> my $album = $auth->bridge->to('album#allow');<br>
> $album->route('/album/create/')->to('album#create');<br>
> Dispatching "App::Auth::check".<br>
> Dispatching "App::Gift::index".<br>
> =cut<br>
><br>
> package App::Auth;<br>
> use base 'Mojolicious::Controller';<br>
><br>
> sub check {<br>
> 1;<br>
> }<br>
><br>
> package App::Album;<br>
> use base 'Mojolicious::Controller';<br>
><br>
> sub allow {<br>
> 1;<br>
> }<br>
><br>
> sub create {<br>
> shift->render_text(__PACKAGE__);<br>
> }<br>
><br>
> package App::Gift;<br>
> use base 'Mojolicious::Controller';<br>
><br>
> sub index {<br>
> shift->render_text(__PACKAGE__);<br>
> }<br>
><br>
> package App::Pref;<br>
> use base 'Mojolicious::Controller';<br>
><br>
> sub about {<br>
> shift->render_text(__PACKAGE__);<br>
> }<br>
> 1;<br>
><br>
> Oleg Zhelo<br>
><br>
><br>
><br>
> 24 мая 2010 г. 22:01 пользователь <<a href="mailto:moscow-pm-request@pm.org">moscow-pm-request@pm.org</a>> написал:<br>
>> Сообщения, предназначенные для списка рассылки Moscow-pm, необходимо<br>
>> отправлять по адресу<br>
>> <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a><br>
>><br>
>> Для изменения параметров подписки вы можеже использовать веб-страницу<br>
>> <a href="http://mail.pm.org/mailman/listinfo/moscow-pm" target="_blank">http://mail.pm.org/mailman/listinfo/moscow-pm</a><br>
>><br>
>> Для получения информации о том, как пользовать почтовым интерфейсом,<br>
>> отправьте письмо, в теле или теме которого будет слово 'help', по<br>
>> адресу:<br>
>> <a href="mailto:moscow-pm-request@pm.org">moscow-pm-request@pm.org</a><br>
>><br>
>> Адрес человека, ответственного за этот список рассылки:<br>
>> <a href="mailto:moscow-pm-owner@pm.org">moscow-pm-owner@pm.org</a><br>
>><br>
>> При ответе, пожалуйста, измение тему письма так, чтобы она была более<br>
>> содержательной чем "Re: Содержание дайджеста списка рассылки<br>
>> Moscow-pm..."<br>
>><br>
>><br>
>> В этом номере:<br>
>><br>
>> 1. mojolicious баг в bridge? (Oleg Zhelo)<br>
>> 2. Re: mojolicious баг в bridge? (Анатолий Шарифулин)<br>
>><br>
>><br>
>> ----------------------------------------------------------------------<br>
>><br>
>> Message: 1<br>
>> Date: Mon, 24 May 2010 16:51:34 +0300<br>
>> From: Oleg Zhelo <<a href="mailto:oleg.zhelo@gmail.com">oleg.zhelo@gmail.com</a>><br>
>> Subject: [Moscow.pm] mojolicious баг в bridge?<br>
>> To: <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a><br>
>> Message-ID:<br>
>> <<a href="mailto:AANLkTikb4al01w3j-6qPZ9TCG-e8H_-wwtsR3uW789Ih@mail.gmail.com">AANLkTikb4al01w3j-6qPZ9TCG-e8H_-wwtsR3uW789Ih@mail.gmail.com</a>><br>
>> Content-Type: text/plain; charset=UTF-8<br>
>><br>
>> Это баг или правильное поведение? Я так понимаю, что баг, но внятной<br>
>> документации нет :)<br>
>> my $r = $self->routes;<br>
>> my $auth = $r->bridge->to('auth#check');<br>
>> $auth->route('/about/')->to('pref#about');<br>
>> my $album = $auth->bridge->to('album#allow');<br>
>> $album->route('/album/create/')->to('album#create');<br>
>> $auth->route('/gift/')->to('gift#index');<br>
>><br>
>> /gift/<br>
>> auth#check -> album#allow -> gift#index<br>
>><br>
>> ------------------------------<br>
>><br>
>> Message: 2<br>
>> Date: Mon, 24 May 2010 19:43:47 +0400<br>
>> From: Анатолий Шарифулин <<a href="mailto:sharifulin@gmail.com">sharifulin@gmail.com</a>><br>
>> Subject: Re: [Moscow.pm] mojolicious баг в bridge?<br>
>> To: "Moscow.pm group" <<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a>><br>
>> Message-ID:<br>
>> <<a href="mailto:AANLkTil5nzxVI3Hm4nSvi7PpQ3ZhPJDqN9EcKSavHNYS@mail.gmail.com">AANLkTil5nzxVI3Hm4nSvi7PpQ3ZhPJDqN9EcKSavHNYS@mail.gmail.com</a>><br>
>> Content-Type: text/plain; charset="koi8-r"<br>
>><br>
>> Не знаю, на сколько это баг<br>
>> Вот так работает <a href="http://gist.github.com/412016" target="_blank">http://gist.github.com/412016</a><br>
>><br>
>> Нужно написать тест, тогда Себастьян исправит<br>
>><br>
>> 2010/5/24 Oleg Zhelo <<a href="mailto:oleg.zhelo@gmail.com">oleg.zhelo@gmail.com</a>><br>
>><br>
>>> Это баг или правильное поведение? Я так понимаю, что баг, но внятной<br>
>>> документации нет :)<br>
>>> my $r = $self->routes;<br>
>>> my $auth = $r->bridge->to('auth#check');<br>
>>> $auth->route('/about/')->to('pref#about');<br>
>>> my $album = $auth->bridge->to('album#allow');<br>
>>> $album->route('/album/create/')->to('album#create');<br>
>>> $auth->route('/gift/')->to('gift#index');<br>
>>><br>
>>> /gift/<br>
>>> auth#check -> album#allow -> gift#index<br>
>>> --<br>
>>> Moscow.pm mailing list<br>
>>> <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
>>><br>
>><br>
>><br>
>><br>
>> --<br>
>> С уважением,<br>
>> Анатолий Шарифулин.<br>
>> ----------- следущая часть -----------<br>
>> Вложение в формате HTML было извлечено&hellip;<br>
>> URL: <<a href="http://mail.pm.org/pipermail/moscow-pm/attachments/20100524/6efad2a6/attachment-0001.html" target="_blank">http://mail.pm.org/pipermail/moscow-pm/attachments/20100524/6efad2a6/attachment-0001.html</a>><br>
>><br>
>> ------------------------------<br>
>><br>
>> _______________________________________________<br>
>> Moscow-pm mailing list<br>
>> <a href="mailto:Moscow-pm@pm.org">Moscow-pm@pm.org</a><br>
>> <a href="http://mail.pm.org/mailman/listinfo/moscow-pm" target="_blank">http://mail.pm.org/mailman/listinfo/moscow-pm</a><br>
>><br>
>><br>
>> Конец Дайджест списка рассылки Moscow-pm; том 31, выпуск 26<br>
>> ***********************************************************<br>
>><br>
> --<br>
> Moscow.pm mailing list<br>
> <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
><br>
--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>С уважением,<br> Анатолий Шарифулин.<br>