Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package perl-JSON-Validator for openSUSE:Factory checked in at 2021-04-12 17:10:31 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/perl-JSON-Validator (Old) and /work/SRC/openSUSE:Factory/.perl-JSON-Validator.new.2401 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-JSON-Validator" Mon Apr 12 17:10:31 2021 rev:30 rq:880886 version:4.16 Changes: -------- --- /work/SRC/openSUSE:Factory/perl-JSON-Validator/perl-JSON-Validator.changes 2021-02-25 18:28:48.438233871 +0100 +++ /work/SRC/openSUSE:Factory/.perl-JSON-Validator.new.2401/perl-JSON-Validator.changes 2021-04-12 17:10:34.242578673 +0200 @@ -1,0 +2,15 @@ +Wed Mar 24 03:06:35 UTC 2021 - Tina M??ller <timueller+p...@suse.de> + +- updated to 4.16 + see /usr/share/doc/packages/perl-JSON-Validator/Changes + + 4.16 2021-03-24T08:57:46+0900 + - Fix handling OpenAPIv2 "responses" $ref when bundling + + 4.15 2021-03-24T07:57:58+0900 + - Fix validating nullable inside anyOf for OpenAPIv3 #241 + - Fix t/id-keyword-draft*.t test failures with Mojolicious 9.11 #242 #243 + - Removed deprecated functions joi() and validate_json() + - Removed deprecated methods singleton() and version() + +------------------------------------------------------------------- Old: ---- JSON-Validator-4.14.tar.gz New: ---- JSON-Validator-4.16.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-JSON-Validator.spec ++++++ --- /var/tmp/diff_new_pack.4UhtJj/_old 2021-04-12 17:10:35.734580324 +0200 +++ /var/tmp/diff_new_pack.4UhtJj/_new 2021-04-12 17:10:35.734580324 +0200 @@ -18,7 +18,7 @@ %define cpan_name JSON-Validator Name: perl-JSON-Validator -Version: 4.14 +Version: 4.16 Release: 0 Summary: Validate data against a JSON schema License: Artistic-2.0 @@ -33,9 +33,11 @@ BuildRequires: perl(Test::Deep) BuildRequires: perl(Test::More) >= 1.30 BuildRequires: perl(YAML::PP) >= 0.020 +BuildRequires: perl(YAML::XS) >= 0.67 Requires: perl(List::Util) >= 1.45 Requires: perl(Mojolicious) >= 7.28 Requires: perl(YAML::PP) >= 0.020 +Requires: perl(YAML::XS) >= 0.67 %{perl_requires} %description ++++++ JSON-Validator-4.14.tar.gz -> JSON-Validator-4.16.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JSON-Validator-4.14/Changes new/JSON-Validator-4.16/Changes --- old/JSON-Validator-4.14/Changes 2021-02-23 06:58:07.000000000 +0100 +++ new/JSON-Validator-4.16/Changes 2021-03-24 00:57:46.000000000 +0100 @@ -1,5 +1,14 @@ Revision history for perl distribution JSON-Validator +4.16 2021-03-24T08:57:46+0900 + - Fix handling OpenAPIv2 "responses" $ref when bundling + +4.15 2021-03-24T07:57:58+0900 + - Fix validating nullable inside anyOf for OpenAPIv3 #241 + - Fix t/id-keyword-draft*.t test failures with Mojolicious 9.11 #242 #243 + - Removed deprecated functions joi() and validate_json() + - Removed deprecated methods singleton() and version() + 4.14 2021-02-23T14:58:07+0900 - Add routes() to Schema::OpenAPIv2 and OpenAPIv3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JSON-Validator-4.14/META.json new/JSON-Validator-4.16/META.json --- old/JSON-Validator-4.14/META.json 2021-02-23 06:58:09.000000000 +0100 +++ new/JSON-Validator-4.16/META.json 2021-03-24 00:57:47.000000000 +0100 @@ -36,7 +36,7 @@ "requires" : { "List::Util" : "1.45", "Mojolicious" : "7.28", - "YAML::PP" : "0.020", + "YAML::XS" : "0.67", "perl" : "5.010001" } }, @@ -63,6 +63,6 @@ }, "x_IRC" : "irc://irc.freenode.net/#perl-openapi" }, - "version" : "4.14", + "version" : "4.16", "x_serialization_backend" : "JSON::PP version 4.04" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JSON-Validator-4.14/META.yml new/JSON-Validator-4.16/META.yml --- old/JSON-Validator-4.14/META.yml 2021-02-23 06:58:08.000000000 +0100 +++ new/JSON-Validator-4.16/META.yml 2021-03-24 00:57:47.000000000 +0100 @@ -24,7 +24,7 @@ requires: List::Util: '1.45' Mojolicious: '7.28' - YAML::PP: '0.020' + YAML::XS: '0.67' perl: '5.010001' resources: IRC: irc://irc.freenode.net/#perl-openapi @@ -32,5 +32,5 @@ homepage: https://mojolicious.org license: http://www.opensource.org/licenses/artistic-license-2.0 repository: https://github.com/mojolicious/json-validator.git -version: '4.14' +version: '4.16' x_serialization_backend: 'CPAN::Meta::YAML version 0.018' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JSON-Validator-4.14/lib/JSON/Validator/Schema/Draft4.pm new/JSON-Validator-4.16/lib/JSON/Validator/Schema/Draft4.pm --- old/JSON-Validator-4.14/lib/JSON/Validator/Schema/Draft4.pm 2020-10-14 01:23:11.000000000 +0200 +++ new/JSON-Validator-4.16/lib/JSON/Validator/Schema/Draft4.pm 2021-03-04 00:10:33.000000000 +0100 @@ -23,10 +23,6 @@ }; } -sub _definitions_path_for_ref { ['definitions'] } - -sub _id_key {'id'} - sub _validate_number_max { my ($self, $value, $path, $schema, $expected) = @_; return unless defined(my $cmp_with = $schema->{maximum}); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JSON-Validator-4.14/lib/JSON/Validator/Schema/OpenAPIv2.pm new/JSON-Validator-4.16/lib/JSON/Validator/Schema/OpenAPIv2.pm --- old/JSON-Validator-4.14/lib/JSON/Validator/Schema/OpenAPIv2.pm 2021-02-23 06:57:46.000000000 +0100 +++ new/JSON-Validator-4.16/lib/JSON/Validator/Schema/OpenAPIv2.pm 2021-03-24 00:57:32.000000000 +0100 @@ -202,6 +202,12 @@ return $val->{value} = [split /,/, $val->{value}]; } +sub _definitions_path_for_ref { + my ($self, $ref) = @_; + my $path = Mojo::Path->new($ref->fqn =~ m!^.*#/(definitions|parameters|responses/.+)$!)->to_dir->parts; + return $path->[0] ? $path : ['definitions']; +} + sub _find_all_nodes { my ($self, $pointer, $leaf) = @_; my @found; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JSON-Validator-4.14/lib/JSON/Validator/Schema/OpenAPIv3.pm new/JSON-Validator-4.16/lib/JSON/Validator/Schema/OpenAPIv3.pm --- old/JSON-Validator-4.14/lib/JSON/Validator/Schema/OpenAPIv3.pm 2021-02-23 06:02:51.000000000 +0100 +++ new/JSON-Validator-4.16/lib/JSON/Validator/Schema/OpenAPIv3.pm 2021-03-23 23:57:14.000000000 +0100 @@ -256,6 +256,21 @@ return; } +sub _validate_type_boolean { + my $self = shift; + return $_[2]->{nullable} && !defined $_[0] ? () : $self->SUPER::_validate_type_boolean(@_); +} + +sub _validate_type_integer { + my $self = shift; + return $_[2]->{nullable} && !defined $_[0] ? () : $self->SUPER::_validate_type_integer(@_); +} + +sub _validate_type_number { + my $self = shift; + return $_[2]->{nullable} && !defined $_[0] ? () : $self->SUPER::_validate_type_number(@_); +} + sub _validate_type_object { my ($self, $data, $path, $schema) = @_; return E $path, [object => type => data_type $data] if ref $data ne 'HASH'; @@ -272,15 +287,6 @@ return $self->_validate($data, $path, $self->get($url)); } - my %properties = %{$schema->{properties} || {}}; - local $schema->{properties} = \%properties; - for my $key (keys %properties) { - next unless $properties{$key}{nullable}; - my $tied = tied %{$properties{$key}}; - $properties{$key} = $tied ? {%{$tied->schema}} : {%{$properties{$key}}}; - $properties{$key}{type} = ['null', _to_list($properties{$key}{type})]; - } - return $self->{validate_request} ? $self->_validate_type_object_request($_[1], $path, $schema) : $self->_validate_type_object_response($_[1], $path, $schema); @@ -326,6 +332,11 @@ ); } +sub _validate_type_string { + my $self = shift; + return $_[2]->{nullable} && !defined $_[0] ? () : $self->SUPER::_validate_type_string(@_); +} + 1; =encoding utf8 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JSON-Validator-4.14/lib/JSON/Validator/Schema.pm new/JSON-Validator-4.16/lib/JSON/Validator/Schema.pm --- old/JSON-Validator-4.14/lib/JSON/Validator/Schema.pm 2021-01-24 05:50:55.000000000 +0100 +++ new/JSON-Validator-4.16/lib/JSON/Validator/Schema.pm 2021-03-23 23:24:31.000000000 +0100 @@ -54,6 +54,8 @@ return JSON::Validator::Util::schema_extract(shift->data, @_); } +sub load_and_validate_schema { Carp::confess('load_and_validate_schema(...) is unsupported.') } + sub new { return shift->SUPER::new(@_) if @_ % 2; my ($class, $data) = (shift, shift); @@ -73,17 +75,11 @@ return $self->_validate($_[1], '', $schema || $self->data); } -# Should not be called on JSON::Validator::Schema -for my $method (qw(load_and_validate_schema schema singleton version)) { - my $super = "JSON::Validator::$method"; - Mojo::Util::monkey_patch(__PACKAGE__, - $method => sub { - my $class = ref $_[0]; - carp "$class\::$method(...) is unsupported and will be removed."; - shift->$super(@_); - } - ); -} +sub schema { $_[0]->can('data') ? $_[0] : $_[0]->SUPER::schema } + +sub _definitions_path_for_ref { ['definitions'] } + +sub _id_key {'id'} sub _register_root_schema { my ($self, $id, $schema) = @_; @@ -220,6 +216,10 @@ See L<Mojo::JSON::Pointer/get>. +=head2 load_and_validate_schema + +This method will be removed in a future release. + =head2 new my $schema = JSON::Validator::Schema->new($data); @@ -239,6 +239,10 @@ If C<$data> is an C<$url> on contains "$ref" pointing to an URL, then these schemas will be downloaded and resolved as well. +=head2 schema + +This method will be removed in a future release. + =head2 validate my @errors = $schema->validate($any); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JSON-Validator-4.14/lib/JSON/Validator.pm new/JSON-Validator-4.16/lib/JSON/Validator.pm --- old/JSON-Validator-4.14/lib/JSON/Validator.pm 2021-02-23 06:58:07.000000000 +0100 +++ new/JSON-Validator-4.16/lib/JSON/Validator.pm 2021-03-24 00:57:46.000000000 +0100 @@ -16,7 +16,7 @@ use constant RECURSION_LIMIT => $ENV{JSON_VALIDATOR_RECURSION_LIMIT} || 100; -our $VERSION = '4.14'; +our $VERSION = '4.16'; our @EXPORT_OK = qw(joi validate_json); our %SCHEMAS = ( @@ -43,14 +43,6 @@ Mojo::Util::monkey_patch(__PACKAGE__, $method => sub { shift->store->$method(@_) }); } -sub version { - my $self = shift; - Mojo::Util::deprecated('version() will be removed in future version.'); - return $self->{version} || 4 unless @_; - $self->{version} = shift; - $self; -} - sub bundle { my ($self, $args) = @_; my $cloner; @@ -140,19 +132,10 @@ sub get { JSON::Validator::Util::schema_extract(shift->schema->data, shift) } -sub joi { - Mojo::Util::deprecated('JSON::Validator::joi() is replaced by JSON::Validator::Joi::joi().'); - require JSON::Validator::Joi; - return JSON::Validator::Joi->new unless @_; - my ($data, $joi) = @_; - return $joi->validate($data, $joi); -} - sub load_and_validate_schema { my ($self, $schema, $args) = @_; - $self->{version} = $1 if !$self->{version} and ($args->{schema} || 'draft-04') =~ m!draft-0+(\w+)!; - + delete $self->{schema}; my $schema_obj = $self->_new_schema($schema, %$args); confess join "\n", "Invalid JSON specification", (ref $schema eq 'HASH' ? Mojo::Util::dumper($schema) : $schema), map {"- $_"} @{$schema_obj->errors} @@ -175,11 +158,6 @@ return $self; } -sub singleton { - Mojo::Util::deprecated('singleton() will be removed in future version.'); - state $jv = shift->new; -} - sub validate { my ($self, $data, $schema) = @_; $schema //= $self->schema->data; @@ -192,11 +170,6 @@ return @errors; } -sub validate_json { - Mojo::Util::deprecated('validate_json() will be removed in future version.'); - __PACKAGE__->singleton->schema($_[1])->validate($_[0]); -} - sub _build_formats { return { 'byte' => JSON::Validator::Formats->can('check_byte'), @@ -308,7 +281,7 @@ } } -sub _id_key { ($_[0]->{version} || 4) < 7 ? 'id' : '$id' } +sub _id_key { $_[0]->schema ? $_[0]->schema->_id_key : 'id' } sub _new_schema { my ($self, $source, %attrs) = @_; @@ -324,15 +297,12 @@ my $store = $self->store; my $schema = $loadable ? $store->get($store->load($source)) : $source; - if (!$attrs{specification} and is_type $schema, 'HASH' and $schema->{'$schema'}) { - $attrs{specification} = $schema->{'$schema'}; - } - if (!$attrs{specification} and $self->{version}) { - $attrs{specification} = sprintf 'http://json-schema.org/draft-%02s/schema#', $self->{version}; - } $attrs{formats} ||= $self->{formats} if $self->{formats}; - $attrs{version} ||= $self->{version} if $self->{version}; + $attrs{specification} = $schema->{'$schema'} + if !$attrs{specification} + and is_type $schema, 'HASH' + and $schema->{'$schema'}; $attrs{store} = $store; return $self->_schema_class($attrs{specification} || $schema)->new($source, %attrs); @@ -437,7 +407,7 @@ } } - my $schema_class = $spec && $SCHEMAS{$spec} || 'JSON::Validator::Schema'; + my $schema_class = $spec && $SCHEMAS{$spec} || 'JSON::Validator::Schema::Draft4'; $schema_class =~ s!^\+(.+)$!JSON::Validator::Schema::$1!; confess "Could not load $schema_class: $@" unless $schema_class->can('new') or eval "require $schema_class;1"; @@ -950,7 +920,7 @@ firstName => joi->string->required, lastName => joi->string->required, age => joi->integer->min(0), - }); + }), ); =head1 DESCRIPTION diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JSON-Validator-4.14/t/backcompat.t new/JSON-Validator-4.16/t/backcompat.t --- old/JSON-Validator-4.14/t/backcompat.t 2020-10-13 05:31:27.000000000 +0200 +++ new/JSON-Validator-4.16/t/backcompat.t 2021-03-04 00:10:33.000000000 +0100 @@ -3,11 +3,9 @@ package JSON::Validator::L01; use Mojo::Base 'JSON::Validator'; -has version => 42; package main; my $legacy = JSON::Validator::L01->new; -is $legacy->version, 42; my @errors = eval { $legacy->schema({properties => {foo => {type => 'integer'}}})->validate({foo => '42'}); }; ok !$@, 'did not fail' or diag $@; like "@errors", qr{Expected integer}, 'correct validation'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JSON-Validator-4.14/t/id-keyword-draft4.t new/JSON-Validator-4.16/t/id-keyword-draft4.t --- old/JSON-Validator-4.14/t/id-keyword-draft4.t 2020-10-13 05:31:27.000000000 +0200 +++ new/JSON-Validator-4.16/t/id-keyword-draft4.t 2021-03-23 23:27:23.000000000 +0100 @@ -7,9 +7,9 @@ my ($base_url, $jv, $t, @e); use Mojolicious::Lite; -get '/invalid-fragment' => 'invalid-fragment'; -get '/invalid-relative' => 'invalid-relative'; -get '/relative-to-the-root' => 'relative-to-the-root'; +get '/invalid-fragment' => [format => ['json']] => 'invalid-fragment'; +get '/invalid-relative' => [format => ['json']] => 'invalid-relative'; +get '/relative-to-the-root' => [format => ['json']] => 'relative-to-the-root'; $t = Test::Mojo->new; $jv = JSON::Validator->new(ua => $t->ua); @@ -19,7 +19,6 @@ like $base_url, qr{^http}, 'got base_url to web server'; is $jv->_id_key, 'id', 'default id_key'; -delete $jv->{version}; eval { $jv->load_and_validate_schema("${base_url}relative-to-the-root.json") }; ok !$@, "${base_url}relative-to-the-root.json" or diag $@; isa_ok $jv->schema, 'JSON::Validator::Schema::Draft4'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JSON-Validator-4.14/t/id-keyword-draft7.t new/JSON-Validator-4.16/t/id-keyword-draft7.t --- old/JSON-Validator-4.14/t/id-keyword-draft7.t 2020-10-13 05:31:27.000000000 +0200 +++ new/JSON-Validator-4.16/t/id-keyword-draft7.t 2021-03-23 23:27:23.000000000 +0100 @@ -6,8 +6,8 @@ my ($base_url, $jv, $t, @e); use Mojolicious::Lite; -get '/person' => 'person'; -get '/invalid-relative' => 'invalid-relative'; +get '/person' => [format => ['json']] => 'person'; +get '/invalid-relative' => [format => ['json']] => 'invalid-relative'; $t = Test::Mojo->new; $jv = JSON::Validator->new(ua => $t->ua); @@ -20,7 +20,6 @@ ok !$@, "${base_url}schema.json" or diag $@; isa_ok $jv->schema, 'JSON::Validator::Schema::Draft7'; -is $jv->{version}, 7, 'detected version from draft-07'; is $jv->schema->id, 'http://example.com/person.json', 'schema id'; is $jv->schema->moniker, 'draft07', 'moniker'; is $jv->schema->specification, 'http://json-schema.org/draft-07/schema#', 'schema specification'; @@ -33,7 +32,7 @@ __DATA__ @@ invalid-relative.json.ep -{"$id": "whatever"} +{"$id": "whatever", "$schema": "http://json-schema.org/draft-07/schema#"} @@ person.json.ep { "$id": "http://example.com/person.json", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JSON-Validator-4.14/t/openapiv3-nullable.t new/JSON-Validator-4.16/t/openapiv3-nullable.t --- old/JSON-Validator-4.14/t/openapiv3-nullable.t 2021-01-24 05:50:54.000000000 +0100 +++ new/JSON-Validator-4.16/t/openapiv3-nullable.t 2021-03-23 23:55:20.000000000 +0100 @@ -15,6 +15,11 @@ is "@errors", "", "$path - name is undef"; } +$schema = JSON::Validator->new->schema('data://main/issue-241.json')->schema; +$body = {exists => 1, value => {name => undef}}; +@errors = $schema->validate_response([get => '/test'], {body => \&body}); +is "@errors", "", "nullable inside oneOf"; + done_testing; sub body {$body} @@ -64,3 +69,38 @@ } } } +@@ issue-241.json +{ + "openapi": "3.0.0", + "info": { "title": "Nullable", "version": "" }, + "paths": { + "/test": { + "get": { + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "oneOf": [ + { "$ref": "#/components/schemas/name1" }, + { "$ref": "#/components/schemas/name2" } + ] + } + } + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "name1": { "type": "string", "nullable": "true" }, + "name2": { "type": "integer" } } + } +}