commit perl-Mojolicious for openSUSE:Factory
Hello community, here is the log from the commit of package perl-Mojolicious for openSUSE:Factory checked in at 2015-09-30 05:52:41 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/perl-Mojolicious (Old) and /work/SRC/openSUSE:Factory/.perl-Mojolicious.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "perl-Mojolicious" Changes: -------- --- /work/SRC/openSUSE:Factory/perl-Mojolicious/perl-Mojolicious.changes 2015-09-24 06:15:04.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.perl-Mojolicious.new/perl-Mojolicious.changes 2015-09-30 05:52:43.000000000 +0200 @@ -1,0 +2,22 @@ +Sun Sep 27 09:00:50 UTC 2015 - coolo@suse.com + +- updated to 6.22 + see /usr/share/doc/packages/perl-Mojolicious/Changes + + 6.22 2015-09-26 + - Improved Mojo::JSON by reusing JSON::PP boolean constants. + - Improved uniq method in Mojo::Collection to accept a callback. (CandyAngel) + - Improved first and grep methods in Mojo::Collection to be able to call + methods. + - Improved support for empty attributes in Mojo::DOM::HTML. + +------------------------------------------------------------------- +Wed Sep 23 08:48:53 UTC 2015 - coolo@suse.com + +- updated to 6.21 + see /usr/share/doc/packages/perl-Mojolicious/Changes + + 6.21 2015-09-23 + - Added val method to Mojo::DOM. + +------------------------------------------------------------------- Old: ---- Mojolicious-6.20.tar.gz New: ---- Mojolicious-6.22.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-Mojolicious.spec ++++++ --- /var/tmp/diff_new_pack.ESQ4Qj/_old 2015-09-30 05:52:44.000000000 +0200 +++ /var/tmp/diff_new_pack.ESQ4Qj/_new 2015-09-30 05:52:44.000000000 +0200 @@ -17,7 +17,7 @@ Name: perl-Mojolicious -Version: 6.20 +Version: 6.22 Release: 0 %define cpan_name Mojolicious Summary: Real-time web framework @@ -31,9 +31,11 @@ BuildRequires: perl BuildRequires: perl-macros BuildRequires: perl(IO::Socket::IP) >= 0.26 +BuildRequires: perl(JSON::PP) >= 2.27103 BuildRequires: perl(Pod::Simple) >= 3.09 BuildRequires: perl(Time::Local) >= 1.2 Requires: perl(IO::Socket::IP) >= 0.26 +Requires: perl(JSON::PP) >= 2.27103 Requires: perl(Pod::Simple) >= 3.09 Requires: perl(Time::Local) >= 1.2 %{perl_requires} ++++++ Mojolicious-6.20.tar.gz -> Mojolicious-6.22.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.20/Changes new/Mojolicious-6.22/Changes --- old/Mojolicious-6.20/Changes 2015-09-17 00:44:17.000000000 +0200 +++ new/Mojolicious-6.22/Changes 2015-09-26 04:10:45.000000000 +0200 @@ -1,4 +1,14 @@ +6.22 2015-09-26 + - Improved Mojo::JSON by reusing JSON::PP boolean constants. + - Improved uniq method in Mojo::Collection to accept a callback. (CandyAngel) + - Improved first and grep methods in Mojo::Collection to be able to call + methods. + - Improved support for empty attributes in Mojo::DOM::HTML. + +6.21 2015-09-23 + - Added val method to Mojo::DOM. + 6.20 2015-09-15 - Deprecated Mojo::UserAgent::CookieJar::collecting in favor of Mojo::UserAgent::CookieJar::ignore. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.20/META.json new/Mojolicious-6.22/META.json --- old/Mojolicious-6.20/META.json 2015-09-17 00:49:25.000000000 +0200 +++ new/Mojolicious-6.22/META.json 2015-09-27 03:03:11.000000000 +0200 @@ -35,6 +35,7 @@ "runtime" : { "requires" : { "IO::Socket::IP" : "0.26", + "JSON::PP" : "2.27103", "Pod::Simple" : "3.09", "Time::Local" : "1.2", "perl" : "5.010001" @@ -57,6 +58,6 @@ }, "x_IRC" : "irc://irc.perl.org/#mojo" }, - "version" : "6.20", + "version" : "6.22", "x_serialization_backend" : "JSON::PP version 2.27300" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.20/META.yml new/Mojolicious-6.22/META.yml --- old/Mojolicious-6.20/META.yml 2015-09-17 00:49:25.000000000 +0200 +++ new/Mojolicious-6.22/META.yml 2015-09-27 03:03:10.000000000 +0200 @@ -21,6 +21,7 @@ - t requires: IO::Socket::IP: '0.26' + JSON::PP: '2.27103' Pod::Simple: '3.09' Time::Local: '1.2' perl: '5.010001' @@ -30,5 +31,5 @@ homepage: http://mojolicio.us license: http://www.opensource.org/licenses/artistic-license-2.0 repository: https://github.com/kraih/mojo.git -version: '6.20' +version: '6.22' x_serialization_backend: 'CPAN::Meta::YAML version 0.016' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.20/Makefile.PL new/Mojolicious-6.22/Makefile.PL --- old/Mojolicious-6.20/Makefile.PL 2015-08-29 01:37:48.000000000 +0200 +++ new/Mojolicious-6.22/Makefile.PL 2015-09-24 20:21:19.000000000 +0200 @@ -6,6 +6,7 @@ use ExtUtils::MakeMaker; # Pod::Simple 3.09 first shipped with Perl 5.11.2 +# JSON::PP 2.27103 first shipped with Perl 5.13.9 # Time::Local 1.2 first shipped with Perl 5.13.9 # IO::Socket::IP 0.26 first shipped with Perl 5.19.8 WriteMakefile( @@ -33,6 +34,7 @@ }, PREREQ_PM => { 'IO::Socket::IP' => '0.26', + 'JSON::PP' => '2.27103', 'Pod::Simple' => '3.09', 'Time::Local' => '1.2' }, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.20/lib/Mojo/Collection.pm new/Mojolicious-6.22/lib/Mojo/Collection.pm --- old/Mojolicious-6.20/lib/Mojo/Collection.pm 2015-08-29 13:14:02.000000000 +0200 +++ new/Mojolicious-6.22/lib/Mojo/Collection.pm 2015-09-26 04:10:34.000000000 +0200 @@ -27,18 +27,18 @@ } sub first { - my ($self, $cb) = @_; + my ($self, $cb) = (shift, shift); return $self->[0] unless $cb; - return List::Util::first { $cb->($_) } @$self if ref $cb eq 'CODE'; - return List::Util::first { $_ =~ $cb } @$self; + return List::Util::first { $_ =~ $cb } @$self if ref $cb eq 'Regexp'; + return List::Util::first { $_->$cb(@_) } @$self; } sub flatten { $_[0]->new(_flatten(@{$_[0]})) } sub grep { - my ($self, $cb) = @_; - return $self->new(grep { $cb->($_) } @$self) if ref $cb eq 'CODE'; - return $self->new(grep { $_ =~ $cb } @$self); + my ($self, $cb) = (shift, shift); + return $self->new(grep { $_ =~ $cb } @$self) if ref $cb eq 'Regexp'; + return $self->new(grep { $_->$cb(@_) } @$self); } sub join { @@ -93,8 +93,10 @@ sub to_array { [@{shift()}] } sub uniq { + my ($self, $cb) = (shift, shift); my %seen; - return $_[0]->new(grep { !$seen{$_}++ } @{$_[0]}); + return $self->new(grep { !$seen{$_->$cb(@_)}++ } @$self) if $cb; + return $self->new(grep { !$seen{$_}++ } @$self); } sub _flatten { @@ -190,11 +192,16 @@ my $first = $collection->first; my $first = $collection->first(qr/foo/); my $first = $collection->first(sub {...}); + my $first = $collection->first($method); + my $first = $collection->first($method, @args); -Evaluate regular expression or callback for each element in collection and -return the first one that matched the regular expression, or for which the -callback returned true. The element will be the first argument passed to the -callback and is also available as C<$_>. +Evaluate regular expression/callback for, or call method on, each element in +collection and return the first one that matched the regular expression, or for +which the callback/method returned true. The element will be the first argument +passed to the callback and is also available as C<$_>. + + # Longer version + my $first = $collection->first(sub { $_->$method(@args) }); # Find first value that contains the word "mojo" my $interesting = $collection->first(qr/mojo/i); @@ -216,11 +223,17 @@ my $new = $collection->grep(qr/foo/); my $new = $collection->grep(sub {...}); + my $new = $collection->grep($method); + my $new = $collection->grep($method, @args); -Evaluate regular expression or callback for each element in collection and -create a new collection with all elements that matched the regular expression, -or for which the callback returned true. The element will be the first argument -passed to the callback and is also available as C<$_>. +Evaluate regular expression/callback for, or call method on, each element in +collection and create a new collection with all elements that matched the +regular expression, or for which the callback/method returned true. The element +will be the first argument passed to the callback and is also available as +C<$_>. + + # Longer version + my $new = $collection->grep(sub { $_->$method(@args) }); # Find all values that contain the word "mojo" my $interesting = $collection->grep(qr/mojo/i); @@ -333,12 +346,23 @@ =head2 uniq my $new = $collection->uniq; + my $new = $collection->uniq(sub {...}); + my $new = $collection->uniq($method); + my $new = $collection->uniq($method, @args); + +Create a new collection without duplicate elements, using the string +representation of either the elements or the return value of the +callback/method. -Create a new collection without duplicate elements. + # Longer version + my $new = $collection->uniq(sub { $_->$method(@args) }); # "foo bar baz" Mojo::Collection->new('foo', 'bar', 'bar', 'baz')->uniq->join(' '); + # "[[1, 2], [2, 1]]" + Mojo::Collection->new([1, 2], [2, 1], [3, 2])->uniq(sub{ $_->[1] })->to_array; + =head1 SEE ALSO L<Mojolicious>, L<Mojolicious::Guides>, L<http://mojolicio.us>. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.20/lib/Mojo/DOM/CSS.pm new/Mojolicious-6.22/lib/Mojo/DOM/CSS.pm --- old/Mojolicious-6.20/lib/Mojo/DOM/CSS.pm 2015-08-29 16:02:28.000000000 +0200 +++ new/Mojolicious-6.22/lib/Mojo/DOM/CSS.pm 2015-09-22 00:37:19.000000000 +0200 @@ -386,19 +386,6 @@ my $root = $css->select(':root'); -=head2 E:checked - -A user interface element C<E> which is checked (for instance a radio-button or -checkbox). - - my $input = $css->select(':checked'); - -=head2 E:empty - -An C<E> element that has no children (including text nodes). - - my $empty = $css->select(':empty'); - =head2 E:nth-child(n) An C<E> element, the C<n-th> child of its parent. @@ -471,6 +458,19 @@ my $lonely = $css->select('div p:only-of-type'); +=head2 E:empty + +An C<E> element that has no children (including text nodes). + + my $empty = $css->select(':empty'); + +=head2 E:checked + +A user interface element C<E> which is checked (for instance a radio-button or +checkbox). + + my $input = $css->select(':checked'); + =head2 E.warning An C<E> element whose class is "warning". diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.20/lib/Mojo/DOM/HTML.pm new/Mojolicious-6.22/lib/Mojo/DOM/HTML.pm --- old/Mojolicious-6.20/lib/Mojo/DOM/HTML.pm 2015-08-29 13:17:09.000000000 +0200 +++ new/Mojolicious-6.22/lib/Mojo/DOM/HTML.pm 2015-09-25 01:03:50.000000000 +0200 @@ -228,8 +228,9 @@ # Attributes for my $key (sort keys %{$tree->[2]}) { - $result .= " $key" and next unless defined(my $value = $tree->[2]{$key}); - $result .= " $key" . '="' . xml_escape($value) . '"'; + my $value = $tree->[2]{$key}; + $result .= $xml ? qq{ $key="$key"} : " $key" and next unless defined $value; + $result .= qq{ $key="} . xml_escape($value) . '"'; } # No children diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.20/lib/Mojo/DOM.pm new/Mojolicious-6.22/lib/Mojo/DOM.pm --- old/Mojolicious-6.20/lib/Mojo/DOM.pm 2015-08-29 13:17:09.000000000 +0200 +++ new/Mojolicious-6.22/lib/Mojo/DOM.pm 2015-09-23 00:05:13.000000000 +0200 @@ -159,6 +159,20 @@ sub type { shift->tree->[0] } +sub val { + my $self = shift; + + # "option" + return $self->{value} // $self->text if (my $tag = $self->tag) eq 'option'; + + # "textarea", "input" or "button" + return $tag eq 'textarea' ? $self->text : $self->{value} if $tag ne 'select'; + + # "select" + my $v = $self->find('option:checked')->map('val'); + return exists $self->{multiple} ? $v->size ? $v->to_array : undef : $v->last; +} + sub wrap { shift->_wrap(0, @_) } sub wrap_content { shift->_wrap(1, @_) } @@ -401,27 +415,57 @@ selector support. It will even try to interpret broken HTML and XML, so you should not use it for validation. +=head1 NODES AND ELEMENTS + +When we parse an HTML/XML fragment, it gets turned into a tree of nodes. + + <!DOCTYPE html> + <html> + <head><title>Hello</title></head> + <body>World!</body> + </html> + +There are currently eight different kinds of nodes, C<cdata>, C<comment>, +C<doctype>, C<pi>, C<raw>, C<root>, C<tag> and C<text>. Elements are nodes of +the type C<tag>. + + root + |- doctype (html) + +- tag (html) + |- tag (head) + | +- tag (title) + | +- raw (Hello) + +- tag (body) + +- text (World!) + +While all node types are represented as L<Mojo::DOM> objects, some methods like +L</"attr"> and L</"namespace"> only apply to elements. + =head1 CASE-SENSITIVITY L<Mojo::DOM> defaults to HTML semantics, that means all tags and attribute names are lowercased and selectors need to be lowercase as well. + # HTML semantics my $dom = Mojo::DOM->new('<P ID="greeting">Hi!</P>'); say $dom->at('p[id]')->text; If XML processing instructions are found, the parser will automatically switch into XML mode and everything becomes case-sensitive. + # XML semantics my $dom = Mojo::DOM->new('<?xml version="1.0"?><P ID="greeting">Hi!</P>'); say $dom->at('P[ID]')->text; XML detection can also be disabled with the L</"xml"> method. # Force XML semantics - $dom->xml(1); + my $dom = Mojo::DOM->new->xml(1)->parse('<P ID="greeting">Hi!</P>'); + say $dom->at('P[ID]')->text; # Force HTML semantics - $dom->xml(0); + my $dom = Mojo::DOM->new->xml(0)->parse('<P ID="greeting">Hi!</P>'); + say $dom->at('p[id]')->text; =head1 METHODS @@ -518,8 +562,11 @@ # "<p><b>123</b></p>" $dom->parse('<p>Test<b>123</b></p>')->at('p')->child_nodes->first->remove; - # "<!-- Test -->" - $dom->parse('<!-- Test --><b>123</b>')->child_nodes->first; + # "<!DOCTYPE html>" + $dom->parse('<!DOCTYPE html><b>123</b>')->child_nodes->first; + + # " Test " + $dom->parse('<b>123</b><!-- Test -->')->child_nodes->last->content; =head2 children @@ -778,7 +825,7 @@ my $parent = $dom->remove; -Remove this node and return L</"parent">. +Remove this node and return L</"root"> (for C<root> nodes) or L</"parent">. # "<div></div>" $dom->parse('<div><h1>Test</h1></div>')->at('h1')->remove; @@ -791,7 +838,8 @@ my $parent = $dom->replace('<div>I ♥ Mojolicious!</div>'); -Replace this node with HTML/XML fragment and return L</"parent">. +Replace this node with HTML/XML fragment and return L</"root"> (for C<root> +nodes) or L</"parent">. # "<div><h2>123</h2></div>" $dom->parse('<div><h1>Test</h1></div>')->at('h1')->replace('<h2>123</h2>'); @@ -804,7 +852,7 @@ my $root = $dom->root; -Return L<Mojo::DOM> object for root node. +Return L<Mojo::DOM> object for C<root> node. =head2 strip @@ -869,6 +917,57 @@ This node's type, usually C<cdata>, C<comment>, C<doctype>, C<pi>, C<raw>, C<root>, C<tag> or C<text>. + # "cdata" + $dom->parse('<![CDATA[Test]]>')->child_nodes->first->type; + + # "comment" + $dom->parse('<!-- Test -->')->child_nodes->first->type; + + # "doctype" + $dom->parse('<!DOCTYPE html>')->child_nodes->first->type; + + # "pi" + $dom->parse('<?xml version="1.0"?>')->child_nodes->first->type; + + # "raw" + $dom->parse('<title>Test</title>')->at('title')->child_nodes->first->type; + + # "root" + $dom->parse('<p>Test</p>')->type; + + # "tag" + $dom->parse('<p>Test</p>')->at('p')->type; + + # "text" + $dom->parse('<p>Test</p>')->at('p')->child_nodes->first->type; + +=head2 val + + my $value = $dom->val; + +Extract value from form element (such as C<button>, C<input>, C<option>, +C<select> and C<textarea>) or return C<undef> if this element has no value. In +the case of C<select> with C<multiple> attribute, find C<option> elements with +C<selected> attribute and return an array reference with all values or C<undef> +if none could be found. + + # "a" + $dom->parse('<input name="test" value="a">')->at('input')->val; + + # "b" + $dom->parse('<textarea>b</textarea>')->at('textarea')->val; + + # "c" + $dom->parse('<option value="c">Test</option>')->at('option')->val; + + # "d" + $dom->parse('<select><option selected>d</option></select>') + ->at('select')->val; + + # "e" + $dom->parse('<select multiple><option selected>e</option></select>') + ->at('select')->val->[0]; + =head2 wrap $dom = $dom->wrap('<div></div>'); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.20/lib/Mojo/JSON.pm new/Mojolicious-6.22/lib/Mojo/JSON.pm --- old/Mojolicious-6.20/lib/Mojo/JSON.pm 2015-08-29 16:03:19.000000000 +0200 +++ new/Mojolicious-6.22/lib/Mojo/JSON.pm 2015-09-24 20:42:32.000000000 +0200 @@ -4,14 +4,12 @@ use B; use Carp 'croak'; use Exporter 'import'; +use JSON::PP (); use Mojo::Util; use Scalar::Util 'blessed'; our @EXPORT_OK = qw(decode_json encode_json false from_json j to_json true); -# Booleans -my ($FALSE, $TRUE) = map { bless \(my $dummy = $_), 'Mojo::JSON::_Bool' } 0, 1; - # Escaped special character map (with u2028 and u2029) my %ESCAPE = ( '"' => '"', @@ -35,7 +33,7 @@ sub encode_json { Mojo::Util::encode 'UTF-8', _encode_value(shift) } -sub false () {$FALSE} +sub false () {JSON::PP::false} sub from_json { my $err = _decode(\my $value, shift, 1); @@ -49,7 +47,7 @@ sub to_json { _encode_value(shift) } -sub true () {$TRUE} +sub true () {JSON::PP::true} sub _decode { my $valueref = shift; @@ -197,10 +195,10 @@ if /\G([-]?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?)/gc; # True - return $TRUE if /\Gtrue/gc; + return true() if /\Gtrue/gc; # False - return $FALSE if /\Gfalse/gc; + return false() if /\Gfalse/gc; # Null return undef if /\Gnull/gc; @@ -240,7 +238,7 @@ # True or false return $$value ? 'true' : 'false' if $ref eq 'SCALAR'; - return $value ? 'true' : 'false' if $ref eq 'Mojo::JSON::_Bool'; + return $value ? 'true' : 'false' if $ref eq 'JSON::PP::Boolean'; # Blessed reference with TO_JSON method if (blessed $value && (my $sub = $value->can('TO_JSON'))) { @@ -277,10 +275,6 @@ die "$context\n"; } -# Emulate boolean type -package Mojo::JSON::_Bool; -use overload '""' => sub { ${$_[0]} }, fallback => 1; - 1; =encoding utf8 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.20/lib/Mojo/Parameters.pm new/Mojolicious-6.22/lib/Mojo/Parameters.pm --- old/Mojolicious-6.20/lib/Mojo/Parameters.pm 2015-08-29 16:31:35.000000000 +0200 +++ new/Mojolicious-6.22/lib/Mojo/Parameters.pm 2015-09-22 19:59:35.000000000 +0200 @@ -21,7 +21,7 @@ if (ref $value eq 'ARRAY') { push @$old, $name => $_ // '' for @$value } # Single value - else { push @$old, $name => $value } + elsif (defined $value) { push @$old, $name => $value } } return $self; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.20/lib/Mojo/UserAgent/CookieJar.pm new/Mojolicious-6.22/lib/Mojo/UserAgent/CookieJar.pm --- old/Mojolicious-6.20/lib/Mojo/UserAgent/CookieJar.pm 2015-09-15 18:55:10.000000000 +0200 +++ new/Mojolicious-6.22/lib/Mojo/UserAgent/CookieJar.pm 2015-09-18 22:06:45.000000000 +0200 @@ -168,11 +168,11 @@ # Ignore all cookies $jar->ignore(sub { 1 }); - # Ignore cookies with domain "com" + # Ignore cookies for domains "com", "net" and "org" $jar->ignore(sub { my $cookie = shift; return undef unless my $domain = $cookie->domain; - return $domain eq 'com'; + return $domain eq 'com' || $domain eq 'net' || $domain eq 'org'; }); =head2 max_cookie_size diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.20/lib/Mojo/UserAgent/Transactor.pm new/Mojolicious-6.22/lib/Mojo/UserAgent/Transactor.pm --- old/Mojolicious-6.20/lib/Mojo/UserAgent/Transactor.pm 2015-08-29 13:17:09.000000000 +0200 +++ new/Mojolicious-6.22/lib/Mojo/UserAgent/Transactor.pm 2015-09-22 20:00:06.000000000 +0200 @@ -192,7 +192,7 @@ my @parts; for my $name (sort keys %$form) { - my $values = $form->{$name}; + next unless defined(my $values = $form->{$name}); for my $value (ref $values eq 'ARRAY' ? @$values : ($values)) { push @parts, my $part = Mojo::Content::Single->new; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.20/lib/Mojo/UserAgent.pm new/Mojolicious-6.22/lib/Mojo/UserAgent.pm --- old/Mojolicious-6.20/lib/Mojo/UserAgent.pm 2015-09-15 18:45:39.000000000 +0200 +++ new/Mojolicious-6.22/lib/Mojo/UserAgent.pm 2015-09-18 14:30:58.000000000 +0200 @@ -717,7 +717,7 @@ L<Mojo::UserAgent::Transactor/"tx"> (except for the C<DELETE> method, which is implied). You can also append a callback to perform requests non-blocking. - $ua->delete('http://example.com' => sub { + $ua->delete('http://example.com' => json => {a => 'b'} => sub { my ($ua, $tx) = @_; say $tx->res->body; }); @@ -737,7 +737,7 @@ for the C<GET> method, which is implied). You can also append a callback to perform requests non-blocking. - $ua->get('http://example.com' => sub { + $ua->get('http://example.com' => json => {a => 'b'} => sub { my ($ua, $tx) = @_; say $tx->res->body; }); @@ -757,7 +757,7 @@ L<Mojo::UserAgent::Transactor/"tx"> (except for the C<HEAD> method, which is implied). You can also append a callback to perform requests non-blocking. - $ua->head('http://example.com' => sub { + $ua->head('http://example.com' => json => {a => 'b'} => sub { my ($ua, $tx) = @_; say $tx->res->body; }); @@ -777,7 +777,7 @@ L<Mojo::UserAgent::Transactor/"tx"> (except for the C<OPTIONS> method, which is implied). You can also append a callback to perform requests non-blocking. - $ua->options('http://example.com' => sub { + $ua->options('http://example.com' => json => {a => 'b'} => sub { my ($ua, $tx) = @_; say $tx->res->body; }); @@ -797,7 +797,7 @@ L<Mojo::UserAgent::Transactor/"tx"> (except for the C<PATCH> method, which is implied). You can also append a callback to perform requests non-blocking. - $ua->patch('http://example.com' => sub { + $ua->patch('http://example.com' => json => {a => 'b'} => sub { my ($ua, $tx) = @_; say $tx->res->body; }); @@ -817,7 +817,7 @@ L<Mojo::UserAgent::Transactor/"tx"> (except for the C<POST> method, which is implied). You can also append a callback to perform requests non-blocking. - $ua->post('http://example.com' => sub { + $ua->post('http://example.com' => json => {a => 'b'} => sub { my ($ua, $tx) = @_; say $tx->res->body; }); @@ -837,7 +837,7 @@ for the C<PUT> method, which is implied). You can also append a callback to perform requests non-blocking. - $ua->put('http://example.com' => sub { + $ua->put('http://example.com' => json => {a => 'b'} => sub { my ($ua, $tx) = @_; say $tx->res->body; }); @@ -869,7 +869,7 @@ receive either a L<Mojo::Transaction::WebSocket> or L<Mojo::Transaction::HTTP> object, depending on if the handshake was successful. - $ua->websocket('wss://example.com/echo' => sub { + $ua->websocket('wss://example.com/echo' => ['v1.proto'] => sub { my ($ua, $tx) = @_; say 'WebSocket handshake failed!' and return unless $tx->is_websocket; $tx->on(finish => sub { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.20/lib/Mojolicious.pm new/Mojolicious-6.22/lib/Mojolicious.pm --- old/Mojolicious-6.20/lib/Mojolicious.pm 2015-09-13 01:36:47.000000000 +0200 +++ new/Mojolicious-6.22/lib/Mojolicious.pm 2015-09-23 03:05:07.000000000 +0200 @@ -43,7 +43,7 @@ has validator => sub { Mojolicious::Validator->new }; our $CODENAME = 'Clinking Beer Mugs'; -our $VERSION = '6.20'; +our $VERSION = '6.22'; sub AUTOLOAD { my $self = shift; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.20/lib/Test/Mojo.pm new/Mojolicious-6.22/lib/Test/Mojo.pm --- old/Mojolicious-6.20/lib/Test/Mojo.pm 2015-08-29 13:17:09.000000000 +0200 +++ new/Mojolicious-6.22/lib/Test/Mojo.pm 2015-09-21 22:13:57.000000000 +0200 @@ -701,7 +701,7 @@ # Run additional tests on the transaction $t->get_ok('/foo')->status_is(200); - is $t->tx->res->dom->at('input')->{value}, 'whatever', 'right value'; + is $t->tx->res->dom->at('input')->val, 'whatever', 'right value'; =head2 head_ok diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.20/t/mojo/collection.t new/Mojolicious-6.22/t/mojo/collection.t --- old/Mojolicious-6.20/t/mojo/collection.t 2015-08-29 01:31:10.000000000 +0200 +++ new/Mojolicious-6.22/t/mojo/collection.t 2015-09-25 22:40:28.000000000 +0200 @@ -46,6 +46,9 @@ is $collection->first(sub { shift() < 5 }), 4, 'right result'; is $collection->first(qr/[1-4]/), 4, 'right result'; is $collection->first(sub { ref $_ eq 'CODE' }), undef, 'no result'; +$collection = c(c(1, 2, 3), c(4, 5, 6), c(7, 8, 9)); +is_deeply $collection->first(first => sub { $_ == 5 })->to_array, [4, 5, 6], + 'right result'; $collection = c(); is $collection->first, undef, 'no result'; is $collection->first(sub {defined}), undef, 'no result'; @@ -69,6 +72,9 @@ 'right elements'; is_deeply $collection->grep(sub { $_ < 1 })->to_array, [], 'no elements'; is_deeply $collection->grep(sub { $_ > 9 })->to_array, [], 'no elements'; +$collection = c(c(1, 2, 3), c(4, 5, 6), c(7, 8, 9)); +is_deeply $collection->grep(first => sub { $_ >= 5 })->flatten->to_array, + [4, 5, 6, 7, 8, 9], 'right result'; # join $collection = c(1, 2, 3); @@ -153,6 +159,12 @@ is_deeply $collection->uniq->to_array, [1, 2, 3, 4, 5], 'right result'; is_deeply $collection->uniq->reverse->uniq->to_array, [5, 4, 3, 2, 1], 'right result'; +$collection = c([1, 2, 3], [3, 2, 1], [3, 1, 2]); +is_deeply $collection->uniq(sub { $_->[1] }), [[1, 2, 3], [3, 1, 2]], + 'right result'; +$collection = c(c(1, 2), c(1, 2), c(2, 1)); +is_deeply $collection->uniq(join => ',')->flatten->to_array, [1, 2, 2, 1], + 'right result'; # TO_JSON is encode_json(c(1, 2, 3)), '[1,2,3]', 'right result'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.20/t/mojo/dom.t new/Mojolicious-6.22/t/mojo/dom.t --- old/Mojolicious-6.20/t/mojo/dom.t 2015-08-29 01:31:15.000000000 +0200 +++ new/Mojolicious-6.22/t/mojo/dom.t 2015-09-25 01:00:02.000000000 +0200 @@ -1918,7 +1918,8 @@ ok $element->root->xml, 'XML mode active'; $dom->replace('<XMLTest2 /><XMLTest3 just="works" />'); ok $dom->xml, 'XML mode active'; -is $dom, '<XMLTest2 /><XMLTest3 just="works" />', 'right result'; +$dom->at('XMLTest2')->{foo} = undef; +is $dom, '<XMLTest2 foo="foo" /><XMLTest3 just="works" />', 'right result'; # Ensure HTML semantics ok !Mojo::DOM->new->xml(undef)->parse('<?xml version="1.0"?>')->xml, @@ -2173,6 +2174,49 @@ is $dom->at('div pre code')->all_text(0), "like\n it\n really", 'right text'; +# Form values +$dom = Mojo::DOM->new(<<EOF); +<form action="/foo"> + <p>Test</p> + <input type="text" name="a" value="A" /> + <input type="checkbox" checked name="b" value="B"> + <input type="radio" checked name="c" value="C"> + <select multiple name="f"> + <option value="F">G</option> + <optgroup> + <option>H</option> + <option selected>I</option> + </optgroup> + <option value="J" selected>K</option> + </select> + <select name="n"><option>N</option></select> + <select multiple name="q"><option>Q</option></select> + <select name="d"> + <option selected>R</option> + <option selected>D</option> + </select> + <textarea name="m">M</textarea> + <button name="o" value="O">No!</button> + <input type="submit" name="p" value="P" /> +</form> +EOF +is $dom->at('p')->val, undef, 'no value'; +is $dom->at('input')->val, 'A', 'right value'; +is $dom->at('input:checked')->val, 'B', 'right value'; +is $dom->at('input:checked[type=radio]')->val, 'C', 'right value'; +is_deeply $dom->at('select')->val, ['I', 'J'], 'right values'; +is $dom->at('select option')->val, 'F', 'right value'; +is $dom->at('select optgroup option:not([selected])')->val, 'H', 'right value'; +is $dom->find('select')->[1]->at('option')->val, 'N', 'right value'; +is $dom->find('select')->[1]->val, undef, 'no value'; +is_deeply $dom->find('select')->[2]->val, undef, 'no value'; +is $dom->find('select')->[2]->at('option')->val, 'Q', 'right value'; +is_deeply $dom->find('select')->last->val, 'D', 'right value'; +is_deeply $dom->find('select')->last->at('option')->val, 'R', 'right value'; +is $dom->at('textarea')->val, 'M', 'right value'; +is $dom->at('button')->val, 'O', 'right value'; +is $dom->find('form input')->last->val, 'P', 'right value'; + # PoCo example with whitespace sensitive text $dom = Mojo::DOM->new(<<EOF); <?xml version="1.0" encoding="UTF-8"?> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.20/t/mojo/home.t new/Mojolicious-6.22/t/mojo/home.t --- old/Mojolicious-6.20/t/mojo/home.t 2015-08-29 01:31:16.000000000 +0200 +++ new/Mojolicious-6.22/t/mojo/home.t 2015-09-18 14:10:09.000000000 +0200 @@ -11,25 +11,25 @@ use Mojo::Home; # ENV detection +my $target = canonpath realpath cwd; { local $ENV{MOJO_HOME} = '.'; my $home = Mojo::Home->new->detect; is_deeply [split /\\|\//, canonpath($home->to_string)], - [split /\\|\//, canonpath(realpath cwd())], 'right path detected'; + [split /\\|\//, $target], 'right path detected'; } # Class detection my $original = catdir splitdir $FindBin::Bin; my $home = Mojo::Home->new->detect; -my $target = realpath $original; -is_deeply [split /\\|\//, $target], [split /\\|\//, $home], +is_deeply [split /\\|\//, realpath $original], [split /\\|\//, $home], 'right path detected'; # Specific class detection $INC{'MyClass.pm'} = 'MyClass.pm'; $home = Mojo::Home->new->detect('MyClass'); is_deeply [split /\\|\//, canonpath($home->to_string)], - [split /\\|\//, canonpath(realpath cwd())], 'right path detected'; + [split /\\|\//, $target], 'right path detected'; # FindBin detection $home = Mojo::Home->new->detect(undef); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.20/t/mojo/parameters.t new/Mojolicious-6.22/t/mojo/parameters.t --- old/Mojolicious-6.20/t/mojo/parameters.t 2015-08-29 01:31:20.000000000 +0200 +++ new/Mojolicious-6.22/t/mojo/parameters.t 2015-09-22 20:04:07.000000000 +0200 @@ -51,7 +51,7 @@ # Append $params = Mojo::Parameters->new('q=1'); -$params->append(a => 4, a => 5, b => 6, b => 7); +$params->append(a => 4, a => 5, b => 6, b => 7, c => undef, c => []); is_deeply $params->to_hash, {a => [4, 5], b => [6, 7], q => 1}, 'right structure'; is_deeply $params->names, [qw(a b q)], 'right structure'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.20/t/mojo/transactor.t new/Mojolicious-6.22/t/mojo/transactor.t --- old/Mojolicious-6.20/t/mojo/transactor.t 2015-08-29 01:31:29.000000000 +0200 +++ new/Mojolicious-6.22/t/mojo/transactor.t 2015-09-23 00:47:25.000000000 +0200 @@ -150,7 +150,7 @@ $tx = $t->tx(POST => 'http://example.com/foo' => {Accept => '*/*', 'Content-Type' => 'application/mojo-form'} => form => - {test => 123} => charset => 'UTF-8'); + {test => 123, nothing => undef} => charset => 'UTF-8'); is $tx->req->url->to_abs, 'http://example.com/foo', 'right URL'; is $tx->req->method, 'POST', 'right method'; is $tx->req->headers->content_type, 'application/mojo-form', @@ -159,8 +159,10 @@ is $tx->req->body, 'test=123', 'right content'; # Multipart form -$tx = $t->tx(POST => 'http://example.com/foo' => - {'Content-Type' => 'multipart/form-data'} => form => {test => 123}); +$tx + = $t->tx(POST => 'http://example.com/foo' => + {'Content-Type' => 'multipart/form-data'} => form => + {test => 123, nothing => undef}); is $tx->req->url->to_abs, 'http://example.com/foo', 'right URL'; is $tx->req->method, 'POST', 'right method'; is $tx->req->headers->content_type, 'multipart/form-data', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.20/t/mojolicious/restful_lite_app.t new/Mojolicious-6.22/t/mojolicious/restful_lite_app.t --- old/Mojolicious-6.20/t/mojolicious/restful_lite_app.t 2015-08-29 01:31:46.000000000 +0200 +++ new/Mojolicious-6.22/t/mojolicious/restful_lite_app.t 2015-09-24 20:28:04.000000000 +0200 @@ -3,6 +3,7 @@ BEGIN { $ENV{MOJO_REACTOR} = 'Mojo::Reactor::Poll' } use Test::More; +use Mojo::JSON qw(false true); use Mojolicious::Lite; use Test::Mojo; @@ -88,14 +89,14 @@ ->status_is(200)->json_is({best => 'txt'}); # Nothing -$t->get_ok('/wants_json')->status_is(200)->json_is({wants_json => 0}); +$t->get_ok('/wants_json')->status_is(200)->json_is({wants_json => false}); # Unsupported -$t->get_ok('/wants_json.xml')->status_is(200)->json_is({wants_json => 0}); +$t->get_ok('/wants_json.xml')->status_is(200)->json_is({wants_json => false}); # Accept "json" $t->get_ok('/wants_json' => {Accept => 'application/json'})->status_is(200) - ->json_is({wants_json => 1}); + ->json_is({wants_json => true}); # Ajax my $ajax = 'text/html;q=0.1,application/json'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.20/t/mojolicious/validation_lite_app.t new/Mojolicious-6.22/t/mojolicious/validation_lite_app.t --- old/Mojolicious-6.20/t/mojolicious/validation_lite_app.t 2015-08-29 01:31:51.000000000 +0200 +++ new/Mojolicious-6.22/t/mojolicious/validation_lite_app.t 2015-09-23 00:07:33.000000000 +0200 @@ -263,7 +263,7 @@ ->element_exists('[value=bar]')->element_exists_not('.field-with-error'); # Correct CSRF token -my $token = $t->ua->get('/forgery')->res->dom->at('[name=csrf_token]')->{value}; +my $token = $t->ua->get('/forgery')->res->dom->at('[name=csrf_token]')->val; $t->post_ok('/forgery' => form => {csrf_token => $token, foo => 'bar'}) ->status_is(200)->content_unlike(qr/Wrong or missing CSRF token!/) ->element_exists('[value=bar]')->element_exists_not('.field-with-error');
participants (1)
-
root@hilbert.suse.de