rschema 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +13 -12
  3. data/lib/rschema.rb +16 -2
  4. data/lib/rschema/version.rb +1 -1
  5. metadata +17 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 662ddf40b94f44cf6f4bc714fe44346621974aa8
4
- data.tar.gz: 03728273b1dec3e5cf5ed7be62bd5e59a6d1a299
3
+ metadata.gz: 795f0dd37dcc401fea7ff046c45d0ff3d80c033f
4
+ data.tar.gz: 714901909ddda803bbe48b334985792e5e7e1498
5
5
  SHA512:
6
- metadata.gz: dec3b9214d875a3f0f1673fd4f230e007c3f330750d10fd436c51a912385212edd909eb102e125722090350ff8cc1bba695e28bd6bb040e8cbae8fa2f71c77e3
7
- data.tar.gz: 5d422ebd5d992205ce437b20233a8575b5cc0f2e8a69d0ab23f74b55ca7292316c1ddfb0ba709f8d1b6a43e259067c9dd045f3c1d2b1106baf9001dccd221724
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
- # predicate
139
- predicate_schema = RSchema.schema do
140
- predicate('even') { |x| x.even? }
141
- end
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 do
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 do
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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module RSchema
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.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: 0.1.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-01-09 00:00:00.000000000 Z
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.4.4
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