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.
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