hyperdrive 0.0.8 → 0.0.9

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: 6c23aaf5bdede85ba2269ab2a0baed51136d6a23
4
- data.tar.gz: 3d944c9ca0fc9faada183ffc93d3b02829a05cb7
3
+ metadata.gz: 04b6a987be60798acd6c704f434fdaa56cb3fb0d
4
+ data.tar.gz: 95aa241cc63136f90a92dd1f115d9a734721aa68
5
5
  SHA512:
6
- metadata.gz: 3ef076c40b1339ce9e2bd3243dc214c0cdb4f6d9340e8a71d98d0e1fa2befa60895b9b4adcc7a4df041f01453fc8ffbb0cc5c279be09ac1e6c9d137a2ed9663a
7
- data.tar.gz: 4012e028e23f512d418486674755a29e87368c9d71c6f104a0ac815ba5466ef0ca2844d2b3ed1582466e983e9fadedac44493c76d5779c36d17a4d387e48f367
6
+ metadata.gz: 29266f937b957d845c83e7567b590506d490f45fe81c6a15bdcae619f4347be3495fe0b2a0aa08a26df7989260d471c7db53559420082ef3eaaf65eaface6f20
7
+ data.tar.gz: c4a3c6619520154ba6b75d8eb140baf941a924b62a6b81386b5cd1fde5f3228ad8fde1c296d9cbf6b1752ab4a18460ef9e758cbdcb64a6de88c87a83ae4e1905
@@ -10,7 +10,7 @@ module Hyperdrive
10
10
  @params = env['hyperdrive.params']
11
11
  @resource = env['hyperdrive.resource']
12
12
  @headers = Hyperdrive::Values.default_headers.dup
13
- @headers.merge!('Allow' => resource.allowed_methods, 'Content-Type' => @media_type)
13
+ @headers.merge!('Allow' => resource.allowed_methods.join(', '), 'Content-Type' => @media_type)
14
14
 
15
15
  response.finish
16
16
  end
@@ -44,11 +44,13 @@ module Hyperdrive
44
44
  if json?
45
45
  MultiJson.dump(body)
46
46
  else
47
- env['rack.errors'] << "ENDPOINT: Can't serialize response automatically"
47
+ env.logger.error "ENDPOINT: Can't serialize response automatically"
48
+ raise Errors::NoResponse.new
48
49
  end
49
50
  when String
50
51
  body
51
52
  else
53
+ env.logger.debug "ENDPOINT: Coerceing response to string. Probably not what you want"
52
54
  body.to_s
53
55
  end
54
56
  end
@@ -75,7 +77,7 @@ module Hyperdrive
75
77
  end
76
78
 
77
79
  def self.response
78
- ::Rack::Response.new(body, status, headers)
80
+ ::Rack::Response.new(render(body), status, headers)
79
81
  end
80
82
  end
81
83
  end
@@ -0,0 +1,12 @@
1
+ # encoding: utf-8
2
+
3
+ module Hyperdrive
4
+ module Errors
5
+ class NoResponse < HTTPError
6
+ def initialize
7
+ @message = "No response could be generated for this request"
8
+ @http_status_code = 444
9
+ end
10
+ end
11
+ end
12
+ end
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Hyperdrive
2
4
  module Errors
3
5
  class NotAcceptable < HTTPError
@@ -8,4 +10,3 @@ module Hyperdrive
8
10
  end
9
11
  end
10
12
  end
11
-
@@ -9,6 +9,7 @@ require 'hyperdrive/errors/bad_request' # 400 (Generic)
9
9
  require 'hyperdrive/errors/internal_server_error' # 500 (Generic)
10
10
  require 'hyperdrive/errors/method_not_allowed' # 405
11
11
  require 'hyperdrive/errors/missing_required_param' # 400 (Specific)
12
+ require 'hyperdrive/errors/no_response' # 444
12
13
  require 'hyperdrive/errors/not_acceptable' # 406
13
14
  require 'hyperdrive/errors/not_found' # 404
14
15
  require 'hyperdrive/errors/not_implemented' # 501
@@ -3,16 +3,19 @@
3
3
  module Hyperdrive
4
4
  module Middleware
5
5
  class Pagination
6
+ attr_reader :default_per_page
6
7
  def initialize(app)
7
8
  @app = app
9
+ @default_per_page = hyperdrive.config.fetch(:per_page) { 20 }
8
10
  end
9
11
 
10
12
  def call(env)
11
13
  if %(GET HEAD).include? env['REQUEST_METHOD']
12
- env['hyperdrive.page'] = env['hyperdrive.params'].delete(:page) { 1 }
13
- env['hyperdrive.page'] = 1 if env['hyperdrive.page'].to_i < 1
14
- env['hyperdrive.per_page'] = env['hyperdrive.params'].delete(:per_page) { hyperdrive.config.fetch(:per_page) { 20 } }
15
- env['hyperdrive.per_page'] = 20 if env['hyperdrive.per_page'].to_i == 0
14
+ params = Rack::Request.new(env).params
15
+ env['hyperdrive.page'] = params.delete('page') { 1 }.to_i
16
+ env['hyperdrive.page'] = 1 if env['hyperdrive.page'] < 1
17
+ env['hyperdrive.per_page'] = params.delete('per_page') { default_per_page }.to_i
18
+ env['hyperdrive.per_page'] = default_per_page if env['hyperdrive.per_page'] == 0
16
19
  end
