Hello community,

here is the log from the commit of package perl-JSON-Validator for 
openSUSE:Factory checked in at 2019-04-08 10:40:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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"

Mon Apr  8 10:40:09 2019 rev:3 rq:692128 version:3.08

Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-JSON-Validator/perl-JSON-Validator.changes  
2019-04-05 12:06:53.386578610 +0200
+++ 
/work/SRC/openSUSE:Factory/.perl-JSON-Validator.new.3908/perl-JSON-Validator.changes
        2019-04-08 10:40:44.219301283 +0200
@@ -1,0 +2,12 @@
+Sun Apr  7 05:09:45 UTC 2019 - Stephan Kulow <co...@suse.com>
+
+- updated to 3.08
+   see /usr/share/doc/packages/perl-JSON-Validator/Changes
+
+  3.08 2019-04-06T15:07:11+0700
+   - Add support for "default" in object definitions #155
+   - Add support for coerce("bool,def,num,str") as alternative to hash
+   - Add support for setting coerce in new()
+   - Deprecated support for coerce(1)
+
+-------------------------------------------------------------------

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

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

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

Other differences:
------------------
++++++ perl-JSON-Validator.spec ++++++
--- /var/tmp/diff_new_pack.ciXYPV/_old  2019-04-08 10:40:44.907301451 +0200
+++ /var/tmp/diff_new_pack.ciXYPV/_new  2019-04-08 10:40:44.911301452 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           perl-JSON-Validator
-Version:        3.07
+Version:        3.08
 Release:        0
 %define cpan_name JSON-Validator
 Summary:        Validate data against a JSON schema

