skull_island 0.2.0 → 0.2.2

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
  SHA256:
3
- metadata.gz: 4d6ae44ca3ddea5f866e493af05df16b8355716442acd5a475e1177049260177
4
- data.tar.gz: 41ee93c3a6491b28b7e516e3b13166506080f52fa6b3f439bc4510e77b8cae39
3
+ metadata.gz: e7c23619533ea2d31b5c07763270b49b90567bd9c4286579de345791dc3e2ae6
4
+ data.tar.gz: 172d74c57ef9263fb9511aedde42f7d0287ed746888bdb781cfcf9ae2fb5b297
5
5
  SHA512:
6
- metadata.gz: 5996e8c7bf5773c8d43f98d2d85f8590d47caa61d19d9a198a4252f6e34f834dd41ff9989ea3726eedbb94ae323b3b79d0c6ad472ab8d6525eb902911191c0f5
7
- data.tar.gz: 48f5e8d92c92c6ab399426c3ba39687a20c091dfe01f5c0126cb13d935f6efdf8fd906f0ae38fbb140c740d17781e80e866572c8d4cdab2a0ecc6cc417fb7af6
6
+ metadata.gz: 93d0089177792126e8a72a47d6843de52edba872e0e3f6a43ec471a5d058ba6834f3388b35193bcb899b841e5f15c11fc65d37362b790af7e9df8a353ec05d67
7
+ data.tar.gz: 2e626e9e42511472e7deab0ce83db1e2adb4e3b54c62a51cc7107d8b171e5b6dc5e42254936a2691f0c4da597056acb1b1cf58b5a7fbc753b2da60134809b370
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- skull_island (0.2.0)
4
+ skull_island (0.2.2)
5
+ deepsort (~> 0.4)
5
6
  erubi (~> 1.8)
6
7
  json (~> 2.1)
7
8
  linguistics (~> 2.1)
@@ -15,6 +16,7 @@ GEM
15
16
  addressable (2.4.0)
16
17
  ast (2.4.0)
17
18
  backports (3.12.0)
19
+ deepsort (0.4.1)
18
20
  diff-lcs (1.3)
19
21
  docile (1.3.1)
20
22
  domain_name (0.5.20180417)
data/README.md CHANGED
@@ -13,7 +13,7 @@ gem install skull_island
13
13
  Or add this to your Gemfile:
14
14
 
15
15
  ```ruby
16
- gem 'skull_island', '~>0.1'
16
+ gem 'skull_island', '~>0.2'
17
17
  ```
18
18
 
19
19
  Or add this to your .gemspec:
@@ -21,14 +21,14 @@ Or add this to your .gemspec:
21
21
  ```ruby
22
22
  Gem::Specification.new do |spec|
23
23
  # ...
24
- spec.add_runtime_dependency 'skull_island', '~> 0.1'
24
+ spec.add_runtime_dependency 'skull_island', '~> 0.2'
25
25
  # ...
26
26
  end
27
27
  ```
28
28
 
29
29
  ## CLI Usage
30
30
 
31
- Skull Island comes with an executable called `skull_island` that leverages the SDK under the hood. Learn about what is can do via `help`:
31
+ Skull Island comes with an executable called `skull_island` that leverages the SDK under the hood. Learn about what it can do via `help`:
32
32
 
33
33
  ```
34
34
  $ skull_island help
@@ -246,7 +246,7 @@ resource.created_at
246
246
  # => #<DateTime: 2018-07-17T12:51:28+00:00 ((2458317j,46288s,0n),+0s,2299161j)>
247
247
  ```
248
248
 
249
- #### Consumers
249
+ #### Consumers (and their Credentials)
250
250
 
