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 +4 -4
- data/lib/hyperdrive/endpoint.rb +5 -3
- data/lib/hyperdrive/errors/no_response.rb +12 -0
- data/lib/hyperdrive/errors/not_acceptable.rb +2 -1
- data/lib/hyperdrive/errors.rb +1 -0
- data/lib/hyperdrive/middleware/pagination.rb +7 -4
- data/lib/hyperdrive/version.rb +1 -1
- data/spec/hyperdrive/errors/no_response_spec.rb +18 -0
- data/spec/hyperdrive/middleware/pagination_spec.rb +17 -17
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 04b6a987be60798acd6c704f434fdaa56cb3fb0d
|
4
|
+
data.tar.gz: 95aa241cc63136f90a92dd1f115d9a734721aa68
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 29266f937b957d845c83e7567b590506d490f45fe81c6a15bdcae619f4347be3495fe0b2a0aa08a26df7989260d471c7db53559420082ef3eaaf65eaface6f20
|
7
|
+
data.tar.gz: c4a3c6619520154ba6b75d8eb140baf941a924b62a6b81386b5cd1fde5f3228ad8fde1c296d9cbf6b1752ab4a18460ef9e758cbdcb64a6de88c87a83ae4e1905
|
data/lib/hyperdrive/endpoint.rb
CHANGED
@@ -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
|
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
|
data/lib/hyperdrive/errors.rb
CHANGED
@@ -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
|
-
|
13
|
-
env['hyperdrive.page']
|
14
|
-
env['hyperdrive.
|
15
|
-
env['hyperdrive.per_page'] =
|
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
|
data/lib/hyperdrive/version.rb
CHANGED
@@ -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']
|
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
|
16
|
-
|
17
|
-
|
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
|
-
|
23
|
-
|
24
|
-
|
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
|
-
|
29
|
-
|
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
|
-
|
36
|
-
|
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
|
-
|
42
|
-
|
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.
|
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
|