[Moscow.pm] Дайджест списка рассылки Moscow-pm; том 31, выпуск 26

Eugene Ardarov spleenjack на gmail.com
Вт Май 25 00:15:53 PDT 2010


Если задать второй бридж ДО роута на /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 <oleg.zhelo на gmail.com> написал:
> Что-то никак не могу никому объяснить, что меня беспокоит в этом
> случае. Или мне кажется, что меня не понимают, или я не понимаю, что
> мне отвечают... Короче, еще одна попытка :)
> #!/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 пользователь  <moscow-pm-request на pm.org> написал:
>> Сообщения, предназначенные для списка рассылки Moscow-pm, необходимо
>> отправлять по адресу
>>        moscow-pm на pm.org
>>
>> Для изменения параметров подписки вы можеже использовать веб-страницу
>>        http://mail.pm.org/mailman/listinfo/moscow-pm
>>
>> Для получения информации о том, как пользовать почтовым интерфейсом,
>> отправьте письмо, в теле или теме которого будет слово 'help', по
>> адресу:
>>        moscow-pm-request на pm.org
>>
>> Адрес человека, ответственного за этот список рассылки:
>>        moscow-pm-owner на pm.org
>>
>> При ответе, пожалуйста, измение тему письма так, чтобы она была более
>> содержательной чем "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 <oleg.zhelo на gmail.com>
>> Subject: [Moscow.pm] mojolicious баг в bridge?
>> To: moscow-pm на pm.org
>> Message-ID:
>>        <AANLkTikb4al01w3j-6qPZ9TCG-e8H_-wwtsR3uW789Ih на mail.gmail.com>
>> 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: Анатолий Шарифулин <sharifulin на gmail.com>
>> Subject: Re: [Moscow.pm] mojolicious баг в bridge?
>> To: "Moscow.pm group" <moscow-pm на pm.org>
>> Message-ID:
>>        <AANLkTil5nzxVI3Hm4nSvi7PpQ3ZhPJDqN9EcKSavHNYS на mail.gmail.com>
>> Content-Type: text/plain; charset="koi8-r"
>>
>> Не знаю, на сколько это баг
>> Вот так работает http://gist.github.com/412016
>>
>> Нужно написать тест, тогда Себастьян исправит
>>
>> 2010/5/24 Oleg Zhelo <oleg.zhelo на gmail.com>
>>
>>> Это баг или правильное поведение? Я так понимаю, что баг, но внятной
>>> документации нет :)
>>>  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
>>> moscow-pm на pm.org | http://moscow.pm.org
>>>
>>
>>
>>
>> --
>> С уважением,
>> Анатолий Шарифулин.
>> ----------- следущая часть -----------
>> Вложение в формате HTML было извлечено&hellip;
>> URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20100524/6efad2a6/attachment-0001.html>
>>
>> ------------------------------
>>
>> _______________________________________________
>> Moscow-pm mailing list
>> Moscow-pm на pm.org
>> http://mail.pm.org/mailman/listinfo/moscow-pm
>>
>>
>> Конец Дайджест списка рассылки Moscow-pm; том 31, выпуск 26
>> ***********************************************************
>>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>


Подробная информация о списке рассылки Moscow-pm