++++++ JSON-Validator-3.07.tar.gz -> JSON-Validator-3.08.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JSON-Validator-3.07/.vstags 
new/JSON-Validator-3.08/.vstags
--- old/JSON-Validator-3.07/.vstags     1970-01-01 01:00:00.000000000 +0100
+++ new/JSON-Validator-3.08/.vstags     2019-04-06 10:02:22.000000000 +0200
@@ -0,0 +1,292 @@
+!_TAG_FILE_FORMAT      2       /extended format; --format=1 will not append ;" 
to lines/
+!_TAG_FILE_SORTED      1       /0=unsorted, 1=sorted, 2=foldcase/
+!_TAG_PROGRAM_AUTHOR   Darren Hiebert  /dhieb...@users.sourceforge.net/
+!_TAG_PROGRAM_NAME     Exuberant Ctags //
+!_TAG_PROGRAM_URL      http://ctags.sourceforge.net    /official site/
+!_TAG_PROGRAM_VERSION  5.8     //
+CASE_TOLERANT  lib/JSON/Validator.pm   20;"    c
+COLORS lib/JSON/Validator.pm   21;"    c
+D      lib/JSON/Validator.pm   36;"    s
+DATA_VALIDATE_DOMAIN   lib/JSON/Validator/Formats.pm   4;"     c
+DATA_VALIDATE_IP       lib/JSON/Validator/Formats.pm   5;"     c
+DEBUG  lib/JSON/Validator.pm   22;"    c
+E      lib/JSON/Validator.pm   41;"    s
+EXISTS lib/JSON/Validator/Ref.pm       14;"    s
+FETCH  lib/JSON/Validator/Ref.pm       18;"    s
+FIRSTKEY       lib/JSON/Validator/Ref.pm       21;"    s
+JSON::Validator        lib/JSON/Validator.pm   1;"     p
+JSON::Validator::CASE_TOLERANT lib/JSON/Validator.pm   20;"    c
+JSON::Validator::COLORS        lib/JSON/Validator.pm   21;"    c
+JSON::Validator::D     lib/JSON/Validator.pm   36;"    s
+JSON::Validator::DEBUG lib/JSON/Validator.pm   22;"    c
+JSON::Validator::E     lib/JSON/Validator.pm   41;"    s
+JSON::Validator::Error lib/JSON/Validator/Error.pm     1;"     p
+JSON::Validator::Error::TO_JSON        lib/JSON/Validator/Error.pm     15;"    
s
+JSON::Validator::Error::message        lib/JSON/Validator/Error.pm     12;"    
s
+JSON::Validator::Error::new    lib/JSON/Validator/Error.pm     6;"     s
+JSON::Validator::Error::path   lib/JSON/Validator/Error.pm     13;"    s
+JSON::Validator::Error::to_string      lib/JSON/Validator/Error.pm     14;"    
s
+JSON::Validator::Formats       lib/JSON/Validator/Formats.pm   1;"     p
+JSON::Validator::Formats::DATA_VALIDATE_DOMAIN lib/JSON/Validator/Formats.pm   
4;"     c
+JSON::Validator::Formats::DATA_VALIDATE_IP     lib/JSON/Validator/Formats.pm   
5;"     c
+JSON::Validator::Formats::NET_IDN_ENCODE       lib/JSON/Validator/Formats.pm   
6;"     c
+JSON::Validator::Formats::WARN_MISSING_MODULE  lib/JSON/Validator/Formats.pm   
7;"     c
+JSON::Validator::Formats::_module_missing      lib/JSON/Validator/Formats.pm   
184;"   s
+JSON::Validator::Formats::check_date   lib/JSON/Validator/Formats.pm   11;"    
s
+JSON::Validator::Formats::check_date_time      lib/JSON/Validator/Formats.pm   
24;"    s
+JSON::Validator::Formats::check_email  lib/JSON/Validator/Formats.pm   38;"    
s
+JSON::Validator::Formats::check_hostname       lib/JSON/Validator/Formats.pm   
54;"    s
+JSON::Validator::Formats::check_idn_email      lib/JSON/Validator/Formats.pm   
61;"    s
+JSON::Validator::Formats::check_idn_hostname   lib/JSON/Validator/Formats.pm   
78;"    s
+JSON::Validator::Formats::check_ipv4   lib/JSON/Validator/Formats.pm   126;"   
s
+JSON::Validator::Formats::check_ipv6   lib/JSON/Validator/Formats.pm   134;"   
s
+JSON::Validator::Formats::check_iri    lib/JSON/Validator/Formats.pm   87;"    
s
+JSON::Validator::Formats::check_iri_reference  lib/JSON/Validator/Formats.pm   
93;"    s
+JSON::Validator::Formats::check_json_pointer   lib/JSON/Validator/Formats.pm   
121;"   s
+JSON::Validator::Formats::check_regex  lib/JSON/Validator/Formats.pm   151;"   
s
+JSON::Validator::Formats::check_relative_json_pointer  
lib/JSON/Validator/Formats.pm   140;"   s
+JSON::Validator::Formats::check_time   lib/JSON/Validator/Formats.pm   155;"   
s
+JSON::Validator::Formats::check_uri    lib/JSON/Validator/Formats.pm   168;"   
s
+JSON::Validator::Formats::check_uri_reference  lib/JSON/Validator/Formats.pm   
175;"   s
+JSON::Validator::Formats::check_uri_template   lib/JSON/Validator/Formats.pm   
180;"   s
+JSON::Validator::Joi   lib/JSON/Validator/Joi.pm       1;"     p
+JSON::Validator::Joi::TO_JSON  lib/JSON/Validator/Joi.pm       152;"   s
+JSON::Validator::Joi::_compile_array   lib/JSON/Validator/Joi.pm       88;"    
s
+JSON::Validator::Joi::_compile_boolean lib/JSON/Validator/Joi.pm       101;"   
s
+JSON::Validator::Joi::_compile_integer lib/JSON/Validator/Joi.pm       103;"   
s
+JSON::Validator::Joi::_compile_null    lib/JSON/Validator/Joi.pm       105;"   
s
+JSON::Validator::Joi::_compile_number  lib/JSON/Validator/Joi.pm       107;"   
s
+JSON::Validator::Joi::_compile_object  lib/JSON/Validator/Joi.pm       119;"   
s
+JSON::Validator::Joi::_compile_string  lib/JSON/Validator/Joi.pm       134;"   
s
+JSON::Validator::Joi::_type    lib/JSON/Validator/Joi.pm       147;"   s
+JSON::Validator::Joi::alphanum lib/JSON/Validator/Joi.pm       19;"    s
+JSON::Validator::Joi::array    lib/JSON/Validator/Joi.pm       53;"    s
+JSON::Validator::Joi::boolean  lib/JSON/Validator/Joi.pm       20;"    s
+JSON::Validator::Joi::compile  lib/JSON/Validator/Joi.pm       22;"    s
+JSON::Validator::Joi::date_time        lib/JSON/Validator/Joi.pm       35;"    
s
+JSON::Validator::Joi::email    lib/JSON/Validator/Joi.pm       36;"    s
+JSON::Validator::Joi::extend   lib/JSON/Validator/Joi.pm       38;"    s
+JSON::Validator::Joi::integer  lib/JSON/Validator/Joi.pm       54;"    s
+JSON::Validator::Joi::iso_date lib/JSON/Validator/Joi.pm       55;"    s
+JSON::Validator::Joi::items    lib/JSON/Validator/Joi.pm       56;"    s
+JSON::Validator::Joi::length   lib/JSON/Validator/Joi.pm       57;"    s
+JSON::Validator::Joi::lowercase        lib/JSON/Validator/Joi.pm       58;"    
s
+JSON::Validator::Joi::negative lib/JSON/Validator/Joi.pm       59;"    s
+JSON::Validator::Joi::number   lib/JSON/Validator/Joi.pm       60;"    s
+JSON::Validator::Joi::object   lib/JSON/Validator/Joi.pm       61;"    s
+JSON::Validator::Joi::pattern  lib/JSON/Validator/Joi.pm       62;"    s
+JSON::Validator::Joi::positive lib/JSON/Validator/Joi.pm       63;"    s
+JSON::Validator::Joi::props    lib/JSON/Validator/Joi.pm       65;"    s
+JSON::Validator::Joi::string   lib/JSON/Validator/Joi.pm       77;"    s
+JSON::Validator::Joi::token    lib/JSON/Validator/Joi.pm       78;"    s
+JSON::Validator::Joi::uppercase        lib/JSON/Validator/Joi.pm       79;"    
s
+JSON::Validator::Joi::uri      lib/JSON/Validator/Joi.pm       80;"    s
+JSON::Validator::Joi::validate lib/JSON/Validator/Joi.pm       82;"    s
+JSON::Validator::RECURSION_LIMIT       lib/JSON/Validator.pm   24;"    c
+JSON::Validator::REPORT        lib/JSON/Validator.pm   23;"    c
+JSON::Validator::Ref   lib/JSON/Validator/Ref.pm       1;"     p
+JSON::Validator::Ref::EXISTS   lib/JSON/Validator/Ref.pm       14;"    s
+JSON::Validator::Ref::FETCH    lib/JSON/Validator/Ref.pm       18;"    s
+JSON::Validator::Ref::FIRSTKEY lib/JSON/Validator/Ref.pm       21;"    s
+JSON::Validator::Ref::KEYS     lib/JSON/Validator/Ref.pm       22;"    s
+JSON::Validator::Ref::NEXTKEY  lib/JSON/Validator/Ref.pm       23;"    s
+JSON::Validator::Ref::SCALAR   lib/JSON/Validator/Ref.pm       24;"    s
+JSON::Validator::Ref::TIEHASH  lib/JSON/Validator/Ref.pm       26;"    s
+JSON::Validator::Ref::TO_JSON  lib/JSON/Validator/Ref.pm       36;"    s
+JSON::Validator::Ref::fqn      lib/JSON/Validator/Ref.pm       9;"     s
+JSON::Validator::Ref::ref      lib/JSON/Validator/Ref.pm       10;"    s
+JSON::Validator::Ref::schema   lib/JSON/Validator/Ref.pm       11;"    s
+JSON::Validator::S     lib/JSON/Validator.pm   43;"    s
+JSON::Validator::SPECIFICATION_URL     lib/JSON/Validator.pm   25;"    c
+JSON::Validator::_add_path_to_error_messages   lib/JSON/Validator.pm   995;"   
s
+JSON::Validator::_build_formats        lib/JSON/Validator.pm   208;"   s
+JSON::Validator::_cmp  lib/JSON/Validator.pm   1011;"  s
+JSON::Validator::_expected     lib/JSON/Validator.pm   1018;"  s
+JSON::Validator::_get  lib/JSON/Validator.pm   232;"   s
+JSON::Validator::_guess_data_type      lib/JSON/Validator.pm   1025;"  s
+JSON::Validator::_guess_schema_type    lib/JSON/Validator.pm   1042;"  s
+JSON::Validator::_guessed_right        lib/JSON/Validator.pm   1072;"  s
+JSON::Validator::_id_key       lib/JSON/Validator.pm   269;"   s
+JSON::Validator::_is_number    lib/JSON/Validator.pm   1078;"  s
+JSON::Validator::_load_schema  lib/JSON/Validator.pm   271;"   s
+JSON::Validator::_load_schema_from_text        lib/JSON/Validator.pm   315;"   
s
+JSON::Validator::_load_schema_from_url lib/JSON/Validator.pm   342;"   s
+JSON::Validator::_location_to_abs      lib/JSON/Validator.pm   491;"   s
+JSON::Validator::_path lib/JSON/Validator.pm   1084;"  s
+JSON::Validator::_ref_to_schema        lib/JSON/Validator.pm   374;"   s
+JSON::Validator::_register_schema      lib/JSON/Validator.pm   388;"   s
+JSON::Validator::_report       lib/JSON/Validator.pm   394;"   s
+JSON::Validator::_report_colored       lib/JSON/Validator.pm   400;"   s
+JSON::Validator::_report_errors        lib/JSON/Validator.pm   407;"   s
+JSON::Validator::_report_schema        lib/JSON/Validator.pm   417;"   s
+JSON::Validator::_resolve      lib/JSON/Validator.pm   425;"   s
+JSON::Validator::_resolve_ref  lib/JSON/Validator.pm   504;"   s
+JSON::Validator::_stack        lib/JSON/Validator.pm   535;"   s
+JSON::Validator::_uniq lib/JSON/Validator.pm   1091;"  s
+JSON::Validator::_validate     lib/JSON/Validator.pm   547;"   s
+JSON::Validator::_validate_all_of      lib/JSON/Validator.pm   614;"   s
+JSON::Validator::_validate_any_of      lib/JSON/Validator.pm   640;"   s
+JSON::Validator::_validate_format      lib/JSON/Validator.pm   724;"   s
+JSON::Validator::_validate_one_of      lib/JSON/Validator.pm   666;"   s
+JSON::Validator::_validate_type_any    lib/JSON/Validator.pm   733;"   s
+JSON::Validator::_validate_type_array  lib/JSON/Validator.pm   735;"   s
+JSON::Validator::_validate_type_boolean        lib/JSON/Validator.pm   794;"   
s
+JSON::Validator::_validate_type_const  lib/JSON/Validator.pm   714;"   s
+JSON::Validator::_validate_type_enum   lib/JSON/Validator.pm   700;"   s
+JSON::Validator::_validate_type_integer        lib/JSON/Validator.pm   819;"   
s
+JSON::Validator::_validate_type_null   lib/JSON/Validator.pm   828;"   s
+JSON::Validator::_validate_type_number lib/JSON/Validator.pm   835;"   s
+JSON::Validator::_validate_type_object lib/JSON/Validator.pm   873;"   s
+JSON::Validator::_validate_type_string lib/JSON/Validator.pm   953;"   s
+JSON::Validator::bundle        lib/JSON/Validator.pm   63;"    s
+JSON::Validator::coerce        lib/JSON/Validator.pm   130;"   s
+JSON::Validator::get   lib/JSON/Validator.pm   149;"   s
+JSON::Validator::joi   lib/JSON/Validator.pm   156;"   s
+JSON::Validator::load_and_validate_schema      lib/JSON/Validator.pm   162;"   
s
+JSON::Validator::new   lib/JSON/Validator.pm   174;"   s
+JSON::Validator::schema        lib/JSON/Validator.pm   180;"   s
+JSON::Validator::singleton     lib/JSON/Validator.pm   187;"   s
+JSON::Validator::validate      lib/JSON/Validator.pm   189;"   s
+JSON::Validator::validate_json lib/JSON/Validator.pm   204;"   s
+KEYS   lib/JSON/Validator/Ref.pm       22;"    s
+NET_IDN_ENCODE lib/JSON/Validator/Formats.pm   6;"     c
+NEXTKEY        lib/JSON/Validator/Ref.pm       23;"    s
+RECURSION_LIMIT        lib/JSON/Validator.pm   24;"    c
+REPORT lib/JSON/Validator.pm   23;"    c
+S      lib/JSON/Validator.pm   43;"    s
+SCALAR lib/JSON/Validator/Ref.pm       24;"    s
+SPECIFICATION_URL      lib/JSON/Validator.pm   25;"    c
+Some   t/stack/Some.pm 1;"     p
+Some::Module   t/stack/Some/Module.pm  1;"     p
+Some::Module::validate_age0    t/stack/Some/Module.pm  4;"     s
+Some::Module::validate_age1    t/stack/Some/Module.pm  5;"     s
+Some::j        t/stack/Some.pm 4;"     s
+Some::validate_age0    t/stack/Some.pm 5;"     s
+Some::validate_age1    t/stack/Some.pm 6;"     s
+TIEHASH        lib/JSON/Validator/Ref.pm       26;"    s
+TO_JSON        lib/JSON/Validator/Error.pm     15;"    s
+TO_JSON        lib/JSON/Validator/Joi.pm       152;"   s
+TO_JSON        lib/JSON/Validator/Ref.pm       36;"    s
+WARN_MISSING_MODULE    lib/JSON/Validator/Formats.pm   7;"     c
+_add_path_to_error_messages    lib/JSON/Validator.pm   995;"   s
+_build_formats lib/JSON/Validator.pm   208;"   s
+_cmp   lib/JSON/Validator.pm   1011;"  s
+_compile_array lib/JSON/Validator/Joi.pm       88;"    s
+_compile_boolean       lib/JSON/Validator/Joi.pm       101;"   s
+_compile_integer       lib/JSON/Validator/Joi.pm       103;"   s
+_compile_null  lib/JSON/Validator/Joi.pm       105;"   s
+_compile_number        lib/JSON/Validator/Joi.pm       107;"   s
+_compile_object        lib/JSON/Validator/Joi.pm       119;"   s
+_compile_string        lib/JSON/Validator/Joi.pm       134;"   s
+_expected      lib/JSON/Validator.pm   1018;"  s
+_get   lib/JSON/Validator.pm   232;"   s
+_guess_data_type       lib/JSON/Validator.pm   1025;"  s
+_guess_schema_type     lib/JSON/Validator.pm   1042;"  s
+_guessed_right lib/JSON/Validator.pm   1072;"  s
+_id_key        lib/JSON/Validator.pm   269;"   s
+_is_number     lib/JSON/Validator.pm   1078;"  s
+_load_schema   lib/JSON/Validator.pm   271;"   s
+_load_schema_from_text lib/JSON/Validator.pm   315;"   s
+_load_schema_from_url  lib/JSON/Validator.pm   342;"   s
+_location_to_abs       lib/JSON/Validator.pm   491;"   s
+_module_missing        lib/JSON/Validator/Formats.pm   184;"   s
+_path  lib/JSON/Validator.pm   1084;"  s
+_ref_to_schema lib/JSON/Validator.pm   374;"   s
+_register_schema       lib/JSON/Validator.pm   388;"   s
+_report        lib/JSON/Validator.pm   394;"   s
+_report_colored        lib/JSON/Validator.pm   400;"   s
+_report_errors lib/JSON/Validator.pm   407;"   s
+_report_schema lib/JSON/Validator.pm   417;"   s
+_resolve       lib/JSON/Validator.pm   425;"   s
+_resolve_ref   lib/JSON/Validator.pm   504;"   s
+_stack lib/JSON/Validator.pm   535;"   s
+_type  lib/JSON/Validator/Joi.pm       147;"   s
+_uniq  lib/JSON/Validator.pm   1091;"  s
+_validate      lib/JSON/Validator.pm   547;"   s
+_validate_all_of       lib/JSON/Validator.pm   614;"   s
+_validate_any_of       lib/JSON/Validator.pm   640;"   s
+_validate_format       lib/JSON/Validator.pm   724;"   s
+_validate_one_of       lib/JSON/Validator.pm   666;"   s
+_validate_type_any     lib/JSON/Validator.pm   733;"   s
+_validate_type_array   lib/JSON/Validator.pm   735;"   s
+_validate_type_boolean lib/JSON/Validator.pm   794;"   s
+_validate_type_const   lib/JSON/Validator.pm   714;"   s
+_validate_type_enum    lib/JSON/Validator.pm   700;"   s
+_validate_type_integer lib/JSON/Validator.pm   819;"   s
+_validate_type_null    lib/JSON/Validator.pm   828;"   s
+_validate_type_number  lib/JSON/Validator.pm   835;"   s
+_validate_type_object  lib/JSON/Validator.pm   873;"   s
+_validate_type_string  lib/JSON/Validator.pm   953;"   s
+alphanum       lib/JSON/Validator/Joi.pm       19;"    s
+array  lib/JSON/Validator/Joi.pm       53;"    s
+boolean        lib/JSON/Validator/Joi.pm       20;"    s
+bundle lib/JSON/Validator.pm   63;"    s
+check_date     lib/JSON/Validator/Formats.pm   11;"    s
+check_date_time        lib/JSON/Validator/Formats.pm   24;"    s
+check_email    lib/JSON/Validator/Formats.pm   38;"    s
+check_hostname lib/JSON/Validator/Formats.pm   54;"    s
+check_idn_email        lib/JSON/Validator/Formats.pm   61;"    s
+check_idn_hostname     lib/JSON/Validator/Formats.pm   78;"    s
+check_ipv4     lib/JSON/Validator/Formats.pm   126;"   s
+check_ipv6     lib/JSON/Validator/Formats.pm   134;"   s
+check_iri      lib/JSON/Validator/Formats.pm   87;"    s
+check_iri_reference    lib/JSON/Validator/Formats.pm   93;"    s
+check_json_pointer     lib/JSON/Validator/Formats.pm   121;"   s
+check_regex    lib/JSON/Validator/Formats.pm   151;"   s
+check_relative_json_pointer    lib/JSON/Validator/Formats.pm   140;"   s
+check_time     lib/JSON/Validator/Formats.pm   155;"   s
+check_uri      lib/JSON/Validator/Formats.pm   168;"   s
+check_uri_reference    lib/JSON/Validator/Formats.pm   175;"   s
+check_uri_template     lib/JSON/Validator/Formats.pm   180;"   s
+coerce lib/JSON/Validator.pm   130;"   s
+compile        lib/JSON/Validator/Joi.pm       22;"    s
+date_time      lib/JSON/Validator/Joi.pm       35;"    s
+edj    t/Helper.pm     11;"    s
+email  lib/JSON/Validator/Joi.pm       36;"    s
+extend lib/JSON/Validator/Joi.pm       38;"    s
+fqn    lib/JSON/Validator/Ref.pm       9;"     s
+get    lib/JSON/Validator.pm   149;"   s
+import t/Helper.pm     41;"    s
+integer        lib/JSON/Validator/Joi.pm       54;"    s
+iso_date       lib/JSON/Validator/Joi.pm       55;"    s
+items  lib/JSON/Validator/Joi.pm       56;"    s
+j      t/stack/Some.pm 4;"     s
+joi    lib/JSON/Validator.pm   156;"   s
+joi_ok t/Helper.pm     15;"    s
+jv     t/Helper.pm     27;"    s
+length lib/JSON/Validator/Joi.pm       57;"    s
+load_and_validate_schema       lib/JSON/Validator.pm   162;"   s
+lowercase      lib/JSON/Validator/Joi.pm       58;"    s
+message        lib/JSON/Validator/Error.pm     12;"    s
+negative       lib/JSON/Validator/Joi.pm       59;"    s
+new    lib/JSON/Validator.pm   174;"   s
+new    lib/JSON/Validator/Error.pm     6;"     s
+number lib/JSON/Validator/Joi.pm       60;"    s
+object lib/JSON/Validator/Joi.pm       61;"    s
+path   lib/JSON/Validator/Error.pm     13;"    s
+pattern        lib/JSON/Validator/Joi.pm       62;"    s
+positive       lib/JSON/Validator/Joi.pm       63;"    s
+props  lib/JSON/Validator/Joi.pm       65;"    s
+ref    lib/JSON/Validator/Ref.pm       10;"    s
+schema lib/JSON/Validator.pm   180;"   s
+schema lib/JSON/Validator/Ref.pm       11;"    s
+singleton      lib/JSON/Validator.pm   187;"   s
+string lib/JSON/Validator/Joi.pm       77;"    s
+t::Helper      t/Helper.pm     1;"     p
+t::Helper::edj t/Helper.pm     11;"    s
+t::Helper::import      t/Helper.pm     41;"    s
+t::Helper::joi_ok      t/Helper.pm     15;"    s
+t::Helper::jv  t/Helper.pm     27;"    s
+t::Helper::validate_ok t/Helper.pm     29;"    s
+to_string      lib/JSON/Validator/Error.pm     14;"    s
+token  lib/JSON/Validator/Joi.pm       78;"    s
+uppercase      lib/JSON/Validator/Joi.pm       79;"    s
+uri    lib/JSON/Validator/Joi.pm       80;"    s
+validate       lib/JSON/Validator.pm   189;"   s
+validate       lib/JSON/Validator/Joi.pm       82;"    s
+validate_age0  t/stack/Some.pm 5;"     s
+validate_age0  t/stack/Some/Module.pm  4;"     s
+validate_age1  t/stack/Some.pm 6;"     s
+validate_age1  t/stack/Some/Module.pm  5;"     s
+validate_json  lib/JSON/Validator.pm   204;"   s
+validate_ok    t/Helper.pm     29;"    s
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JSON-Validator-3.07/Changes 
new/JSON-Validator-3.08/Changes
--- old/JSON-Validator-3.07/Changes     2019-04-04 18:43:55.000000000 +0200
+++ new/JSON-Validator-3.08/Changes     2019-04-06 10:07:11.000000000 +0200
@@ -1,5 +1,11 @@
 Revision history for perl distribution JSON-Validator
 