251
251
  ```ruby
252
252
  resource = Resources::Consumer.new
@@ -264,6 +264,20 @@ resource.created_at
264
264
  # => #<DateTime: 2018-07-17T12:51:28+00:00 ((2458317j,46288s,0n),+0s,2299161j)>
265
265
  resource.plugins
266
266
  # => #<SkullIsland::ResourceCollection:0x00007f9f1e564f3e...
267
+ resource.credentials
268
+ # => {}
269
+ resource.add_credential!(key: '932948e89e09e2989d8092') # adds a KeyauthCredential
270
+ # => true
271
+ resource.credentials['key-auth']
272
+ # => #<SkullIsland::ResourceCollection:0x00007f9f1e564f3f...
273
+ resource.credentials['key-auth'].first.key
274
+ # => "932948e89e09e2989d8092"
275
+ resource.add_credential!(username: 'test', password: 'passw0rd') # adds a BasicauthCredential
276
+ # => true
277
+ resource.credentials['basic-auth']
278
+ # => #<SkullIsland::ResourceCollection:0x00007f9f1e564f3f...
279
+ resource.credentials['basic-auth'].first.username
280
+ # => "test"
267
281
  ```
268
282
 
269
283
  #### Plugins
data/lib/skull_island.rb CHANGED
@@ -9,6 +9,7 @@ require 'uri'
9
9
  require 'yaml'
10
10
 
11
11
  # External Library Requirements
12
+ require 'deepsort'
12
13
  require 'erubi'
13
14
  require 'linguistics'
14
15
  Linguistics.use(:en)
@@ -42,6 +43,8 @@ require 'skull_island/helpers/resource_class'
42
43
  require 'skull_island/validations/resource'
43
44
  require 'skull_island/resource'
44
45
  require 'skull_island/resources/certificate'
46
+ require 'skull_island/resources/basicauth_credential'
47
+ require 'skull_island/resources/keyauth_credential'
45
48
  require 'skull_island/resources/consumer'
46
49
  require 'skull_island/resources/plugin'
47
50
  require 'skull_island/resources/service'
@@ -79,11 +79,11 @@ module SkullIsland
79
79
  if find_by_digest
80
80
  puts "[INFO] Skipping #{self.class} index #{index} (#{id})" if verbose
81
81
  elsif test
82
- puts "[INFO] Would have saved #{sef.class} index #{index}"
82
+ puts "[INFO] Would have saved #{self.class} index #{index}"
83
83
  elsif modified_existing?
84
84
  puts "[INFO] Modified #{self.class} index #{index} (#{id})" if verbose
85
85
  elsif save
86
- puts "[INFO] Saved #{self.class} index #{index} (#{id})" if verbose
86
+ puts "[INFO] Created #{self.class} index #{index} (#{id})" if verbose
87
87
  else
88
88
  puts "[ERR] Failed to save #{self.class} index #{index}"
89
89
  end
@@ -187,7 +187,7 @@ module SkullIsland
187
187
  @lazy = true
188
188
  else
189
189
  @api_client.invalidate_cache_for(relative_uri.to_s)
190
- @entity = @api_client.put(relative_uri, saveable_data)
190
+ @entity = @api_client.patch(relative_uri, saveable_data)
191
191
  end
192
192
  @api_client.invalidate_cache_for(self.class.relative_uri.to_s) # clear any collection class
193
193
  @tainted = false
@@ -58,7 +58,7 @@ module SkullIsland
58
58
  raise Exceptions::ImmutableModification if immutable?
59
59
 
60
60
  if opts[:validate]
61
- raise Exceptions::InvalidArguments unless send("validate_#{name}".to_sym, value)
61
+ raise Exceptions::InvalidArguments, name unless send("validate_#{name}".to_sym, value)
62
62
  end
63
63
  @entity[name.to_s] = if opts[:preprocess]
64
64
  send("preprocess_#{name}".to_sym, value)
