[Moscow.pm] Валидация шаблонов Mojo::Template

Akzhan Abdulin akzhan.abdulin на gmail.com
Чт Июн 15 07:16:31 PDT 2017


Достаточно сделать заглушки
чт, 15 июня 2017 г. в 16:57, Alexander M. Pravkin <pfduch на yandex.ru>:

> Спасибо за наводку, но нет.
>
> Я имел в виду штатные плагины: Mojolicious::Plugin::DefaultHelpers,
> Mojolicious::Plugin::TagHelpers. use их бесполезен, они не экспортят
> свои хелперы. Писать обёртку вокруг них с экспортом каждого хелпера?
> Жуть какая...
>
> В "штатном" режиме это же работает как-то.
>
>
> On Thu, Jun 15, 2017 at 04:25:44PM +0300, Akzhan Abdulin wrote:
> > прочтое чтение доки подсказывает
> >
> > $template_processor = Mojo::Template->new()->prepend("use YourHelpers;");
> >
> > package YourHelpers'
> >
> > use Exporter qw( import );
> >
> > our @EXPORT = qw( my_helper );
> >
> > 1;
> >
> >
> > 15 июня 2017 г., 16:17 пользователь Alexander M. Pravkin via Moscow-pm <
> > moscow-pm на pm.org> написал:
> >
> > > Уважаемые почитатели Mojolicious, помогите с такой проблемой.
> > >
> > > Есть некоторое число проектов, которые благополучно работают на perl
> > > 5.16-5.20, но на свежем валятся, ибо там повсеместно используются
> > > конструкции, не рекомендованные к использованию. Собственно, встала
> > > задача исправить это безобразие.
> > >
> > > С самим кодом проблем нет, проблемы есть с embedded-perl-шаблонами
> Mojo.
> > > Если бы их была пара штук или хотя бы пара десятков, можно было бы и
> > > вручную обойти. Но их около сотни только в одном проекте.
> > >
> > > В общем, понадобилась автоматическая валидация, хотя бы по синтаксису.
> > > На просторах, увы, не нашёл ничего, решил попробовать сам.
> > >
> > > Простые шаблоны нормально обрабатываются вот таким скриптом:
> > >
> > >
> > > use strict;
> > > use open qw(:std :utf8);
> > > use Mojo::Template;
> > >
> > > my $file = $ARGV[0]
> > >     or die "Usage: $0 mojo-template.ep\n";
> > >
> > > my $mt = Mojo::Template->new(vars => 1);
> > >
> > > my $res;
> > > # Проход первый: ищем необъявленные переменные
> > > {
> > >     local $SIG{__WARN__} = sub {};
> > >     $res = $mt->render_file($file)
> > >         or die "render_file $file returned nothing\n";
> > > }
> > >
> > > # Если ошибок не было -- всё OK
> > > ref $res and $res->isa('Mojo::Exception')
> > >     or exit 0;
> > >
> > > # Ищем все переменные, используемые шаблоном
> > > # Считаем, что автор кода тоже передаёт render'у все нужные
> > > my $errors = "$res";
> > > my %stash = map { $_ => undef }
> > >     ($errors =~ /Global symbol "\$(\w+)" requires explicit package
> name/g);
> > > delete $stash{_O}; # подставная переменная Mojo::Template
> > >
> > > print "+++ $file variables: ", join(' ', sort keys %stash), "\n";
> > >
> > > # Проход второй, настоящие ошибки
> > > $res = $mt->render_file($file, \%stash);
> > > if (ref $res and $res->isa('Mojo::Exception')) {
> > >     die "\n--- $file has errors:\n$res\n";
> > > }
> > >
> > >
> > > Но он, как минимум, не понимает helper'ов от всяких плагинов (layout,
> > > include и прочие form_for). Присобачить использование плагинов к
> > > одинокому Mojo::Template я ниасилил. Кто-нибудь может подсказать?
> > >
> > >
> > > --
> > > Правкин Александр
> > > --
> > > Moscow.pm mailing list
> > > moscow-pm на pm.org | http://moscow.pm.org
> > >
>
> --
> Правкин Александр
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20170615/f87b8fce/attachment.html>


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