From pfduch на yandex.ru Thu Jun 15 06:17:04 2017 From: pfduch на yandex.ru (Alexander M. Pravkin) Date: Thu, 15 Jun 2017 16:17:04 +0300 Subject: [Moscow.pm] =?utf-8?b?0JLQsNC70LjQtNCw0YbQuNGPINGI0LDQsdC70L4=?= =?utf-8?b?0L3QvtCyIE1vam86OlRlbXBsYXRl?= Message-ID: <20170615131232.GA1538@f4home> Уважаемые почитатели 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 я ниасилил. Кто-нибудь может подсказать? -- Правкин Александр From akzhan.abdulin на gmail.com Thu Jun 15 06:25:44 2017 From: akzhan.abdulin на gmail.com (Akzhan Abdulin) Date: Thu, 15 Jun 2017 16:25:44 +0300 Subject: [Moscow.pm] =?utf-8?b?0JLQsNC70LjQtNCw0YbQuNGPINGI0LDQsdC70L4=?= =?utf-8?b?0L3QvtCyIE1vam86OlRlbXBsYXRl?= In-Reply-To: <20170615131232.GA1538@f4home> References: <20170615131232.GA1538@f4home> Message-ID: прочтое чтение доки подсказывает $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: From pfduch на yandex.ru Thu Jun 15 06:57:21 2017 From: pfduch на yandex.ru (Alexander M. Pravkin) Date: Thu, 15 Jun 2017 16:57:21 +0300 Subject: [Moscow.pm] =?utf-8?b?0JLQsNC70LjQtNCw0YbQuNGPINGI0LDQsdC70L4=?= =?utf-8?b?0L3QvtCyIE1vam86OlRlbXBsYXRl?= In-Reply-To: References: <20170615131232.GA1538@f4home> Message-ID: <20170615135721.GA1613@f4home.antar.bryansk.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 > > -- Правкин Александр From akzhan.abdulin на gmail.com Thu Jun 15 07:16:31 2017 From: akzhan.abdulin на gmail.com (Akzhan Abdulin) Date: Thu, 15 Jun 2017 14:16:31 +0000 Subject: [Moscow.pm] =?utf-8?b?0JLQsNC70LjQtNCw0YbQuNGPINGI0LDQsdC70L4=?= =?utf-8?b?0L3QvtCyIE1vam86OlRlbXBsYXRl?= In-Reply-To: <20170615135721.GA1613@f4home.antar.bryansk.ru> References: <20170615131232.GA1538@f4home> <20170615135721.GA1613@f4home.antar.bryansk.ru> Message-ID: Достаточно сделать заглушки чт, 15 июня 2017 г. в 16:57, Alexander M. Pravkin : > Спасибо за наводку, но нет. > > Я имел в виду штатные плагины: 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: From blizzard на yandex-team.ru Fri Jun 30 05:59:00 2017 From: blizzard на yandex-team.ru (Igor Sverdlov) Date: Fri, 30 Jun 2017 15:59:00 +0300 Subject: [Moscow.pm] =?utf-8?b?0KHRgtCw0LbQtdGAINC40YnQtdGCINGA0LDQsdC+?= =?utf-8?b?0YLRgw==?= In-Reply-To: References: <20170615131232.GA1538@f4home> <20170615135721.GA1613@f4home.antar.bryansk.ru> Message-ID: <79131498827540@webcorp03f.yandex-team.ru> Вложение в формате HTML было извлечено… URL: