rschema 1.2.0 → 1.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/README.md +7 -0
- data/lib/rschema.rb +52 -0
- data/lib/rschema/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 785a03d7de9b32d33c75f995a340033e2c1069ae
|
4
|
+
data.tar.gz: 0f8a1b61d5cad21d87d9e63c1ef2d16aed001a04
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 636119b1f39a6dd4ab14519cb3d4ae618ca6f160f8f9157289ca659b3fcf6658731403af552a3bdf95d33b7329e7eec4dd5abe64342a2a49e039b6652d9767af
|
7
|
+
data.tar.gz: ce417296490b927ccbf2dff637effae71d8a05a50bba5653325b28a55fbdd88af84af39c3beddae21515a4c7f6b1b59701e3a4a51df8cbcf7bfd6fd204211665
|
data/README.md
CHANGED
@@ -198,6 +198,13 @@ RSchema.validate(any_schema, true) #=> true
|
|
198
198
|
RSchema.validate(any_schema, false) #=> true
|
199
199
|
RSchema.validate(any_schema, nil) #=> true
|
200
200
|
|
201
|
+
# either
|
202
|
+
either_schema = RSchema.schema{ either(String, Integer, Float) }
|
203
|
+
RSchema.validate(either_schema, 'hi') #=> true
|
204
|
+
RSchema.validate(either_schema, 5555) #=> true
|
205
|
+
RSchema.validate(either_schema, 77.1) #=> true
|
206
|
+
RSchema.validate(either_schema, nil) #=> false
|
207
|
+
|
201
208
|
# maybe
|
202
209
|
maybe_schema = RSchema.schema{ maybe(Integer) }
|
203
210
|
RSchema.validate(maybe_schema, 5) #=> true
|
data/lib/rschema.rb
CHANGED
@@ -106,6 +106,13 @@ module RSchema
|
|
106
106
|
def any
|
107
107
|
AnySchema
|
108
108
|
end
|
109
|
+
|
110
|
+
def either(*subschemas)
|
111
|
+
unless subschemas.size > 1
|
112
|
+
raise InvalidSchemaError, 'EitherSchema requires two or more alternatives'
|
113
|
+
end
|
114
|
+
EitherSchema.new(subschemas)
|
115
|
+
end
|
109
116
|
end
|
110
117
|
extend Base
|
111
118
|
end
|
@@ -180,6 +187,10 @@ module RSchema
|
|
180
187
|
accum
|
181
188
|
end
|
182
189
|
end
|
190
|
+
|
191
|
+
def inspect
|
192
|
+
"hash_of(#{key_subschema.inspect} => #{value_subschema.inspect})"
|
193
|
+
end
|
183
194
|
end
|
184
195
|
|
185
196
|
GenericSetSchema = Struct.new(:subschema) do
|
@@ -194,6 +205,10 @@ module RSchema
|
|
194
205
|
accum
|
195
206
|
end
|
196
207
|
end
|
208
|
+
|
209
|
+
def inspect
|
210
|
+
"set_of(#{subschema.inspect})"
|
211
|
+
end
|
197
212
|
end
|
198
213
|
|
199
214
|
PredicateSchema = Struct.new(:name, :block) do
|
@@ -204,6 +219,10 @@ module RSchema
|
|
204
219
|
RSchema::ErrorDetails.new(value, 'fails predicate' + (name ? ": #{name}" : ''))
|
205
220
|
end
|
206
221
|
end
|
222
|
+
|
223
|
+
def inspect
|
224
|
+
'predicate' + (name ? "(#{name.inspect})" : '')
|
225
|
+
end
|
207
226
|
end
|
208
227
|
|
209
228
|
MaybeSchema = Struct.new(:subschema) do
|
@@ -215,6 +234,10 @@ module RSchema
|
|
215
234
|
error || subvalue_walked
|
216
235
|
end
|
217
236
|
end
|
237
|
+
|
238
|
+
def inspect
|
239
|
+
"maybe(#{subschema.inspect})"
|
240
|
+
end
|
218
241
|
end
|
219
242
|
|
220
243
|
EnumSchema = Struct.new(:value_set, :subschema) do
|
@@ -233,6 +256,27 @@ module RSchema
|
|
233
256
|
RSchema::ErrorDetails.new(value_walked, "is not a valid enum member")
|
234
257
|
end
|
235
258
|
end
|
259
|
+
|
260
|
+
def inspect
|
261
|
+
"enum(#{value_set.inspect}" +
|
262
|
+
(subschema ? ", #{subschema.inspect}" : '') +
|
263
|
+
')'
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
EitherSchema = Struct.new(:alternatives) do
|
268
|
+
def schema_walk(value, mapper)
|
269
|
+
alternatives.each do |subschema|
|
270
|
+
v, error = RSchema.walk(subschema, value, mapper)
|
271
|
+
return v if error.nil?
|
272
|
+
end
|
273
|
+
|
274
|
+
RSchema::ErrorDetails.new(value, "matches none of #{alternatives.inspect}")
|
275
|
+
end
|
276
|
+
|
277
|
+
def inspect
|
278
|
+
"either(#{alternatives.map(&:inspect).join(', ')})"
|
279
|
+
end
|
236
280
|
end
|
237
281
|
|
238
282
|
module BooleanSchema
|
@@ -243,12 +287,20 @@ module RSchema
|
|
243
287
|
RSchema::ErrorDetails.new(value, 'is not a boolean')
|
244
288
|
end
|
245
289
|
end
|
290
|
+
|
291
|
+
def self.inspect
|
292
|
+
'boolean'
|
293
|
+
end
|
246
294
|
end
|
247
295
|
|
248
296
|
module AnySchema
|
249
297
|
def self.schema_walk(value, mapper)
|
250
298
|
value
|
251
299
|
end
|
300
|
+
|
301
|
+
def self.inspect
|
302
|
+
'any'
|
303
|
+
end
|
252
304
|
end
|
253
305
|
end
|
254
306
|
|
data/lib/rschema/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rschema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Dalling
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|