@@ -0,0 +1,100 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SkullIsland
4
+ # Resource classes go here...
5
+ module Resources
6
+ # The BasicauthCredential resource class
7
+ #
8
+ # @see https://docs.konghq.com/hub/kong-inc/key-auth/ Key-Auth API definition
9
+ class BasicauthCredential < Resource
10
+ property :username, required: true, validate: true
11
+ property :password, validated: true
12
+ property(
13
+ :consumer_id,
14
+ required: true, validate: true, preprocess: true, postprocess: true, as: :consumer
15
+ )
16
+ property :created_at, read_only: true, postprocess: true
17
+
18
+ def self.batch_import(data, verbose: false, test: false)
19
+ raise(Exceptions::InvalidArguments) unless data.is_a?(Array)
20
+
21
+ data.each_with_index do |resource_data, index|
22
+ resource = new
23
+ resource.username = resource_data['username']
24
+ resource.password = resource_data['password'] if resource_data['password']
25
+ resource.delayed_set(:consumer, resource_data, 'consumer_id')
26
+ resource.import_update_or_skip(index: index, verbose: verbose, test: test)
27
+ end
28
+ end
29
+
30
+ def self.relative_uri
31
+ 'basic-auths'
32
+ end
33
+
34
+ def relative_uri
35
+ consumer ? "#{consumer.relative_uri}/basic-auth/#{id}" : nil
36
+ end
37
+
38
+ def save_uri
39
+ consumer ? "#{consumer.relative_uri}/basic-auth" : nil
40
+ end
41
+
42
+ def export(options = {})
43
+ hash = { 'username' => username, 'password' => password }
44
+ hash['consumer_id'] = "<%= lookup :consumer, '#{consumer.username}' %>" if consumer
45
+ [*options[:exclude]].each do |exclude|
46
+ hash.delete(exclude.to_s)
47
+ end
48
+ [*options[:include]].each do |inc|
49
+ hash[inc.to_s] = send(inc.to_sym)
50
+ end
51
+ hash.reject { |_, value| value.nil? }
52
+ end
53
+
54
+ # Keys can't be updated, only created or deleted
55
+ def modified_existing?
56
+ false
57
+ end
58
+
59
+ private
60
+
61
+ def postprocess_consumer_id(value)
62
+ if value.is_a?(String)
63
+ Consumer.new(
64
+ entity: { 'id' => value },
65
+ lazy: true,
66
+ tainted: false
67
+ )
68
+ else
69
+ value
70
+ end
71
+ end
72
+
73
+ def preprocess_consumer_id(input)
74
+ if input.is_a?(String)
75
+ input
76
+ else
77
+ input.id
78
+ end
79
+ end
80
+
81
+ # Used to validate {#consumer} on set
82
+ def validate_consumer_id(value)
83
+ # allow either a Consumer object or a String
84
+ value.is_a?(Consumer) || value.is_a?(String)
85
+ end
86
+
87
+ # Used to validate {#password} on set
88
+ def validate_password(value)
89
+ # allow a String
90
+ value.is_a?(String)
91
+ end
92
+
93
+ # Used to validate {#username} on set
94
+ def validate_username(value)
95
+ # allow a String
96
+ value.is_a?(String)
97
+ end
98
+ end
99
+ end
100
+ end
@@ -30,7 +30,7 @@ module SkullIsland
30
30
  hash.delete(exclude.to_s)
31
31
  end
32
32
  [*options[:include]].each do |inc|
33
- hash[inc.to_s] = send(:inc)
33
+ hash[inc.to_s] = send(inc.to_sym)
34
34
  end
35
35
  hash.reject { |_, value| value.nil? }
36
36
  end
@@ -19,9 +19,53 @@ module SkullIsland
19
19
  resource.username = resource_data['username']
20
20
  resource.custom_id = resource_data['custom_id']
21
21
  resource.import_update_or_skip(index: index, verbose: verbose, test: test)
22
+
23
+ BasicauthCredential.batch_import(
24
+ (
25
+ resource_data.dig('credentials', 'basic-auth') || []
26
+ ).map { |t| t.merge('consumer_id' => resource.id) },
27
+ verbose: verbose,
28
+ test: test
29
+ )
30
+
31
+ KeyauthCredential.batch_import(
32
+ (
33
+ resource_data.dig('credentials', 'key-auth') || []
34
+ ).map { |t| t.merge('consumer_id' => resource.id) },
35
+ verbose: verbose,
36
+ test: test
37
+ )
22
38
  end
23
39
  end
24
40
 
