nakischema 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/nakischema.rb +25 -13
- data/nakischema.gemspec +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 63a4f15494ac50f198c795a569e50304326cbb309e5a30bd0b0446c702da5212
|
4
|
+
data.tar.gz: a20e6a51a422b271b1bb98d5f4be387bd3aa89fa8dc1ac5e8701b3376bd6ba82
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e702f55dffb989ae23ab8c0b9b4d0ad2fc2fdf7f1da3e1b90528b3c370c7bd39409fc49d844e65b2d13a1174c153c8f8dab1d17950c3981757d5f680477b7b8
|
7
|
+
data.tar.gz: 5ae028759edb1366dce9203a6cc68c15e23875efaa2ac47dcb3432fc1324ad08badb2d21772fe069735f64d3127063b4703598f41abfc163d6207a509f6636de
|
data/lib/nakischema.rb
CHANGED
@@ -7,11 +7,11 @@ module Nakischema
|
|
7
7
|
end
|
8
8
|
# TODO: maybe move '(at ...)' to the beginning
|
9
9
|
case schema
|
10
|
-
when NilClass, TrueClass, FalseClass, String, Symbol ; raise_with_path.call "expected #{schema.inspect} != #{object.inspect}" unless schema
|
10
|
+
when NilClass, TrueClass, FalseClass, String, Symbol ; raise_with_path.call "expected #{schema.inspect} != #{object.inspect}" unless schema === object
|
11
11
|
# TODO: maybe deprecate the NilClass, TrueClass, FalseClass since they can be asserted via the next case branch
|
12
12
|
when Class ; raise_with_path.call "expected #{schema } != #{object.class }" unless schema === object
|
13
13
|
when Regexp ; raise_with_path.call "expected #{schema } != #{object.inspect}" unless schema === object
|
14
|
-
when Range ; raise_with_path.call "expected #{schema } != #{object
|
14
|
+
when Range ; raise_with_path.call "expected #{schema } != #{object.inspect}" unless schema.include? object
|
15
15
|
when Hash
|
16
16
|
raise_with_path.call "expected Hash != #{object.class}" unless object.is_a? Hash unless (schema.keys & %i{ keys each_key each_value }).empty?
|
17
17
|
raise_with_path.call "expected Array != #{object.class}" unless object.is_a? Array unless (schema.keys & %i{ size }).empty? # TODO: maybe allow Hash object?
|
@@ -86,6 +86,13 @@ module Nakischema
|
|
86
86
|
end
|
87
87
|
end
|
88
88
|
|
89
|
+
def self.valid? object, schema
|
90
|
+
validate object, schema
|
91
|
+
true
|
92
|
+
rescue Error
|
93
|
+
false
|
94
|
+
end
|
95
|
+
|
89
96
|
def self.validate_oga_xml object, schema, path = []
|
90
97
|
raise_with_path = lambda do |msg, _path = path|
|
91
98
|
raise Error.new "#{msg}#{" (at #{_path})" unless _path.empty?}"
|
@@ -141,31 +148,36 @@ module Nakischema
|
|
141
148
|
end
|
142
149
|
end
|
143
150
|
|
144
|
-
def self.fixture _
|
151
|
+
def self.fixture _, no_shuffle = false
|
145
152
|
require "regexp-examples"
|
146
153
|
require "addressable"
|
147
154
|
case _
|
155
|
+
when NilClass ; nil
|
148
156
|
when Hash
|
149
157
|
case _.keys
|
150
|
-
when %i{ hash } ; _[:hash ].map{ |k,v| [k,fixture(v)] }.shuffle.to_h
|
151
|
-
when %i{ hash_req } ; [*_[:hash_req].map{ |k,v| [k,fixture(v)] }, ["foo","bar"]].shuffle.to_h # TODO: assert no collision
|
152
|
-
when %i{ size each } ; Array.new(
|
158
|
+
when %i{ hash } ; _[:hash ].map{ |k,v| [k,fixture(v,no_shuffle)] } .then{ |_| no_shuffle ? _ : _.shuffle }.to_h
|
159
|
+
when %i{ hash_req } ; [*_[:hash_req].map{ |k,v| [k,fixture(v,no_shuffle)] }, ["foo","bar"]].then{ |_| no_shuffle ? _ : _.shuffle }.to_h # TODO: assert no collision
|
160
|
+
when %i{ size each } ; Array.new(_[:size].max){ fixture _[:each], no_shuffle }
|
153
161
|
else ; fail _.keys.inspect
|
154
162
|
end
|
155
|
-
when Array ; [Array] == _.map(&:class) ? _[0].map
|
163
|
+
when Array ; [Array] == _.map(&:class) ? _[0].map{ |_| fixture _, no_shuffle } : fixture(_.sample, no_shuffle)
|
156
164
|
when Regexp
|
157
|
-
|
158
|
-
|
159
|
-
URI t
|
165
|
+
begin
|
166
|
+
URI(t = _.random_example)
|
160
167
|
rescue URI::InvalidURIError
|
161
|
-
|
162
|
-
|
163
|
-
|
168
|
+
begin
|
169
|
+
URI Addressable::URI.escape t
|
170
|
+
rescue Addressable::URI::InvalidURIError
|
171
|
+
t
|
172
|
+
end
|
173
|
+
end.to_s
|
164
174
|
when Range ; rand _
|
165
175
|
when String ; _
|
176
|
+
when TrueClass ; true
|
166
177
|
when Class
|
167
178
|
case _.name
|
168
179
|
when "Integer" ; -rand(1000000)
|
180
|
+
when "String" ; SecureRandom.random_bytes(1000).force_encoding("utf-8").scrub
|
169
181
|
when "Hash" ; {}
|
170
182
|
else ; fail "bad fixture node class name: #{_.name}"
|
171
183
|
end
|
data/nakischema.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = "nakischema"
|
3
|
-
spec.version = "0.
|
3
|
+
spec.version = "0.3.0"
|
4
4
|
spec.summary = "compact yet powerful arbitrary nested objects validator"
|
5
5
|
spec.description = "The most compact yet powerful arbitrary nested objects validator. Especially handy to validate JSONs."
|
6
6
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nakischema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Victor Maslov aka Nakilon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: regexp-examples
|