rschema 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
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