41
+ # Convenience method to add upstream targets
42
+ def add_credential!(details)
43
+ r = if [BasicauthCredential, KeyauthCredential].include? details.class
44
+ details
45
+ elsif details.is_a?(Hash) && details.key?(:key)
46
+ cred = KeyauthCredential.new(api_client: api_client)
47
+ cred.key = details[:key]
48
+ cred
49
+ elsif details.is_a?(Hash) && details.key?(:username)
50
+ cred = BasicauthCredential.new(api_client: api_client)
51
+ cred.username = details[:username]
52
+ cred.password = details[:password]
53
+ cred
54
+ end
55
+
56
+ r.consumer = self
57
+ r.save
58
+ end
59
+
60
+ def credentials
61
+ creds = {}
62
+ keyauth_creds = KeyauthCredential.where(:consumer, self, api_client: api_client)
63
+ creds['key-auth'] = keyauth_creds if keyauth_creds
64
+ basicauth_creds = BasicauthCredential.where(:consumer, self, api_client: api_client)
65
+ creds['basic-auth'] = basicauth_creds if basicauth_creds
66
+ creds
67
+ end
68
+
25
69
  # Provides a collection of related {Plugin} instances
26
70
  def plugins
27
71
  Plugin.where(:consumer, self, api_client: api_client)
@@ -29,11 +73,13 @@ module SkullIsland
29
73
 
30
74
  def export(options = {})
31
75
  hash = { 'username' => username, 'custom_id' => custom_id }
76
+ creds = credentials_for_export
77
+ hash['credentials'] = creds unless creds.empty?
32
78
  [*options[:exclude]].each do |exclude|
33
79
  hash.delete(exclude.to_s)
34
80
  end
35
81
  [*options[:include]].each do |inc|
36
- hash[inc.to_s] = send(:inc)
82
+ hash[inc.to_s] = send(inc.to_sym)
37
83
  end
38
84
  hash.reject { |_, value| value.nil? }
39
85
  end
@@ -53,6 +99,23 @@ module SkullIsland
53
99
  false
54
100
  end
55
101
  end
102
+
103
+ private
104
+
105
+ def credentials_for_export
106
+ creds = {}
107
+ unless credentials['key-auth'].empty?
108
+ creds['key-auth'] = credentials['key-auth'].collect do |cred|
109
+ cred.export(exclude: 'consumer_id')
110
+ end
111
+ end
112
+ unless credentials['basic-auth'].empty?
113
+ creds['basic-auth'] = credentials['basic-auth'].collect do |cred|
114
+ cred.export(exclude: 'consumer_id')
115
+ end
116
+ end
117
+ creds
118
+ end
56
119
  end
57
120
  end
58
121
  end
@@ -0,0 +1,92 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SkullIsland
4
+ # Resource classes go here...
5
+ module Resources
6
+ # The KeyauthCredential resource class
7
+ #
8
+ # @see https://docs.konghq.com/hub/kong-inc/key-auth/ Key-Auth API definition
9
+ class KeyauthCredential < Resource
10
+ property :key, validate: true
11
+ property(
12
+ :consumer_id,
13
+ required: true, validate: true, preprocess: true, postprocess: true, as: :consumer
14
+ )
15
+ property :created_at, read_only: true, postprocess: true
16
+
17
+ def self.batch_import(data, verbose: false, test: false)
18
+ raise(Exceptions::InvalidArguments) unless data.is_a?(Array)
19
+
20
+ data.each_with_index do |resource_data, index|
21
+ resource = new
22
+ resource.key = resource_data['key']
23
+ resource.delayed_set(:consumer, resource_data, 'consumer_id')
24
+ resource.import_update_or_skip(index: index, verbose: verbose, test: test)
25
+ end
26
+ end
27
+
28
+ def self.relative_uri
29
+ 'key-auths'
30
+ end
31
+
32
+ def relative_uri
33
+ consumer ? "#{consumer.relative_uri}/key-auth/#{id}" : nil
34
+ end
35
+
36
+ def save_uri
37
+ consumer ? "#{consumer.relative_uri}/key-auth" : nil
38
+ end
39
+
40
+ def export(options = {})
41
+ hash = { 'key' => key }
42
+ hash['consumer_id'] = "<%= lookup :consumer, '#{consumer.username}' %>" if consumer
43
+ [*options[:exclude]].each do |exclude|
44
+ hash.delete(exclude.to_s)
45
+ end
46
+ [*options[:include]].each do |inc|
47
+ hash[inc.to_s] = send(inc.to_sym)
48
+ end
49
+ hash.reject { |_, value| value.nil? }
50
+ end
51
+
52
+ # Keys can't be updated, only created or deleted
53
+ def modified_existing?
54
+ false
55
+ end
56
+
57
+ private
58
+
59
+ def postprocess_consumer_id(value)
60
+ if value.is_a?(String)
61
+ Consumer.new(
62
+ entity: { 'id' => value },
63
+ lazy: true,
64
+ tainted: false
65
+ )
66
+ else
67
+ value
68
+ end
69
+ end
70
+
71
+ def preprocess_consumer_id(input)
72
+ if input.is_a?(String)
73
+ input
74
+ else
75
+ input.id
76
+ end
77
+ end
78
+
79
+ # Used to validate {#consumer} on set
80
+ def validate_consumer_id(value)
81
+ # allow either a Consumer object or a String
82
+ value.is_a?(Consumer) || value.is_a?(String)
83
+ end
84
+
85
+ # Used to validate {#key} on set
86
+ def validate_key(value)
87
+ # allow a String
88
+ value.is_a?(String)
89
+ end
90
+ end
91
+ end
92
+ end
@@ -10,7 +10,7 @@ module SkullIsland
10
10
  property :name
