skull_island 2.0.4 → 2.3.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.
@@ -74,6 +74,8 @@ module SkullIsland
74
74
  Plugin.where(:route, self, api_client: api_client)
75
75
  end
76
76
 
77
+ # rubocop:disable Metrics/CyclomaticComplexity
78
+ # rubocop:disable Metrics/PerceivedComplexity
77
79
  # rubocop:disable Metrics/AbcSize
78
80
  def export(options = {})
79
81
  hash = {
@@ -99,6 +101,8 @@ module SkullIsland
99
101
  end
100
102
  hash.reject { |_, value| value.nil? }
101
103
  end
104
+ # rubocop:enable Metrics/CyclomaticComplexity
105
+ # rubocop:enable Metrics/PerceivedComplexity
102
106
  # rubocop:enable Metrics/AbcSize
103
107
 
104
108
  def modified_existing?
@@ -10,14 +10,16 @@ module SkullIsland
10
10
  include Helpers::Meta
11
11
 
12
12
  property :name
13
- property :retries
13
+ property :retries, validate: true
14
14
  property :protocol, validate: true, required: true
15
15
  property :host, validate: true, required: true
16
16
  property :port, validate: true, required: true
17
+ property :tls_verify, type: :boolean
17
18
  property :path
18
19
  property :connect_timeout, validate: true
19
20
  property :write_timeout, validate: true
20
21
  property :read_timeout, validate: true
22
+ property :ca_certificates, validate: true, preprocess: true, postprocess: true
21
23
  property :client_certificate, validate: true, preprocess: true, postprocess: true
22
24
  property :created_at, read_only: true, postprocess: true
23
25
  property :updated_at, read_only: true, postprocess: true
@@ -42,7 +44,9 @@ module SkullIsland
42
44
  resource.connect_timeout = rdata['connect_timeout'] if rdata['connect_timeout']
43
45
  resource.write_timeout = rdata['write_timeout'] if rdata['write_timeout']
44
46
  resource.read_timeout = rdata['read_timeout'] if rdata['read_timeout']
47
+ resource.tls_verify = rdata['tls_verify'] if rdata['tls_verify']
45
48
  resource.delayed_set(:client_certificate, rdata) if rdata['client_certificate']
49
+ resource.delayed_set(:ca_certificates, rdata) if rdata['ca_certificates']
46
50
  resource.tags = rdata['tags'] if rdata['tags']
47
51
  resource.project = project if project
48
52
  resource.import_time = (time || Time.now.utc.to_i) if project
@@ -94,6 +98,8 @@ module SkullIsland
94
98
  Plugin.where(:service, self, api_client: api_client)
95
99
  end
96
100
 
101
+ # rubocop:disable Metrics/CyclomaticComplexity
102
+ # rubocop:disable Metrics/PerceivedComplexity
97
103
  # rubocop:disable Metrics/AbcSize
98
104
  def export(options = {})
99
105
  hash = {
@@ -109,7 +115,15 @@ module SkullIsland
109
115
  }
110
116
  hash['routes'] = routes.collect { |route| route.export(exclude: 'service') }
111
117
  hash['tags'] = tags unless tags.empty?
112
- hash['client_certificate'] = client_certificate if client_certificate
118
+ if client_certificate&.name
119
+ hash['client_certificate'] = "<%= lookup :certificate, '#{client_certificate.name}' %>"
120
+ elsif client_certificate
121
+ hash['client_certificate'] = { 'id' => client_certificate.id }
122
+ end
123
+ if ca_certificates && !ca_certificates.empty?
124
+ hash['ca_certificates'] = export_ca_certificates
125
+ end
126
+ hash['tls_verify'] = tls_verify if [true, false].include?(tls_verify)
113
127
  [*options[:exclude]].each do |exclude|
114
128
  hash.delete(exclude.to_s)
115
129
  end
@@ -118,6 +132,8 @@ module SkullIsland
118
132
  end
119
133
  hash.reject { |_, value| value.nil? }
120
134
  end
135
+ # rubocop:enable Metrics/CyclomaticComplexity
136
+ # rubocop:enable Metrics/PerceivedComplexity
121
137
  # rubocop:enable Metrics/AbcSize
122
138
 
123
139
  def modified_existing?
@@ -153,6 +169,33 @@ module SkullIsland
153
169
 
154
170
  private
155
171
 
172
+ def export_ca_certificates
173
+ ca_certificates.map do |cacert|
174
+ cacert.name ? "<%= lookup :ca_certificate, '#{cacert.name}', raw: true %>" : cacert.id
175
+ end
176
+ end
177
+
178
+ def postprocess_ca_certificates(value)
179
+ if value.respond_to?(:to_a)
180
+ value.to_a.map do |cacert|
181
+ CACertificate.new(
182
+ entity: { 'id' => cacert },
183
+ lazy: true,
184
+ tainted: false,
185
+ api_client: api_client
186
+ )
187
+ end
188
+ else
189
+ value
190
+ end
191
+ end
192
+
193
+ def preprocess_ca_certificates(input)
194
+ input.to_a.map do |cacert|
195
+ cacert.is_a?(String) ? cacert : cacert.id
196
+ end
197
+ end
198
+
156
199
  def postprocess_client_certificate(value)
157
200
  if value.is_a?(Hash)
158
201
  Certificate.new(
@@ -167,13 +210,31 @@ module SkullIsland
167
210
  end
168
211
 
169
212
  def preprocess_client_certificate(input)
170
- if input.is_a?(Hash)
213
+ case input
214
+ when Hash
171
215
  input
216
+ when String
217
+ { 'id' => input }
172
218
  else
173
219
  { 'id' => input.id }
174
220
  end
175
221
  end
176
222
 
223
+ # Validates {#ca_certificates} on set
224
+ def validate_ca_certificates(value)
225
+ # only Arrays (or Enumarables) are supported
226
+ return false unless value.is_a?(Array) || value.respond_to?(:to_a)
227
+
228
+ # Can only contain a array of Strings or CACertificates
229
+ value.to_a.reject { |v| v.is_a?(String) || v.is_a?(CACertificate) }.empty?
230
+ end
231
+
232
+ # Used to validate {#client_certificate} on set
233
+ def validate_client_certificate(value)
234
+ # only Strings, Hashes, or Certificates are allowed
235
+ value.is_a?(String) || value.is_a?(Hash) || value.is_a?(Certificate)
236
+ end
237
+
177
238
  # Used to validate {#protocol} on set
178
239
  def validate_protocol(value)
179
240
  # only HTTP and HTTPS are allowed
@@ -192,6 +253,12 @@ module SkullIsland
192
253
  value.is_a?(Integer) && value.positive? && (1...65_535).cover?(value)
193
254
  end
194
255
 
256
+ # Used to validate {#retries} on set
257
+ def validate_retries(value)
258
+ # only positive Integers of the right value are allowed
259
+ value.is_a?(Integer) && value.positive? && (1...65_535).cover?(value)
260
+ end
261
+
195
262
  # Used to validate {#connect_timeout} on set
196
263
  def validate_connect_timeout(value)
197
264
  # only positive Integers are allowed
@@ -51,7 +51,7 @@ module SkullIsland
51
51
  end
52
52
 
53
53
  def self.get(id, options = {})
54
- if options[:upstream]&.is_a?(Upstream)
54
+ if options[:upstream].is_a?(Upstream)
55
55
  options[:upstream].target(id)
56
56
  elsif options[:upstream]
57
57
  upstream_opts = options.merge(lazy: true)
@@ -108,9 +108,10 @@ module SkullIsland
108
108
  end
109
109
 
110
110
  def preprocess_upstream(input)
111
- if input.is_a?(Hash)
111
+ case input
112
+ when Hash
112
113
  input
113
- elsif input.is_a?(String)
114
+ when String
114
115
  { 'id' => input }
115
116
  else
116
117
  { 'id' => input.id }
@@ -34,7 +34,7 @@ module SkullIsland
34
34
  valid = name.is_a? String
35
35
  begin
36
36
  u = URI.parse(name)
37
- valid = false unless u.class == URI::HTTP || u.class == URI::HTTPS
37
+ valid = false unless u.is_a?(URI::HTTP) || u.is_a?(URI::HTTPS)
38
38
  rescue URI::InvalidURIError
39
39
  valid = false
40
40
  end
@@ -24,7 +24,7 @@ module SkullIsland
24
24
  def validate_tags(value)
25
25
  # allow only valid hostnames
26
26
  value.each do |tag|
27
- return false unless tag.is_a?(String) && tag.match?(/^[\w_\-\.~]+$/)
27
+ return false unless tag.is_a?(String) && tag.match?(/^[\w_\-.~]+$/)
28
28
  end
29
29
  true
30
30
  end
@@ -3,7 +3,7 @@
3
3
  module SkullIsland
4
4
  VERSION = [
5
5
  2, # Major
6
- 0, # Minor
7
- 4 # Patch
6
+ 3, # Minor
7
+ 0 # Patch
8
8
  ].join('.')
9
9
  end
data/skull_island.gemspec CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
  spec.email = ['jonathan.gnagy@gmail.com']
12
12
 
13
13
  spec.summary = 'Ruby SDK for Kong'
14
- spec.description = 'A Ruby SDK for Kong 0.14.x'
14
+ spec.description = 'A Ruby SDK for Kong'
15
15
  spec.homepage = 'https://github.com/jgnagy/skull_island'
16
16
  spec.license = 'MIT'
17
17
 
@@ -24,22 +24,22 @@ Gem::Specification.new do |spec|
24
24
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
25
  spec.require_paths = ['lib']
26
26
 
27
- spec.required_ruby_version = '~> 2.5'
27
+ spec.required_ruby_version = '~> 3.0'
28
28
 
29
29
  spec.add_runtime_dependency 'deepsort', '~> 0.4'
30
30
  spec.add_runtime_dependency 'erubi', '~> 1.8'
31
- spec.add_runtime_dependency 'json', '~> 2.1'
32
31
  spec.add_runtime_dependency 'linguistics', '~> 2.1'
33
32
  spec.add_runtime_dependency 'rest-client', '~> 2.1'
34
- spec.add_runtime_dependency 'thor', '~> 0.20'
33
+ spec.add_runtime_dependency 'thor', '~> 1.0'
35
34
  spec.add_runtime_dependency 'will_paginate', '~> 3.1'
35
+ spec.add_runtime_dependency 'yajl-ruby', '~> 1.4'
36
36
 
37
37
  spec.add_development_dependency 'bundler', '~> 2.0'
38
- spec.add_development_dependency 'coveralls', '~> 0.7'
38
+ spec.add_development_dependency 'coveralls_reborn', '~> 0.20'
39
39
  spec.add_development_dependency 'rake', '~> 13.0'
40
40
  spec.add_development_dependency 'rspec', '~> 3.0'
41
41
  spec.add_development_dependency 'rubocop', '~> 0.50'
42
- spec.add_development_dependency 'simplecov', '~> 0.17'
42
+ spec.add_development_dependency 'simplecov', '~> 0.21'
43
43
  spec.add_development_dependency 'travis', '~> 1.8'
44
44
  spec.add_development_dependency 'yard', '~> 0.9.20'
45
45
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: skull_island
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Gnagy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-20 00:00:00.000000000 Z
11
+ date: 2021-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: deepsort
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.8'
41
41
  - !ruby/object:Gem::Dependency
42
- name: json
42
+ name: linguistics
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '2.1'
55
55
  - !ruby/object:Gem::Dependency
56
- name: linguistics
56
+ name: rest-client
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
@@ -67,47 +67,47 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '2.1'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rest-client
70
+ name: thor
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '2.1'
75
+ version: '1.0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '2.1'
82
+ version: '1.0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: thor
84
+ name: will_paginate
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0.20'
89
+ version: '3.1'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0.20'
96
+ version: '3.1'
97
97
  - !ruby/object:Gem::Dependency
98
- name: will_paginate
98
+ name: yajl-ruby
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '3.1'
103
+ version: '1.4'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '3.1'
110
+ version: '1.4'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: bundler
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -123,19 +123,19 @@ dependencies:
123
123
  - !ruby/object:Gem::Version
124
124
  version: '2.0'
125
125
  - !ruby/object:Gem::Dependency
126
- name: coveralls
126
+ name: coveralls_reborn
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '0.7'
131
+ version: '0.20'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '0.7'
138
+ version: '0.20'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: rake
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -184,14 +184,14 @@ dependencies:
184
184
  requirements:
185
185
  - - "~>"
186
186
  - !ruby/object:Gem::Version
187
- version: '0.17'
187
+ version: '0.21'
188
188
  type: :development
189
189
  prerelease: false
190
190
  version_requirements: !ruby/object:Gem::Requirement
191
191
  requirements:
192
192
  - - "~>"
193
193
  - !ruby/object:Gem::Version
194
- version: '0.17'
194
+ version: '0.21'
195
195
  - !ruby/object:Gem::Dependency
196
196
  name: travis
197
197
  requirement: !ruby/object:Gem::Requirement
@@ -220,7 +220,7 @@ dependencies:
220
220
  - - "~>"
221
221
  - !ruby/object:Gem::Version
222
222
  version: 0.9.20
223
- description: A Ruby SDK for Kong 0.14.x
223
+ description: A Ruby SDK for Kong
224
224
  email:
225
225
  - jonathan.gnagy@gmail.com
226
226
  executables:
@@ -299,15 +299,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
299
299
  requirements:
300
300
  - - "~>"
301
301
  - !ruby/object:Gem::Version
302
- version: '2.5'
302
+ version: '3.0'
303
303
  required_rubygems_version: !ruby/object:Gem::Requirement
304
304
  requirements:
305
305
  - - ">="
306
306
  - !ruby/object:Gem::Version
307
307
  version: '0'
308
308
  requirements: []
309
- rubyforge_project:
310
- rubygems_version: 2.7.7
309
+ rubygems_version: 3.0.8
311
310
  signing_key:
312
311
  specification_version: 4
313
312
  summary: Ruby SDK for Kong