Hello community,

here is the log from the commit of package perl-JSON-Validator for 
openSUSE:Factory checked in at 2020-02-18 10:42:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-JSON-Validator (Old)
 and      /work/SRC/openSUSE:Factory/.perl-JSON-Validator.new.26092 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-JSON-Validator"

Tue Feb 18 10:42:23 2020 rev:15 rq:774958 version:3.22

Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-JSON-Validator/perl-JSON-Validator.changes  
2020-02-14 16:41:26.659721830 +0100
+++ 
/work/SRC/openSUSE:Factory/.perl-JSON-Validator.new.26092/perl-JSON-Validator.changes
       2020-02-18 10:42:41.293223967 +0100
@@ -1,0 +2,11 @@
+Sat Feb 15 03:10:34 UTC 2020 -  <timueller+p...@suse.de>
+
+- updated to 3.22
+   see /usr/share/doc/packages/perl-JSON-Validator/Changes
+
+  3.22 2020-02-15T08:35:29+0900
+   - Add support for "dependencies" keyword #192 #197
+   - Add support for anyOf/allOf/oneOf at the same time #196 #197
+   - Allow if/then/else to be in any sort of schema #190 #197
+
+-------------------------------------------------------------------

Old:
----
  JSON-Validator-3.21.tar.gz

New:
----
  JSON-Validator-3.22.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-JSON-Validator.spec ++++++
--- /var/tmp/diff_new_pack.ZEabnZ/_old  2020-02-18 10:42:42.549226530 +0100
+++ /var/tmp/diff_new_pack.ZEabnZ/_new  2020-02-18 10:42:42.553226538 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           perl-JSON-Validator
-Version:        3.21
+Version:        3.22
 Release:        0
 %define cpan_name JSON-Validator
 Summary:        Validate data against a JSON schema

++++++ JSON-Validator-3.21.tar.gz -> JSON-Validator-3.22.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JSON-Validator-3.21/Changes 
new/JSON-Validator-3.22/Changes
--- old/JSON-Validator-3.21/Changes     2020-02-14 02:14:14.000000000 +0100
+++ new/JSON-Validator-3.22/Changes     2020-02-15 00:35:29.000000000 +0100
@@ -1,5 +1,10 @@
 Revision history for perl distribution JSON-Validator
 
+3.22 2020-02-15T08:35:29+0900
+ - Add support for "dependencies" keyword #192 #197
+ - Add support for anyOf/allOf/oneOf at the same time #196 #197
+ - Allow if/then/else to be in any sort of schema #190 #197
+
 3.21 2020-02-14T10:14:14+0900
  - Fix data_section() without a class #193
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JSON-Validator-3.21/MANIFEST 
new/JSON-Validator-3.22/MANIFEST
--- old/JSON-Validator-3.21/MANIFEST    2020-02-14 02:14:15.000000000 +0100
+++ new/JSON-Validator-3.22/MANIFEST    2020-02-15 00:35:30.000000000 +0100
@@ -81,6 +81,7 @@
 t/jv-const.t
 t/jv-enum.t
 t/jv-formats.t
+t/jv-if-then-else.t
 t/jv-integer.t
 t/jv-not.t
 t/jv-number.t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JSON-Validator-3.21/META.json 
new/JSON-Validator-3.22/META.json
--- old/JSON-Validator-3.21/META.json   2020-02-14 02:14:15.000000000 +0100
+++ new/JSON-Validator-3.22/META.json   2020-02-15 00:35:30.000000000 +0100
@@ -61,6 +61,6 @@
       },
       "x_IRC" : "irc://irc.freenode.net/#mojo"
    },
-   "version" : "3.21",
+   "version" : "3.22",
    "x_serialization_backend" : "JSON::PP version 4.02"
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JSON-Validator-3.21/META.yml 
new/JSON-Validator-3.22/META.yml
--- old/JSON-Validator-3.21/META.yml    2020-02-14 02:14:15.000000000 +0100
+++ new/JSON-Validator-3.22/META.yml    2020-02-15 00:35:30.000000000 +0100
@@ -30,5 +30,5 @@
   homepage: https://mojolicious.org
   license: http://www.opensource.org/licenses/artistic-license-2.0
   repository: https://github.com/mojolicious/json-validator.git
-version: '3.21'
+version: '3.22'
 x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JSON-Validator-3.21/lib/JSON/Validator/Error.pm 
new/JSON-Validator-3.22/lib/JSON/Validator/Error.pm
--- old/JSON-Validator-3.21/lib/JSON/Validator/Error.pm 2020-02-10 
01:52:05.000000000 +0100
+++ new/JSON-Validator-3.22/lib/JSON/Validator/Error.pm 2020-02-15 
00:33:29.000000000 +0100
@@ -35,6 +35,7 @@
     maxProperties        => 'Too many properties: %3/%4.',
     minProperties        => 'Not enough properties: %3/%4.',
     required             => 'Missing property.',