+3.08 2019-04-06T15:07:11+0700
+ - Add support for "default" in object definitions #155
+ - Add support for coerce("bool,def,num,str") as alternative to hash
+ - Add support for setting coerce in new()
+ - Deprecated support for coerce(1)
+
 3.07 2019-04-04T23:43:55+0700
  - Fix not leaking file names with bundle()
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JSON-Validator-3.07/MANIFEST 
new/JSON-Validator-3.08/MANIFEST
--- old/JSON-Validator-3.07/MANIFEST    2019-04-04 18:43:56.000000000 +0200
+++ new/JSON-Validator-3.08/MANIFEST    2019-04-06 10:07:12.000000000 +0200
@@ -4,6 +4,7 @@
 .github/PULL_REQUEST_TEMPLATE.md
 .perltidyrc
 .travis.yml
+.vstags
 Changes
 lib/JSON/Validator.pm
 lib/JSON/Validator/cache/10a5eeb37fcd5d829449028f7ceb0774
@@ -26,6 +27,7 @@
 t/acceptance.t
 t/booleans.t
 t/bundle.t
+t/coerce-default.t
 t/coerce.t
 t/deep-mixed-ref.t
 t/definitions/age.json
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JSON-Validator-3.07/META.json 
new/JSON-Validator-3.08/META.json
--- old/JSON-Validator-3.07/META.json   2019-04-04 18:43:56.000000000 +0200
+++ new/JSON-Validator-3.08/META.json   2019-04-06 10:07:12.000000000 +0200
@@ -60,6 +60,6 @@
       },
       "x_IRC" : "irc://irc.freenode.net/#mojo"
    },