17
20
  @app.call(env)
18
21
  end
@@ -1,3 +1,3 @@
1
1
  module Hyperdrive
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Hyperdrive::Errors::NoResponse do
6
+ before do
7
+ @error = Hyperdrive::Errors::NoResponse.new
8
+ end
9
+
10
+ it "returns a 444 status code" do
11
+ @error.http_status_code.must_equal 444
12
+ end
13
+
14
+ it "has a message" do
15
+ @error.message.must_match(/No response/)
16
+ end
17
+ end
18
+
@@ -4,7 +4,7 @@ require 'spec_helper'
4
4
 
5
5
  describe Hyperdrive::Middleware::Pagination do
6
6
  def app
7
- inner_app = ->(env) { [200, {}, [[env['hyperdrive.page'],env['hyperdrive.per_page'],env['hyperdrive.params'][:page],env['hyperdrive.params'][:per_page]].join(",")]] }
7
+ inner_app = ->(env) { [200, {}, [[env['hyperdrive.page'],env['hyperdrive.per_page']].join(',')]] }
8
8
  Hyperdrive::Middleware::Pagination.new(inner_app)
9
9
  end
10
10
 
@@ -12,34 +12,34 @@ describe Hyperdrive::Middleware::Pagination do
12
12
  hyperdrive.send(:reset!)
13
13
  end
14
14
 
15
- it "sets default values for page and per_page and removes them from hyperdrive.params" do
16
- env = default_rack_env.merge('hyperdrive.params' => {})
17
- get '/', {}, env
18
- last_response.body.must_equal '1,20,,'
15
+ it "sets default values for page and per_page" do
16
+ get '/', {}
17
+ last_response.body.must_equal '1,20'
19
18
  end
20
19
 
21
20
  it "sets page to 1 if value is less than 1" do
22
- env = default_rack_env.merge('hyperdrive.params' => { page: '' })
23
- get '/', {}, env
24
- last_response.body.must_equal '1,20,,'
21
+ get '/', { 'page' => '' }
22
+ last_response.body.must_equal '1,20'
23
+ end
24
+
25
+ it "returns page value if supplied" do
26
+ get '/', { 'page' => '2' }
27
+ last_response.body.must_equal '2,20'
25
28
  end
26
29
 
27
30
  it "returns per_page value if supplied" do
28
- env = default_rack_env.merge('hyperdrive.params' => { per_page: 42 })
29
- get '/', {}, env
30
- last_response.body.must_equal '1,42,,'
31
+ get '/', { 'per_page' => 42 }
32
+ last_response.body.must_equal '1,42'
31
33
  end
32
34
 
33
35
  it "uses configured per_page value if per_page is not supplied" do
34
36
  hyperdrive.config[:per_page] = 13
35
- env = default_rack_env.merge('hyperdrive.params' => {})
36
- get '/', {}, env
37
- last_response.body.must_equal '1,13,,'
37
+ get '/', {}
38
+ last_response.body.must_equal '1,13'
38
39
  end
39
40
 
40
41
  it "sets per_page to 20 if value is 0" do
41
- env = default_rack_env.merge('hyperdrive.params' => { per_page: '' })
42
- get '/', {}, env
43
- last_response.body.must_equal '1,20,,'
42
+ get '/', { 'per_page' => '' }
43
+ last_response.body.must_equal '1,20'
44
44
  end
45
45
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hyperdrive
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - StyleSeek Engineering
@@ -138,6 +138,7 @@ files:
138
138
  - lib/hyperdrive/errors/internal_server_error.rb
139
139
  - lib/hyperdrive/errors/method_not_allowed.rb
140
140
  - lib/hyperdrive/errors/missing_required_param.rb
141
+ - lib/hyperdrive/errors/no_response.rb
141
142
  - lib/hyperdrive/errors/not_acceptable.rb
142
143
  - lib/hyperdrive/errors/not_found.rb
143
144
  - lib/hyperdrive/errors/not_implemented.rb
@@ -171,6 +172,7 @@ files:
171
172
  - spec/hyperdrive/errors/internal_server_error_spec.rb
172
173
  - spec/hyperdrive/errors/method_not_allowed_spec.rb
173
174
  - spec/hyperdrive/errors/missing_required_param_spec.rb
175
+ - spec/hyperdrive/errors/no_response_spec.rb
174
176
  - spec/hyperdrive/errors/not_acceptable_spec.rb
175
177
  - spec/hyperdrive/errors/not_found_spec.rb
176
178
  - spec/hyperdrive/errors/not_implemented_spec.rb
@@ -228,6 +230,7 @@ test_files:
228
230
  - spec/hyperdrive/errors/internal_server_error_spec.rb
229
231
  - spec/hyperdrive/errors/method_not_allowed_spec.rb
230
232
  - spec/hyperdrive/errors/missing_required_param_spec.rb
233
+ - spec/hyperdrive/errors/no_response_spec.rb
231
234
  - spec/hyperdrive/errors/not_acceptable_spec.rb
232
235
  - spec/hyperdrive/errors/not_found_spec.rb
233
236
  - spec/hyperdrive/errors/not_implemented_spec.rb