Hello community,
here is the log from the commit of package perl-JSON-Validator for
openSUSE:Factory checked in at 2019-04-05 12:05:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-JSON-Validator (Old)
and /work/SRC/openSUSE:Factory/.perl-JSON-Validator.new.3908 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-JSON-Validator"
Fri Apr 5 12:05:17 2019 rev:2 rq:691644 version:3.07
Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-JSON-Validator/perl-JSON-Validator.changes
2019-03-01 16:47:02.549807793 +0100
+++
/work/SRC/openSUSE:Factory/.perl-JSON-Validator.new.3908/perl-JSON-Validator.changes
2019-04-05 12:06:53.386578610 +0200
@@ -1,0 +2,9 @@
+Fri Apr 5 05:11:55 UTC 2019 - Stephan Kulow <[email protected]>
+
+- updated to 3.07
+ see /usr/share/doc/packages/perl-JSON-Validator/Changes
+
+ 3.07 2019-04-04T23:43:55+0700
+ - Fix not leaking file names with bundle()
+
+-------------------------------------------------------------------
Old:
----
JSON-Validator-3.06.tar.gz
New:
----
JSON-Validator-3.07.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-JSON-Validator.spec ++++++
--- /var/tmp/diff_new_pack.DXjJZJ/_old 2019-04-05 12:06:53.970578836 +0200
+++ /var/tmp/diff_new_pack.DXjJZJ/_new 2019-04-05 12:06:53.970578836 +0200
@@ -17,7 +17,7 @@
Name: perl-JSON-Validator
-Version: 3.06
+Version: 3.07
Release: 0
%define cpan_name JSON-Validator
Summary: Validate data against a JSON schema
++++++ JSON-Validator-3.06.tar.gz -> JSON-Validator-3.07.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-3.06/Changes
new/JSON-Validator-3.07/Changes
--- old/JSON-Validator-3.06/Changes 2019-02-14 18:24:29.000000000 +0100
+++ new/JSON-Validator-3.07/Changes 2019-04-04 18:43:55.000000000 +0200
@@ -1,5 +1,8 @@
Revision history for perl distribution JSON-Validator
+3.07 2019-04-04T23:43:55+0700
+ - Fix not leaking file names with bundle()
+
3.06 2019-02-14T18:24:29+0100
- Fix coercing integers and numbers #147
- Changed recursion guard to not keeping tracking of plain scalars #147
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-3.06/MANIFEST
new/JSON-Validator-3.07/MANIFEST
--- old/JSON-Validator-3.06/MANIFEST 2019-02-14 18:24:30.000000000 +0100
+++ new/JSON-Validator-3.07/MANIFEST 2019-04-04 18:43:56.000000000 +0200
@@ -100,6 +100,7 @@
t/remotes/integer.json
t/remotes/subSchemas.json
t/schema-as-attr.t
+t/spec/bundle-no-leaking-filename.json
t/spec/bundlecheck.json
t/spec/missing-ref.json
t/spec/person.json
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-3.06/META.json
new/JSON-Validator-3.07/META.json
--- old/JSON-Validator-3.06/META.json 2019-02-14 18:24:30.000000000 +0100
+++ new/JSON-Validator-3.07/META.json 2019-04-04 18:43:56.000000000 +0200
@@ -60,6 +60,6 @@
},
"x_IRC" : "irc://irc.freenode.net/#mojo"
},
- "version" : "3.06",
+ "version" : "3.07",
"x_serialization_backend" : "JSON::PP version 2.97001"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-3.06/META.yml
new/JSON-Validator-3.07/META.yml
--- old/JSON-Validator-3.06/META.yml 2019-02-14 18:24:30.000000000 +0100
+++ new/JSON-Validator-3.07/META.yml 2019-04-04 18:43:56.000000000 +0200
@@ -29,5 +29,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.06'
+version: '3.07'
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-3.06/lib/JSON/Validator/Joi.pm
new/JSON-Validator-3.07/lib/JSON/Validator/Joi.pm
--- old/JSON-Validator-3.06/lib/JSON/Validator/Joi.pm 2019-01-20
23:31:14.000000000 +0100
+++ new/JSON-Validator-3.07/lib/JSON/Validator/Joi.pm 2019-04-04
18:41:08.000000000 +0200
@@ -62,7 +62,7 @@
sub positive { shift->number->min(0) }
sub props {
- my $self = shift->type('object');
+ my $self = shift->type('object');
my %properties = ref $_[0] ? %{$_[0]} : @_;
while (my ($name, $property) = each %properties) {
@@ -80,8 +80,8 @@
sub validate {
my ($self, $data) = @_;
- state $validator = JSON::Validator->new->coerce(1);
- return $validator->validate($data, $self->compile);
+ state $jv = JSON::Validator->new->coerce(1);
+ return $jv->validate($data, $self->compile);
}
sub _compile_array {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-3.06/lib/JSON/Validator.pm
new/JSON-Validator-3.07/lib/JSON/Validator.pm
--- old/JSON-Validator-3.06/lib/JSON/Validator.pm 2019-02-14
18:24:29.000000000 +0100
+++ new/JSON-Validator-3.07/lib/JSON/Validator.pm 2019-04-04
18:43:55.000000000 +0200
@@ -10,7 +10,7 @@
use JSON::Validator::Ref;
use Mojo::File 'path';
use Mojo::JSON::Pointer;
-use Mojo::JSON;
+use Mojo::JSON qw(false true);
use Mojo::Loader;
use Mojo::URL;
use Mojo::Util qw(url_unescape sha1_sum);
@@ -24,9 +24,12 @@
use constant RECURSION_LIMIT => $ENV{JSON_VALIDATOR_RECURSION_LIMIT} || 100;
use constant SPECIFICATION_URL => 'http://json-schema.org/draft-04/schema#';
-our $VERSION = '3.06';
+our $VERSION = '3.07';
our @EXPORT_OK = qw(joi validate_json);
+# $YAML_LOADER should be considered internal
+our $YAML_LOADER = eval q[use YAML::XS 0.67; YAML::XS->can('Load')];
+
my $BUNDLED_CACHE_DIR = path(path(__FILE__)->dirname, qw(Validator cache));
my $HTTP_SCHEME_RE = qr{^https?:};
@@ -82,12 +85,13 @@
my $ref = ref $from;
if ($ref eq 'HASH' and my $tied = tied %$from) {
- my $ref_name = $tied->fqn;
+ my $ref_name = $tied->fqn;
+ my $file_name = (split '#', $ref_name)[0];
return $from if $ref_name =~ m!^\Q$self->{root_schema_url}\E\#!;
- if (-e $ref_name) {
+ if (-e $file_name) {
$ref_name = sprintf '%s-%s', substr(sha1_sum($ref_name), 0, 10),
- path($ref_name)->basename;
+ path($file_name)->basename;
}
else {
$ref_name =~ s![^\w-]!_!g;
@@ -133,18 +137,10 @@
}
sub get {
- my ($self, $pointer) = @_;
- $pointer
- = [
- ref $pointer ? @$pointer
- : length $pointer ? split('/', $pointer, -1)
- : $pointer
- ];
- shift @$pointer
- if @$pointer
- and defined $pointer->[0]
- and !length $pointer->[0];
- $self->_get($self->schema->data, $pointer, '');
+ my ($self, $p) = @_;
+ $p = [ref $p ? @$p : length $p ? split('/', $p, -1) : $p];
+ shift @$p if @$p and defined $p->[0] and !length $p->[0];
+ $self->_get($self->schema->data, $p, '');
}
sub joi {
@@ -172,7 +168,7 @@
return $self;
}
-sub singleton { state $validator = shift->new }
+sub singleton { state $jv = shift->new }
sub validate {
my ($self, $data, $schema) = @_;
@@ -315,13 +311,15 @@
unless $v->{type}
and $v->{type} eq 'boolean'
and exists $v->{default};
- %$v
- = (%$v, default => $v->{default} ? Mojo::JSON->true : Mojo::JSON->false);
+ %$v = (%$v, default => $v->{default} ? true : false);
return $v;
};
+ die "[JSON::Validator] YAML::XS 0.67 is missing or could not be loaded."
+ unless $YAML_LOADER;
+
local $YAML::XS::Boolean = 'JSON::PP';
- return $visit->($self->_yaml_module->can('Load')->($$text));
+ return $visit->($YAML_LOADER->($$text));
}
sub _load_schema_from_url {
@@ -792,7 +790,7 @@
or $value =~ /^(true|false)$/)
)
{
- $_[1] = $value ? Mojo::JSON->true : Mojo::JSON->false;
+ $_[1] = $value ? true : false;
return;
}
@@ -1072,14 +1070,6 @@
grep { !$uniq{$_}++ } @_;
}
-# Please report if you need to manually monkey patch this function
-# https://github.com/jhthorsen/json-validator/issues
-sub _yaml_module {
- state $yaml_module = eval qq[use YAML::XS 0.67; "YAML::XS"]
- || die
- "[JSON::Validator] The optional YAML::XS module is missing or could not be
loaded: $@";
-}
-
1;
=encoding utf8
@@ -1091,11 +1081,11 @@
=head1 SYNOPSIS
use JSON::Validator;
- my $validator = JSON::Validator->new;
+ my $jv = JSON::Validator->new;
# Define a schema - http://json-schema.org/learn/miscellaneous-examples.html
# You can also load schema from disk or web
- $validator->schema({
+ $jv->schema({
type => "object",
required => ["firstName", "lastName"],
properties => {
@@ -1106,7 +1096,7 @@
});
# Validate your data
- my @errors = $validator->validate({firstName => "Jan Henning", lastName =>
"Thorsen", age => -42});
+ my @errors = $jv->validate({firstName => "Jan Henning", lastName =>
"Thorsen", age => -42});
# Do something if any errors was found
die "@errors" if @errors;
@@ -1114,7 +1104,7 @@
# Use joi() to build the schema
use JSON::Validator 'joi';
- $validator->schema(joi->object->props({
+ $jv->schema(joi->object->props({
firstName => joi->string->required,
lastName => joi->string->required,
age => joi->integer->min(0),
@@ -1241,8 +1231,8 @@
=head2 cache_paths
- my $validator = $validator->cache_paths(\@paths);
- my $array_ref = $validator->cache_paths;
+ my $jv = $jv->cache_paths(\@paths);
+ my $array_ref = $jv->cache_paths;
A list of directories to where cached specifications are stored. Defaults to
C<JSON_VALIDATOR_CACHE_PATH> environment variable and the specs that is bundled
@@ -1254,8 +1244,8 @@
=head2 formats
- my $hash_ref = $validator->formats;
- my $validator = $validator->formats(\%hash);
+ my $hash_ref = $jv->formats;
+ my $jv = $jv->formats(\%hash);
Holds a hash-ref, where the keys are supported JSON type "formats", and
the values holds a code block which can validate a given format. A code
@@ -1267,8 +1257,8 @@
=head2 ua
- my $ua = $validator->ua;
- my $validator = $validator->ua(Mojo::UserAgent->new);
+ my $ua = $jv->ua;
+ my $jv = $jv->ua(Mojo::UserAgent->new);
Holds a L<Mojo::UserAgent> object, used by L</schema> to load a JSON schema
from remote location.
@@ -1278,8 +1268,8 @@
=head2 version
- my $int = $validator->version;
- my $validator = $validator->version(7);
+ my $int = $jv->version;
+ my $jv = $jv->version(7);
Used to set the JSON Schema version to use. Will be set automatically when
using L</load_and_validate_schema>, unless already set.
@@ -1288,13 +1278,13 @@
=head2 bundle
- my $schema = $validator->bundle(\%args);
+ my $schema = $jv->bundle(\%args);
Used to create a new schema, where the C<$ref> are resolved. C<%args> can have:
=over 2
-=item * C<{replace => 1}>
+=item * C<< {replace => 1} >>
Used if you want to replace the C<$ref> inline in the schema. This currently
does not work if you have circular references. The default is to move all the
@@ -1307,7 +1297,7 @@
{"$ref":"http://example.com#/foo/bar"}
=> {"$ref":"#/definitions/_http___example_com-_foo_bar"}
-=item * C<{schema => {...}}>
+=item * C<< {schema => {...}} >>
Default is to use the value from the L</schema> attribute.
@@ -1315,9 +1305,9 @@
=head2 coerce
- my $validator = $validator->coerce(booleans => 1, numbers => 1, strings =>
1);
- my $validator = $validator->coerce({booleans => 1, numbers => 1, strings =>
1});
- my $hash_ref = $validator->coerce;
+ my $jv = $jv->coerce(booleans => 1, numbers => 1, strings => 1);
+ my $jv = $jv->coerce({booleans => 1, numbers => 1, strings => 1});
+ my $hash_ref = $jv->coerce;
Set the given type to coerce. Before enabling coercion this module is very
strict when it comes to validating types. Example: The string C<"1"> is not
@@ -1329,23 +1319,23 @@
=head2 get
- my $sub_schema = $validator->get("/x/y");
- my $sub_schema = $validator->get(["x", "y"]);
+ my $sub_schema = $jv->get("/x/y");
+ my $sub_schema = $jv->get(["x", "y"]);
Extract value from L</schema> identified by the given JSON Pointer. Will at the
same time resolve C<$ref> if found. Example:
- $validator->schema({x => {'$ref' => '#/y'}, y => {'type' => 'string'}});
- $validator->schema->get('/x') == undef
- $validator->schema->get('/x')->{'$ref'} == '#/y'
- $validator->get('/x') == {type => 'string'}
+ $jv->schema({x => {'$ref' => '#/y'}, y => {'type' => 'string'}});
+ $jv->schema->get('/x') == undef
+ $jv->schema->get('/x')->{'$ref'} == '#/y'
+ $jv->get('/x') == {type => 'string'}
The argument can also be an array-ref with the different parts of the pointer
as each elements.
=head2 load_and_validate_schema
- my $validator = $validator->load_and_validate_schema($schema, \%args);
+ my $jv = $jv->load_and_validate_schema($schema, \%args);
Will load and validate C<$schema> against the OpenAPI specification. C<$schema>
can be anything L<JSON::Validator/schema> accepts. The expanded specification
@@ -1366,11 +1356,11 @@
=head2 schema
- my $validator = $validator->schema($json_or_yaml_string);
- my $validator = $validator->schema($url);
- my $validator = $validator->schema(\%schema);
- my $validator = $validator->schema(JSON::Validator::Joi->new);
- my $schema = $validator->schema;
+ my $jv = $jv->schema($json_or_yaml_string);
+ my $jv = $jv->schema($url);
+ my $jv = $jv->schema(\%schema);
+ my $jv = $jv->schema(JSON::Validator::Joi->new);
+ my $schema = $jv->schema;
Used to set a schema from either a data structure or a URL.
@@ -1410,14 +1400,14 @@
=head2 singleton
- my $validator = JSON::Validator->singleton;
+ my $jv = JSON::Validator->singleton;
Returns the L<JSON::Validator> object used by L</validate_json>.
=head2 validate
- my @errors = $validator->validate($data);
- my @errors = $validator->validate($data, $schema);
+ my @errors = $jv->validate($data);
+ my @errors = $jv->validate($data, $schema);
Validates C<$data> against a given JSON L</schema>. C<@errors> will
contain validation error objects or be an empty list on success.
@@ -1427,7 +1417,7 @@
C<$schema> is optional, but when specified, it will override schema stored in
L</schema>. Example:
- $validator->validate({hero => "superwoman"}, {type => "object"});
+ $jv->validate({hero => "superwoman"}, {type => "object"});
=head2 SEE ALSO
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-3.06/t/Helper.pm
new/JSON-Validator-3.07/t/Helper.pm
--- old/JSON-Validator-3.06/t/Helper.pm 2019-01-31 00:44:17.000000000 +0100
+++ new/JSON-Validator-3.07/t/Helper.pm 2019-04-04 18:41:08.000000000 +0200
@@ -8,38 +8,36 @@
$ENV{TEST_VALIDATOR_CLASS} = 'JSON::Validator';
-sub dump_validator {
- my $class = shift;
- my $jv = shift || $class->validator;
- local $Data::Dumper::Indent = 1;
- local $jv->{ua} = 'Mojo::UserAgent';
- Test::More::note(Data::Dumper::Dumper($jv));
-}
-
sub edj {
return Mojo::JSON::decode_json(Mojo::JSON::encode_json(@_));
}
sub joi_ok {
my ($data, $joi, @expected) = @_;
- my $description ||= @expected ? "errors: @expected" : "valid: " .
encode_json($data);
+ my $description
+ ||= @expected ? "errors: @expected" : "valid: " . encode_json($data);
my @errors = JSON::Validator::joi($data, $joi);
- Test::More::is_deeply([map { $_->TO_JSON } sort { $a->path cmp $b->path }
@errors],
- [map { $_->TO_JSON } sort { $a->path cmp $b->path } @expected],
$description)
+ Test::More::is_deeply(
+ [map { $_->TO_JSON } sort { $a->path cmp $b->path } @errors],
+ [map { $_->TO_JSON } sort { $a->path cmp $b->path } @expected],
+ $description)
or Test::More::diag(encode_json(\@errors));
}
+sub jv { state $obj = $ENV{TEST_VALIDATOR_CLASS}->new }
+
sub validate_ok {
my ($data, $schema, @expected) = @_;
- my $description ||= @expected ? "errors: @expected" : "valid: " .
encode_json($data);
- my @errors = validator()->schema($schema)->validate($data);
- Test::More::is_deeply([map { $_->TO_JSON } sort { $a->path cmp $b->path }
@errors],
- [map { $_->TO_JSON } sort { $a->path cmp $b->path } @expected],
$description)
+ my $description
+ ||= @expected ? "errors: @expected" : "valid: " . encode_json($data);
+ my @errors = jv()->schema($schema)->validate($data);
+ Test::More::is_deeply(
+ [map { $_->TO_JSON } sort { $a->path cmp $b->path } @errors],
+ [map { $_->TO_JSON } sort { $a->path cmp $b->path } @expected],
+ $description)
or Test::More::diag(encode_json(\@errors));
}
-sub validator { state $obj = $ENV{TEST_VALIDATOR_CLASS}->new }
-
sub import {
my $class = shift;
my $caller = caller;
@@ -48,11 +46,12 @@
warnings->import;
monkey_patch $caller => E => \&JSON::Validator::E;
monkey_patch $caller => done_testing => \&Test::More::done_testing;
- monkey_patch $caller => false => \&Mojo::JSON::false;
monkey_patch $caller => edj => \&edj;
+ monkey_patch $caller => false => \&Mojo::JSON::false;
+ monkey_patch $caller => joi_ok => \&joi_ok;
+ monkey_patch $caller => jv => \&jv;
monkey_patch $caller => true => \&Mojo::JSON::true;
monkey_patch $caller => validate_ok => \&validate_ok;
- monkey_patch $caller => joi_ok => \&joi_ok;
}
1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-3.06/t/booleans.t
new/JSON-Validator-3.07/t/booleans.t
--- old/JSON-Validator-3.06/t/booleans.t 2019-01-31 00:44:26.000000000
+0100
+++ new/JSON-Validator-3.07/t/booleans.t 2019-04-04 18:41:08.000000000
+0200
@@ -11,7 +11,7 @@
validate_ok {v => Mojo::JSON->true}, $schema;
validate_ok {v => Mojo::JSON->false}, $schema;
-t::Helper->validator->coerce(booleans => 1);
+jv->coerce(booleans => 1);
validate_ok {v => !!1}, $schema;
validate_ok {v => !!0}, $schema;
validate_ok {v => 'false'}, $schema;
@@ -25,7 +25,7 @@
SKIP: {
skip 'YAML::XS is not installed', 1
unless eval q[require YAML::XS;YAML::XS->VERSION('0.67');1];
- my $data = t::Helper->validator->_load_schema_from_text(\"---\nv: true\n");
+ my $data = jv->_load_schema_from_text(\"---\nv: true\n");
isa_ok($data->{v}, 'JSON::PP::Boolean');
validate_ok $data, $schema;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-3.06/t/bundle.t
new/JSON-Validator-3.07/t/bundle.t
--- old/JSON-Validator-3.06/t/bundle.t 2018-12-15 05:21:00.000000000 +0100
+++ new/JSON-Validator-3.07/t/bundle.t 2019-04-04 18:43:24.000000000 +0200
@@ -3,21 +3,22 @@
use Test::More;
use JSON::Validator;
-my $validator = JSON::Validator->new;
+my $workdir = path(__FILE__)->to_abs->dirname;
+my $jv = JSON::Validator->new;
my $bundled;
-# Bundle files
{
+ note 'bundle files';
local $ENV{JSON_VALIDATOR_CACHE_ANYWAYS} = 1;
- $validator->_load_schema_from_url("http://json-schema.org/draft-04/schema");
- $validator->_load_schema_from_url("http://json-schema.org/draft-06/schema");
- $validator->_load_schema_from_url("http://json-schema.org/draft-07/schema");
+ $jv->_load_schema_from_url("http://json-schema.org/draft-04/schema");
+ $jv->_load_schema_from_url("http://json-schema.org/draft-06/schema");
+ $jv->_load_schema_from_url("http://json-schema.org/draft-07/schema");
}
-# Run multiple times to make sure _reset() works
+note 'Run multiple times to make sure _reset() works';
for my $n (1 .. 3) {
note "[$n] replace=1";
- $bundled = $validator->bundle({
+ $bundled = $jv->bundle({
ref_key => 'definitions',
replace => 1,
schema => {
@@ -29,7 +30,7 @@
is $bundled->{name}{type}, 'string', "[$n] replace=1";
note "[$n] replace=0";
- $bundled = $validator->schema({
+ $bundled = $jv->schema({
name => {'$ref' => '#/definitions/name'},
age => {'$ref' => 'b.json#/definitions/age'},
definitions => {name => {type => 'string'}},
@@ -39,23 +40,23 @@
"[$n] name still in definitions";
is $bundled->{definitions}{b_json__definitions_age}{type}, 'integer',
"[$n] added to definitions";
- isnt $bundled->{age}, $validator->schema->get('/age'), "[$n] new age ref";
- is $bundled->{name}, $validator->schema->get('/name'), "[$n] same name ref";
+ isnt $bundled->{age}, $jv->schema->get('/age'), "[$n] new age ref";
+ is $bundled->{name}, $jv->schema->get('/name'), "[$n] same name ref";
is $bundled->{age}{'$ref'}, '#/definitions/b_json__definitions_age',
"[$n] age \$ref point to /definitions/b_json__definitions_age";
is $bundled->{name}{'$ref'}, '#/definitions/name',
"[$n] name \$ref point to /definitions/name";
}
-is $validator->get([qw(name type)]), 'string', 'get /name/$ref';
-is $validator->get('/name/type'), 'string', 'get /name/type';
-is $validator->get('/name/$ref'), undef, 'get /name/$ref';
-is $validator->schema->get('/name/type'), 'string', 'schema get /name/type';
-is $validator->schema->get('/name/$ref'), '#/definitions/name',
+is $jv->get([qw(name type)]), 'string', 'get /name/$ref';
+is $jv->get('/name/type'), 'string', 'get /name/type';
+is $jv->get('/name/$ref'), undef, 'get /name/$ref';
+is $jv->schema->get('/name/type'), 'string', 'schema get /name/type';
+is $jv->schema->get('/name/$ref'), '#/definitions/name',
'schema get /name/$ref';
-$bundled = $validator->schema('data://main/api.json')
- ->bundle({ref_key => 'definitions'});
+$bundled
+ = $jv->schema('data://main/api.json')->bundle({ref_key => 'definitions'});
is_deeply [sort keys %{$bundled->{definitions}}], ['objtype'],
'no dup definitions';
@@ -64,33 +65,61 @@
['spec', File::Spec->updir, 'spec', 'with-deep-mixed-ref.json'],
);
for my $pathlist (@pathlists) {
- my $file = path(path(__FILE__)->dirname, @$pathlist);
- $bundled = $validator->schema($file)->bundle({ref_key => 'definitions'});
+ my $file = path $workdir, @$pathlist;
+ $bundled = $jv->schema($file)->bundle({ref_key => 'definitions'});
is_deeply [sort map { s!^[a-z0-9]{10}!SHA!; $_ }
- keys %{$bundled->{definitions}}], [
- qw(
+ keys %{$bundled->{definitions}}],
+ [qw(
SHA-age.json
SHA-unit.json
SHA-weight.json
height
- )
- ],
+ )],
'right definitions in disk spec'
or diag explain $bundled->{definitions};
}
-# ensure filenames with funny characters not mangled by Mojo::URL
-my $file3 = path(__FILE__)->sibling('spec', 'space bundle.json');
-eval { $bundled = $validator->schema($file3)->bundle };
+note 'ensure filenames with funny characters not mangled by Mojo::URL';
+my $file3 = path $workdir, 'spec', 'space bundle.json';
+eval { $bundled = $jv->schema($file3)->bundle };
is $@, '', 'loaded absolute filename with space';
is $bundled->{properties}{age}{description}, 'Age in years',
'right definitions in disk spec'
or diag explain $bundled;
+note 'extract subset of schema';
+$bundled = $jv->bundle({
+ ref_key => 'definitions',
+ schema => $jv->schema('data://main/api.json')->get([qw(paths /withdots
get)])
+});
+is_deeply(
+ $bundled,
+ {
+ definitions => {
+ data___main_api_json__definitions_objtype =>
+ {properties => {propname => {type => 'string'}}, type => 'object'}
+ },
+ responses => {
+ 200 => {
+ schema =>
+ {'$ref' => '#/definitions/data___main_api_json__definitions_objtype'}
+ }
+ }
+ },
+ 'subset of schema was bundled'
+) or diag explain $bundled;
+
+note 'no leaking path';
+my $ref_name_prefix = $workdir;
+$ref_name_prefix =~ s![^\w-]!_!g;
+$jv->schema(path $workdir, 'spec', 'bundle-no-leaking-filename.json');
+$bundled = $jv->bundle({ref_key => 'xyz'});
+is_deeply [grep { 0 == index $_, $ref_name_prefix } keys %{$bundled->{xyz}}],
+ [], 'no leaking of path';
+
done_testing;
__DATA__
-
@@ api.json
{
"definitions" : {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-3.06/t/coerce.t
new/JSON-Validator-3.07/t/coerce.t
--- old/JSON-Validator-3.06/t/coerce.t 2018-12-15 05:21:00.000000000 +0100
+++ new/JSON-Validator-3.07/t/coerce.t 2019-04-04 18:41:08.000000000 +0200
@@ -3,15 +3,11 @@
use Mojo::JSON 'to_json';
use Test::More;
-my $validator = JSON::Validator->new;
+my $jv = JSON::Validator->new;
my %coerce = (booleans => 1);
+is_deeply($jv->coerce(%coerce)->coerce, {booleans => 1}, 'hash is accepted');
is_deeply(
- $validator->coerce(%coerce)->coerce,
- {booleans => 1},
- 'hash is accepted'
-);
-is_deeply(
- $validator->coerce(\%coerce)->coerce,
+ $jv->coerce(\%coerce)->coerce,
{booleans => 1},
'hash reference is accepted'
);
@@ -19,7 +15,7 @@
note
'coerce(1) is here for back compat reasons, even though not documented any
more';
is_deeply(
- $validator->coerce(1)->coerce,
+ $jv->coerce(1)->coerce,
{%coerce, numbers => 1, strings => 1},
'1 is accepted'
);
@@ -29,17 +25,17 @@
for my $i (@items) {
for my $schema (schemas($i->[0])) {
my $x = $i->[1];
- $validator->validate($x, $schema);
+ $jv->validate($x, $schema);
is to_json($x), $i->[1], sprintf 'no quotes around %s %s', $i->[0],
to_json($schema);
$x = {v => $i->[1]};
- $validator->validate($x, {type => 'object', properties => {v => $schema}});
+ $jv->validate($x, {type => 'object', properties => {v => $schema}});
is to_json($x->{v}), $i->[1], sprintf 'no quotes around %s %s', $i->[0],
to_json($schema);
$x = [$i->[1]];
- $validator->validate($x, {type => 'array', items => $schema});
+ $jv->validate($x, {type => 'array', items => $schema});
is to_json($x->[0]), $i->[1], sprintf 'no quotes around %s %s', $i->[0],
to_json($schema);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-3.06/t/deep-mixed-ref.t
new/JSON-Validator-3.07/t/deep-mixed-ref.t
--- old/JSON-Validator-3.06/t/deep-mixed-ref.t 2018-12-15 05:21:00.000000000
+0100
+++ new/JSON-Validator-3.07/t/deep-mixed-ref.t 2019-04-04 18:41:08.000000000
+0200
@@ -3,19 +3,18 @@
use JSON::Validator;
use Mojo::File 'path';
-my $workdir = path(__FILE__)->dirname;
-my $file = path($workdir, 'spec', 'with-deep-mixed-ref.json');
-my $validator = JSON::Validator->new(cache_paths => [])->schema($file);
-my @errors = $validator->validate(
+my $workdir = path(__FILE__)->dirname;
+my $file = path($workdir, 'spec', 'with-deep-mixed-ref.json');
+my $jv = JSON::Validator->new(cache_paths => [])->schema($file);
+my @errors = $jv->validate(
{age => 1, weight => {mass => 72, unit => 'kg'}, height => 100});
is int(@errors), 0, 'valid input';
use Mojolicious::Lite;
push @{app->static->paths}, $workdir;
-$validator->ua(app->ua);
-$validator->schema(
- app->ua->server->url->clone->path('/spec/with-relative-ref.json'));
-@errors = $validator->validate({age => 'not a number'});
+$jv->ua(app->ua);
+$jv->schema(app->ua->server->url->clone->path('/spec/with-relative-ref.json'));
+@errors = $jv->validate({age => 'not a number'});
is int(@errors), 1, 'invalid age';
done_testing;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-3.06/t/issue-42-cache-control.t
new/JSON-Validator-3.07/t/issue-42-cache-control.t
--- old/JSON-Validator-3.06/t/issue-42-cache-control.t 2018-12-15
05:21:00.000000000 +0100
+++ new/JSON-Validator-3.07/t/issue-42-cache-control.t 2019-04-04
18:41:08.000000000 +0200
@@ -5,23 +5,24 @@
plan skip_all => 'TEST_ONLINE=1' unless $ENV{TEST_ONLINE};
-$ENV{JSON_VALIDATOR_CACHE_DIR} = '/tmp/whatever';
-my $validator = JSON::Validator->new;
-my @old_files = get_cached_files($validator);
-
-is $validator->cache_paths->[0], '/tmp/whatever', 'back compat env';
-shift @{$validator->cache_paths};
-
-$validator->schema('https://za.payprop.com/api/docs/api_spec.yaml');
-my @new_files = get_cached_files($validator);
+$ENV{JSON_VALIDATOR_CACHE_PATH} = '/tmp/whatever';
+my $jv = JSON::Validator->new;
+my @old_files = get_cached_files($jv);
+
+is $jv->cache_paths->[0], '/tmp/whatever', 'back compat env';
+shift @{$jv->cache_paths};
+
+my $spec_url =
'https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/schemas/v2.0/schema.json';
+$jv->schema($spec_url);
+my @new_files = get_cached_files($jv);
ok @old_files == @new_files, 'remote file not cached in default cache dir';
my $tempdir = tempdir;
$ENV{JSON_VALIDATOR_CACHE_PATH} = join ':', $tempdir->dirname, '/tmp/whatever';
-$validator = JSON::Validator->new;
-is $validator->cache_paths->[0], $tempdir->dirname, 'env';
-$validator->schema('https://za.payprop.com/api/docs/api_spec.yaml');
-@new_files = get_cached_files($validator);
+$jv = JSON::Validator->new;
+is $jv->cache_paths->[0], $tempdir->dirname, 'env';
+$jv->schema($spec_url);
+@new_files = get_cached_files($jv);
ok @new_files > @old_files,
'remote file cached when cache_paths not the default'
or diag join "\n", @new_files;
@@ -29,6 +30,6 @@
done_testing;
sub get_cached_files {
- my ($validator) = @_;
- return sort map { glob "$_/*" } @{$validator->cache_paths};
+ my ($jv) = @_;
+ return sort map { glob "$_/*" } @{$jv->cache_paths};
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/JSON-Validator-3.06/t/issue-59-oneof-blessed-booleans.t
new/JSON-Validator-3.07/t/issue-59-oneof-blessed-booleans.t
--- old/JSON-Validator-3.06/t/issue-59-oneof-blessed-booleans.t 2018-12-15
05:21:00.000000000 +0100
+++ new/JSON-Validator-3.07/t/issue-59-oneof-blessed-booleans.t 2019-04-04
18:41:08.000000000 +0200
@@ -3,9 +3,9 @@
use Mojo::JSON;
use JSON::Validator;
-my $validator = JSON::Validator->new->schema('data://main/spec.json');
-my @errors = $validator->validate(
- {prop1 => Mojo::JSON->false, prop2 => Mojo::JSON->false});
+my $jv = JSON::Validator->new->schema('data://main/spec.json');
+my @errors
+ = $jv->validate({prop1 => Mojo::JSON->false, prop2 => Mojo::JSON->false});
is "@errors", "";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-3.06/t/jv-boolean.t
new/JSON-Validator-3.07/t/jv-boolean.t
--- old/JSON-Validator-3.06/t/jv-boolean.t 2018-12-15 05:21:00.000000000
+0100
+++ new/JSON-Validator-3.07/t/jv-boolean.t 2019-04-04 18:41:08.000000000
+0200
@@ -22,7 +22,7 @@
E('/', 'Expected boolean - got string.');
validate_ok undef, {properties => {}}, E('/', 'Expected object - got null.');
-t::Helper->validator->coerce(1);
+jv->coerce(1);
validate_ok {nick => 1000}, $schema;
validate_ok {nick => 0.5}, $schema;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-3.06/t/jv-integer.t
new/JSON-Validator-3.07/t/jv-integer.t
--- old/JSON-Validator-3.06/t/jv-integer.t 2018-12-15 05:21:00.000000000
+0100
+++ new/JSON-Validator-3.07/t/jv-integer.t 2019-04-04 18:41:08.000000000
+0200
@@ -18,7 +18,7 @@
$schema->{properties}{mynumber}{multipleOf} = 2;
validate_ok {mynumber => 3}, $schema, E('/mynumber', 'Not multiple of 2.');
-t::Helper->validator->coerce(numbers => 1);
+jv->coerce(numbers => 1);
validate_ok {mynumber => '2'}, $schema;
validate_ok {mynumber => '2xyz'}, $schema,
E('/mynumber', 'Expected integer - got string.');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-3.06/t/jv-number.t
new/JSON-Validator-3.07/t/jv-number.t
--- old/JSON-Validator-3.06/t/jv-number.t 2018-12-15 05:21:00.000000000
+0100
+++ new/JSON-Validator-3.07/t/jv-number.t 2019-04-04 18:41:08.000000000
+0200
@@ -11,7 +11,7 @@
validate_ok {mynumber => '2'}, $schema,
E('/mynumber', 'Expected number - got string.');
-t::Helper->validator->coerce(numbers => 1);
+jv->coerce(numbers => 1);
validate_ok {mynumber => '-0.3'}, $schema;
validate_ok {mynumber => '0.1e+1'}, $schema;
validate_ok {mynumber => '2xyz'}, $schema,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-3.06/t/jv-string.t
new/JSON-Validator-3.07/t/jv-string.t
--- old/JSON-Validator-3.06/t/jv-string.t 2019-01-20 23:31:14.000000000
+0100
+++ new/JSON-Validator-3.07/t/jv-string.t 2019-04-04 18:41:08.000000000
+0200
@@ -18,13 +18,13 @@
validate_ok {nick => 'aa'}, $schema, E('/nick', 'String is too short: 2/3.');
validate_ok {nick => 'a' x 11}, $schema,
E('/nick', 'String is too long: 11/10.');
-like +join('', t::Helper->validator->validate({nick => '[nick]'})),
+like +join('', jv->validate({nick => '[nick]'})),
qr{/nick: String does not match}, 'String does not match';
delete $schema->{properties}{nick}{pattern};
validate_ok {nick => 'Déjà vu'}, $schema;
-t::Helper->validator->coerce(1);
+jv->coerce(1);
validate_ok {nick => 1000}, $schema;
# https://github.com/mojolicious/json-validator/issues/134
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-3.06/t/load-data.t
new/JSON-Validator-3.07/t/load-data.t
--- old/JSON-Validator-3.06/t/load-data.t 2018-12-15 05:21:00.000000000
+0100
+++ new/JSON-Validator-3.07/t/load-data.t 2019-04-04 18:41:08.000000000
+0200
@@ -2,9 +2,9 @@
use Test::More;
use JSON::Validator;
- my $validator = JSON::Validator->new;
- my @errors = $validator->schema('data://main/spec.json')
- ->validate({firstName => 'yikes!'});
+ my $jv = JSON::Validator->new;
+ my @errors
+ = $jv->schema('data://main/spec.json')->validate({firstName => 'yikes!'});
is int(@errors), 1, 'one error';
is $errors[0]->path, '/lastName', 'lastName';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-3.06/t/load-file.t
new/JSON-Validator-3.07/t/load-file.t
--- old/JSON-Validator-3.06/t/load-file.t 2019-01-20 23:31:14.000000000
+0100
+++ new/JSON-Validator-3.07/t/load-file.t 2019-04-04 18:41:08.000000000
+0200
@@ -2,12 +2,12 @@
use Test::More;
use JSON::Validator;
-my $spec = Mojo::File::path(qw(t spec person.json))->to_abs;
-my $validator = JSON::Validator->new;
+my $spec = Mojo::File::path(qw(t spec person.json))->to_abs;
+my $jv = JSON::Validator->new;
note "file://$spec";
-ok eval { $validator->schema("file://$spec") }, 'loaded from file://';
-isa_ok($validator->schema, 'Mojo::JSON::Pointer');
-is $validator->schema->get('/title'), 'Example Schema', 'got example schema';
+ok eval { $jv->schema("file://$spec") }, 'loaded from file://';
+isa_ok($jv->schema, 'Mojo::JSON::Pointer');
+is $jv->schema->get('/title'), 'Example Schema', 'got example schema';
done_testing;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-3.06/t/load-http.t
new/JSON-Validator-3.07/t/load-http.t
--- old/JSON-Validator-3.06/t/load-http.t 2019-01-05 04:56:18.000000000
+0100
+++ new/JSON-Validator-3.07/t/load-http.t 2019-04-04 18:41:08.000000000
+0200
@@ -4,13 +4,13 @@
plan skip_all => 'TEST_ONLINE=1' unless $ENV{TEST_ONLINE};
-my $validator = JSON::Validator->new;
+my $jv = JSON::Validator->new;
-$validator->schema('http://swagger.io/v2/schema.json');
+$jv->schema('http://swagger.io/v2/schema.json');
-isa_ok($validator->schema, 'Mojo::JSON::Pointer');
-like $validator->schema->get('/title'), qr{swagger}i, 'got swagger spec';
-ok $validator->schema->get('/patternProperties/^x-/description'),
+isa_ok($jv->schema, 'Mojo::JSON::Pointer');
+like $jv->schema->get('/title'), qr{swagger}i, 'got swagger spec';
+ok $jv->schema->get('/patternProperties/^x-/description'),
'resolved vendorExtension $ref';
done_testing;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-3.06/t/load-json.t
new/JSON-Validator-3.07/t/load-json.t
--- old/JSON-Validator-3.06/t/load-json.t 2018-12-15 05:21:00.000000000
+0100
+++ new/JSON-Validator-3.07/t/load-json.t 2019-04-04 18:41:08.000000000
+0200
@@ -3,9 +3,9 @@
use JSON::Validator;
use Mojo::File 'path';
-my $file = path(path(__FILE__)->dirname, 'spec', 'person.json');
-my $validator = JSON::Validator->new->schema($file);
-my @errors = $validator->validate({firstName => 'yikes!'});
+my $file = path(path(__FILE__)->dirname, 'spec', 'person.json');
+my $jv = JSON::Validator->new->schema($file);
+my @errors = $jv->validate({firstName => 'yikes!'});
is int(@errors), 1, 'one error';
is $errors[0]->path, '/lastName', 'lastName';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-3.06/t/load-yaml.t
new/JSON-Validator-3.07/t/load-yaml.t
--- old/JSON-Validator-3.06/t/load-yaml.t 2018-12-15 05:21:00.000000000
+0100
+++ new/JSON-Validator-3.07/t/load-yaml.t 2019-04-04 18:41:08.000000000
+0200
@@ -2,10 +2,10 @@
use Test::More;
use JSON::Validator;
-plan skip_all => $@ unless eval { JSON::Validator::_yaml_module() };
+plan skip_all => 'YAML::XS required' unless $JSON::Validator::YAML_LOADER;
-my $validator = JSON::Validator->new;
-my @errors = $validator->schema('data://Some::Module/s_pec-/-ficaTion')
+my $jv = JSON::Validator->new;
+my @errors = $jv->schema('data://Some::Module/s_pec-/-ficaTion')
->validate({firstName => 'yikes!'});
is int(@errors), 1, 'one error';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-3.06/t/random-errors.t
new/JSON-Validator-3.07/t/random-errors.t
--- old/JSON-Validator-3.06/t/random-errors.t 2018-12-15 05:25:31.000000000
+0100
+++ new/JSON-Validator-3.07/t/random-errors.t 2019-04-04 18:41:08.000000000
+0200
@@ -7,7 +7,7 @@
plan skip_all => 'TEST_RANDOM_ITERATIONS=10000'
unless my $iterations = $ENV{TEST_RANDOM_ITERATIONS};
-my $validator = JSON::Validator->new->schema({
+my $jv = JSON::Validator->new->schema({
items => {
properties => {
prop1 => {type => [qw(string null)]},
@@ -28,7 +28,7 @@
my @errors;
for (1 .. $iterations) {
push @errors,
- $validator->validate([{
+ $jv->validate([{
prop1 => undef,
prop2 => undef,
prop3 => undef,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-3.06/t/relative-ref.t
new/JSON-Validator-3.07/t/relative-ref.t
--- old/JSON-Validator-3.06/t/relative-ref.t 2018-12-15 05:21:00.000000000
+0100
+++ new/JSON-Validator-3.07/t/relative-ref.t 2019-04-04 18:41:08.000000000
+0200
@@ -3,12 +3,12 @@
use Mojo::File 'path';
my $file = path(path(__FILE__)->dirname, 'spec', 'with-relative-ref.json');
-my $validator = t::Helper->validator->cache_paths([]);
+my $jv = jv->cache_paths([]);
validate_ok {age => -1}, $file, E('/age', '-1 < minimum(0)');
use Mojolicious::Lite;
push @{app->static->paths}, path(__FILE__)->dirname;
-$validator->ua(app->ua);
+$jv->ua(app->ua);
validate_ok {age => -2},
app->ua->server->url->clone->path('/spec/with-relative-ref.json'),
E('/age', '-2 < minimum(0)');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/JSON-Validator-3.06/t/spec/bundle-no-leaking-filename.json
new/JSON-Validator-3.07/t/spec/bundle-no-leaking-filename.json
--- old/JSON-Validator-3.06/t/spec/bundle-no-leaking-filename.json
1970-01-01 01:00:00.000000000 +0100
+++ new/JSON-Validator-3.07/t/spec/bundle-no-leaking-filename.json
2019-04-04 18:41:35.000000000 +0200
@@ -0,0 +1,4 @@
+{
+ "type": "object",
+ "properties": { "$ref": "./with-deep-mixed-ref.json#/properties" }
+}