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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d771b35e3bf1f63f0319a13657e7cf5b8eed07b4
4
- data.tar.gz: 0a023a7d94436547475ca7c3c52a2e879edeabde
3
+ metadata.gz: b0b6a24d689066609923e410bd852efd6775931d
4
+ data.tar.gz: cdfc89fe0f8e15161bd92d0e1b312601a0bf5aeb
5
5
  SHA512:
6
- metadata.gz: e57fcc5a0fc983d0eef36c18773346c3b013c3be3f59e2081ccf94c96dc930f040faaac655c695fe5e55076690f4fa7cec3cbf8d34be6b976530b7ece110f4d2
7
- data.tar.gz: 4b79e421774282b70f94d40354d62957e4db5d9c5b839888193a6f71228417b9c463e62244409985ef8323782e85dc3ccf47e7a8d27078d89e59b227de6f8b94
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=
@@ -0,0 +1,11 @@
1
+ module Hyperdrive
2
+ module Errors
3
+ class JSONParseError < HTTPError
4
+ def initialize
5
+ @http_status_code = 400
6
+ @message = 'The JSON sent in the request cannot be parsed due to bad syntax.'
7
+ end
8
+ end
9
+ end
10
+ end
11
+
@@ -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'
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Hyperdrive
2
- VERSION = "0.0.13"
2
+ VERSION = "0.0.14"
3
3
  end
@@ -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.13
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 00:00:00.000000000 Z
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