kage JSONSchema::Validator;
# ABSTRACT: Validator for JSON Schema Draft4/Draft6/Draft7 and OpenAPI Specification 3.0
use strict;
use warnings;
use URI::file;
use Carp 'croak';
use Cwd;
use JSONSche
ma::Validator::Draft4;
use JSONSchema::Validator::Draft6;
use JSONSchema::Validator::Draft7;
use JSONSchema::Validator::OAS30;
use JSONSchema::Validator::Util qw(get_resource decode_content read_file)
ONS = {
JSONSchema::Validator::OAS30::ID => JSONSchema::Validator::OAS30::SPECIFICATION,
JSONSchema::Validator::Draft4::ID => JSONSchema::Validator::Draft4::SPECIFICATION,
JSONSchema::Vali
age JSONSchema::Validator::Constraints::Draft7;
# ABSTRACT: JSON Schema Draft7 specification constraints
use strict;
use warnings;
use JSONSchema::Validator::JSONPointer 'json_pointer';
use JSONSch
ema::Validator::Error 'error';
use JSONSchema::Validator::Util qw(is_type serialize unbool);
use parent 'JSONSchema::Validator::Constraints::Draft6';
sub if {
my ($self, $instance, $if, $schema,
return 1 unless exists $schema->{then};
my $then = $schema->{then};
my $spath = json_pointer->append($schema_path, 'then');
return $self->validator->_validate_schema($instanc
package JSONSchema::Validator::Format;
# ABSTRACT: Formats of JSON Schema specification
use strict;
use warnings;
use Time::Piece;
use Scalar::Util 'looks_like_number';
our @ISA = 'Exporter';
our
validate_int64
validate_float validate_double
validate_regex
validate_json_pointer validate_relative_json_pointer
validate_uri validate_uri_reference
validate_iri validate_iri_ref
m) >= 0;
return 1 if $sign < 0 && (($abs . '8') cmp $num) >= 0;
return 0;
}
sub validate_json_pointer {
# from rfc6901:
# CORE::state $pointer_regexp = do {
# my $escaped = qr
package JSONSchema::Validator::OAS30;
# ABSTRACT: Validator for OpenAPI Specification 3.0
use strict;
use warnings;
use Carp 'croak';
use JSONSchema::Validator::JSONPointer;
use JSONSchema::Validat
or::Error 'error';
use JSONSchema::Validator::Constraints::OAS30;
use JSONSchema::Validator::URIResolver;
use JSONSchema::Validator::Util 'json_decode';
use parent 'JSONSchema::Validator::Draft4';
u
deprecated} // 1;
$self->{validate_deprecated} = $validate_deprecated;
my $constraints = JSONSchema::Validator::Constraints::OAS30->new(validator => $self, strict => $params{strict} // 0);
package JSONSchema::Validator::Error;
# ABSTRACT: Error class
use strict;
use warnings;
use overload
'""' => sub { $_[0]->to_string },
fallback => 1;
our @ISA = 'Exporter';
our @EXPORT_OK
ng_list}) {
push @$res, "$msg: $err_str";
}
}
return $res;
}
sub TO_JSON {
my $self = shift;
my $res = {
message => $self->message
};
$res->{inst
ext} = [
map { $_->TO_JSON }
@{$self->context}
];
}
return $res;
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
JSONSchema::Validator::Error - Error c
package JSONSchema::Validator::Draft7;
# ABSTRACT: Validator for JSON Schema Draft7
use strict;
use warnings;
use JSONSchema::Validator::Constraints::Draft7;
use parent 'JSONSchema::Validator::Dra
=> 'http://json-schema.org/draft-07/schema#';
use constant ID_FIELD => '$id';
sub new {
my ($class, %params) = @_;
my $self = $class->create(%params);
my $constraints = JSONSchema::Val
d
=encoding UTF-8
=head1 NAME
JSONSchema::Validator::Draft7 - Validator for JSON Schema Draft7
=head1 VERSION
version 0.011
=head1 SYNOPSIS
$validator = JSONSchema::Validator::Draft7->new(s
package JSONSchema::Validator::Draft6;
# ABSTRACT: Validator for JSON Schema Draft6
use strict;
use warnings;
use JSONSchema::Validator::Constraints::Draft6;
use parent 'JSONSchema::Validator::Dra
=> 'http://json-schema.org/draft-06/schema#';
use constant ID_FIELD => '$id';
sub new {
my ($class, %params) = @_;
my $self = $class->create(%params);
my $constraints = JSONSchema::Val
d
=encoding UTF-8
=head1 NAME
JSONSchema::Validator::Draft6 - Validator for JSON Schema Draft6
=head1 VERSION
version 0.011
=head1 SYNOPSIS
$validator = JSONSchema::Validator::Draft6->new(s
package JSONSchema::Validator::URIResolver;
# ABSTRACT: URI resolver
use strict;
use warnings;
use Carp 'croak';
use Scalar::Util 'weaken';
use URI;
use URI::Escape;
use Encode;
use JSONSchema::V
alidator::JSONPointer 'json_pointer';
use JSONSchema::Validator::Util qw(get_resource decode_content);
# what keys contain the schema? Required to find an $id in a schema
my $SEARCH_ID = {
value
;
my $pointer = json_pointer->new(
scope => $uri->as_string,
value => $schema,
validator => $self->validator
);
# try to use fragment as json pointer
$pointer
age JSONSchema::Validator::Constraints::Draft6;
# ABSTRACT: JSON Schema Draft6 specification constraints
use strict;
use warnings;
use JSONSchema::Validator::JSONPointer 'json_pointer';
use JSONSch
ema::Validator::Error 'error';
use JSONSchema::Validator::Util qw(is_type serialize unbool);
use parent 'JSONSchema::Validator::Constraints::Draft4';
# params: $self, $value, $type, $strict
sub chec
($instance, 'object');
my $result = 1;
for my $p (keys %$instance) {
my $ipath = json_pointer->append($instance_path, $p);
my $r = $self->validator->_validate_schema($p, $prop
age JSONSchema::Validator::Constraints::Draft4;
# ABSTRACT: JSON Schema Draft4 specification constraints
use strict;
use warnings;
use Scalar::Util 'weaken';
use URI;
use Carp 'croak';
use JSONSche
:Validator::Error 'error';
use JSONSchema::Validator::JSONPointer 'json_pointer';
use JSONSchema::Validator::Util qw(serialize unbool round is_type detect_type);
use JSONSchema::Validator::Format qw(
validate_int64
validate_float validate_double
validate_regex
validate_json_pointer validate_relative_json_pointer
validate_uri validate_uri_reference
validate_iri validate_iri_ref
age JSONSchema::Validator::Constraints::OAS30;
# ABSTRACT: OpenAPI 3.0 specification constraints
use strict;
use warnings;
use URI;
use Carp 'croak';
use JSONSchema::Validator::JSONPointer 'json_po
inter';
use JSONSchema::Validator::Error 'error';
use JSONSchema::Validator::Util 'detect_type';
use parent 'JSONSchema::Validator::Constraints::Draft4';
sub type {
my ($self, $instance, $type,
= 1;
for my $i (0 .. $#{$instance}) {
my $item = $instance->[$i];
my $ipath = json_pointer->append($instance_path, $i);
my $r = $self->validator->_validate_schema($item, $i
package JSONSchema::Validator::Util;
# ABSTRACT: Useful functions
use strict;
use warnings;
use URI 1.00;
use File::Basename;
use B;
use Carp 'croak';
use Scalar::Util 'looks_like_number';
our @I
SA = 'Exporter';
our @EXPORT_OK = qw(
json_encode json_decode user_agent_get serialize unbool
round read_file is_type detect_type get_resource decode_content
data_section
);
use constant
IX_TO_MIME_TYPE => {
'yaml' => 'text/vnd.yaml',
'yml' => 'text/vnd.yaml',
'json' => 'application/json'
};
use constant TYPE_MAP => {
'array' => \&is_array,
'boolean' => \&is_bool,
package JSONSchema::Validator::JSONPointer;
# ABSTRACT: JSON Pointer with URI resolving
use strict;
use warnings;
use URI;
use Carp 'croak';
use Scalar::Util 'weaken';
use overload
'bool' => s
ub { $_[0]->value },
fallback => 1;
our @ISA = 'Exporter';
our @EXPORT_OK = qw(json_pointer);
sub json_pointer {
return __PACKAGE__;
}
sub append {
my ($class, $path, @values) = @_;
e, $validator) = @params{qw/scope value validator/};
croak 'JSONPointer: scope is required' unless defined $scope;
croak 'JSONPointer: validator is required' unless $validator;
weaken($v
package JSONSchema::Validator::Draft4;
# ABSTRACT: Validator for JSON Schema Draft4
use strict;
use warnings;
use URI;
use Carp 'croak';
use JSONSchema::Validator::Error 'error';
use JSONSchema::Va
lidator::JSONPointer 'json_pointer';
use JSONSchema::Validator::Constraints::Draft4;
use JSONSchema::Validator::URIResolver;
use JSONSchema::Validator::Util qw(is_type);
use constant SPECIFICATION =>
'Draft4';
use constant ID => 'http://json-schema.org/draft-04/schema#';
use constant ID_FIELD => 'id';
sub create {
my ($class, %params) = @_;
croak 'schema is required' unless exists $para