hyperdrive 0.0.13 → 0.0.14
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/.travis.yml +2 -2
- data/lib/hyperdrive/errors/json_parse_error.rb +11 -0
- data/lib/hyperdrive/errors.rb +1 -0
- data/lib/hyperdrive/middleware/parse_json_body.rb +28 -0
- data/lib/hyperdrive/middleware.rb +1 -0
- data/lib/hyperdrive/server.rb +1 -0
- data/lib/hyperdrive/version.rb +1 -1
- data/spec/hyperdrive/errors/json_parse_error_spec.rb +18 -0
- data/spec/hyperdrive/middleware/parse_json_body_spec.rb +29 -0
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b0b6a24d689066609923e410bd852efd6775931d
|
4
|
+
data.tar.gz: cdfc89fe0f8e15161bd92d0e1b312601a0bf5aeb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9addf9d0be72f105b5bb99b67b60d1d60c70ac06290829ec16e52fdccd3858200719eb14fa6d7963eebf302d6b7b1282ed48cde9e816afd781190b989d2099d2
|
7
|
+
data.tar.gz: 033ff57831220b2e83119c72bc668329c002c85b625165e00a172b1f69b2a959375772081c17b27a120466553ad8ac8a687938ef698c39c115ecc46c69a7d0e0
|
data/.travis.yml
CHANGED
@@ -4,10 +4,10 @@ rvm:
|
|
4
4
|
- 2.1.1
|
5
5
|
- 1.9.3
|
6
6
|
- jruby-head
|
7
|
-
- rbx
|
7
|
+
- rbx-2
|
8
8
|
matrix:
|
9
9
|
allow_failures:
|
10
|
-
- rvm: rbx
|
10
|
+
- rvm: rbx-2
|
11
11
|
env:
|
12
12
|
global:
|
13
13
|
secure: Tl3oBsBZRI5bMrtNH5mtTDvSTlTxNbsKaAnQ7KQ2KMyiH/eHolOSIbUYB9NB3GRMC6XSyFShRCaYPA/ET36HI+Jw3PFT/XADdiOdFqlk6VyJEUPznNQ1nlp8AsyNn+IexZXIl8DdqmZxGHlY6YKDbQV/U1v+FeW8X5j3TLN1mcw=
|
data/lib/hyperdrive/errors.rb
CHANGED
@@ -7,6 +7,7 @@ require 'hyperdrive/errors/dsl/unknown_argument'
|
|
7
7
|
require 'hyperdrive/errors/http_error'
|
8
8
|
require 'hyperdrive/errors/bad_request' # 400 (Generic)
|
9
9
|
require 'hyperdrive/errors/internal_server_error' # 500 (Generic)
|
10
|
+
require 'hyperdrive/errors/json_parse_error' # 400 (Specific)
|
10
11
|
require 'hyperdrive/errors/method_not_allowed' # 405
|
11
12
|
require 'hyperdrive/errors/missing_required_param' # 400 (Specific)
|
12
13
|
require 'hyperdrive/errors/no_response' # 444
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Hyperdrive
|
4
|
+
module Middleware
|
5
|
+
class ParseJSONBody
|
6
|
+
def initialize(app)
|
7
|
+
@app = app
|
8
|
+
end
|
9
|
+
|
10
|
+
def call(env)
|
11
|
+
req = Rack::Request.new(env)
|
12
|
+
if req.media_type =~ /json$/
|
13
|
+
begin
|
14
|
+
json_body = MultiJson.load(env['rack.input'].read)
|
15
|
+
env["rack.input"].rewind
|
16
|
+
rescue => e
|
17
|
+
puts "JSONParseError: #{e.message}"
|
18
|
+
raise Hyperdrive::Errors::JSONParseError.new
|
19
|
+
end
|
20
|
+
env['rack.request.form_hash'] ||= {}
|
21
|
+
env['rack.request.form_hash'].merge!(json_body)
|
22
|
+
env['rack.request.form_input'] = Rack::Utils.build_query(env['rack.request.form_hash'])
|
23
|
+
end
|
24
|
+
@app.call(env)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -5,6 +5,7 @@ require 'hyperdrive/middleware/cors'
|
|
5
5
|
require 'hyperdrive/middleware/content_negotiation'
|
6
6
|
require 'hyperdrive/middleware/error'
|
7
7
|
require 'hyperdrive/middleware/pagination'
|
8
|
+
require 'hyperdrive/middleware/parse_json_body'
|
8
9
|
require 'hyperdrive/middleware/resource'
|
9
10
|
require 'hyperdrive/middleware/request_method'
|
10
11
|
require 'hyperdrive/middleware/required_params'
|
data/lib/hyperdrive/server.rb
CHANGED
@@ -28,6 +28,7 @@ module Hyperdrive
|
|
28
28
|
map resource.endpoint do
|
29
29
|
use Hyperdrive::Middleware::Resource, resource
|
30
30
|
use Hyperdrive::Middleware::RequestMethod
|
31
|
+
use Hyperdrive::Middleware::ParseJSONBody
|
31
32
|
use Hyperdrive::Middleware::SanitizeParams
|
32
33
|
use Hyperdrive::Middleware::Pagination
|
33
34
|
use Hyperdrive::Middleware::RequiredParams
|
data/lib/hyperdrive/version.rb
CHANGED
@@ -0,0 +1,18 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Hyperdrive::Errors::JSONParseError do
|
6
|
+
before do
|
7
|
+
@error = Hyperdrive::Errors::JSONParseError.new
|
8
|
+
end
|
9
|
+
|
10
|
+
it "returns a 400 status code" do
|
11
|
+
@error.http_status_code.must_equal 400
|
12
|
+
end
|
13
|
+
|
14
|
+
it "has a message" do
|
15
|
+
@error.message.must_match(/JSON/)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Hyperdrive::Middleware::ParseJSONBody do
|
6
|
+
def app
|
7
|
+
inner_app = ->(env) { [200,{},[env['rack.request.form_input']]] }
|
8
|
+
Hyperdrive::Middleware::ParseJSONBody.new(inner_app)
|
9
|
+
end
|
10
|
+
|
11
|
+
before do
|
12
|
+
@json = '{"ok":"player","nested":{"key":"value"}}'
|
13
|
+
@headers = { 'CONTENT_TYPE' => 'application/json' }
|
14
|
+
end
|
15
|
+
|
16
|
+
it "parses json input" do
|
17
|
+
post '/', @json, @headers
|
18
|
+
last_response.body.must_equal "ok=player&nested=%7B%22key%22%3D%3E%22value%22%7D"
|
19
|
+
end
|
20
|
+
|
21
|
+
it "overrides values in the query string with those in the json input" do
|
22
|
+
post '/?ok=playa', @json, @headers
|
23
|
+
last_response.body.must_equal "ok=player&nested=%7B%22key%22%3D%3E%22value%22%7D"
|
24
|
+
end
|
25
|
+
|
26
|
+
it "throws an error if the json can't be parsed" do
|
27
|
+
-> { post '/', "{ badjson }", @headers }.must_raise Hyperdrive::Errors::JSONParseError
|
28
|
+
end
|
29
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hyperdrive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- StyleSeek Engineering
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: linguistics
|
@@ -136,6 +136,7 @@ files:
|
|
136
136
|
- lib/hyperdrive/errors/dsl/unknown_argument.rb
|
137
137
|
- lib/hyperdrive/errors/http_error.rb
|
138
138
|
- lib/hyperdrive/errors/internal_server_error.rb
|
139
|
+
- lib/hyperdrive/errors/json_parse_error.rb
|
139
140
|
- lib/hyperdrive/errors/method_not_allowed.rb
|
140
141
|
- lib/hyperdrive/errors/missing_required_param.rb
|
141
142
|
- lib/hyperdrive/errors/no_response.rb
|
@@ -152,6 +153,7 @@ files:
|
|
152
153
|
- lib/hyperdrive/middleware/cors.rb
|
153
154
|
- lib/hyperdrive/middleware/error.rb
|
154
155
|
- lib/hyperdrive/middleware/pagination.rb
|
156
|
+
- lib/hyperdrive/middleware/parse_json_body.rb
|
155
157
|
- lib/hyperdrive/middleware/request_method.rb
|
156
158
|
- lib/hyperdrive/middleware/required_params.rb
|
157
159
|
- lib/hyperdrive/middleware/resource.rb
|
@@ -170,6 +172,7 @@ files:
|
|
170
172
|
- spec/hyperdrive/errors/dsl/unknown_argument_spec.rb
|
171
173
|
- spec/hyperdrive/errors/http_error_spec.rb
|
172
174
|
- spec/hyperdrive/errors/internal_server_error_spec.rb
|
175
|
+
- spec/hyperdrive/errors/json_parse_error_spec.rb
|
173
176
|
- spec/hyperdrive/errors/method_not_allowed_spec.rb
|
174
177
|
- spec/hyperdrive/errors/missing_required_param_spec.rb
|
175
178
|
- spec/hyperdrive/errors/no_response_spec.rb
|
@@ -185,6 +188,7 @@ files:
|
|
185
188
|
- spec/hyperdrive/middleware/cors_spec.rb
|
186
189
|
- spec/hyperdrive/middleware/error_spec.rb
|
187
190
|
- spec/hyperdrive/middleware/pagination_spec.rb
|
191
|
+
- spec/hyperdrive/middleware/parse_json_body_spec.rb
|
188
192
|
- spec/hyperdrive/middleware/request_method_spec.rb
|
189
193
|
- spec/hyperdrive/middleware/required_params_spec.rb
|
190
194
|
- spec/hyperdrive/middleware/resource_spec.rb
|
@@ -228,6 +232,7 @@ test_files:
|
|
228
232
|
- spec/hyperdrive/errors/dsl/unknown_argument_spec.rb
|
229
233
|
- spec/hyperdrive/errors/http_error_spec.rb
|
230
234
|
- spec/hyperdrive/errors/internal_server_error_spec.rb
|
235
|
+
- spec/hyperdrive/errors/json_parse_error_spec.rb
|
231
236
|
- spec/hyperdrive/errors/method_not_allowed_spec.rb
|
232
237
|
- spec/hyperdrive/errors/missing_required_param_spec.rb
|
233
238
|
- spec/hyperdrive/errors/no_response_spec.rb
|
@@ -243,6 +248,7 @@ test_files:
|
|
243
248
|
- spec/hyperdrive/middleware/cors_spec.rb
|
244
249
|
- spec/hyperdrive/middleware/error_spec.rb
|
245
250
|
- spec/hyperdrive/middleware/pagination_spec.rb
|
251
|
+
- spec/hyperdrive/middleware/parse_json_body_spec.rb
|
246
252
|
- spec/hyperdrive/middleware/request_method_spec.rb
|
247
253
|
- spec/hyperdrive/middleware/required_params_spec.rb
|
248
254
|
- spec/hyperdrive/middleware/resource_spec.rb
|