Hello community, here is the log from the commit of package perl-Mojolicious for openSUSE:Factory checked in at 2017-07-28 09:39:56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/perl-Mojolicious (Old) and /work/SRC/openSUSE:Factory/.perl-Mojolicious.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Mojolicious" Fri Jul 28 09:39:56 2017 rev:71 rq:512443 version:7.37 Changes: -------- --- /work/SRC/openSUSE:Factory/perl-Mojolicious/perl-Mojolicious.changes 2017-07-17 09:01:57.405689460 +0200 +++ /work/SRC/openSUSE:Factory/.perl-Mojolicious.new/perl-Mojolicious.changes 2017-07-28 09:40:00.748744970 +0200 @@ -1,0 +2,12 @@ +Tue Jul 25 05:52:00 UTC 2017 - [email protected] + +- updated to 7.37 + see /usr/share/doc/packages/perl-Mojolicious/Changes + + 7.37 2017-07-21 + - Added slugify method to Mojo::ByteStream. (Grinnz) + - Added slugify function to Mojo::Util. (Grinnz) + - Fixed bugs in Mojo::IOLoop and Mojo::Reactor::Poll that would prevent a + reset from clearing events. + +------------------------------------------------------------------- Old: ---- Mojolicious-7.36.tar.gz New: ---- Mojolicious-7.37.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-Mojolicious.spec ++++++ --- /var/tmp/diff_new_pack.Vzq1Z2/_old 2017-07-28 09:40:02.548491507 +0200 +++ /var/tmp/diff_new_pack.Vzq1Z2/_new 2017-07-28 09:40:02.548491507 +0200 @@ -17,7 +17,7 @@ Name: perl-Mojolicious -Version: 7.36 +Version: 7.37 Release: 0 %define cpan_name Mojolicious Summary: Real-time web framework ++++++ Mojolicious-7.36.tar.gz -> Mojolicious-7.37.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.36/Changes new/Mojolicious-7.37/Changes --- old/Mojolicious-7.36/Changes 2017-07-09 19:05:11.000000000 +0200 +++ new/Mojolicious-7.37/Changes 2017-07-21 10:00:45.000000000 +0200 @@ -1,4 +1,10 @@ +7.37 2017-07-21 + - Added slugify method to Mojo::ByteStream. (Grinnz) + - Added slugify function to Mojo::Util. (Grinnz) + - Fixed bugs in Mojo::IOLoop and Mojo::Reactor::Poll that would prevent a + reset from clearing events. + 7.36 2017-07-09 - Fixed basename method in Mojo::File to work with relative paths. (jberger) - Fixed a bug where Mojo::Log could not correctly identify if it was deployed diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.36/MANIFEST new/Mojolicious-7.37/MANIFEST --- old/Mojolicious-7.36/MANIFEST 2017-07-10 09:47:25.000000000 +0200 +++ new/Mojolicious-7.37/MANIFEST 2017-07-24 09:54:46.000000000 +0200 @@ -7,6 +7,7 @@ examples/hello-template.pl examples/hello.pl examples/microhttpd.pl +lib/.DS_Store lib/Mojo.pm lib/Mojo/Asset.pm lib/Mojo/Asset/File.pm diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.36/META.json new/Mojolicious-7.37/META.json --- old/Mojolicious-7.36/META.json 2017-07-10 09:47:25.000000000 +0200 +++ new/Mojolicious-7.37/META.json 2017-07-24 09:54:46.000000000 +0200 @@ -58,6 +58,6 @@ }, "x_IRC" : "irc://irc.perl.org/#mojo" }, - "version" : "7.36", + "version" : "7.37", "x_serialization_backend" : "JSON::PP version 2.94" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.36/META.yml new/Mojolicious-7.37/META.yml --- old/Mojolicious-7.36/META.yml 2017-07-10 09:47:24.000000000 +0200 +++ new/Mojolicious-7.37/META.yml 2017-07-24 09:54:46.000000000 +0200 @@ -31,5 +31,5 @@ homepage: http://mojolicious.org license: http://www.opensource.org/licenses/artistic-license-2.0 repository: https://github.com/kraih/mojo.git -version: '7.36' +version: '7.37' x_serialization_backend: 'CPAN::Meta::YAML version 0.018' Binary files old/Mojolicious-7.36/lib/.DS_Store and new/Mojolicious-7.37/lib/.DS_Store differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.36/lib/Mojo/ByteStream.pm new/Mojolicious-7.37/lib/Mojo/ByteStream.pm --- old/Mojolicious-7.36/lib/Mojo/ByteStream.pm 2017-06-24 15:01:30.000000000 +0200 +++ new/Mojolicious-7.37/lib/Mojo/ByteStream.pm 2017-07-21 09:56:39.000000000 +0200 @@ -12,8 +12,8 @@ my @UTILS = ( qw(b64_decode b64_encode camelize decamelize hmac_sha1_sum html_unescape), qw(md5_bytes md5_sum punycode_decode punycode_encode quote sha1_bytes), - qw(sha1_sum term_escape trim unindent unquote url_escape url_unescape), - qw(xml_escape xor_encode) + qw(sha1_sum slugify term_escape trim unindent unquote url_escape), + qw(url_unescape xml_escape xor_encode) ); for my $name (@UTILS) { my $sub = Mojo::Util->can($name); @@ -250,6 +250,13 @@ Size of bytestream. +=head2 slugify + + $stream = $stream->slugify; + $stream = $stream->slugify($bool); + +Generate URL slug for bytestream with L<Mojo::Util/"slugify">. + =head2 split my $collection = $stream->split(','); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.36/lib/Mojo/IOLoop.pm new/Mojolicious-7.37/lib/Mojo/IOLoop.pm --- old/Mojolicious-7.36/lib/Mojo/IOLoop.pm 2017-07-05 19:10:27.000000000 +0200 +++ new/Mojolicious-7.37/lib/Mojo/IOLoop.pm 2017-07-19 18:11:52.000000000 +0200 @@ -98,7 +98,7 @@ sub reset { my $self = _instance(shift); - delete @$self{qw(accepting acceptors in out stop)}; + delete @$self{qw(accepting acceptors events in out stop)}; $self->reactor->reset; $self->stop; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.36/lib/Mojo/Reactor/Poll.pm new/Mojolicious-7.37/lib/Mojo/Reactor/Poll.pm --- old/Mojolicious-7.36/lib/Mojo/Reactor/Poll.pm 2017-06-24 15:01:30.000000000 +0200 +++ new/Mojolicious-7.37/lib/Mojo/Reactor/Poll.pm 2017-07-19 18:32:05.000000000 +0200 @@ -91,11 +91,11 @@ return !!delete $self->{io}{fileno $remove}; } -sub reset { delete @{shift()}{qw(io next_tick next_timer timers)} } +sub reset { delete @{shift()}{qw(events io next_tick next_timer timers)} } sub start { my $self = shift; - $self->{running}++; + local $self->{running} = ($self->{running} || 0) + 1; $self->one_tick while $self->{running}; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.36/lib/Mojo/Util.pm new/Mojolicious-7.37/lib/Mojo/Util.pm --- old/Mojolicious-7.36/lib/Mojo/Util.pm 2017-06-24 15:01:30.000000000 +0200 +++ new/Mojolicious-7.37/lib/Mojo/Util.pm 2017-07-21 09:58:28.000000000 +0200 @@ -13,7 +13,8 @@ use MIME::Base64 qw(decode_base64 encode_base64); use Pod::Usage 'pod2usage'; use Symbol 'delete_package'; -use Time::HiRes (); +use Time::HiRes (); +use Unicode::Normalize (); # Check for monotonic clock support use constant MONOTONIC => @@ -62,8 +63,8 @@ qw(decode deprecated dumper encode extract_usage getopt hmac_sha1_sum), qw(html_attr_unescape html_unescape md5_bytes md5_sum monkey_patch), qw(punycode_decode punycode_encode quote secure_compare sha1_bytes sha1_sum), - qw(split_cookie_header split_header steady_time tablify term_escape trim), - qw(unindent unquote url_escape url_unescape xml_escape xor_encode) + qw(slugify split_cookie_header split_header steady_time tablify term_escape), + qw(trim unindent unquote url_escape url_unescape xml_escape xor_encode) ); # Aliases @@ -248,6 +249,24 @@ return $r == 0; } +sub slugify { + my ($value, $allow_unicode) = @_; + + if ($allow_unicode) { + + # Force unicode semantics by upgrading string + utf8::upgrade($value = Unicode::Normalize::NFKC($value)); + $value =~ s/[^\w\s-]+//g; + } + else { + $value = Unicode::Normalize::NFKD($value); + $value =~ s/[^a-zA-Z0-9_\p{PosixSpace}-]+//g; + } + (my $new = lc trim($value)) =~ s/[-\s]+/-/g; + + return $new; +} + sub split_cookie_header { _header(shift, 1) } sub split_header { _header(shift, 0) } @@ -709,6 +728,27 @@ # "0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33" sha1_sum 'foo'; +=head2 slugify + + my $slug = slugify $string; + my $slug = slugify $string, $bool; + +Returns a URL slug generated from the input string. Non-word characters are +removed, the string is trimmed and lowercased, and whitespace characters are +replaced by a dash. By default, non-ASCII characters are normalized to ASCII +word characters or removed, but if a true value is passed as the second +parameter, all word characters will be allowed in the result according to +unicode semantics. + + # "joel-is-a-slug" + slugify 'Joel is a slug'; + + # "this-is-my-resume" + slugify 'This is: my - résumé! ☃ '; + + # "this-is-my-résumé" + slugify 'This is: my - résumé! ☃ ', 1; + =head2 split_cookie_header my $tree = split_cookie_header 'a=b; expires=Thu, 07 Aug 2008 07:07:59 GMT'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.36/lib/Mojolicious/Guides/Contributing.pod new/Mojolicious-7.37/lib/Mojolicious/Guides/Contributing.pod --- old/Mojolicious-7.36/lib/Mojolicious/Guides/Contributing.pod 2017-06-24 15:01:30.000000000 +0200 +++ new/Mojolicious-7.37/lib/Mojolicious/Guides/Contributing.pod 2017-07-18 18:47:28.000000000 +0200 @@ -284,8 +284,6 @@ =back -Original text courtesy of the L<Speak Up! project|http://speakup.io/coc.html>. - =head1 FORK POLICY The L<Mojolicious> core team believes that there is a lot of value in the entire diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.36/lib/Mojolicious/Guides/FAQ.pod new/Mojolicious-7.37/lib/Mojolicious/Guides/FAQ.pod --- old/Mojolicious-7.36/lib/Mojolicious/Guides/FAQ.pod 2017-07-04 17:22:00.000000000 +0200 +++ new/Mojolicious-7.37/lib/Mojolicious/Guides/FAQ.pod 2017-07-21 18:10:18.000000000 +0200 @@ -203,6 +203,15 @@ response or that the user agent got destroyed, which forces all connections to be closed immediately. + # The variable $ua goes out of scope and gets destroyed too early + Mojo::IOLoop->timer(5 => sub { + my $ua = Mojo::UserAgent->new; + $ua->get('http://mojolicious.org' => sub { + my ($ua, $tx) = @_; + say $tx->result->dom->at('title')->text; + }); + }); + =head2 What does "Worker 31842 has no heartbeat (30 seconds), restarting" mean? As long as they are accepting new connections, worker processes of all built-in diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.36/lib/Mojolicious/Plugin/DefaultHelpers.pm new/Mojolicious-7.37/lib/Mojolicious/Plugin/DefaultHelpers.pm --- old/Mojolicious-7.36/lib/Mojolicious/Plugin/DefaultHelpers.pm 2017-06-24 15:01:30.000000000 +0200 +++ new/Mojolicious-7.37/lib/Mojolicious/Plugin/DefaultHelpers.pm 2017-07-21 09:58:55.000000000 +0200 @@ -217,7 +217,7 @@ =head2 b - %= b('test 123')->b64_encode + %= b('Joel is a slug')->slugify Turn string into a L<Mojo::ByteStream> object. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.36/lib/Mojolicious/resources/templates/mojo/menubar.html.ep new/Mojolicious-7.37/lib/Mojolicious/resources/templates/mojo/menubar.html.ep --- old/Mojolicious-7.36/lib/Mojolicious/resources/templates/mojo/menubar.html.ep 2017-06-24 15:01:30.000000000 +0200 +++ new/Mojolicious-7.37/lib/Mojolicious/resources/templates/mojo/menubar.html.ep 2017-07-18 18:40:47.000000000 +0200 @@ -65,6 +65,7 @@ </div> <div id="mojobar-links"> %= link_to Documentation => 'http://mojolicious.org/perldoc' + %= link_to Chat => 'https://chat.mibbit.com/?channel=%23mojo&server=irc.perl.org' %= link_to Wiki => 'https://github.com/kraih/mojo/wiki' %= link_to GitHub => 'https://github.com/kraih/mojo' %= link_to CPAN => 'https://metacpan.org/release/Mojolicious/' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.36/lib/Mojolicious.pm new/Mojolicious-7.37/lib/Mojolicious.pm --- old/Mojolicious-7.36/lib/Mojolicious.pm 2017-07-05 19:10:27.000000000 +0200 +++ new/Mojolicious-7.37/lib/Mojolicious.pm 2017-07-23 17:49:09.000000000 +0200 @@ -58,7 +58,7 @@ has validator => sub { Mojolicious::Validator->new }; our $CODENAME = 'Doughnut'; -our $VERSION = '7.36'; +our $VERSION = '7.37'; sub AUTOLOAD { my $self = shift; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.36/t/mojo/bytestream.t new/Mojolicious-7.37/t/mojo/bytestream.t --- old/Mojolicious-7.36/t/mojo/bytestream.t 2017-06-24 15:01:30.000000000 +0200 +++ new/Mojolicious-7.37/t/mojo/bytestream.t 2017-07-21 09:55:15.000000000 +0200 @@ -135,4 +135,10 @@ # term_escape is b("\t\b\r\n\f")->term_escape, "\\x09\\x08\\x0d\n\\x0c", 'right result'; +# slugify +is b("Un \x{e9}l\x{e9}phant \x{e0} l'or\x{e9}e du bois")->slugify->to_string, + 'un-elephant-a-loree-du-bois', 'right result'; +is b("Un \x{e9}l\x{e9}phant \x{e0} l'or\x{e9}e du bois")->slugify(1)->to_string, + "un-\x{e9}l\x{e9}phant-\x{e0}-lor\x{e9}e-du-bois", 'right result'; + done_testing(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.36/t/mojo/ioloop.t new/Mojolicious-7.37/t/mojo/ioloop.t --- old/Mojolicious-7.36/t/mojo/ioloop.t 2017-06-24 15:01:30.000000000 +0200 +++ new/Mojolicious-7.37/t/mojo/ioloop.t 2017-07-19 18:43:26.000000000 +0200 @@ -129,6 +129,12 @@ Mojo::IOLoop->reset; ok time < ($time + 10), 'stopped automatically'; +# Reset events +Mojo::IOLoop->singleton->on(finish => sub { }); +ok !!Mojo::IOLoop->singleton->has_subscribers('finish'), 'has subscribers'; +Mojo::IOLoop->reset; +ok !Mojo::IOLoop->singleton->has_subscribers('finish'), 'no subscribers'; + # Stream my $buffer = ''; $id = Mojo::IOLoop->server( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.36/t/mojo/reactor_ev.t new/Mojolicious-7.37/t/mojo/reactor_ev.t --- old/Mojolicious-7.36/t/mojo/reactor_ev.t 2017-06-24 15:01:30.000000000 +0200 +++ new/Mojolicious-7.37/t/mojo/reactor_ev.t 2017-07-19 18:36:19.000000000 +0200 @@ -237,6 +237,12 @@ $reactor->start; like $err, qr/works!/, 'right error'; +# Reset events +$reactor->on(error => sub { }); +ok $reactor->has_subscribers('error'), 'has subscribers'; +$reactor->reset; +ok !$reactor->has_subscribers('error'), 'no subscribers'; + # Recursion $timer = undef; $reactor = $reactor->new; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.36/t/mojo/reactor_poll.t new/Mojolicious-7.37/t/mojo/reactor_poll.t --- old/Mojolicious-7.36/t/mojo/reactor_poll.t 2017-06-24 15:01:30.000000000 +0200 +++ new/Mojolicious-7.37/t/mojo/reactor_poll.t 2017-07-19 18:36:26.000000000 +0200 @@ -234,6 +234,12 @@ $reactor->start; like $err, qr/works!/, 'right error'; +# Reset events +$reactor->on(error => sub { }); +ok $reactor->has_subscribers('error'), 'has subscribers'; +$reactor->reset; +ok !$reactor->has_subscribers('error'), 'no subscribers'; + # Recursion $timer = undef; $reactor = $reactor->new; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-7.36/t/mojo/util.t new/Mojolicious-7.37/t/mojo/util.t --- old/Mojolicious-7.36/t/mojo/util.t 2017-06-24 15:01:30.000000000 +0200 +++ new/Mojolicious-7.37/t/mojo/util.t 2017-07-21 09:55:27.000000000 +0200 @@ -12,7 +12,7 @@ qw(b64_decode b64_encode camelize class_to_file class_to_path decamelize), qw(decode dumper encode extract_usage getopt hmac_sha1_sum html_unescape), qw(html_attr_unescape md5_bytes md5_sum monkey_patch punycode_decode), - qw(punycode_encode quote secure_compare sha1_bytes sha1_sum), + qw(punycode_encode quote secure_compare sha1_bytes sha1_sum slugify), qw(split_cookie_header split_header steady_time tablify term_escape trim), qw(unindent unquote url_escape url_unescape xml_escape xor_encode); @@ -512,6 +512,23 @@ is term_escape("\x00\x09\x0b\x1f\x7f\x80\x9f"), '\x00\x09\x0b\x1f\x7f\x80\x9f', 'right result'; +# slugify +is slugify('a & b'), 'a-b', 'right result'; +is slugify('a & b'), 'a-amp-b', 'right result'; +is slugify(123), '123', 'right result'; +is slugify(' Jack & Jill like numbers 1,2,3 and 4 and silly characters ?%.$!/'), + 'jack-jill-like-numbers-123-and-4-and-silly-characters', 'right result'; +is slugify("Un \x{e9}l\x{e9}phant \x{e0} l'or\x{e9}e du bois"), + 'un-elephant-a-loree-du-bois', 'right result'; +is slugify("Un \x{e9}l\x{e9}phant \x{e0} l'or\x{e9}e du bois", 1), + "un-\x{e9}l\x{e9}phant-\x{e0}-lor\x{e9}e-du-bois", 'right result'; +is slugify('Hello, World!'), 'hello-world', 'right result'; +is slugify('spam & eggs'), 'spam-eggs', 'right result'; +is slugify('spam & ıçüş', 1), 'spam-ıçüş', 'right result'; +is slugify('foo ıç bar', 1), 'foo-ıç-bar', 'right result'; +is slugify(' foo ıç bar', 1), 'foo-ıç-bar', 'right result'; +is slugify('你好', 1), '你好', 'right result'; + # Hide DATA usage from error messages eval { die 'whatever' }; unlike $@, qr/DATA/, 'DATA has been hidden';
