[Kiev-pm] [Moscow.pm] MVC::Neaf: Not Even A Framework

Akzhan Abdulin akzhan.abdulin at gmail.com
Wed Dec 7 02:27:09 PST 2016


Ну и понятно, каждый новый фильтр дополняет предыдущие, обработка может
быть прервана любым фильтром, который вернет ложь.

7 декабря 2016 г., 13:26 пользователь Akzhan Abdulin <
akzhan.abdulin at gmail.com> написал:

> Как уже показывал - можно подсмотреть в http://v32.rusrails.ru/actio
> n-controller-overview/filters
>
> Для чего это очень удобно:
>
> Например, маршруты get one, put, patch, delete скорее всего требуют
> одинакового действия - загрузки экземпляра сущности, для дальнейших
> действий над ним, либо возврата HTTP::Status::HTTP_NOT_FOUND.
>
> Пример тоже уже скидывал:
>
> use HTTP::Status qw( HTTP_NOT_FOUND );
>
> before_filter extract_message => sub {
>     my $self = shift;
>     my $message = MyModel::Message->find( $self->param('id') )
>         or do {
>             $self->render( json => { success => \0, error => 'Not found'
> }, status => HTTP_NOT_FOUND );
>             return; # nok
>         };
>     $self->stash( message => $message );
>     return 1; # ok, filter proceed successfully
> };
>
> get '/message/:id' => { filter => 'extract_message' }, sub {
>     my $self = shift;
>     my $message = $self->stash('message'); # We always have message here!
> };
>
> put '/template/:id' => { filter => 'extract_message' }, sub {
>     my $self = shift;
>     my $message = $self->stash('message'); # We always have message here!
> };
>
> delete '/template/:id' => { filter => [ 'extract_message' ] }, sub {
>     my $self = shift;
>     my $message = $self->stash('message'); # We always have message here!
> };
>
>
> 6 декабря 2016 г., 17:06 пользователь Konstantin S. Uvarin <
> khedin at gmail.com> написал:
>
> Приветствую!
>>
>>   Я так понял, фильтры - это хуки, которые втыкаются на определённый путь
>> и все нижележащие пути? С одной стороны, руки уже чешутся написать, с
>> другой, там очень легко перегнуть палку и сделать чересчур...
>>
>>   Но спасибо за идею.
>>
>> 2016-12-03 1:00 GMT+02:00 Akzhan Abdulin <akzhan.abdulin at gmail.com>:
>>
>>> Не хватает фильтров, как минимум (в том же Mojo они тоже туповаты,
>>> каждый over перекрывает предыдущие, вместо расширения).
>>>
>>>
>>> На досуге почитайте http://www.sinatrarb.com/intro.html
>>>
>>>
>>> 2 декабря 2016 г., 17:39 пользователь Konstantin S. Uvarin via Moscow-pm
>>> <moscow-pm at pm.org> написал:
>>>
>>>> Приветствую всех!
>>>>
>>>> Сегодня я бы хотел представить веб-фреймворк на перл 5 собственного
>>>> сочинения, Ниф (Not Even A Framework). Написан он больше для
>>>> самообразования, т.к. и так их как собак нерезаных, но мне кажется, в нём
>>>> есть некие здравые идеи. Суть такова:
>>>>
>>>> 1. Приложение разбивается на маленькие процедуры-хэндлеры, привязанные
>>>> к пути в URI (см. тж. https://metacpan.org/pod/Dancer )
>>>>
>>>> 2. Хэндлер получает на вход объект запроса, из которого потом достаются
>>>> параметры, куки, заголовки и т.д. (см. тж.
>>>> https://metacpan.org/pod/Kelp )
>>>>
>>>> 3. Параметры и куки нельзя достать без валидации, например, при помощи
>>>> регулярного выражения:
>>>>
>>>>   $req->param( foo => qr/\d+/ );
>>>>
>>>> См. тж. perl -T
>>>>
>>>> В качестве альтернативы есть самовалидирующиеся формы на базе
>>>> Validator::LIVR или самописного каличного движка (но ЛИВР лучше).
>>>>
>>>> См. тж. https://metacpan.org/pod/Validator::LIVR и
>>>> https://metacpan.org/pod/Data::CGIForm
>>>>
>>>> 4. Хэндлер может вернуть ссылку на хэш с какими угодно параметрами,
>>>> которая затем передаётся в шаблонизатор для рендеринга. На данный момент
>>>> поддерживается Template::Toolkit и JSON/JSONP
>>>>
>>>> Также есть ограниченный набор ключей с минусом, которые используются
>>>> для управления самим фреймворком - -template, -status и т.п
>>>>
>>>> 5. Хэндлер может выбросить исключение: die 404 - легальный способ
>>>> вернуть настраиваемую страницу not found. Все нормальные исключения (не
>>>> трёхцифренные и не специальные объекты самого Neaf) трактуются как error
>>>> 500.
>>>>
>>>> 6. Один и тот же код может в неизменном виде запускаться как cgi, psgi
>>>> и под Apache2 + mod_perl (с некоторым бубном). Также поддерживается дебаг
>>>> из командной строки:
>>>>
>>>>    perl myapp.pl --help
>>>>    perl myapp.pl --list
>>>>
>>>> 7. Кроме этого есть поддержка статических страниц (не надо держать
>>>> отдельно нормальный веб-сервер, чтобы проверить CSS или логотип), сессий в
>>>> несколько недоделанном виде (планируется улучшение), отложенные действия,
>>>> выполняемые после запроса, ну и по мелочи ещё.
>>>>
>>>> Пример кода:
>>>>
>>>>     use strict;
>>>>     use warnings;
>>>>     use MVC::Neaf;
>>>>
>>>>     MVC::Neaf->route( "/" => sub {
>>>>         my $req = shift;
>>>>
>>>>         return {
>>>>             -template => \'Hello, [% name %]!',
>>>>             -type     => 'text/plain',
>>>>             name      => $req->param( name => qr/\w+/, "Stranger" ),
>>>>         },
>>>>     });
>>>>
>>>> На каждую фичу есть небольшой пример, они же используются как
>>>> дополнительные смоук-тесты к 80% покрытию юнит-тестами. см.
>>>> https://github.com/dallaylaen/perl-mvc-neaf/tree/master/example
>>>>
>>>> Собственно фреймворк:
>>>>
>>>> https://metacpan.org/pod/MVC::Neaf
>>>>
>>>> Буду рад обратной связи, критике, багрепортам и запросам новых фич (см.
>>>> тж. https://github.com/dallaylaen/perl-mvc-neaf/blob/master/TODO )
>>>>
>>>> С уважением,
>>>>
>>>> --
>>>> Konstantin S. Uvarin
>>>> jabber: see <from>
>>>> skype: kuvarin
>>>> http://github.com/dallaylaen
>>>>
>>>> --
>>>> Moscow.pm mailing list
>>>> moscow-pm at pm.org | http://moscow.pm.org
>>>>
>>>>
>>>
>>
>>
>> --
>> Konstantin S. Uvarin
>> jabber: see <from>
>> skype: kuvarin
>> http://github.com/dallaylaen
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/kiev-pm/attachments/20161207/fd98bfd4/attachment-0001.html>


More information about the Kiev-pm mailing list