hyperdrive 0.0.8 → 0.0.9

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