rack-schema 0.5.0 → 0.6.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 +7 -0
- data/.travis.yml +12 -0
- data/README.md +22 -1
- data/lib/rack/schema.rb +1 -1
- data/lib/rack/schema/version.rb +1 -1
- data/rack-schema.gemspec +12 -11
- data/spec/spec_helper.rb +11 -7
- metadata +65 -75
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 53591af2759368c6abc7b28b93449e3854234b3c
|
4
|
+
data.tar.gz: 5d5a7b8a1440fc827c33c07f7dfa141b0b873082
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e0098ccca22120e338ffbcb1614e49b015fdaaa2707fe19670e9a1f052fbaba3d1d755e10111daa2e4f7f6181d0a6a601e6946b6eba313aef7f0a7834a8d1835
|
7
|
+
data.tar.gz: a31449f6fc8c11182782d0ecbf2f07ebf88ffae437a9737f2cafa87998234c79b4f4c7c7cb2d59d1b5357ec97bb91d32bf1e553e4ad3eab28ad755bb2341744d
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Rack::Schema
|
2
2
|
|
3
|
+
[](http://badge.fury.io/rb/rack-schema)
|
4
|
+
[](https://travis-ci.org/pd/rack-schema)
|
5
|
+
[](https://gemnasium.com/pd/rack-schema)
|
6
|
+
[](https://codeclimate.com/github/pd/rack-schema)
|
7
|
+
[](https://coveralls.io/r/pd/rack-schema?branch=master)
|
8
|
+
|
3
9
|
Validate your application's responses against [JSON Schemas][json-schema].
|
4
10
|
|
5
11
|
## Installation
|
@@ -65,6 +71,8 @@ all be used to validate the response:
|
|
65
71
|
<http://example.com/schemas/score>; rel="describedby"; anchor="#/score"
|
66
72
|
|
67
73
|
## Configuration
|
74
|
+
|
75
|
+
### Validate Schemas
|
68
76
|
By default, `rack-schema` will also instruct the validator to validate
|
69
77
|
your schema itself *as* a schema. To disable that behavior:
|
70
78
|
|
@@ -72,9 +80,10 @@ your schema itself *as* a schema. To disable that behavior:
|
|
72
80
|
use Rack::Schema, validate_schemas: false
|
73
81
|
~~~~
|
74
82
|
|
83
|
+
### Swallow Links
|
75
84
|
If you are running the `rack-schema` response validator in a
|
76
85
|
production environment -- which you probably *shouldn't* be doing --
|
77
|
-
you don't want to actually expose the `describedby` link header
|
86
|
+
and you don't want to actually expose the `describedby` link header
|
78
87
|
entries to the world, you can tell `rack-schema` to remove them from
|
79
88
|
the responses after using them:
|
80
89
|
|
@@ -85,6 +94,18 @@ use Rack::Schema, swallow_links: true
|
|
85
94
|
With `swallow_links` on, only the *describedby* links will be removed;
|
86
95
|
your pagination or similar links will not be disturbed.
|
87
96
|
|
97
|
+
### Error Handler
|
98
|
+
By default, `rack-schema` will raise a `ValidationError` if it encounters
|
99
|
+
any errors in your response JSON. If that's not your bag, you can define
|
100
|
+
a different error handler by providing a block:
|
101
|
+
|
102
|
+
~~~ruby
|
103
|
+
use Rack::Schema do |errors, env, (status, headers, body)|
|
104
|
+
# Preferably, use a less useless error message.
|
105
|
+
my_logger.warn("JSON response did not match schema!")
|
106
|
+
end
|
107
|
+
~~~
|
108
|
+
|
88
109
|
|
89
110
|
## Potential Features?
|
90
111
|
|
data/lib/rack/schema.rb
CHANGED
@@ -72,7 +72,7 @@ module Rack
|
|
72
72
|
return flat if anchor.nil? || anchor == '#' || anchor == '#/'
|
73
73
|
|
74
74
|
fragments = anchor.sub(/\A#\//, '').split('/')
|
75
|
-
fragments.reduce MultiJson.
|
75
|
+
fragments.reduce MultiJson.decode(flat) do |value, fragment|
|
76
76
|
case value
|
77
77
|
when Hash then value.fetch(fragment, nil)
|
78
78
|
when Array then value.fetch(fragment.to_i, nil)
|
data/lib/rack/schema/version.rb
CHANGED
data/rack-schema.gemspec
CHANGED
@@ -18,16 +18,17 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency "rack"
|
22
|
-
spec.add_dependency "multi_json"
|
23
|
-
spec.add_dependency "json-schema"
|
24
|
-
spec.add_dependency "link_header"
|
21
|
+
spec.add_dependency "rack", "~> 1.5"
|
22
|
+
spec.add_dependency "multi_json", "~> 1.10"
|
23
|
+
spec.add_dependency "json-schema", "~> 2.0"
|
24
|
+
spec.add_dependency "link_header", "~> 0.0.8"
|
25
25
|
|
26
|
-
spec.add_development_dependency "bundler", "~> 1.
|
27
|
-
spec.add_development_dependency "
|
28
|
-
spec.add_development_dependency "rake"
|
29
|
-
spec.add_development_dependency "rack-test"
|
30
|
-
spec.add_development_dependency "rspec"
|
31
|
-
spec.add_development_dependency "
|
32
|
-
spec.add_development_dependency "
|
26
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
27
|
+
spec.add_development_dependency "json", "> 0"
|
28
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
29
|
+
spec.add_development_dependency "rack-test", "~> 0.6"
|
30
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
31
|
+
spec.add_development_dependency "pry", "~> 0.10"
|
32
|
+
spec.add_development_dependency "simplecov", "~> 0.7.0"
|
33
|
+
spec.add_development_dependency "coveralls", "> 0"
|
33
34
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,18 +1,22 @@
|
|
1
1
|
require 'bundler/setup'
|
2
2
|
|
3
3
|
require 'simplecov'
|
4
|
-
|
4
|
+
require 'coveralls'
|
5
|
+
|
6
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
7
|
+
Coveralls::SimpleCov::Formatter,
|
8
|
+
SimpleCov::Formatter::HTMLFormatter,
|
9
|
+
]
|
10
|
+
|
11
|
+
SimpleCov.start do
|
12
|
+
add_filter "/spec/"
|
13
|
+
end
|
5
14
|
|
6
15
|
require 'rspec'
|
7
16
|
require 'rack/test'
|
8
17
|
require 'rack/schema'
|
9
|
-
require 'pry'
|
10
|
-
|
11
|
-
# `json' needs to be here because simplecov assumes that if
|
12
|
-
# ::JSON is defined, it means we have ruby's JSON loaded; otherwise,
|
13
|
-
# they use MultiJson. silly.
|
14
|
-
require "oj"
|
15
18
|
require "json"
|
19
|
+
require 'pry'
|
16
20
|
|
17
21
|
module SpecHelpers
|
18
22
|
def echo(headers, body, status = 200)
|
metadata
CHANGED
@@ -1,190 +1,181 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-schema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.6.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Kyle Hargraves
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-07-19 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rack
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: '
|
19
|
+
version: '1.5'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
26
|
+
version: '1.5'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: multi_json
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - "~>"
|
36
32
|
- !ruby/object:Gem::Version
|
37
|
-
version: '
|
33
|
+
version: '1.10'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - "~>"
|
44
39
|
- !ruby/object:Gem::Version
|
45
|
-
version: '
|
40
|
+
version: '1.10'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: json-schema
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - "~>"
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version: '0'
|
47
|
+
version: '2.0'
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - "~>"
|
60
53
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
54
|
+
version: '2.0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: link_header
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - "~>"
|
68
60
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
61
|
+
version: 0.0.8
|
70
62
|
type: :runtime
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - "~>"
|
76
67
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
68
|
+
version: 0.0.8
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: bundler
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- - ~>
|
73
|
+
- - "~>"
|
84
74
|
- !ruby/object:Gem::Version
|
85
|
-
version: '1.
|
75
|
+
version: '1.6'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- - ~>
|
80
|
+
- - "~>"
|
92
81
|
- !ruby/object:Gem::Version
|
93
|
-
version: '1.
|
82
|
+
version: '1.6'
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
|
-
name:
|
84
|
+
name: json
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
|
-
- -
|
87
|
+
- - ">"
|
100
88
|
- !ruby/object:Gem::Version
|
101
89
|
version: '0'
|
102
90
|
type: :development
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
|
-
- -
|
94
|
+
- - ">"
|
108
95
|
- !ruby/object:Gem::Version
|
109
96
|
version: '0'
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: rake
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
|
-
- -
|
101
|
+
- - "~>"
|
116
102
|
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
103
|
+
version: '10.0'
|
118
104
|
type: :development
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
107
|
requirements:
|
123
|
-
- -
|
108
|
+
- - "~>"
|
124
109
|
- !ruby/object:Gem::Version
|
125
|
-
version: '0'
|
110
|
+
version: '10.0'
|
126
111
|
- !ruby/object:Gem::Dependency
|
127
112
|
name: rack-test
|
128
113
|
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
114
|
requirements:
|
131
|
-
- -
|
115
|
+
- - "~>"
|
132
116
|
- !ruby/object:Gem::Version
|
133
|
-
version: '0'
|
117
|
+
version: '0.6'
|
134
118
|
type: :development
|
135
119
|
prerelease: false
|
136
120
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
121
|
requirements:
|
139
|
-
- -
|
122
|
+
- - "~>"
|
140
123
|
- !ruby/object:Gem::Version
|
141
|
-
version: '0'
|
124
|
+
version: '0.6'
|
142
125
|
- !ruby/object:Gem::Dependency
|
143
126
|
name: rspec
|
144
127
|
requirement: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
128
|
requirements:
|
147
|
-
- -
|
129
|
+
- - "~>"
|
148
130
|
- !ruby/object:Gem::Version
|
149
|
-
version: '0'
|
131
|
+
version: '3.0'
|
150
132
|
type: :development
|
151
133
|
prerelease: false
|
152
134
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
135
|
requirements:
|
155
|
-
- -
|
136
|
+
- - "~>"
|
156
137
|
- !ruby/object:Gem::Version
|
157
|
-
version: '0'
|
138
|
+
version: '3.0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: pry
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0.10'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0.10'
|
158
153
|
- !ruby/object:Gem::Dependency
|
159
154
|
name: simplecov
|
160
155
|
requirement: !ruby/object:Gem::Requirement
|
161
|
-
none: false
|
162
156
|
requirements:
|
163
|
-
- -
|
157
|
+
- - "~>"
|
164
158
|
- !ruby/object:Gem::Version
|
165
|
-
version:
|
159
|
+
version: 0.7.0
|
166
160
|
type: :development
|
167
161
|
prerelease: false
|
168
162
|
version_requirements: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
163
|
requirements:
|
171
|
-
- -
|
164
|
+
- - "~>"
|
172
165
|
- !ruby/object:Gem::Version
|
173
|
-
version:
|
166
|
+
version: 0.7.0
|
174
167
|
- !ruby/object:Gem::Dependency
|
175
|
-
name:
|
168
|
+
name: coveralls
|
176
169
|
requirement: !ruby/object:Gem::Requirement
|
177
|
-
none: false
|
178
170
|
requirements:
|
179
|
-
- -
|
171
|
+
- - ">"
|
180
172
|
- !ruby/object:Gem::Version
|
181
173
|
version: '0'
|
182
174
|
type: :development
|
183
175
|
prerelease: false
|
184
176
|
version_requirements: !ruby/object:Gem::Requirement
|
185
|
-
none: false
|
186
177
|
requirements:
|
187
|
-
- -
|
178
|
+
- - ">"
|
188
179
|
- !ruby/object:Gem::Version
|
189
180
|
version: '0'
|
190
181
|
description: Validate rack responses against schema named in the Link header
|
@@ -194,7 +185,8 @@ executables: []
|
|
194
185
|
extensions: []
|
195
186
|
extra_rdoc_files: []
|
196
187
|
files:
|
197
|
-
- .gitignore
|
188
|
+
- ".gitignore"
|
189
|
+
- ".travis.yml"
|
198
190
|
- Gemfile
|
199
191
|
- LICENSE.txt
|
200
192
|
- README.md
|
@@ -212,27 +204,26 @@ files:
|
|
212
204
|
homepage: http://github.com/pd/rack-schema
|
213
205
|
licenses:
|
214
206
|
- MIT
|
207
|
+
metadata: {}
|
215
208
|
post_install_message:
|
216
209
|
rdoc_options: []
|
217
210
|
require_paths:
|
218
211
|
- lib
|
219
212
|
required_ruby_version: !ruby/object:Gem::Requirement
|
220
|
-
none: false
|
221
213
|
requirements:
|
222
|
-
- -
|
214
|
+
- - ">="
|
223
215
|
- !ruby/object:Gem::Version
|
224
216
|
version: '0'
|
225
217
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
226
|
-
none: false
|
227
218
|
requirements:
|
228
|
-
- -
|
219
|
+
- - ">="
|
229
220
|
- !ruby/object:Gem::Version
|
230
221
|
version: '0'
|
231
222
|
requirements: []
|
232
223
|
rubyforge_project:
|
233
|
-
rubygems_version:
|
224
|
+
rubygems_version: 2.2.0
|
234
225
|
signing_key:
|
235
|
-
specification_version:
|
226
|
+
specification_version: 4
|
236
227
|
summary: Allows you to strictly validate each of your application's API responses
|
237
228
|
against a declared JSON schema.
|
238
229
|
test_files:
|
@@ -243,4 +234,3 @@ test_files:
|
|
243
234
|
- spec/schemas/response.json
|
244
235
|
- spec/schemas/widget.json
|
245
236
|
- spec/spec_helper.rb
|
246
|
-
has_rdoc:
|