hyperdrive 0.0.13 → 0.0.14
Sign up to get free protection for your applications and to get access to all the features.
- 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
|