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