11
11
  property :enabled, type: :boolean
12
12
  # property :run_on # 1.0.x only
13
- property :config, validate: true
13
+ property :config, validate: true, preprocess: true, postprocess: true
14
14
  property :consumer_id, validate: true, preprocess: true, postprocess: true, as: :consumer
15
15
  property :route_id, validate: true, preprocess: true, postprocess: true, as: :route
16
16
  property :service_id, validate: true, preprocess: true, postprocess: true, as: :service
@@ -23,7 +23,7 @@ module SkullIsland
23
23
  resource = new
24
24
  resource.name = resource_data['name']
25
25
  resource.enabled = resource_data['enabled']
26
- resource.config = resource_data['config'] if resource_data['config']
26
+ resource.config = resource_data['config'].deep_sort if resource_data['config']
27
27
  resource.delayed_set(:consumer, resource_data, 'consumer_id')
28
28
  resource.delayed_set(:route, resource_data, 'route_id')
29
29
  resource.delayed_set(:service, resource_data, 'service_id')
@@ -43,7 +43,7 @@ module SkullIsland
43
43
  hash = {
44
44
  'name' => name,
45
45
  'enabled' => enabled?,
46
- 'config' => config
46
+ 'config' => config.deep_sort
47
47
  }
48
48
  hash['consumer_id'] = "<%= lookup :consumer, '#{consumer.username}' %>" if consumer
49
49
  hash['route_id'] = "<%= lookup :route, '#{route.name}' %>" if route
@@ -52,7 +52,7 @@ module SkullIsland
52
52
  hash.delete(exclude.to_s)
53
53
  end
54
54
  [*options[:include]].each do |inc|
55
- hash[inc.to_s] = send(:inc)
55
+ hash[inc.to_s] = send(inc.to_sym)
56
56
  end
57
57
  hash.reject { |_, value| value.nil? }
58
58
  end
@@ -86,6 +86,14 @@ module SkullIsland
86
86
 
87
87
  private
88
88
 
89
+ def preprocess_config(input)
90
+ input.deep_sort
91
+ end
92
+
93
+ def postprocess_config(value)
94
+ value.deep_sort
95
+ end
96
+
89
97
  # TODO: 1.0.x requires refactoring as `consumer_id` becomes `consumer`
90
98
  def postprocess_consumer_id(value)
91
99
  if value.is_a?(Hash)
@@ -68,7 +68,7 @@ module SkullIsland
68
68
  hash.delete(exclude.to_s)
69
69
  end
70
70
  [*options[:include]].each do |inc|
71
- hash[inc.to_s] = send(:inc)
71
+ hash[inc.to_s] = send(inc.to_sym)
72
72
  end
73
73
  hash.reject { |_, value| value.nil? }
74
74
  end
@@ -19,6 +19,8 @@ module SkullIsland
19
19
  property :created_at, read_only: true, postprocess: true
20
20
  property :updated_at, read_only: true, postprocess: true
21
21
 
