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 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