[Kiev-pm] [Moscow.pm] MVC::Neaf: Not Even A Framework
Akzhan Abdulin
akzhan.abdulin at gmail.com
Wed Dec 7 02:26:12 PST 2016
Как уже показывал - можно подсмотреть в http://v32.rusrails.ru/
action-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/7d8f7909/attachment-0001.html>
More information about the Kiev-pm
mailing list