22
+ # rubocop:disable Metrics/CyclomaticComplexity
23
+ # rubocop:disable Metrics/PerceivedComplexity
22
24
  # rubocop:disable Metrics/AbcSize
23
25
  def self.batch_import(data, verbose: false, test: false)
24
26
  raise(Exceptions::InvalidArguments) unless data.is_a?(Array)
@@ -37,12 +39,14 @@ module SkullIsland
37
39
  resource.import_update_or_skip(index: index, verbose: verbose, test: test)
38
40
 
39
41
  Route.batch_import(
40
- rdata['routes'].map { |r| r.merge('service' => { 'id' => resource.id }) },
42
+ (rdata['routes'] || []).map { |r| r.merge('service' => { 'id' => resource.id }) },
41
43
  verbose: verbose,
42
44
  test: test
43
45
  )
44
46
  end
45
47
  end
48
+ # rubocop:enable Metrics/CyclomaticComplexity
49
+ # rubocop:enable Metrics/PerceivedComplexity
46
50
  # rubocop:enable Metrics/AbcSize
47
51
 
48
52
  # Convenience method to add routes
@@ -80,7 +84,7 @@ module SkullIsland
80
84
  hash.delete(exclude.to_s)
81
85
  end
82
86
  [*options[:include]].each do |inc|
83
- hash[inc.to_s] = send(:inc)
87
+ hash[inc.to_s] = send(inc.to_sym)
84
88
  end
85
89
  hash.reject { |_, value| value.nil? }
86
90
  end
@@ -43,7 +43,7 @@ module SkullIsland
43
43
  puts '[INFO] Processing UpstreamTarget entries...' if verbose
44
44
 
45
45
  UpstreamTarget.batch_import(
46
- rdata['targets'].map { |t| t.merge('upstream_id' => resource.id) },
46
+ (rdata['targets'] || []).map { |t| t.merge('upstream_id' => resource.id) },
47
47
  verbose: verbose,
48
48
  test: test
49
49
  )
@@ -120,7 +120,7 @@ module SkullIsland
120
120
  hash.delete(exclude.to_s)
121
121
  end
122
122
  [*options[:include]].each do |inc|
123
- hash[inc.to_s] = send(:inc)
123
+ hash[inc.to_s] = send(inc.to_sym)
124
124
  end
125
125
  hash.reject { |_, value| value.nil? }
126
126
  end
@@ -51,7 +51,7 @@ module SkullIsland
51
51
  hash.delete(exclude.to_s)
52
52
  end
53
53
  [*options[:include]].each do |inc|
54
- hash[inc.to_s] = send(:inc)
54
+ hash[inc.to_s] = send(inc.to_sym)
55
55
  end
56
56
  hash.reject { |_, value| value.nil? }
57
57
  end
@@ -4,6 +4,6 @@ module SkullIsland
4
4
  VERSION = [
5
5
  0, # Major
6
6
  2, # Minor
7
- 0 # Patch
7
+ 2 # Patch
8
8
  ].join('.')
9
9
  end
data/skull_island.gemspec CHANGED
@@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
26
26
 
27
27
  spec.required_ruby_version = '~> 2.5'
28
28
 
29
+ spec.add_runtime_dependency 'deepsort', '~> 0.4'
29
30
  spec.add_runtime_dependency 'erubi', '~> 1.8'
30
31
  spec.add_runtime_dependency 'json', '~> 2.1'
31
32
  spec.add_runtime_dependency 'linguistics', '~> 2.1'
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: skull_island
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Gnagy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-03-06 00:00:00.000000000 Z
11
+ date: 2019-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: deepsort
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.4'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.4'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: erubi
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -232,8 +246,10 @@ files:
232
246
  - lib/skull_island/lru_cache.rb
233
247
  - lib/skull_island/resource.rb
234
248
  - lib/skull_island/resource_collection.rb
249
+ - lib/skull_island/resources/basicauth_credential.rb
235
250
  - lib/skull_island/resources/certificate.rb
236
251
  - lib/skull_island/resources/consumer.rb
252
+ - lib/skull_island/resources/keyauth_credential.rb
237
253
  - lib/skull_island/resources/plugin.rb
238
254
  - lib/skull_island/resources/route.rb
239
255
  - lib/skull_island/resources/service.rb