apill 2.1.0 → 2.2.0
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/apill/accept_header.rb +9 -1
- data/lib/apill/configuration.rb +4 -0
- data/lib/apill/matchers/generic_matcher.rb +4 -25
- data/lib/apill/matchers/subdomain_matcher.rb +1 -1
- data/lib/apill/matchers/version_matcher.rb +1 -1
- data/lib/apill/middleware/api_request.rb +2 -4
- data/lib/apill/requests/base.rb +37 -0
- data/lib/apill/requests/rack_request.rb +37 -0
- data/lib/apill/requests/rails_request.rb +29 -0
- data/lib/apill/version.rb +1 -1
- data/spec/apill/matchers/accept_header_matcher_spec.rb +18 -18
- data/spec/apill/matchers/invalid_api_request_matcher_spec.rb +3 -3
- data/spec/apill/matchers/subdomain_matcher_spec.rb +4 -0
- data/spec/apill/matchers/version_matcher_spec.rb +10 -10
- data/spec/apill/middleware/api_request_spec.rb +22 -23
- data/spec/apill/requests/rack_request_spec.rb +57 -0
- data/spec/apill/requests/rails_request_spec.rb +59 -0
- metadata +8 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 83d6429288497499ef52987e7f8f9a5c8d8c7f6c
|
|
4
|
+
data.tar.gz: a07b1f22022080022b72665a07b212c58aba56d4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 80896fdee5a9fd08bf3ba02449d54d481415ccb6fa82424312fa3aaa329bcaf1492ac14d93f4f7bca224cbe7cc78f2da21210f5e07b9992887dfcce8d6f3bb3d
|
|
7
|
+
data.tar.gz: 875abc5d8d8999fe9e649f2fde48305c2f822ecdc820ba2aad2c7f8d79aa906eb69b9a135bfb3129d8ff55458be3f294ba20d53dad75727111786c5de8641acf
|
data/lib/apill/accept_header.rb
CHANGED
data/lib/apill/configuration.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'apill/accept_header'
|
|
2
|
+
require 'apill/requests/base'
|
|
2
3
|
|
|
3
4
|
module Apill
|
|
4
5
|
module Matchers
|
|
@@ -13,31 +14,9 @@ module GenericMatcher
|
|
|
13
14
|
end
|
|
14
15
|
|
|
15
16
|
def matches?(request)
|
|
16
|
-
|
|
17
|
-
self.
|
|
18
|
-
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
private
|
|
22
|
-
|
|
23
|
-
def get_accept_header(raw_header_from_headers:, raw_header_from_params:)
|
|
24
|
-
header_from_header = accept_header_from_string(raw_header_from_headers)
|
|
25
|
-
|
|
26
|
-
return header_from_header if header_from_header.valid? ||
|
|
27
|
-
raw_header_from_params.to_s.empty?
|
|
28
|
-
|
|
29
|
-
accept_header_from_params(raw_header_from_params)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def accept_header_from_string(raw_header_from_headers='')
|
|
33
|
-
Apill::AcceptHeader.new(application: application,
|
|
34
|
-
header: raw_header_from_headers)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def accept_header_from_params(raw_header_from_params='')
|
|
38
|
-
header_from_params = raw_header_from_params[%r{(?:\A|&)accept=(.+?)(?=\z|&)}, 1]
|
|
39
|
-
|
|
40
|
-
accept_header_from_string(header_from_params)
|
|
17
|
+
request = Requests::Base.resolve(request)
|
|
18
|
+
self.application = request.application_name
|
|
19
|
+
self.accept_header = request.accept_header
|
|
41
20
|
end
|
|
42
21
|
end
|
|
43
22
|
end
|
|
@@ -13,11 +13,9 @@ class ApiRequest
|
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
def call(env)
|
|
16
|
-
env['
|
|
17
|
-
|
|
18
|
-
if Matchers::SubdomainMatcher.new(allowed_subdomains: Apill.configuration.allowed_subdomains).
|
|
19
|
-
matches?(env)
|
|
16
|
+
env['HTTP_X_APPLICATION_NAME'] = Apill.configuration.application_name
|
|
20
17
|
|
|
18
|
+
if Matchers::SubdomainMatcher.new.matches?(env)
|
|
21
19
|
if Matchers::AcceptHeaderMatcher.new.matches?(env)
|
|
22
20
|
@app.call(env)
|
|
23
21
|
else
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
module Apill
|
|
2
|
+
module Requests
|
|
3
|
+
class Base
|
|
4
|
+
def self.resolve(original_request)
|
|
5
|
+
if original_request.respond_to? :headers
|
|
6
|
+
rails_request_class.new(original_request)
|
|
7
|
+
else
|
|
8
|
+
rack_request_class.new(original_request)
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def accept_header
|
|
13
|
+
if accept_header_from_header.valid? ||
|
|
14
|
+
accept_header_from_params.invalid?
|
|
15
|
+
|
|
16
|
+
accept_header_from_header
|
|
17
|
+
else
|
|
18
|
+
accept_header_from_params
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
def self.rails_request_class
|
|
25
|
+
require 'apill/requests/rails_request'
|
|
26
|
+
|
|
27
|
+
Object.const_get('Apill::Requests::RailsRequest')
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def self.rack_request_class
|
|
31
|
+
require 'apill/requests/rack_request'
|
|
32
|
+
|
|
33
|
+
Object.const_get('Apill::Requests::RackRequest')
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'apill/configuration'
|
|
2
|
+
require 'apill/requests/base'
|
|
3
|
+
require 'apill/accept_header'
|
|
4
|
+
|
|
5
|
+
module Apill
|
|
6
|
+
module Requests
|
|
7
|
+
class RackRequest < Base
|
|
8
|
+
ACCEPT_PARAM_PATTERN = %r{(?:\A|&)accept=(.+?)(?=\z|&)}
|
|
9
|
+
|
|
10
|
+
attr_accessor :request
|
|
11
|
+
|
|
12
|
+
def initialize(request)
|
|
13
|
+
self.request = request
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def accept_header_from_header
|
|
17
|
+
AcceptHeader.new(application: application_name,
|
|
18
|
+
header: request['HTTP_ACCEPT'] || '')
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def accept_header_from_params
|
|
22
|
+
AcceptHeader.new(application: application_name,
|
|
23
|
+
header: raw_accept_header_from_params || '')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def application_name
|
|
27
|
+
request['HTTP_X_APPLICATION_NAME'] || Apill.configuration.application_name
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
def raw_accept_header_from_params
|
|
33
|
+
request['QUERY_STRING'][ACCEPT_PARAM_PATTERN, 1]
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'apill/configuration'
|
|
2
|
+
require 'apill/requests/base'
|
|
3
|
+
require 'apill/accept_header'
|
|
4
|
+
|
|
5
|
+
module Apill
|
|
6
|
+
module Requests
|
|
7
|
+
class RailsRequest < Base
|
|
8
|
+
attr_accessor :request
|
|
9
|
+
|
|
10
|
+
def initialize(request)
|
|
11
|
+
self.request = request
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def accept_header_from_header
|
|
15
|
+
AcceptHeader.new(application: application_name,
|
|
16
|
+
header: request.headers['Accept'] || '')
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def accept_header_from_params
|
|
20
|
+
AcceptHeader.new(application: application_name,
|
|
21
|
+
header: request.params['accept'] || '')
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def application_name
|
|
25
|
+
request.headers['X-Application-Name'] || Apill.configuration.application_name
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
data/lib/apill/version.rb
CHANGED
|
@@ -6,8 +6,8 @@ module Matchers
|
|
|
6
6
|
describe AcceptHeaderMatcher do
|
|
7
7
|
it 'matches if the subdomain is API and the accept header is valid' do
|
|
8
8
|
request = {
|
|
9
|
-
'HTTP_ACCEPT'
|
|
10
|
-
'
|
|
9
|
+
'HTTP_ACCEPT' => 'application/vnd.matrix+zion;version=1.0.0',
|
|
10
|
+
'HTTP_X_APPLICATION_NAME' => 'matrix',
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
matcher = AcceptHeaderMatcher.new
|
|
@@ -19,8 +19,8 @@ describe AcceptHeaderMatcher do
|
|
|
19
19
|
'a parameter' do
|
|
20
20
|
|
|
21
21
|
request = {
|
|
22
|
-
'QUERY_STRING'
|
|
23
|
-
'
|
|
22
|
+
'QUERY_STRING' => 'accept=application/vnd.matrix+zion;version=1.0.0',
|
|
23
|
+
'HTTP_X_APPLICATION_NAME' => 'matrix',
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
matcher = AcceptHeaderMatcher.new
|
|
@@ -32,8 +32,8 @@ describe AcceptHeaderMatcher do
|
|
|
32
32
|
'secondary parameter' do
|
|
33
33
|
|
|
34
34
|
request = {
|
|
35
|
-
'QUERY_STRING'
|
|
36
|
-
'
|
|
35
|
+
'QUERY_STRING' => 'first=my_param&accept=application/vnd.matrix+zion;version=1.0.0',
|
|
36
|
+
'HTTP_X_APPLICATION_NAME' => 'matrix',
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
matcher = AcceptHeaderMatcher.new
|
|
@@ -45,9 +45,9 @@ describe AcceptHeaderMatcher do
|
|
|
45
45
|
'is passed both as a valid header and as a parameter' do
|
|
46
46
|
|
|
47
47
|
request = {
|
|
48
|
-
'HTTP_ACCEPT'
|
|
49
|
-
'QUERY_STRING'
|
|
50
|
-
'
|
|
48
|
+
'HTTP_ACCEPT' => 'application/vnd.matrix+zion;version=1.0.0',
|
|
49
|
+
'QUERY_STRING' => 'accept=application/vnd.matrix+zion;version=2.0.0',
|
|
50
|
+
'HTTP_X_APPLICATION_NAME' => 'matrix',
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
matcher = AcceptHeaderMatcher.new
|
|
@@ -60,9 +60,9 @@ describe AcceptHeaderMatcher do
|
|
|
60
60
|
'header is passed both as an invalid header as well as as a parameter' do
|
|
61
61
|
|
|
62
62
|
request = {
|
|
63
|
-
'HTTP_ACCEPT'
|
|
64
|
-
'QUERY_STRING'
|
|
65
|
-
'
|
|
63
|
+
'HTTP_ACCEPT' => 'application/vndmatrix+zion;version=1.0.0',
|
|
64
|
+
'QUERY_STRING' => 'accept=application/vnd.matrix+zion;version=2.0.0',
|
|
65
|
+
'HTTP_X_APPLICATION_NAME' => 'matrix',
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
matcher = AcceptHeaderMatcher.new
|
|
@@ -75,9 +75,9 @@ describe AcceptHeaderMatcher do
|
|
|
75
75
|
'header is passed both as an invalid header as well as as a parameter' do
|
|
76
76
|
|
|
77
77
|
request = {
|
|
78
|
-
'HTTP_ACCEPT'
|
|
79
|
-
'QUERY_STRING'
|
|
80
|
-
'
|
|
78
|
+
'HTTP_ACCEPT' => 'application/vndmatrix+zion;version=1.0.0',
|
|
79
|
+
'QUERY_STRING' => '',
|
|
80
|
+
'HTTP_X_APPLICATION_NAME' => 'matrix',
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
matcher = AcceptHeaderMatcher.new
|
|
@@ -89,9 +89,9 @@ describe AcceptHeaderMatcher do
|
|
|
89
89
|
|
|
90
90
|
it 'does not match if the subdomain is API but the accept header is invalid' do
|
|
91
91
|
request = {
|
|
92
|
-
'HTTP_ACCEPT'
|
|
93
|
-
'QUERY_STRING'
|
|
94
|
-
'
|
|
92
|
+
'HTTP_ACCEPT' => 'application/vndmatrix+zion;version=1.0.0',
|
|
93
|
+
'QUERY_STRING' => '',
|
|
94
|
+
'HTTP_X_APPLICATION_NAME' => 'matrix',
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
matcher = AcceptHeaderMatcher.new
|
|
@@ -7,9 +7,9 @@ module Matchers
|
|
|
7
7
|
describe InvalidApiRequestMatcher do
|
|
8
8
|
it 'is the inverse of whether the accept header matches' do
|
|
9
9
|
request = {
|
|
10
|
-
'HTTP_HOST'
|
|
11
|
-
'HTTP_ACCEPT'
|
|
12
|
-
'
|
|
10
|
+
'HTTP_HOST' => 'api.example.com',
|
|
11
|
+
'HTTP_ACCEPT' => 'application/vnd.matrix+zion;version=1.0.0',
|
|
12
|
+
'HTTP_X_APPLICATION_NAME' => 'matrix',
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
matcher = InvalidApiRequestMatcher.new
|
|
@@ -4,6 +4,10 @@ require 'apill/matchers/subdomain_matcher'
|
|
|
4
4
|
module Apill
|
|
5
5
|
module Matchers
|
|
6
6
|
describe SubdomainMatcher do
|
|
7
|
+
before(:each) do
|
|
8
|
+
Apill.configuration.allowed_subdomains = %w{api}
|
|
9
|
+
end
|
|
10
|
+
|
|
7
11
|
it 'matches if the subdomain is API' do
|
|
8
12
|
matcher = SubdomainMatcher.new
|
|
9
13
|
request = { 'HTTP_HOST' => 'api.example.com' }
|
|
@@ -9,8 +9,8 @@ describe VersionMatcher do
|
|
|
9
9
|
'equal the version constraint' do
|
|
10
10
|
|
|
11
11
|
request = {
|
|
12
|
-
'
|
|
13
|
-
'HTTP_ACCEPT'
|
|
12
|
+
'HTTP_X_APPLICATION_NAME' => 'matrix',
|
|
13
|
+
'HTTP_ACCEPT' => 'application/vnd.matrix+zion;version=10.0',
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
matcher = VersionMatcher.new(version_constraint: '10.1')
|
|
@@ -22,8 +22,8 @@ describe VersionMatcher do
|
|
|
22
22
|
'version constraint' do
|
|
23
23
|
|
|
24
24
|
request = {
|
|
25
|
-
'
|
|
26
|
-
'HTTP_ACCEPT'
|
|
25
|
+
'HTTP_X_APPLICATION_NAME' => 'matrix',
|
|
26
|
+
'HTTP_ACCEPT' => 'application/vnd.matrix+zion;version=10.0',
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
matcher = VersionMatcher.new(version_constraint: '10.0')
|
|
@@ -37,8 +37,8 @@ describe VersionMatcher do
|
|
|
37
37
|
'equal the version constraint' do
|
|
38
38
|
|
|
39
39
|
request = {
|
|
40
|
-
'
|
|
41
|
-
'HTTP_ACCEPT'
|
|
40
|
+
'HTTP_X_APPLICATION_NAME' => 'matrix',
|
|
41
|
+
'HTTP_ACCEPT' => 'application/vnd.matrix+zion',
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
matcher = VersionMatcher.new(version_constraint: '10.1',
|
|
@@ -51,8 +51,8 @@ describe VersionMatcher do
|
|
|
51
51
|
'version constraint' do
|
|
52
52
|
|
|
53
53
|
request = {
|
|
54
|
-
'
|
|
55
|
-
'HTTP_ACCEPT'
|
|
54
|
+
'HTTP_X_APPLICATION_NAME' => 'matrix',
|
|
55
|
+
'HTTP_ACCEPT' => 'application/vnd.matrix+zion',
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
matcher = VersionMatcher.new(version_constraint: '10.0',
|
|
@@ -66,8 +66,8 @@ describe VersionMatcher do
|
|
|
66
66
|
Apill.configuration.default_api_version = '100.0'
|
|
67
67
|
|
|
68
68
|
request = {
|
|
69
|
-
'
|
|
70
|
-
'HTTP_ACCEPT'
|
|
69
|
+
'HTTP_X_APPLICATION_NAME' => 'matrix',
|
|
70
|
+
'HTTP_ACCEPT' => 'application/vnd.matrix+zion',
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
matcher = VersionMatcher.new(version_constraint: '100.0')
|
|
@@ -1,30 +1,31 @@
|
|
|
1
1
|
require 'rspectacular'
|
|
2
2
|
require 'apill/middleware/api_request'
|
|
3
3
|
|
|
4
|
-
HumanError.configure do |config|
|
|
5
|
-
config.api_error_documentation_url = 'http://error.com'
|
|
6
|
-
config.knowledgebase_url = 'http://knowledge.com'
|
|
7
|
-
config.api_version = '1'
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
Apill.configure do |config|
|
|
11
|
-
config.allowed_subdomains = %w{api}
|
|
12
|
-
config.application_name = 'matrix'
|
|
13
|
-
end
|
|
14
|
-
|
|
15
4
|
module Apill
|
|
16
5
|
module Middleware
|
|
17
6
|
describe ApiRequest do
|
|
18
7
|
let(:app) { lambda { |env| [200, {}, 'response'] } }
|
|
19
8
|
|
|
9
|
+
before(:each) do
|
|
10
|
+
HumanError.configure do |config|
|
|
11
|
+
config.api_error_documentation_url = 'http://error.com'
|
|
12
|
+
config.knowledgebase_url = 'http://knowledge.com'
|
|
13
|
+
config.api_version = '1'
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
Apill.configure do |config|
|
|
17
|
+
config.allowed_subdomains = %w{api}
|
|
18
|
+
config.application_name = 'matrix'
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
20
22
|
it 'does not allow requests if they are not for an allowed subdomain' do
|
|
21
23
|
api_request_middleware = ApiRequest.new(app)
|
|
22
24
|
|
|
23
25
|
request = {
|
|
24
|
-
'HTTP_HOST'
|
|
25
|
-
'HTTP_ACCEPT'
|
|
26
|
-
'QUERY_STRING'
|
|
27
|
-
'API_APPLICATION_NAME' => 'matrix',
|
|
26
|
+
'HTTP_HOST' => 'notvalid.example.com',
|
|
27
|
+
'HTTP_ACCEPT' => '',
|
|
28
|
+
'QUERY_STRING' => 'first=my_param&accept=application/vnd.silent+zion;version=1.0.0',
|
|
28
29
|
}
|
|
29
30
|
|
|
30
31
|
status, headers, response = api_request_middleware.call(request)
|
|
@@ -60,10 +61,9 @@ describe ApiRequest do
|
|
|
60
61
|
api_request_middleware = ApiRequest.new(app)
|
|
61
62
|
|
|
62
63
|
request = {
|
|
63
|
-
'HTTP_HOST'
|
|
64
|
-
'HTTP_ACCEPT'
|
|
65
|
-
'QUERY_STRING'
|
|
66
|
-
'API_APPLICATION_NAME' => 'matrix',
|
|
64
|
+
'HTTP_HOST' => 'api.example.com',
|
|
65
|
+
'HTTP_ACCEPT' => '',
|
|
66
|
+
'QUERY_STRING' => 'first=my_param&accept=application/vnd.silent+zion;version=1.0.0',
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
status, headers, response = api_request_middleware.call(request)
|
|
@@ -97,10 +97,9 @@ describe ApiRequest do
|
|
|
97
97
|
api_request_middleware = ApiRequest.new(app)
|
|
98
98
|
|
|
99
99
|
request = {
|
|
100
|
-
'HTTP_HOST'
|
|
101
|
-
'HTTP_ACCEPT'
|
|
102
|
-
'QUERY_STRING'
|
|
103
|
-
'API_APPLICATION_NAME' => 'matrix',
|
|
100
|
+
'HTTP_HOST' => 'api.example.com',
|
|
101
|
+
'HTTP_ACCEPT' => 'application/vnd.matrix+zion;version=1.0.0',
|
|
102
|
+
'QUERY_STRING' => 'first=my_param&accept=application/vnd.matrix+zion;version=1.0.0',
|
|
104
103
|
}
|
|
105
104
|
|
|
106
105
|
status, headers, response = api_request_middleware.call(request)
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
require 'rspectacular'
|
|
2
|
+
require 'apill/requests/rack_request'
|
|
3
|
+
|
|
4
|
+
module Apill
|
|
5
|
+
module Requests
|
|
6
|
+
describe RackRequest do
|
|
7
|
+
it 'finds the accept header from the headers if it is valid' do
|
|
8
|
+
raw_request = {
|
|
9
|
+
'HTTP_ACCEPT' => 'application/vnd.matrix+zion;version=10.0',
|
|
10
|
+
'QUERY_STRING' => '',
|
|
11
|
+
'HTTP_X_APPLICATION_NAME' => 'matrix',
|
|
12
|
+
}
|
|
13
|
+
request = RackRequest.new(raw_request)
|
|
14
|
+
|
|
15
|
+
expect(request.accept_header.to_s).to eql 'application/vnd.matrix+zion;version=10.0'
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'finds the accept header from the headers if it is invalid but there is no ' \
|
|
19
|
+
'accept header in the params' do
|
|
20
|
+
|
|
21
|
+
raw_request = {
|
|
22
|
+
'HTTP_ACCEPT' => 'invalid/vnd.matrix+zion;version=10.0',
|
|
23
|
+
'QUERY_STRING' => '',
|
|
24
|
+
'HTTP_X_APPLICATION_NAME' => 'matrix',
|
|
25
|
+
}
|
|
26
|
+
request = RackRequest.new(raw_request)
|
|
27
|
+
|
|
28
|
+
expect(request.accept_header.to_s).to eql 'invalid/vnd.matrix+zion;version=10.0'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'finds the accept header from the params if it is valid' do
|
|
32
|
+
raw_request = {
|
|
33
|
+
'HTTP_ACCEPT' => '',
|
|
34
|
+
'QUERY_STRING' => 'accept=application/vnd.matrix+zion;version=10.0',
|
|
35
|
+
'HTTP_X_APPLICATION_NAME' => 'matrix',
|
|
36
|
+
}
|
|
37
|
+
request = RackRequest.new(raw_request)
|
|
38
|
+
|
|
39
|
+
expect(request.accept_header.to_s).to eql 'application/vnd.matrix+zion;version=10.0'
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'defaults to the application name in the configuration if none is found in ' \
|
|
43
|
+
'the header' do
|
|
44
|
+
|
|
45
|
+
Apill.configuration.application_name = 'zion'
|
|
46
|
+
|
|
47
|
+
raw_request = {
|
|
48
|
+
'HTTP_ACCEPT' => '',
|
|
49
|
+
'QUERY_STRING' => 'accept=application/vnd.zion+zion;version=10.0',
|
|
50
|
+
}
|
|
51
|
+
request = RackRequest.new(raw_request)
|
|
52
|
+
|
|
53
|
+
expect(request.accept_header.to_s).to eql 'application/vnd.zion+zion;version=10.0'
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require 'ostruct'
|
|
2
|
+
require 'rspectacular'
|
|
3
|
+
require 'apill/requests/rails_request'
|
|
4
|
+
|
|
5
|
+
module Apill
|
|
6
|
+
module Requests
|
|
7
|
+
describe RailsRequest do
|
|
8
|
+
it 'finds the accept header from the headers if it is valid' do
|
|
9
|
+
raw_request = OpenStruct.new(
|
|
10
|
+
headers: {
|
|
11
|
+
'X-Application-Name' => 'matrix',
|
|
12
|
+
'Accept' => 'application/vnd.matrix+zion;version=10.0',
|
|
13
|
+
},
|
|
14
|
+
params: {})
|
|
15
|
+
request = RailsRequest.new(raw_request)
|
|
16
|
+
|
|
17
|
+
expect(request.accept_header.to_s).to eql 'application/vnd.matrix+zion;version=10.0'
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'finds the accept header from the headers if it is invalid but there is no ' \
|
|
21
|
+
'accept header in the params' do
|
|
22
|
+
|
|
23
|
+
raw_request = OpenStruct.new(
|
|
24
|
+
headers: {
|
|
25
|
+
'X-Application-Name' => 'matrix',
|
|
26
|
+
'Accept' => 'invalid/vnd.matrix+zion;version=10.0',
|
|
27
|
+
},
|
|
28
|
+
params: {})
|
|
29
|
+
request = RailsRequest.new(raw_request)
|
|
30
|
+
|
|
31
|
+
expect(request.accept_header.to_s).to eql 'invalid/vnd.matrix+zion;version=10.0'
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'finds the accept header from the params if it is valid' do
|
|
35
|
+
raw_request = OpenStruct.new(
|
|
36
|
+
headers: {
|
|
37
|
+
'X-Application-Name' => 'matrix',
|
|
38
|
+
},
|
|
39
|
+
params: { 'accept' => 'application/vnd.matrix+zion;version=10.0' })
|
|
40
|
+
request = RailsRequest.new(raw_request)
|
|
41
|
+
|
|
42
|
+
expect(request.accept_header.to_s).to eql 'application/vnd.matrix+zion;version=10.0'
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'defaults to the application name in the configuration if none is found in ' \
|
|
46
|
+
'the header' do
|
|
47
|
+
|
|
48
|
+
Apill.configuration.application_name = 'zion'
|
|
49
|
+
|
|
50
|
+
raw_request = OpenStruct.new(
|
|
51
|
+
headers: {},
|
|
52
|
+
params: { 'accept' => 'application/vnd.zion+zion;version=10.0' })
|
|
53
|
+
request = RailsRequest.new(raw_request)
|
|
54
|
+
|
|
55
|
+
expect(request.accept_header.to_s).to eql 'application/vnd.zion+zion;version=10.0'
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: apill
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- jfelchner
|
|
@@ -86,6 +86,9 @@ files:
|
|
|
86
86
|
- lib/apill/matchers/subdomain_matcher.rb
|
|
87
87
|
- lib/apill/matchers/version_matcher.rb
|
|
88
88
|
- lib/apill/middleware/api_request.rb
|
|
89
|
+
- lib/apill/requests/base.rb
|
|
90
|
+
- lib/apill/requests/rack_request.rb
|
|
91
|
+
- lib/apill/requests/rails_request.rb
|
|
89
92
|
- lib/apill/responses/invalid_api_request_response.rb
|
|
90
93
|
- lib/apill/responses/invalid_subdomain_response.rb
|
|
91
94
|
- lib/apill/version.rb
|
|
@@ -98,6 +101,8 @@ files:
|
|
|
98
101
|
- spec/apill/matchers/subdomain_matcher_spec.rb
|
|
99
102
|
- spec/apill/matchers/version_matcher_spec.rb
|
|
100
103
|
- spec/apill/middleware/api_request_spec.rb
|
|
104
|
+
- spec/apill/requests/rack_request_spec.rb
|
|
105
|
+
- spec/apill/requests/rails_request_spec.rb
|
|
101
106
|
homepage: https://github.com/jfelchner/apill
|
|
102
107
|
licenses:
|
|
103
108
|
- MIT
|
|
@@ -132,4 +137,6 @@ test_files:
|
|
|
132
137
|
- spec/apill/matchers/subdomain_matcher_spec.rb
|
|
133
138
|
- spec/apill/matchers/version_matcher_spec.rb
|
|
134
139
|
- spec/apill/middleware/api_request_spec.rb
|
|
140
|
+
- spec/apill/requests/rack_request_spec.rb
|
|
141
|
+
- spec/apill/requests/rails_request_spec.rb
|
|
135
142
|
has_rdoc:
|