zigorou/perl-JSV — pull request #28 by tanaka-tatsuya (2014-06-09 05:51:33+00:00)
Title: Fix loose mode

loose_type オプションを付けた際に、数値扱いを期待されている文字列（"1"など）に対するバリデーションがスルーされてしまう件に対応しました。

```perl
use JSV::Validator;
use JSON;
use Test::More

my $test = JSON::decode_json('
"schema": { "maximum": 0 },
"target": "1"
');

is( JSV::Validator->new( environment => "draft4" )->validate(@$test{qw/ schema target /}), 0, "should be false" )
# returns => 1
```

* 適用するkeywordsの振り分け時のみloose_typeを気にする方針で書いてます（差分少なくなりそうなので）
* 文字列が数値として判定されると 数値系keywordsのみ適用され、文字列系のkeywordsがスルーされてしまうので適用の判定を二回行うようにしました
* 結果maxLength,minLengthの本来仕様である「string以外には適用しない」を満たせなくなったのでテストをskipしました
* この辺解決しようとすると、各keyword側で通常時とloose mode時の挙動を振り返る必要があるかもしれないです。