rack-schema 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,12 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ - 2.1
6
+ - ruby-head
7
+ - jruby
8
+ - rbx-2
9
+
10
+ matrix:
11
+ allow_failures:
12
+ - rvm: rbx-2
data/README.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Rack::Schema
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/rack-schema.svg)](http://badge.fury.io/rb/rack-schema)
4
+ [![Build Status](https://travis-ci.org/pd/rack-schema.svg?branch=master)](https://travis-ci.org/pd/rack-schema)
5
+ [![Dependency Status](https://gemnasium.com/pd/rack-schema.svg)](https://gemnasium.com/pd/rack-schema)
6
+ [![Code Climate](https://codeclimate.com/github/pd/rack-schema.png)](https://codeclimate.com/github/pd/rack-schema)
7
+ [![Coverage Status](https://img.shields.io/coveralls/pd/rack-schema.svg)](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.load(flat) do |value, fragment|
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)
@@ -1,5 +1,5 @@
1
1
  module Rack
2
2
  class Schema
3
- VERSION = "0.5.0"
3
+ VERSION = "0.6.0"
4
4
  end
5
5
  end
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.3"
27
- spec.add_development_dependency "oj"
28
- spec.add_development_dependency "rake"
29
- spec.add_development_dependency "rack-test"
30
- spec.add_development_dependency "rspec"
31
- spec.add_development_dependency "simplecov"
32
- spec.add_development_dependency "pry"
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
- SimpleCov.start
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.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: 2013-06-19 00:00:00.000000000 Z
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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.3'
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.3'
82
+ version: '1.6'
94
83
  - !ruby/object:Gem::Dependency
95
- name: oj
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: '0'
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: '0'
166
+ version: 0.7.0
174
167
  - !ruby/object:Gem::Dependency
175
- name: pry
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: 1.8.23
224
+ rubygems_version: 2.2.0
234
225
  signing_key:
235
- specification_version: 3
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: