apill 4.0.0 → 4.0.1

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: a868c1d22d4ed7815afb667e309f54dafcbf70c9
4
- data.tar.gz: 70eb9a1d4ea3c9b061febe6eeb6c1fd975abc43f
3
+ metadata.gz: 03e1a8c3d7621029eab5a87a4180786a121230f9
4
+ data.tar.gz: 434bd913e8c60b006c33f4144a22a5ac5917ae28
5
5
  SHA512:
6
- metadata.gz: 92c289f7396d2523847834b5f7a25074c71384387434d987b8eb65fc174d44df7487adde5004eac3521d1493d410bea739588b7fd0ba9e867ad0b897194d9c95
7
- data.tar.gz: d63a1ec7bbfa94244eba6c3f706c6fa71dee5260bd51c7c40cf8042f148ebf24787f73c4a2f2a47a8f45730c2a57772dd4c009d6d05f69e5d56981ce6a6cc9f6
6
+ metadata.gz: b9ac29a6cc63975df8d0b54b3b369fd54be33c675a81fad922221877c65812cf681d40346363c4b249341e3b91e78d8bc0b012c25e095a9be01a2d8a3340995a
7
+ data.tar.gz: 79b641b0689d7ae9e4c2ed79f17c370b212ac775ae09a701e5c6563901d291088b9f8be4ce63cd19dc7052d1f72d3730467b503ecda8e25bf6f433b24be095ff
@@ -5,7 +5,9 @@ module Matchers
5
5
  class AcceptHeader
6
6
  include Generic
7
7
 
8
- def matches?
8
+ def matches?(request)
9
+ super
10
+
9
11
  accept_header.valid?
10
12
  end
11
13
  end
@@ -5,14 +5,22 @@ module Generic
5
5
  :accept_header,
6
6
  :request
7
7
 
8
- def initialize(request:, **args)
8
+ def initialize(**args)
9
9
  args.each do |variable, value|
10
10
  __send__("#{variable}=", value)
11
11
  end
12
+ end
13
+
14
+ def matches?(request)
15
+ self.request = request
16
+ end
17
+
18
+ def application
19
+ request.application_name
20
+ end
12
21
 
13
- self.request = request
14
- self.application = request.application_name
15
- self.accept_header = request.accept_header
22
+ def accept_header
23
+ request.accept_header
16
24
  end
17
25
  end
18
26
  end
@@ -2,19 +2,21 @@ module Apill
2
2
  module Matchers
3
3
  class Subdomain
4
4
  def initialize(allowed_subdomains: Apill.configuration.allowed_subdomains,
5
- allowed_api_subdomains: Apill.configuration.allowed_api_subdomains,
6
- request:)
5
+ allowed_api_subdomains: Apill.configuration.allowed_api_subdomains)
7
6
 
8
7
  self.allowed_subdomains = Array(allowed_subdomains)
9
8
  self.allowed_api_subdomains = Array(allowed_api_subdomains)
10
- self.request = request
11
9
  end
12
10
 
13
- def matches?
11
+ def matches?(request)
12
+ self.request = request
13
+
14
14
  allowed_subdomains.include? request.subdomain
15
15
  end
16
16
 
17
- def matches_api_subdomain?
17
+ def matches_api_subdomain?(request)
18
+ self.request = request
19
+
18
20
  allowed_api_subdomains.include? request.subdomain
19
21
  end
20
22
 
@@ -9,7 +9,9 @@ class Version
9
9
  attr_accessor :version_constraint,
10
10
  :default_version
11
11
 
12
- def matches?
12
+ def matches?(request)
13
+ super
14
+
13
15
  requested_version == version_constraint
14
16
  end
15
17
 
@@ -19,13 +19,13 @@ class ApiRequest
19
19
  env['HTTP_X_APPLICATION_NAME'] = Apill.configuration.application_name
20
20
 
21
21
  request = Requests::Base.resolve(env)
22
- subdomain_matcher = Matchers::Subdomain.new(request: request)
23
- accept_header_matcher = Matchers::AcceptHeader.new(request: request)
22
+ subdomain_matcher = Matchers::Subdomain.new
23
+ accept_header_matcher = Matchers::AcceptHeader.new
24
24
  token = request.authorization_token
25
25
 
26
- return Responses::InvalidSubdomain.call(env) unless subdomain_matcher.matches?
27
- return Responses::InvalidApiRequest.call(env) unless !subdomain_matcher.matches_api_subdomain? ||
28
- accept_header_matcher.matches?
26
+ return Responses::InvalidSubdomain.call(env) unless subdomain_matcher.matches?(request)
27
+ return Responses::InvalidApiRequest.call(env) unless !subdomain_matcher.matches_api_subdomain?(request) ||
28
+ accept_header_matcher.matches?(request)
29
29
  return Responses::InvalidToken.call(env) unless token.valid?
30
30
 
31
31
  env['HTTP_X_JSON_WEB_TOKEN'] = token.to_h
data/lib/apill/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Apill
2
- VERSION = '4.0.0'.freeze
2
+ VERSION = '4.0.1'.freeze
3
3
  end
@@ -12,9 +12,9 @@ describe AcceptHeader do
12
12
  }
13
13
  request = Requests::Base.resolve(env)
14
14
 
15
- matcher = AcceptHeader.new(request: request)
15
+ matcher = AcceptHeader.new
16
16
 
17
- expect(matcher).to be_matches
17
+ expect(matcher.matches?(request)).to be_a TrueClass
18
18
  end
19
19
 
20
20
  it 'matches if the subdomain is API and the accept header is passed in as ' \
@@ -26,9 +26,9 @@ describe AcceptHeader do
26
26
  }
27
27
  request = Requests::Base.resolve(env)
28
28
 
29
- matcher = AcceptHeader.new(request: request)
29
+ matcher = AcceptHeader.new
30
30
 
31
- expect(matcher).to be_matches
31
+ expect(matcher.matches?(request)).to be_a TrueClass
32
32
  end
33
33
 
34
34
  it 'matches if the subdomain is API and the accept header is passed in as a ' \
@@ -41,9 +41,9 @@ describe AcceptHeader do
41
41
  }
42
42
  request = Requests::Base.resolve(env)
43
43
 
44
- matcher = AcceptHeader.new(request: request)
44
+ matcher = AcceptHeader.new
45
45
 
46
- expect(matcher).to be_matches
46
+ expect(matcher.matches?(request)).to be_a TrueClass
47
47
  end
48
48
 
49
49
  it 'matches the header accept header if the subdomain is API and the accept header ' \
@@ -56,8 +56,8 @@ describe AcceptHeader do
56
56
  }
57
57
  request = Requests::Base.resolve(env)
58
58
 
59
- matcher = AcceptHeader.new(request: request)
60
- matcher.matches?
59
+ matcher = AcceptHeader.new
60
+ matcher.matches?(request)
61
61
 
62
62
  expect(matcher.accept_header.version).to eql '1.0.0'
63
63
  end
@@ -72,8 +72,8 @@ describe AcceptHeader do
72
72
  }
73
73
  request = Requests::Base.resolve(env)
74
74
 
75
- matcher = AcceptHeader.new(request: request)
76
- matcher.matches?
75
+ matcher = AcceptHeader.new
76
+ matcher.matches?(request)
77
77
 
78
78
  expect(matcher.accept_header.version).to eql '2.0.0'
79
79
  end
@@ -88,8 +88,8 @@ describe AcceptHeader do
88
88
  }
89
89
  request = Requests::Base.resolve(env)
90
90
 
91
- matcher = AcceptHeader.new(request: request)
92
- matcher.matches?
91
+ matcher = AcceptHeader.new
92
+ matcher.matches?(request)
93
93
 
94
94
  expect(matcher.accept_header.raw_accept_header).to eql \
95
95
  'application/vndmatrix+zion;version=1.0.0'
@@ -103,9 +103,9 @@ describe AcceptHeader do
103
103
  }
104
104
  request = Requests::Base.resolve(env)
105
105
 
106
- matcher = AcceptHeader.new(request: request)
106
+ matcher = AcceptHeader.new
107
107
 
108
- expect(matcher).not_to be_matches
108
+ expect(matcher.matches?(request)).to be_a FalseClass
109
109
  end
110
110
  end
111
111
  end
@@ -14,67 +14,63 @@ describe Subdomain do
14
14
  it 'matches if the subdomain is API' do
15
15
  env = { 'HTTP_HOST' => 'api.example.com' }
16
16
  request = Requests::Base.resolve(env)
17
- matcher = Subdomain.new(request: request)
17
+ matcher = Subdomain.new
18
18
 
19
- expect(matcher.matches?).to be_a TrueClass
19
+ expect(matcher.matches?(request)).to be_a TrueClass
20
20
  end
21
21
 
22
22
  it 'matches if the first subdomain is API' do
23
23
  env = { 'HTTP_HOST' => 'api.matrix.example.com' }
24
24
  request = Requests::Base.resolve(env)
25
- matcher = Subdomain.new(request: request)
25
+ matcher = Subdomain.new
26
26
 
27
- expect(matcher.matches?).to be_a TrueClass
27
+ expect(matcher.matches?(request)).to be_a TrueClass
28
28
  end
29
29
 
30
30
  it 'does not match if the first subdomain is not API' do
31
31
  env = { 'HTTP_HOST' => 'matrix.example.com' }
32
32
  request = Requests::Base.resolve(env)
33
- matcher = Subdomain.new(request: request)
33
+ matcher = Subdomain.new
34
34
 
35
- expect(matcher.matches?).to be_a FalseClass
35
+ expect(matcher.matches?(request)).to be_a FalseClass
36
36
  end
37
37
 
38
38
  it 'allows the matched subdomain to be specified' do
39
39
  env = { 'HTTP_HOST' => 'matrix.example.com' }
40
40
  request = Requests::Base.resolve(env)