-   "version" : "3.07",
+   "version" : "3.08",
    "x_serialization_backend" : "JSON::PP version 2.97001"
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JSON-Validator-3.07/META.yml 
new/JSON-Validator-3.08/META.yml
--- old/JSON-Validator-3.07/META.yml    2019-04-04 18:43:56.000000000 +0200
+++ new/JSON-Validator-3.08/META.yml    2019-04-06 10:07:12.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.07'
+version: '3.08'
 x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JSON-Validator-3.07/lib/JSON/Validator/Joi.pm 
new/JSON-Validator-3.08/lib/JSON/Validator/Joi.pm
--- old/JSON-Validator-3.07/lib/JSON/Validator/Joi.pm   2019-04-04 
18:41:08.000000000 +0200
+++ new/JSON-Validator-3.08/lib/JSON/Validator/Joi.pm   2019-04-06 
05:11:01.000000000 +0200
@@ -1,11 +1,12 @@
 package JSON::Validator::Joi;
 use Mojo::Base -base;
 
-use Exporter 'import';
-use JSON::Validator;
 use Mojo::JSON qw(false true);
 use Mojo::Util;
 
+# Avoid "Subroutine redefined" warnings
+require JSON::Validator;
+
 has enum => sub { +[] };
 has [qw(format max min multiple_of regex)] => undef;
 has type => 'object';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JSON-Validator-3.07/lib/JSON/Validator.pm 