+    dependencies         => 'Missing property. Dependee: %3.',
   },
   oneOf => {
     all_rules_match => 'All of the oneOf rules match.',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JSON-Validator-3.21/lib/JSON/Validator/Util.pm 
new/JSON-Validator-3.22/lib/JSON/Validator/Util.pm
--- old/JSON-Validator-3.21/lib/JSON/Validator/Util.pm  2020-02-14 
02:12:56.000000000 +0100
+++ new/JSON-Validator-3.22/lib/JSON/Validator/Util.pm  2020-02-15 
00:33:29.000000000 +0100
@@ -123,7 +123,6 @@
   return _guessed_right(object => $_[1]) if $_[0]->{properties};
   return _guessed_right(object => $_[1]) if $_[0]->{propertyNames};
   return _guessed_right(object => $_[1]) if $_[0]->{required};
-  return _guessed_right(object => $_[1]) if $_[0]->{if};
   return _guessed_right(object => $_[1])
     if defined $_[0]->{maxProperties}
     or defined $_[0]->{minProperties};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JSON-Validator-3.21/lib/JSON/Validator.pm 
new/JSON-Validator-3.22/lib/JSON/Validator.pm
--- old/JSON-Validator-3.21/lib/JSON/Validator.pm       2020-02-14 
02:14:14.000000000 +0100
+++ new/JSON-Validator-3.22/lib/JSON/Validator.pm       2020-02-15 
00:35:29.000000000 +0100
@@ -23,8 +23,8 @@
 use constant SPECIFICATION_URL => 'http://json-schema.org/draft-04/schema#';
 use constant YAML_SUPPORT      => eval 'use YAML::XS 0.67;1';
 
-our $VERSION = '3.21';
-our @EXPORT_OK   = qw(joi validate_json);
+our $VERSION = '3.22';
+our @EXPORT_OK = qw(joi validate_json);
 
 my $BUNDLED_CACHE_DIR = path(path(__FILE__)->dirname, qw(Validator cache));
 my $HTTP_SCHEME_RE    = qr{^https?:};
@@ -54,7 +54,7 @@
 
 sub bundle {
   my ($self, $args) = @_;
-  my ($cloner, $tied);
+  my ($cloner);
 
   my $schema
     = $args->{schema} ? $self->_resolve($args->{schema}) : $self->schema->data;
@@ -64,6 +64,7 @@
     $cloner = sub {
       my $from      = shift;
       my $from_type = ref $from;
+      my $tied;
       $from = $tied->schema if $from_type eq 'HASH' and $tied = tied %$from;
       my $to = $from_type eq 'ARRAY' ? [] : $from_type eq 'HASH' ? {} : $from;
       push @topics, [$from, $to] if $from_type;
@@ -75,7 +76,7 @@
       my $from      = shift;
       my $from_type = ref $from;
 
-      $tied = $from_type eq 'HASH' && tied %$from;
+      my $tied = $from_type eq 'HASH' && tied %$from;
       unless ($tied) {
         my $to = $from_type eq 'ARRAY' ? [] : $from_type eq 'HASH' ? {} : 
$from;
         push @topics, [$from, $to] if $from_type;
@@ -293,7 +294,6 @@
 
 sub _load_schema_from_text {
   my ($self, $text) = @_;
-  my $visit;
 
   # JSON
   return Mojo::JSON::decode_json($$text) if $$text =~ /^\s*\{/s;
@@ -311,7 +311,6 @@
   my ($self, $url) = @_;
   my $cache_path = $self->cache_paths->[0];
   my $cache_file = Mojo::Util::md5_sum("$url");
-  my ($err, $tx);
 
   for (@{$self->cache_paths}) {
     my $path = path $_, $cache_file;
@@ -320,8 +319,8 @@
     return $self->_load_schema_from_text(\$path->slurp);
   }
 
-  $tx  = $self->ua->get($url);
-  $err = $tx->error && $tx->error->{message};
+  my $tx  = $self->ua->get($url);
+  my $err = $tx->error && $tx->error->{message};
   confess "GET $url == $err"               if DEBUG and $err;
   die "[JSON::Validator] GET $url == $err" if $err;
 
@@ -378,7 +377,7 @@
 sub _resolve {
   my ($self, $schema) = @_;
   my $id_key = $self->_id_key;
-  my ($id, $resolved, @refs);
+  my ($id, $resolved);
 
   local $self->{level} = $self->{level} || 0;
   delete $_[0]->{schemas}{''} unless $self->{level};
@@ -416,7 +415,7 @@
   $self->{level}++;
   $self->_register_schema($schema, $id);
 
-  my %seen;
+  my (%seen, @refs);
   my @topics
     = ([$schema, is_type($id, 'Mojo::File') ? $id : Mojo::URL->new($id)]);
   while (@topics) {
@@ -497,13 +496,12 @@
 
 sub _validate {
   my ($self, $data, $path, $schema) = @_;
-  my ($seen_addr, $to_json, $type);
 
   $schema = $self->_ref_to_schema($schema)
     if ref $schema eq 'HASH' and $schema->{'$ref'};
   return $schema ? () : E $path, [not => 'not'] if is_type $schema, 'BOOL';
 
-  $seen_addr = join ':', refaddr($schema),
+  my $seen_addr = join ':', refaddr($schema),
     (ref $data ? refaddr $data : ++$self->{seen}{scalar});
 
   # Avoid recursion
@@ -512,10 +510,10 @@
   }
 
   $self->{seen}{$seen_addr} = \my @errors;
-  $to_json
+  my $to_json
     = (blessed $data and $data->can('TO_JSON')) ? \$data->TO_JSON : undef;
   $data = $$to_json if $to_json;
-  $type = $schema->{type} || schema_type $schema, $data;
+  my $type = $schema->{type} || schema_type $schema, $data;
 
   # Test base schema before allOf, anyOf or oneOf
   if (ref $type eq 'ARRAY') {
@@ -551,15 +549,25 @@
     push @errors,
       $self->_validate_all_of($to_json ? $$to_json : $_[1], $path, $rules);
   }
-  elsif ($rules = $schema->{anyOf}) {
+
+  if (my $rules = $schema->{anyOf}) {
     push @errors,
       $self->_validate_any_of($to_json ? $$to_json : $_[1], $path, $rules);
   }
-  elsif ($rules = $schema->{oneOf}) {
+
+  if (my $rules = $schema->{oneOf}) {
     push @errors,
       $self->_validate_one_of($to_json ? $$to_json : $_[1], $path, $rules);
   }
 
+  if ($schema->{if}) {
+    my $rules
+      = $self->_validate($data, $path, $schema->{if})
+      ? $schema->{else}
+      : $schema->{then};
+    push @errors, $self->_validate($data, $path, $rules // {});
+  }
+
   return @errors;
 }
 
@@ -856,12 +864,6 @@
       push @errors, prefix_errors propertyName => [map { ($name, $_) } @e];
     }
   }
-  if ($schema->{if}) {
-    push @errors,
-      $self->_validate($data, $path, $schema->{if})
-      ? $self->_validate($data, $path, $schema->{else} // {})
-      : $self->_validate($data, $path, $schema->{then} // {});
-  }
 
   my %rules;
   for my $k (keys %{$schema->{properties}}) {
@@ -897,7 +899,21 @@
   for my $k (sort uniq @{$schema->{required} || []}) {
     next if exists $data->{$k};
     push @errors, E json_pointer($path, $k), [object => 'required'];
-    delete $rules{$k};
+    delete $rules{$k};    # why bother?
+  }
+
+  my $dependencies = $schema->{dependencies} || {};
+  for my $k (keys %$dependencies) {
+    next if not exists $data->{$k};
+    if (ref $dependencies->{$k} eq 'ARRAY') {
+      push @errors,
+        map { E json_pointer($path, $_), [object => dependencies => $k] }
+        grep { !exists $data->{$_} } @{$dependencies->{$k}};
+    }
+    elsif (ref $dependencies->{$k} eq 'HASH') {
+      push @errors,
+        $self->_validate_type_object($data, $path, 
$schema->{dependencies}{$k});
+    }
   }
 
   for my $k (sort keys %rules) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JSON-Validator-3.21/t/jv-allof.t 
new/JSON-Validator-3.22/t/jv-allof.t
--- old/JSON-Validator-3.21/t/jv-allof.t        2018-12-15 05:22:39.000000000 
+0100
+++ new/JSON-Validator-3.22/t/jv-allof.t        2020-02-15 00:33:29.000000000 
+0100
@@ -17,4 +17,26 @@
   E('/', '/allOf/1 String is too long: 9/5.');
 validate_ok 'toolong', $schema, E('/', '/allOf/1 String is too long: 7/5.');
 
+
+$schema = {
+  allOf =>
+    [{type => 'string', maxLength => 5}, {type => 'string', minLength => 3}],
+  anyOf => [{pattern => '^[0-9]+$'}, {pattern => '^[a-z]+$'}],
+  oneOf => [{pattern => '^[0-9]+$'}, {pattern => '^[a-z]+$', maxLength => 4}],
+};
+
+validate_ok '123',   $schema;
+validate_ok 'aaaa',  $schema;
+validate_ok 'aaaaa', $schema,
+  E('/', '/oneOf/0 String does not match ^[0-9]+$.'),
+  E('/', '/oneOf/1 String is too long: 5/4.');
+
+validate_ok 'he110th3re', $schema,
+  E('/', '/allOf/0 String is too long: 10/5.'),
+  E('/', '/anyOf/0 String does not match ^[0-9]+$.'),
+  E('/', '/anyOf/1 String does not match ^[a-z]+$.'),
+  E('/', '/oneOf/0 String does not match ^[0-9]+$.'),
+  E('/', '/oneOf/1 String is too long: 10/4.'),
+  E('/', '/oneOf/1 String does not match ^[a-z]+$.');
+
 done_testing;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JSON-Validator-3.21/t/jv-if-then-else.t 
new/JSON-Validator-3.22/t/jv-if-then-else.t
--- old/JSON-Validator-3.21/t/jv-if-then-else.t 1970-01-01 01:00:00.000000000 
+0100
+++ new/JSON-Validator-3.22/t/jv-if-then-else.t 2020-02-15 00:33:29.000000000 
+0100
@@ -0,0 +1,30 @@
+use lib '.';
+use t::Helper;
+
+my $schema;
+
+$schema = {
+  if   => {properties => {ifx => {type      => 'string'}}},
+  then => {properties => {ifx => {maxLength => 3}}},
+  else => {properties => {ifx => {type      => 'number'}}},
+};
+
+validate_ok {ifx => 'foo'},    $schema;
+validate_ok {ifx => 'foobar'}, $schema, E('/ifx', 'String is too long: 6/3.');
+validate_ok {ifx => 42},       $schema;
+validate_ok {ifx => []}, $schema, E('/ifx', 'Expected number - got array.');
+
+$schema = {
+  type => 'array',
+  if   => {maxItems => 5},
+  then => {items => {pattern => '^[0-9]$'}},
+  else => {items => {pattern => '^[a-z]$'}},
+};
+
+validate_ok [qw(2 4 7)], $schema;
+validate_ok [qw(a 1)], $schema, E('/0', 'String does not match ^[0-9]$.');
+validate_ok [qw(6 q a b 8 z)], $schema,
+  E('/0', 'String does not match ^[a-z]$.'),
+  E('/4', 'String does not match ^[a-z]$.');
+
+done_testing;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JSON-Validator-3.21/t/jv-object.t 
new/JSON-Validator-3.22/t/jv-object.t
--- old/JSON-Validator-3.21/t/jv-object.t       2020-02-12 01:17:35.000000000 
+0100
+++ new/JSON-Validator-3.22/t/jv-object.t       2020-02-15 00:33:29.000000000 
+0100
@@ -82,7 +82,6 @@
 }
 
 {
-  local $TODO = 'Add support for dependencies';
   $schema = {
     type       => 'object',
     properties => {
@@ -94,8 +93,28 @@
     dependencies => {credit_card => ['billing_address']}
   };
 
+  validate_ok {name => 'John Doe'}, $schema;
+  validate_ok {name => 'John Doe', billing_address => '123 Main St'}, $schema;
   validate_ok {name => 'John Doe', credit_card => 5555555555555555}, $schema,
-    E('/credit_card', 'Missing billing_address.', 'credit_card');
+    E('/billing_address', 'Missing property. Dependee: credit_card.');
+
+  $schema = {
+    type => 'object',
+    properties =>
+      {name => {type => 'string'}, credit_card => {type => 'number'}},
+    required     => ['name'],
+    dependencies => {
+      credit_card => {
+        properties => {billing_address => {type => 'string'}},
+        required   => ['billing_address'],
+      },
+    },
+  };
+
+  validate_ok {name => 'John Doe'}, $schema;
+  validate_ok {name => 'John Doe', billing_address => '123 Main St'}, $schema;
+  validate_ok {name => 'John Doe', credit_card => 5555555555555555}, $schema,
+    E('/billing_address', 'Missing property.');
 }
 
 {
@@ -113,19 +132,6 @@
   validate_ok {name => 'John', surname => 'Doe'}, $schema;
 }
 
-{
-  my $schema = {
-    if   => {properties => {ifx => {type      => 'string'}}},
-    then => {properties => {ifx => {maxLength => 3}}},
-    else => {properties => {ifx => {type      => 'number'}}},
-  };
-
-  validate_ok {ifx => 'foo'},    $schema;
-  validate_ok {ifx => 'foobar'}, $schema, E('/ifx', 'String is too long: 
6/3.');
-  validate_ok {ifx => 42},       $schema;
-  validate_ok {ifx => []}, $schema, E('/ifx', 'Expected number - got array.');
-}
-
 sub TO_JSON { return {age => shift->{age}} }
 my $obj = bless {age => 'not_a_string'}, 'main';
 validate_ok $obj, {properties => {age => {type => 'integer'}}},


Reply via email to