rschema 0.1.0 → 0.2.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 +13 -12
- data/lib/rschema.rb +16 -2
- data/lib/rschema/version.rb +1 -1
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 795f0dd37dcc401fea7ff046c45d0ff3d80c033f
|
4
|
+
data.tar.gz: 714901909ddda803bbe48b334985792e5e7e1498
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c1c2cb7fd88e82014f772610481550d9bd97c9134edd3899d0798ec4d67bbcf5eaa9f474b4114d20a9ca22d620b1d7a69b3743e6e10a6310267134eb093b42d7
|
7
|
+
data.tar.gz: 1c1987c9651e704228723d0c2765e9655589f94d180c64afc3cf4923383adf05be6c2e1beb246fab15dc650c544d75dc062e7e52c7308b7c44a978021c011983
|
data/README.md
CHANGED
@@ -135,26 +135,27 @@ Other Schema Types
|
|
135
135
|
RSchema provides a few other schema types through its DSL:
|
136
136
|
|
137
137
|
```ruby
|
138
|
-
#
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
RSchema.validate!(predicate_schema, 4) # ok
|
143
|
-
RSchema.validate!(predicate_schema, 5) # !!! raises RSchema::ValidationError !!!
|
138
|
+
# boolean
|
139
|
+
boolean_schema = RSchema.schema{ boolean }
|
140
|
+
RSchema.validate!(boolean_schema, false) # ok
|
141
|
+
RSchema.validate!(boolean_schema, nil) # !!! raises RSchema::ValidationError !!!
|
144
142
|
|
145
143
|
# maybe
|
146
|
-
maybe_schema = RSchema.schema
|
147
|
-
maybe(Integer)
|
148
|
-
end
|
144
|
+
maybe_schema = RSchema.schema{ maybe(Integer) }
|
149
145
|
RSchema.validate!(maybe_schema, 5) # ok
|
150
146
|
RSchema.validate!(maybe_schema, nil) # ok
|
151
147
|
|
152
148
|
# enum
|
153
|
-
enum_schema = RSchema.schema
|
154
|
-
enum([:a, :b, :c])
|
155
|
-
end
|
149
|
+
enum_schema = RSchema.schema{ enum([:a, :b, :c]) }
|
156
150
|
RSchema.validate!(enum_schema, :a) # ok
|
157
151
|
RSchema.validate!(enum_schema, :z) # !!! raises RSchema::ValidationError !!!
|
152
|
+
|
153
|
+
# predicate
|
154
|
+
predicate_schema = RSchema.schema do
|
155
|
+
predicate('even') { |x| x.even? }
|
156
|
+
end
|
157
|
+
RSchema.validate!(predicate_schema, 4) # ok
|
158
|
+
RSchema.validate!(predicate_schema, 5) # !!! raises RSchema::ValidationError !!!
|
158
159
|
```
|
159
160
|
|
160
161
|
Coercion
|
data/lib/rschema.rb
CHANGED
@@ -81,6 +81,10 @@ module RSchema
|
|
81
81
|
raise InvalidSchemaError unless possible_values && possible_values.size > 0
|
82
82
|
EnumSchema.new(Set.new(possible_values), subschema)
|
83
83
|
end
|
84
|
+
|
85
|
+
def self.boolean
|
86
|
+
BooleanSchema
|
87
|
+
end
|
84
88
|
end
|
85
89
|
|
86
90
|
module CoercionMapper
|
@@ -161,7 +165,7 @@ module RSchema
|
|
161
165
|
|
162
166
|
value.reduce(Set.new) do |accum, subvalue|
|
163
167
|
subvalue_walked, error = RSchema.walk(subschema, subvalue, mapper)
|
164
|
-
break RSchema::ErrorDetails.new(Set.new([error.details])) if error
|
168
|
+
break RSchema::ErrorDetails.new(Set.new([error.details + ": " + subvalue.to_s])) if error
|
165
169
|
|
166
170
|
accum << subvalue_walked
|
167
171
|
accum
|
@@ -207,6 +211,16 @@ module RSchema
|
|
207
211
|
end
|
208
212
|
end
|
209
213
|
end
|
214
|
+
|
215
|
+
module BooleanSchema
|
216
|
+
def self.schema_walk(value, mapper)
|
217
|
+
if value.is_a?(TrueClass) || value.is_a?(FalseClass)
|
218
|
+
value
|
219
|
+
else
|
220
|
+
RSchema::ErrorDetails.new('is not a boolean')
|
221
|
+
end
|
222
|
+
end
|
223
|
+
end
|
210
224
|
end
|
211
225
|
|
212
226
|
class Class
|
@@ -214,7 +228,7 @@ class Class
|
|
214
228
|
if value.is_a?(self)
|
215
229
|
value
|
216
230
|
else
|
217
|
-
RSchema::ErrorDetails.new("is not a #{self}")
|
231
|
+
RSchema::ErrorDetails.new("is not a #{self.name}, is a #{value.class.name}")
|
218
232
|
end
|
219
233
|
end
|
220
234
|
end
|
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: 0.
|
4
|
+
version: 0.2.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-
|
11
|
+
date: 2015-02-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
description: |2
|
42
56
|
Schema-based validation and coercion for Ruby data structures. Heavily inspired
|
43
57
|
by (read: stolen from) [Prismatic/schema][] for Clojure.
|
@@ -72,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
72
86
|
version: '0'
|
73
87
|
requirements: []
|
74
88
|
rubyforge_project:
|
75
|
-
rubygems_version: 2.
|
89
|
+
rubygems_version: 2.2.2
|
76
90
|
signing_key:
|
77
91
|
specification_version: 4
|
78
92
|
summary: Schema-based validation and coercion for Ruby data structures
|