new/JSON-Validator-3.08/lib/JSON/Validator.pm
--- old/JSON-Validator-3.07/lib/JSON/Validator.pm       2019-04-04 
18:43:55.000000000 +0200
+++ new/JSON-Validator-3.08/lib/JSON/Validator.pm       2019-04-06 
10:07:11.000000000 +0200
@@ -24,7 +24,7 @@
 use constant RECURSION_LIMIT   => $ENV{JSON_VALIDATOR_RECURSION_LIMIT} || 100;
 use constant SPECIFICATION_URL => 'http://json-schema.org/draft-04/schema#';
 
-our $VERSION = '3.07';
+our $VERSION = '3.08';
 our @EXPORT_OK = qw(joi validate_json);
 
 # $YAML_LOADER should be considered internal
@@ -37,6 +37,7 @@
   Data::Dumper->new([@_])->Sortkeys(1)->Indent(0)->Maxdepth(2)->Pair(':')
     ->Useqq(1)->Terse(1)->Dump;
 }
+
 sub E { JSON::Validator::Error->new(@_) }
 
 sub S {
@@ -128,12 +129,21 @@
 
 sub coerce {
   my $self = shift;
-  return $self->{coerce} ||= {} unless @_;
-  $self->{coerce}
-    = $_[0] eq '1' ? {booleans => 1, numbers => 1, strings => 1}
-    : ref $_[0]    ? {%{$_[0]}}
-    :                {@_};
-  $self;
+  return $self->{coerce} ||= {} unless defined(my $what = shift);
+
+  if ($what eq '1') {
+    Mojo::Util::deprecated('coerce(1) will be deprecated.');
+    $what = {booleans => 1, numbers => 1, strings => 1};
+  }
+
+  state $short = {bool => 'booleans', def => 'defaults', num => 'numbers',
+    str => 'strings'};
+
+  $what = {map { ($_ => 1) } split /,/, $what} unless ref $what;
+  $self->{coerce} = {};
+  $self->{coerce}{($short->{$_} || $_)} = $what->{$_} for keys %$what;
+
+  return $self;
 }
 
 sub get {
@@ -161,6 +171,12 @@
   $self;
 }
 
+sub new {
+  my $self = shift->SUPER::new(@_);
+  $self->coerce($self->{coerce}) if defined $self->{coerce};
+  return $self;
+}
+
 sub schema {
   my $self = shift;
   return $self->{schema} unless @_;
@@ -318,6 +334,7 @@
   die "[JSON::Validator] YAML::XS 0.67 is missing or could not be loaded."
     unless $YAML_LOADER;
 
+  no warnings 'once';
   local $YAML::XS::Boolean = 'JSON::PP';
   return $visit->($YAML_LOADER->($$text));
 }
@@ -376,15 +393,17 @@
 
 sub _report {
   my $table = Mojo::Util::tablify($_[0]->{report});
-  $table =~ s!^(\W*)(N?OK|<<<)(.*)!{
-    my ($x, $y, $z) = ($1, $2, $3);
-    my $c = $y eq 'OK' ? 'green' : $y eq '<<<' ? 'blue' : 'magenta';
-    $c = "$c bold" if $z =~ /\s\w+Of\s/;
-    Term::ANSIColor::colored([$c], "$x$y$z")
-  }!gme if COLORS;
+  $table =~ s!^(\W*)(N?OK|<<<)(.*)!{_report_colored()}!gme;
   warn "---\n$table";
 }
 
+sub _report_colored {
+  my ($x, $y, $z) = ($1, $2, $3);
+  my $c = $y eq 'OK' ? 'green' : $y eq '<<<' ? 'blue' : 'magenta';
+  $c = "$c bold" if $z =~ /\s\w+Of\s/;
+  Term::ANSIColor::colored([$c], "$x$y$z");
+}
+
 sub _report_errors {
   my ($self, $path, $type, $errors) = @_;
   push @{$self->{report}},
@@ -883,9 +902,13 @@
       : $self->_validate($data, $path, $schema->{then} // {});
   }
 
+  my $coerce_defaults = $self->{coerce}{defaults};
   while (my ($k, $r) = each %{$schema->{properties}}) {
     push @{$rules{$k}}, $r;
+    next unless $coerce_defaults;
+    $data->{$k} = $r->{default} if exists $r->{default} and !exists 
$data->{$k};
   }
+
   while (my ($p, $r) = each %{$schema->{patternProperties} || {}}) {
     push @{$rules{$_}}, $r for sort grep { $_ =~ /$p/ } @dkeys;
   }
@@ -1305,13 +1328,40 @@
 
 =head2 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;
+  my $jv       = $jv->coerce('bool,def,num,str');
+  my $jv       = $jv->coerce('booleans,defaults,numbers,strings');
+  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
-the same as the number C<1>, unless you have coercion enabled.
+the same as the number C<1>, unless you have "numbers" coercion enabled.
+
+=over 2
+
+=item * booleans
+
+Will convert what looks can be interpreted as a boolean to a
+L<JSON::PP::Boolean> object. Note that "foo" is not considered a true value and
+will fail the validation.
+
+=item * defaults
+
+Will copy the default value defined in the schema, into the input structure,
+if the input value is non-existing.
+
+Note that support for "default" is currently EXPERIMENTAL, and enabling this
+might be changed in future versions.
+
+=item * numbers
+
+Will convert strings that looks like numbers, into true numbers. This works for
+both the "integer" and "number" types.
+
+=item * strings
+
+Will convert a number into a string. This works for the "string" type.
+
+=back
 
 Loading a YAML document will enable "booleans" automatically. This feature is
 experimental, but was added since YAML has no real concept of booleans, such
@@ -1333,6 +1383,13 @@
 The argument can also be an array-ref with the different parts of the pointer
 as each elements.
 
+=head2 new
+
+  $jv = JSON::Validator->new(%attributes);
+  $jv = JSON::Validator->new(\%attributes);
+
+Creates a new L<JSON::Validate> object.
+
 =head2 load_and_validate_schema
 
   my $jv = $jv->load_and_validate_schema($schema, \%args);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JSON-Validator-3.07/t/booleans.t 
new/JSON-Validator-3.08/t/booleans.t
--- old/JSON-Validator-3.07/t/booleans.t        2019-04-04 18:41:08.000000000 
+0200
+++ new/JSON-Validator-3.08/t/booleans.t        2019-04-06 10:02:47.000000000 
+0200
@@ -11,7 +11,7 @@
 validate_ok {v => Mojo::JSON->true},  $schema;
 validate_ok {v => Mojo::JSON->false}, $schema;
 
-jv->coerce(booleans => 1);
+jv->coerce('booleans');
 validate_ok {v => !!1},     $schema;
 validate_ok {v => !!0},     $schema;
 validate_ok {v => 'false'}, $schema;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JSON-Validator-3.07/t/coerce-default.t 
new/JSON-Validator-3.08/t/coerce-default.t
--- old/JSON-Validator-3.07/t/coerce-default.t  1970-01-01 01:00:00.000000000 
+0100
+++ new/JSON-Validator-3.08/t/coerce-default.t  2019-04-06 10:02:47.000000000 
+0200
@@ -0,0 +1,40 @@
+use Mojo::Base -strict;
+use JSON::Validator;
+use Mojo::JSON qw(false true);
+use Test::More;
+
+my $jv = JSON::Validator->new(coerce => 'defaults');
+is_deeply($jv->coerce, {defaults => 1}, 'coerce defaults');
+
+$jv->coerce('def');
+is_deeply($jv->coerce, {defaults => 1}, 'coerce def');
+
+$jv->schema({
+  type        => 'object',
+  definitions => {subscribed_to => {type => 'array', default => []}},
+  properties  => {
+    tos           => {type   => 'boolean', default => false},
+    subscribed_to => {'$ref' => '#/definitions/subscribed_to'}
+  },
+});
+
+my $data   = {};
+my @errors = $jv->validate($data);
+is_deeply \@errors, [], 'defaults pass validation';
+is_deeply $data, {tos => false, subscribed_to => []}, 'data was mutated';
+
+$data->{tos} = true;
+@errors = $jv->validate($data);
+is_deeply $data, {tos => true, subscribed_to => []},
+  'only subscribed_to was mutated';
+
+$jv->schema({
+  type       => 'object',
+  properties => {tos => {type => 'boolean', default => 'invalid'}},
+});
+
+@errors = $jv->validate({});
+is $errors[0]{message}, 'Expected boolean - got string.',
+  'default values must be valid';
+
+done_testing;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JSON-Validator-3.07/t/jv-array.t 
new/JSON-Validator-3.08/t/jv-array.t
--- old/JSON-Validator-3.07/t/jv-array.t        2019-02-14 18:22:25.000000000 
+0100
+++ new/JSON-Validator-3.08/t/jv-array.t        2019-04-06 10:02:47.000000000 
+0200
@@ -40,7 +40,7 @@
   E('/0', 'Expected string - got number.'), E('/1', 'Not in enum list: Nope.');
 
 # Make sure all similar numbers gets converted from strings
-my $jv = JSON::Validator->new->coerce(1);
+my $jv = JSON::Validator->new->coerce('numbers');
 my @numbers;
 
 $jv->schema({type => 'array', items => {type => 'number'}});
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JSON-Validator-3.07/t/jv-boolean.t 
new/JSON-Validator-3.08/t/jv-boolean.t
--- old/JSON-Validator-3.07/t/jv-boolean.t      2019-04-04 18:41:08.000000000 
+0200
+++ new/JSON-Validator-3.08/t/jv-boolean.t      2019-04-06 10:02:47.000000000 
+0200
@@ -22,7 +22,7 @@
   E('/', 'Expected boolean - got string.');
 validate_ok undef, {properties => {}}, E('/', 'Expected object - got null.');
 
-jv->coerce(1);
+jv->coerce('bool');
 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.07/t/jv-integer.t 
new/JSON-Validator-3.08/t/jv-integer.t
--- old/JSON-Validator-3.07/t/jv-integer.t      2019-04-04 18:41:08.000000000 
+0200
+++ new/JSON-Validator-3.08/t/jv-integer.t      2019-04-06 10:02:47.000000000 
+0200
@@ -18,7 +18,7 @@
 $schema->{properties}{mynumber}{multipleOf} = 2;
 validate_ok {mynumber => 3}, $schema, E('/mynumber', 'Not multiple of 2.');
 
-jv->coerce(numbers => 1);
+jv->coerce('num');
 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.07/t/jv-number.t 
new/JSON-Validator-3.08/t/jv-number.t
--- old/JSON-Validator-3.07/t/jv-number.t       2019-04-04 18:41:08.000000000 
+0200
+++ new/JSON-Validator-3.08/t/jv-number.t       2019-04-06 10:02:47.000000000 
+0200
@@ -11,7 +11,7 @@
 validate_ok {mynumber => '2'}, $schema,
   E('/mynumber', 'Expected number - got string.');
 
-jv->coerce(numbers => 1);
+jv->coerce('numbers');
 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.07/t/jv-string.t 
new/JSON-Validator-3.08/t/jv-string.t
--- old/JSON-Validator-3.07/t/jv-string.t       2019-04-04 18:41:08.000000000 
+0200
+++ new/JSON-Validator-3.08/t/jv-string.t       2019-04-06 10:02:47.000000000 
+0200
@@ -24,7 +24,7 @@
 delete $schema->{properties}{nick}{pattern};
 validate_ok {nick => 'Déjà vu'}, $schema;
 
-jv->coerce(1);
+jv->coerce('str');
 validate_ok {nick => 1000}, $schema;
 
 # https://github.com/mojolicious/json-validator/issues/134


Reply via email to