41
- matcher = Subdomain.new(allowed_subdomains: 'matrix',
42
- request: request)
41
+ matcher = Subdomain.new(allowed_subdomains: 'matrix')
43
42
 
44
- expect(matcher.matches?).to be_a TrueClass
43
+ expect(matcher.matches?(request)).to be_a TrueClass
45
44
  end
46
45
 
47
46
  it 'allows more than one subdomain to be matched' do
48
47
  env = { 'HTTP_HOST' => 'matrix.example.com' }
49
48
  request = Requests::Base.resolve(env)
50
- matcher = Subdomain.new(allowed_subdomains: %w{api matrix},
51
- request: request)
49
+ matcher = Subdomain.new(allowed_subdomains: %w{api matrix})
52
50
 
53
- expect(matcher.matches?).to be_a TrueClass
51
+ expect(matcher.matches?(request)).to be_a TrueClass
54
52
 
55
53
  env = { 'HTTP_HOST' => 'api.example.com' }
56
54
  request = Requests::Base.resolve(env)
57
- matcher = Subdomain.new(allowed_subdomains: %w{api matrix},
58
- request: request)
55
+ matcher = Subdomain.new(allowed_subdomains: %w{api matrix})
59
56
 
60
- expect(matcher.matches?).to be_a TrueClass
57
+ expect(matcher.matches?(request)).to be_a TrueClass
61
58
  end
62
59
 
63
60
  it 'can match only the api subdomain' do
64
61
  env = { 'HTTP_HOST' => 'matrix.example.com' }
65
62
  request = Requests::Base.resolve(env)
66
- matcher = Subdomain.new(allowed_api_subdomains: %w{matrix},
67
- request: request)
63
+ matcher = Subdomain.new(allowed_api_subdomains: %w{matrix})
68
64
 
69
- expect(matcher.matches_api_subdomain?).to be_a TrueClass
65
+ expect(matcher.matches_api_subdomain?(request)).to be_a TrueClass
70
66
  end
71
67
 
72
68
  it 'matches "api" as an api subdomain by default' do
73
69
  env = { 'HTTP_HOST' => 'api.example.com' }
74
70
  request = Requests::Base.resolve(env)
75
- matcher = Subdomain.new(request: request)
71
+ matcher = Subdomain.new
76
72
 
77
- expect(matcher.matches_api_subdomain?).to be_a TrueClass
73
+ expect(matcher.matches_api_subdomain?(request)).to be_a TrueClass
78
74
  end
79
75
  end
80
76
  end
@@ -15,10 +15,9 @@ describe Version do
15
15
  }
16
16
  request = Requests::Base.resolve(env)
17
17
 
18
- matcher = Version.new(request: request,
19
- version_constraint: '10.1')
18
+ matcher = Version.new(version_constraint: '10.1')
20
19
 
21
- expect(matcher).not_to be_matches
20
+ expect(matcher.matches?(request)).to be_a FalseClass
22
21
  end
23
22
 
24
23
  it 'does match if the subdomain is API and the requested version equals the ' \
@@ -30,10 +29,9 @@ describe Version do
30
29
  }
31
30
  request = Requests::Base.resolve(env)
32
31
 
33
- matcher = Version.new(request: request,
34
- version_constraint: '10.0')
32
+ matcher = Version.new(version_constraint: '10.0')
35
33
 
36
- expect(matcher).to be_matches
34
+ expect(matcher.matches?(request)).to be_a TrueClass
37
35
  end
38
36
  end
39
37
 
@@ -47,11 +45,10 @@ describe Version do
47
45
  }
48
46
  request = Requests::Base.resolve(env)
49
47
 
50
- matcher = Version.new(request: request,
51
- version_constraint: '10.1',
48
+ matcher = Version.new(version_constraint: '10.1',
52
49
  default_version: '10.0')
53
50
 
54
- expect(matcher).not_to be_matches
51
+ expect(matcher.matches?(request)).to be_a FalseClass
55
52
  end
56
53
 
57
54
  it 'does match if the subdomain is API and the requested version equals the ' \
@@ -63,11 +60,10 @@ describe Version do
63
60
  }
64
61
  request = Requests::Base.resolve(env)
65
62
 
66
- matcher = Version.new(request: request,
67
- version_constraint: '10.0',
63
+ matcher = Version.new(version_constraint: '10.0',
68
64
  default_version: '10.0')
69
65
 
70
- expect(matcher).to be_matches
66
+ expect(matcher.matches?(request)).to be_a TrueClass
71
67
  end
72
68
  end
73
69
 
@@ -80,10 +76,9 @@ describe Version do
80
76
  }
81
77
  request = Requests::Base.resolve(env)
82
78
 
83
- matcher = Version.new(request: request,
84
- version_constraint: '100.0')
79
+ matcher = Version.new(version_constraint: '100.0')
85
80
 
86
- expect(matcher).to be_matches
81
+ expect(matcher.matches?(request)).to be_a TrueClass
87
82
  end
88
83
  end
89
84
  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: 4.0.0
4
+ version: 4.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - jfelchner