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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 29be05f4beeb1a5f7113f78d3080284a60ff08b5
4
- data.tar.gz: f4bc95c00632d5133ce9e78c90cf8b599b4a4cd5
3
+ metadata.gz: 785a03d7de9b32d33c75f995a340033e2c1069ae
4
+ data.tar.gz: 0f8a1b61d5cad21d87d9e63c1ef2d16aed001a04
5
5
  SHA512:
6
- metadata.gz: 3711949f194d8fd3f2791c83ca71cf5d9dc11618af52aa3d9168fa65899db48d40849201ebede66992775b5db2c7dfb730864501a114c2b2e9cd528d91259d96
7
- data.tar.gz: a7c3f7815d70423d3ed6c98841f1473607350d26798f313d02eb1dece212a1cf6cc6172878b46c18e1598ec72748cf08e1caa94bf1cefaef4d98ab35e0e7c4bd
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
@@ -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
 
@@ -1,3 +1,3 @@
1
1
  module RSchema
2
- VERSION = '1.2.0'
2
+ VERSION = '1.3.0'
3
3
  end
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.2.0
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-29 00:00:00.000000000 Z
11
+ date: 2015-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec