From khedin at gmail.com Fri Dec 2 06:39:35 2016 From: khedin at gmail.com (Konstantin S. Uvarin) Date: Fri, 2 Dec 2016 16:39:35 +0200 Subject: [Kiev-pm] MVC::Neaf: Not Even A Framework Message-ID: Приветствую всех! Сегодня я бы хотел представить веб-фреймворк на перл 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 skype: kuvarin http://github.com/dallaylaen -------------- next part -------------- An HTML attachment was scrubbed... URL: From dshadowukraine at gmail.com Fri Dec 2 06:45:01 2016 From: dshadowukraine at gmail.com (Konstantin Cherednichenko) Date: Fri, 2 Dec 2016 16:45:01 +0200 Subject: [Kiev-pm] MVC::Neaf: Not Even A Framework In-Reply-To: References: Message-ID: IMHO Лучше смотреть в сторону OpenAPI... Какой смысл изобретать велосипед с роутами и валидацией данных? On Dec 2, 2016 16:40, "Konstantin S. Uvarin" wrote: > Приветствую всех! > > Сегодня я бы хотел представить веб-фреймворк на перл 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 > skype: kuvarin > http://github.com/dallaylaen > > _______________________________________________ > Kiev-pm mailing list > Kiev-pm at pm.org > http://mail.pm.org/mailman/listinfo/kiev-pm > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From khedin at gmail.com Fri Dec 2 06:54:34 2016 From: khedin at gmail.com (Konstantin S. Uvarin) Date: Fri, 2 Dec 2016 16:54:34 +0200 Subject: [Kiev-pm] MVC::Neaf: Not Even A Framework In-Reply-To: References: Message-ID: Приветствую. Как какой? Не догоню, так согреюсь! Там полдюжины ссылок на prior work, и это я ещё забыл Catalyst и PSGI, на которые тоже смотрел в процессе. А вот про OpenAPI хотелось бы подробнее, пока что нагуглил вот что: https://metacpan.org/pod/OpenAPI - какая-то ещё не написанная спецификация в версии 0.001 https://vk.com/dev/openapi - API вконтакта. А Вы что имели в виду? С уважением, 2016-12-02 16:45 GMT+02:00 Konstantin Cherednichenko < dshadowukraine at gmail.com>: > IMHO Лучше смотреть в сторону OpenAPI... Какой смысл изобретать велосипед > с роутами и валидацией данных? > > On Dec 2, 2016 16:40, "Konstantin S. Uvarin" wrote: > >> Приветствую всех! >> >> Сегодня я бы хотел представить веб-фреймворк на перл 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 >> skype: kuvarin >> http://github.com/dallaylaen >> >> _______________________________________________ >> Kiev-pm mailing list >> Kiev-pm at pm.org >> http://mail.pm.org/mailman/listinfo/kiev-pm >> >> > _______________________________________________ > Kiev-pm mailing list > Kiev-pm at pm.org > http://mail.pm.org/mailman/listinfo/kiev-pm > > -- Konstantin S. Uvarin jabber: see skype: kuvarin http://github.com/dallaylaen -------------- next part -------------- An HTML attachment was scrubbed... URL: From dshadowukraine at gmail.com Fri Dec 2 07:23:24 2016 From: dshadowukraine at gmail.com (Konstantin Cherednichenko) Date: Fri, 2 Dec 2016 17:23:24 +0200 Subject: [Kiev-pm] MVC::Neaf: Not Even A Framework In-Reply-To: References: Message-ID: Пример: Mojolicious::Plugin::OpenAPI Или уже готовая реализация Raisin Все смотреть на metacpan... On Dec 2, 2016 16:54, "Konstantin S. Uvarin" wrote: > Приветствую. > > Как какой? Не догоню, так согреюсь! Там полдюжины ссылок на prior work, и > это я ещё забыл Catalyst и PSGI, на которые тоже смотрел в процессе. > > А вот про OpenAPI хотелось бы подробнее, пока что нагуглил вот что: > > https://metacpan.org/pod/OpenAPI - какая-то ещё не написанная > спецификация в версии 0.001 > https://vk.com/dev/openapi - API вконтакта. > > А Вы что имели в виду? > > С уважением, > > > 2016-12-02 16:45 GMT+02:00 Konstantin Cherednichenko < > dshadowukraine at gmail.com>: > >> IMHO Лучше смотреть в сторону OpenAPI... Какой смысл изобретать велосипед >> с роутами и валидацией данных? >> >> On Dec 2, 2016 16:40, "Konstantin S. Uvarin" wrote: >> >>> Приветствую всех! >>> >>> Сегодня я бы хотел представить веб-фреймворк на перл 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 >>> skype: kuvarin >>> http://github.com/dallaylaen >>> >>> _______________________________________________ >>> Kiev-pm mailing list >>> Kiev-pm at pm.org >>> http://mail.pm.org/mailman/listinfo/kiev-pm >>> >>> >> _______________________________________________ >> Kiev-pm mailing list >> Kiev-pm at pm.org >> http://mail.pm.org/mailman/listinfo/kiev-pm >> >> > > > -- > Konstantin S. Uvarin > jabber: see > skype: kuvarin > http://github.com/dallaylaen > > _______________________________________________ > Kiev-pm mailing list > Kiev-pm at pm.org > http://mail.pm.org/mailman/listinfo/kiev-pm > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From q at cono.org.ua Fri Dec 2 07:38:21 2016 From: q at cono.org.ua (Alex Varyanick) Date: Fri, 2 Dec 2016 17:38:21 +0200 Subject: [Kiev-pm] MVC::Neaf: Not Even A Framework In-Reply-To: References: Message-ID: в сторону статики ++идеи: 1. X-Accel-Redirect (это для nginx проксирующего, и поддержку других прокси веб серверов), т.к. сказать унифицировать 2. empty_gif -> _.gif 2016-12-02 17:23 GMT+02:00 Konstantin Cherednichenko < dshadowukraine at gmail.com>: > Пример: Mojolicious::Plugin::OpenAPI > > Или уже готовая реализация Raisin > > Все смотреть на metacpan... > > On Dec 2, 2016 16:54, "Konstantin S. Uvarin" wrote: > >> Приветствую. >> >> Как какой? Не догоню, так согреюсь! Там полдюжины ссылок на prior work, и >> это я ещё забыл Catalyst и PSGI, на которые тоже смотрел в процессе. >> >> А вот про OpenAPI хотелось бы подробнее, пока что нагуглил вот что: >> >> https://metacpan.org/pod/OpenAPI - какая-то ещё не написанная >> спецификация в версии 0.001 >> https://vk.com/dev/openapi - API вконтакта. >> >> А Вы что имели в виду? >> >> С уважением, >> >> >> 2016-12-02 16:45 GMT+02:00 Konstantin Cherednichenko < >> dshadowukraine at gmail.com>: >> >>> IMHO Лучше смотреть в сторону OpenAPI... Какой смысл изобретать >>> велосипед с роутами и валидацией данных? >>> >>> On Dec 2, 2016 16:40, "Konstantin S. Uvarin" wrote: >>> >>>> Приветствую всех! >>>> >>>> Сегодня я бы хотел представить веб-фреймворк на перл 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 >>>> skype: kuvarin >>>> http://github.com/dallaylaen >>>> >>>> _______________________________________________ >>>> Kiev-pm mailing list >>>> Kiev-pm at pm.org >>>> http://mail.pm.org/mailman/listinfo/kiev-pm >>>> >>>> >>> _______________________________________________ >>> Kiev-pm mailing list >>> Kiev-pm at pm.org >>> http://mail.pm.org/mailman/listinfo/kiev-pm >>> >>> >> >> >> -- >> Konstantin S. Uvarin >> jabber: see >> skype: kuvarin >> http://github.com/dallaylaen >> >> _______________________________________________ >> Kiev-pm mailing list >> Kiev-pm at pm.org >> http://mail.pm.org/mailman/listinfo/kiev-pm >> >> > _______________________________________________ > Kiev-pm mailing list > Kiev-pm at pm.org > http://mail.pm.org/mailman/listinfo/kiev-pm > > -- Varyanick I. Alex skype: cono.. q at cono.org.ua -------------- next part -------------- An HTML attachment was scrubbed... URL: From misha at rattler.kiev.ua Fri Dec 2 09:36:45 2016 From: misha at rattler.kiev.ua (Michael Bochkaryov) Date: Fri, 2 Dec 2016 09:36:45 -0800 Subject: [Kiev-pm] MVC::Neaf: Not Even A Framework In-Reply-To: References: Message-ID: Костя, посмотри еще вот сюда на тему OpenAPI: http://search.cpan.org/~jhthorsen/Swagger2-0.86/lib/Swagger2.pm https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md https://www.openapis.org/ Regards, Michael Bochkaryov 2016-12-02 6:54 GMT-08:00 Konstantin S. Uvarin : > Приветствую. > > Как какой? Не догоню, так согреюсь! Там полдюжины ссылок на prior work, и > это я ещё забыл Catalyst и PSGI, на которые тоже смотрел в процессе. > > А вот про OpenAPI хотелось бы подробнее, пока что нагуглил вот что: > > https://metacpan.org/pod/OpenAPI - какая-то ещё не написанная > спецификация в версии 0.001 > https://vk.com/dev/openapi - API вконтакта. > > А Вы что имели в виду? > > С уважением, > > > 2016-12-02 16:45 GMT+02:00 Konstantin Cherednichenko < > dshadowukraine at gmail.com>: > >> IMHO Лучше смотреть в сторону OpenAPI... Какой смысл изобретать велосипед >> с роутами и валидацией данных? >> >> On Dec 2, 2016 16:40, "Konstantin S. Uvarin" wrote: >> >>> Приветствую всех! >>> >>> Сегодня я бы хотел представить веб-фреймворк на перл 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 >>> skype: kuvarin >>> http://github.com/dallaylaen >>> >>> _______________________________________________ >>> Kiev-pm mailing list >>> Kiev-pm at pm.org >>> http://mail.pm.org/mailman/listinfo/kiev-pm >>> >>> >> _______________________________________________ >> Kiev-pm mailing list >> Kiev-pm at pm.org >> http://mail.pm.org/mailman/listinfo/kiev-pm >> >> > > > -- > Konstantin S. Uvarin > jabber: see > skype: kuvarin > http://github.com/dallaylaen > > _______________________________________________ > Kiev-pm mailing list > Kiev-pm at pm.org > http://mail.pm.org/mailman/listinfo/kiev-pm > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From akzhan.abdulin at gmail.com Fri Dec 2 15:00:46 2016 From: akzhan.abdulin at gmail.com (Akzhan Abdulin) Date: Sat, 3 Dec 2016 02:00:46 +0300 Subject: [Kiev-pm] [Moscow.pm] MVC::Neaf: Not Even A Framework In-Reply-To: References: Message-ID: Не хватает фильтров, как минимум (в том же 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 > skype: kuvarin > http://github.com/dallaylaen > > -- > Moscow.pm mailing list > moscow-pm at pm.org | http://moscow.pm.org > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From sergei.mozhaisky at gmail.com Sun Dec 4 10:27:54 2016 From: sergei.mozhaisky at gmail.com (Sergei Mozhaisky) Date: Sun, 4 Dec 2016 20:27:54 +0200 Subject: [Kiev-pm] =?utf-8?b?UGVybDo6QW5hbHl6ZXIgLSDRgdGC0LDRgtC40YfQtdGB?= =?utf-8?b?0LrQuNC5INCw0L3QsNC70LjQt9Cw0YLQvtGAINC60L7QtNCwINC90LAg?= =?utf-8?q?Perl?= Message-ID: Всем привет! В моем последнем проекте на Перле была весьма сложная структура классов - многоуровневое наследование, переопределение методов, в общем, все прелести ООП. Зачастую во время отладки приходилось выяснять "откуда же наследуется этот метод, который валится с ошибкой, и кто его мог переопределить". В один прекрасный момент мне это надоело, и я стал искать утилиты для статического анализа кода. Но, к сожалению, у них у всех был один фатальный недостаток (с) - они не делали то, что было нужно мне. Вот так, из модуля Module::Dependency, палок и веревок появился Perl::Analyzer: http://technix.github.io/Perl-Analyzer/ Что он может: 1. Сделать диаграмму классов и наследования: http://technix.github.io/Perl-Analyzer/images/packages.png Но это не очень интересно, да и работать с ней не очень удобно 2. Сделать анализ кода и представить результат в виде HTML-файлов: http://technix.github.io/Perl-Analyzer/perl-analyzer/DBIx-Class-Schema-Versioned.html Здесь можно увидеть: - сколько в пакете строк, методов и зависимостей - как выглядит дерево зависимостей пакета - список всех пакетов, от которых наследуется наш пакет - список пакетов которые подключены через use или require - список методов, определенных в пакете (и какие методы они переопределяют) - унаследованные методы - откуда они наследуются и где "по дороге" переопределены - какие методы других классов явно используются в этом пакете Вот здесь можно посмотреть, как выглядят результаты анализа модуля DBIx::Class: http://technix.github.io/Perl-Analyzer/perl-analyzer/index.html Надеюсь, кому-нибудь это пригодится :) С радостью приму фичареквесты и багрепорты. -- Sergei Mozhaisky http://technix.in.ua/ -------------- next part -------------- An HTML attachment was scrubbed... URL: From akzhan.abdulin at gmail.com Sun Dec 4 11:46:59 2016 From: akzhan.abdulin at gmail.com (Akzhan Abdulin) Date: Sun, 4 Dec 2016 22:46:59 +0300 Subject: [Kiev-pm] =?utf-8?b?UGVybDo6QW5hbHl6ZXIgLSDRgdGC0LDRgtC40YfQtdGB?= =?utf-8?b?0LrQuNC5INCw0L3QsNC70LjQt9Cw0YLQvtGAINC60L7QtNCwINC90LAg?= =?utf-8?q?Perl?= In-Reply-To: References: Message-ID: Любопытно. Скопировал в https://telegram.me/modernperl и в Moscow.pm 4 декабря 2016 г., 21:27 пользователь Sergei Mozhaisky < sergei.mozhaisky at gmail.com> написал: > Что он может: > > 1. Сделать диаграмму классов и наследования: > http://technix.github.io/Perl-Analyzer/images/packages.png > Но это не очень интересно, да и работать с ней не очень удобно > > 2. Сделать анализ кода и представить результат в виде HTML-файлов: > http://technix.github.io/Perl-Analyzer/perl-analyzer/DBIx- > Class-Schema-Versioned.html > Здесь можно увидеть: > - сколько в пакете строк, методов и зависимостей > - как выглядит дерево зависимостей пакета > - список всех пакетов, от которых наследуется наш пакет > - список пакетов которые подключены через use или require > - список методов, определенных в пакете (и какие методы они переопределяют) > - унаследованные методы - откуда они наследуются и где "по дороге" > переопределены > - какие методы других классов явно используются в этом пакете > -------------- next part -------------- An HTML attachment was scrubbed... URL: From rad at rad.kiev.ua Sun Dec 4 21:42:31 2016 From: rad at rad.kiev.ua (Alex Radetsky) Date: Mon, 05 Dec 2016 05:42:31 +0000 Subject: [Kiev-pm] =?utf-8?b?UGVybDo6QW5hbHl6ZXIgLSDRgdGC0LDRgtC40YfQtdGB?= =?utf-8?b?0LrQuNC5INCw0L3QsNC70LjQt9Cw0YLQvtGAINC60L7QtNCwINC90LAg?= =?utf-8?q?Perl?= In-Reply-To: References: Message-ID: Круто ! нд, 4 груд. 2016 о 21:47 Akzhan Abdulin пише: > Любопытно. Скопировал в https://telegram.me/modernperl и в Moscow.pm > > 4 декабря 2016 г., 21:27 пользователь Sergei Mozhaisky < > sergei.mozhaisky at gmail.com> написал: > > Что он может: > > 1. Сделать диаграмму классов и наследования: > http://technix.github.io/Perl-Analyzer/images/packages.png > Но это не очень интересно, да и работать с ней не очень удобно > > 2. Сделать анализ кода и представить результат в виде HTML-файлов: > > http://technix.github.io/Perl-Analyzer/perl-analyzer/DBIx-Class-Schema-Versioned.html > Здесь можно увидеть: > - сколько в пакете строк, методов и зависимостей > - как выглядит дерево зависимостей пакета > - список всех пакетов, от которых наследуется наш пакет > - список пакетов которые подключены через use или require > - список методов, определенных в пакете (и какие методы они переопределяют) > - унаследованные методы - откуда они наследуются и где "по дороге" > переопределены > - какие методы других классов явно используются в этом пакете > > _______________________________________________ > Kiev-pm mailing list > Kiev-pm at pm.org > http://mail.pm.org/mailman/listinfo/kiev-pm > -- -- Alex Radetsky http://www.pearlpbx.com -------------- next part -------------- An HTML attachment was scrubbed... URL: From khedin at gmail.com Tue Dec 6 05:59:48 2016 From: khedin at gmail.com (Konstantin S. Uvarin) Date: Tue, 6 Dec 2016 15:59:48 +0200 Subject: [Kiev-pm] MVC::Neaf: Not Even A Framework In-Reply-To: References: Message-ID: Приветствую! 1. X-Accel-Redirect (это для nginx проксирующего, и поддержку других прокси веб серверов), т.к. сказать унифицировать Спасибо. попробую сделать. 2. empty_gif -> _.gif Это в смысле, по определённому адресу показывать один отдельно взятый файл? Если да, то оно уже умеет (favicon.ico так делал). Просто в документации мутно сказано, надо будет прояснить. 2016-12-02 17:38 GMT+02:00 Alex Varyanick : > в сторону статики ++идеи: > 1. X-Accel-Redirect (это для nginx проксирующего, и поддержку других > прокси веб серверов), т.к. сказать унифицировать > 2. empty_gif -> _.gif > > 2016-12-02 17:23 GMT+02:00 Konstantin Cherednichenko < > dshadowukraine at gmail.com>: > >> Пример: Mojolicious::Plugin::OpenAPI >> >> Или уже готовая реализация Raisin >> >> Все смотреть на metacpan... >> >> On Dec 2, 2016 16:54, "Konstantin S. Uvarin" wrote: >> >>> Приветствую. >>> >>> Как какой? Не догоню, так согреюсь! Там полдюжины ссылок на prior work, >>> и это я ещё забыл Catalyst и PSGI, на которые тоже смотрел в процессе. >>> >>> А вот про OpenAPI хотелось бы подробнее, пока что нагуглил вот что: >>> >>> https://metacpan.org/pod/OpenAPI - какая-то ещё не написанная >>> спецификация в версии 0.001 >>> https://vk.com/dev/openapi - API вконтакта. >>> >>> А Вы что имели в виду? >>> >>> С уважением, >>> >>> >>> 2016-12-02 16:45 GMT+02:00 Konstantin Cherednichenko < >>> dshadowukraine at gmail.com>: >>> >>>> IMHO Лучше смотреть в сторону OpenAPI... Какой смысл изобретать >>>> велосипед с роутами и валидацией данных? >>>> >>>> On Dec 2, 2016 16:40, "Konstantin S. Uvarin" wrote: >>>> >>>>> Приветствую всех! >>>>> >>>>> Сегодня я бы хотел представить веб-фреймворк на перл 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 >>>>> skype: kuvarin >>>>> http://github.com/dallaylaen >>>>> >>>>> _______________________________________________ >>>>> Kiev-pm mailing list >>>>> Kiev-pm at pm.org >>>>> http://mail.pm.org/mailman/listinfo/kiev-pm >>>>> >>>>> >>>> _______________________________________________ >>>> Kiev-pm mailing list >>>> Kiev-pm at pm.org >>>> http://mail.pm.org/mailman/listinfo/kiev-pm >>>> >>>> >>> >>> >>> -- >>> Konstantin S. Uvarin >>> jabber: see >>> skype: kuvarin >>> http://github.com/dallaylaen >>> >>> _______________________________________________ >>> Kiev-pm mailing list >>> Kiev-pm at pm.org >>> http://mail.pm.org/mailman/listinfo/kiev-pm >>> >>> >> _______________________________________________ >> Kiev-pm mailing list >> Kiev-pm at pm.org >> http://mail.pm.org/mailman/listinfo/kiev-pm >> >> > > > -- > Varyanick I. Alex > skype: cono.. > q at cono.org.ua > > _______________________________________________ > Kiev-pm mailing list > Kiev-pm at pm.org > http://mail.pm.org/mailman/listinfo/kiev-pm > > -- Konstantin S. Uvarin jabber: see skype: kuvarin http://github.com/dallaylaen -------------- next part -------------- An HTML attachment was scrubbed... URL: From khedin at gmail.com Tue Dec 6 06:06:11 2016 From: khedin at gmail.com (Konstantin S. Uvarin) Date: Tue, 6 Dec 2016 16:06:11 +0200 Subject: [Kiev-pm] [Moscow.pm] MVC::Neaf: Not Even A Framework In-Reply-To: References: Message-ID: Приветствую! Я так понял, фильтры - это хуки, которые втыкаются на определённый путь и все нижележащие пути? С одной стороны, руки уже чешутся написать, с другой, там очень легко перегнуть палку и сделать чересчур... Но спасибо за идею. 2016-12-03 1:00 GMT+02:00 Akzhan Abdulin : > Не хватает фильтров, как минимум (в том же 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 >> skype: kuvarin >> http://github.com/dallaylaen >> >> -- >> Moscow.pm mailing list >> moscow-pm at pm.org | http://moscow.pm.org >> >> > -- Konstantin S. Uvarin jabber: see skype: kuvarin http://github.com/dallaylaen -------------- next part -------------- An HTML attachment was scrubbed... URL: From akzhan.abdulin at gmail.com Wed Dec 7 02:26:12 2016 From: akzhan.abdulin at gmail.com (Akzhan Abdulin) Date: Wed, 7 Dec 2016 13:26:12 +0300 Subject: [Kiev-pm] [Moscow.pm] MVC::Neaf: Not Even A Framework In-Reply-To: References: Message-ID: Как уже показывал - можно подсмотреть в 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 написал: > Приветствую! > > Я так понял, фильтры - это хуки, которые втыкаются на определённый путь > и все нижележащие пути? С одной стороны, руки уже чешутся написать, с > другой, там очень легко перегнуть палку и сделать чересчур... > > Но спасибо за идею. > > 2016-12-03 1:00 GMT+02:00 Akzhan Abdulin : > >> Не хватает фильтров, как минимум (в том же Mojo они тоже туповаты, каждый >> over перекрывает предыдущие, вместо расширения). >> >> >> На досуге почитайте http://www.sinatrarb.com/intro.html >> >> >> 2 декабря 2016 г., 17:39 пользователь Konstantin S. Uvarin via Moscow-pm >> написал: >> >>> Приветствую всех! >>> >>> Сегодня я бы хотел представить веб-фреймворк на перл 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 >>> skype: kuvarin >>> http://github.com/dallaylaen >>> >>> -- >>> Moscow.pm mailing list >>> moscow-pm at pm.org | http://moscow.pm.org >>> >>> >> > > > -- > Konstantin S. Uvarin > jabber: see > skype: kuvarin > http://github.com/dallaylaen > -------------- next part -------------- An HTML attachment was scrubbed... URL: From akzhan.abdulin at gmail.com Wed Dec 7 02:27:09 2016 From: akzhan.abdulin at gmail.com (Akzhan Abdulin) Date: Wed, 7 Dec 2016 13:27:09 +0300 Subject: [Kiev-pm] [Moscow.pm] MVC::Neaf: Not Even A Framework In-Reply-To: References: Message-ID: Ну и понятно, каждый новый фильтр дополняет предыдущие, обработка может быть прервана любым фильтром, который вернет ложь. 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 : >> >>> Не хватает фильтров, как минимум (в том же Mojo они тоже туповаты, >>> каждый over перекрывает предыдущие, вместо расширения). >>> >>> >>> На досуге почитайте http://www.sinatrarb.com/intro.html >>> >>> >>> 2 декабря 2016 г., 17:39 пользователь Konstantin S. Uvarin via Moscow-pm >>> написал: >>> >>>> Приветствую всех! >>>> >>>> Сегодня я бы хотел представить веб-фреймворк на перл 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 >>>> skype: kuvarin >>>> http://github.com/dallaylaen >>>> >>>> -- >>>> Moscow.pm mailing list >>>> moscow-pm at pm.org | http://moscow.pm.org >>>> >>>> >>> >> >> >> -- >> Konstantin S. Uvarin >> jabber: see >> skype: kuvarin >> http://github.com/dallaylaen >> > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From khedin at gmail.com Mon Dec 19 03:38:18 2016 From: khedin at gmail.com (Konstantin S. Uvarin) Date: Mon, 19 Dec 2016 13:38:18 +0200 Subject: [Kiev-pm] [Moscow.pm] MVC::Neaf: Not Even A Framework In-Reply-To: References: Message-ID: Приветствую. Выпустил Neaf 0.14 c экспериментальными hooks: * hook ставится на путь+метод, при этом можно указать exclude (т.е. пути, к которым применяться НЕ будет) * фазы, в которые можно воткнуться: - pre_logic - после роутинга, но до выполнения основного хэндлера (+ прерывание путём die); - pre_content - после хэндлера; - pre_reply - перед отправкой заголовков клиенту (выполнение в обратном порядке); - pre_cleanup - перед уничтожением объекта запроса, после отложенных операций (выполнение в обратном порядке); - возможно, будут добавлены ещё. как минимум, pre_render, который отрабатывает, ТОЛЬКО если собираемся применять шаблон/сериализатор. Ну и pre-route надо запихнуть в ту же схему, не дело двум велосипедам быть в одном фреймворке, который и так велосипед. * единственный аргумент ВСЕХ хуков - объект request * возвращаемое значение принципиально игнорируется, для коммуникаций между хуками есть $request->stash. Также начиная с pre_content доступен хэш, который вернул хэндлер, под именем $request->reply. Кроме этого, добавлены зависящие от пути значения по умолчанию, применяемые после успешного хэндлера, напр. MVC::Neaf->set_path_defaults( '/api' => { -view => 'JS' } ); У них, правда, пока нет exclude. Кроме этого, добавлен Dancer-подобный сахар в виде use MVC::Neaf qw(:sugar); get '/path' => sub { ... }; neaf error => 404 => sub { ... }; neaf->run; Он тоже экспериментальный. https://github.com/dallaylaen/perl-mvc-neaf/ https://metacpan.org/pod/MVC::Neaf Акжану присуждается медаль в дисциплине "взятие на слабо", а если серьёзно, то спасибо за классный challenge и ссылки :) -- Konstantin S. Uvarin jabber: see skype: kuvarin http://github.com/dallaylaen -------------- next part -------------- An HTML attachment was scrubbed... URL: From akzhan.abdulin at gmail.com Mon Dec 19 12:09:50 2016 From: akzhan.abdulin at gmail.com (Akzhan Abdulin) Date: Mon, 19 Dec 2016 23:09:50 +0300 Subject: [Kiev-pm] [Moscow.pm] MVC::Neaf: Not Even A Framework In-Reply-To: References: Message-ID: Идея hooks хоть и хороша, но 1) Полностью отсутствует нормальная схема прекращения обработки запроса (хук все сделал). die порождает warning и просто увеличивает цену обработки запроса. Хотя бы взяли идею event.stopPropagation() с JavaScript. 2) отсутствуют фазы after_xxx и around_xxx. 19 декабря 2016 г., 14:38 пользователь Konstantin S. Uvarin < khedin at gmail.com> написал: > Приветствую. > > Выпустил Neaf 0.14 c экспериментальными hooks: > > * hook ставится на путь+метод, при этом можно указать exclude (т.е. > пути, к которым применяться НЕ будет) > * фазы, в которые можно воткнуться: > - pre_logic - после роутинга, но до выполнения основного хэндлера (+ > прерывание путём die); > - pre_content - после хэндлера; > - pre_reply - перед отправкой заголовков клиенту (выполнение в > обратном порядке); > - pre_cleanup - перед уничтожением объекта запроса, после отложенных > операций (выполнение в обратном порядке); > - возможно, будут добавлены ещё. как минимум, pre_render, который > отрабатывает, ТОЛЬКО если собираемся применять шаблон/сериализатор. Ну и > pre-route надо запихнуть в ту же схему, не дело двум велосипедам быть в > одном фреймворке, который и так велосипед. > * единственный аргумент ВСЕХ хуков - объект request > * возвращаемое значение принципиально игнорируется, для коммуникаций > между хуками есть $request->stash. Также начиная с pre_content доступен > хэш, который вернул хэндлер, под именем $request->reply. > > Кроме этого, добавлены зависящие от пути значения по умолчанию, > применяемые после успешного хэндлера, напр. MVC::Neaf->set_path_defaults( > '/api' => { -view => 'JS' } ); > У них, правда, пока нет exclude. > > Кроме этого, добавлен Dancer-подобный сахар в виде > > use MVC::Neaf qw(:sugar); > get '/path' => sub { ... }; > neaf error => 404 => sub { ... }; > neaf->run; > > Он тоже экспериментальный. > > https://github.com/dallaylaen/perl-mvc-neaf/ > https://metacpan.org/pod/MVC::Neaf > > Акжану присуждается медаль в дисциплине "взятие на слабо", а если > серьёзно, то спасибо за классный challenge и ссылки :) > > > -- > Konstantin S. Uvarin > jabber: see > skype: kuvarin > http://github.com/dallaylaen > > _______________________________________________ > Kiev-pm mailing list > Kiev-pm at pm.org > http://mail.pm.org/mailman/listinfo/kiev-pm > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From khedin at gmail.com Wed Dec 21 02:43:19 2016 From: khedin at gmail.com (Konstantin S. Uvarin) Date: Wed, 21 Dec 2016 12:43:19 +0200 Subject: [Kiev-pm] [Moscow.pm] MVC::Neaf: Not Even A Framework In-Reply-To: References: Message-ID: Приветствую. 1) До выполнения основного хендлера у нас бабблинг вполне себе прерывается. На дальнейших стадиях _пока_ не вижу смысла это делать. Мне кажется, это только к лишним взаимозависимостям между коллбэками приведёт. Там и так побочный эффект на побочном эффекте и побочным эффектом погоняет. 2) after_xxx появятся скоро, насчёт around пока не знаю. Вообще хотелось бы получить хоть какую-то обратную связь от пользователей с реальными проектами, прежде чем с шашкой наголо дальше кидаться. Вряд ли на Нифе сразу тикетмастер или букинг напишут, где подобная сложная логика необходима. 2016-12-19 22:09 GMT+02:00 Akzhan Abdulin : > Идея hooks хоть и хороша, но > > 1) Полностью отсутствует нормальная схема прекращения обработки запроса > (хук все сделал). die порождает warning и просто увеличивает цену обработки > запроса. Хотя бы взяли идею event.stopPropagation() с JavaScript. > > 2) отсутствуют фазы after_xxx и around_xxx. > > 19 декабря 2016 г., 14:38 пользователь Konstantin S. Uvarin < > khedin at gmail.com> написал: > >> Приветствую. >> >> Выпустил Neaf 0.14 c экспериментальными hooks: >> >> * hook ставится на путь+метод, при этом можно указать exclude (т.е. >> пути, к которым применяться НЕ будет) >> * фазы, в которые можно воткнуться: >> - pre_logic - после роутинга, но до выполнения основного хэндлера (+ >> прерывание путём die); >> - pre_content - после хэндлера; >> - pre_reply - перед отправкой заголовков клиенту (выполнение в >> обратном порядке); >> - pre_cleanup - перед уничтожением объекта запроса, после отложенных >> операций (выполнение в обратном порядке); >> - возможно, будут добавлены ещё. как минимум, pre_render, который >> отрабатывает, ТОЛЬКО если собираемся применять шаблон/сериализатор. Ну и >> pre-route надо запихнуть в ту же схему, не дело двум велосипедам быть в >> одном фреймворке, который и так велосипед. >> * единственный аргумент ВСЕХ хуков - объект request >> * возвращаемое значение принципиально игнорируется, для коммуникаций >> между хуками есть $request->stash. Также начиная с pre_content доступен >> хэш, который вернул хэндлер, под именем $request->reply. >> >> Кроме этого, добавлены зависящие от пути значения по умолчанию, >> применяемые после успешного хэндлера, напр. MVC::Neaf->set_path_defaults( >> '/api' => { -view => 'JS' } ); >> У них, правда, пока нет exclude. >> >> Кроме этого, добавлен Dancer-подобный сахар в виде >> >> use MVC::Neaf qw(:sugar); >> get '/path' => sub { ... }; >> neaf error => 404 => sub { ... }; >> neaf->run; >> >> Он тоже экспериментальный. >> >> https://github.com/dallaylaen/perl-mvc-neaf/ >> https://metacpan.org/pod/MVC::Neaf >> >> Акжану присуждается медаль в дисциплине "взятие на слабо", а если >> серьёзно, то спасибо за классный challenge и ссылки :) >> >> >> -- >> Konstantin S. Uvarin >> jabber: see >> skype: kuvarin >> http://github.com/dallaylaen >> >> _______________________________________________ >> Kiev-pm mailing list >> Kiev-pm at pm.org >> http://mail.pm.org/mailman/listinfo/kiev-pm >> >> > > _______________________________________________ > Kiev-pm mailing list > Kiev-pm at pm.org > http://mail.pm.org/mailman/listinfo/kiev-pm > > -- Konstantin S. Uvarin jabber: see skype: kuvarin http://github.com/dallaylaen -------------- next part -------------- An HTML attachment was scrubbed... URL: