kong-client 0.4.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 +7 -0
- data/.gitignore +16 -0
- data/.hound.yml +2 -0
- data/.rubocop.yml +360 -0
- data/.travis.yml +11 -0
- data/CHANGELOG.md +37 -0
- data/Gemfile +8 -0
- data/LICENSE +191 -0
- data/README.md +295 -0
- data/Rakefile +5 -0
- data/kong.gemspec +24 -0
- data/lib/kong/acl.rb +8 -0
- data/lib/kong/api.rb +19 -0
- data/lib/kong/base.rb +180 -0
- data/lib/kong/basic_auth.rb +8 -0
- data/lib/kong/belongs_to_api.rb +30 -0
- data/lib/kong/belongs_to_consumer.rb +30 -0
- data/lib/kong/client.rb +232 -0
- data/lib/kong/consumer.rb +103 -0
- data/lib/kong/error.rb +10 -0
- data/lib/kong/hmac_auth.rb +9 -0
- data/lib/kong/jwt.rb +8 -0
- data/lib/kong/key_auth.rb +8 -0
- data/lib/kong/oauth2_token.rb +14 -0
- data/lib/kong/oauth_app.rb +8 -0
- data/lib/kong/plugin.rb +31 -0
- data/lib/kong/server.rb +23 -0
- data/lib/kong/target.rb +61 -0
- data/lib/kong/upstream.rb +24 -0
- data/lib/kong/util.rb +16 -0
- data/lib/kong/version.rb +3 -0
- data/lib/kong.rb +20 -0
- data/spec/kong/acl_spec.rb +19 -0
- data/spec/kong/api_spec.rb +32 -0
- data/spec/kong/base_spec.rb +169 -0
- data/spec/kong/basic_auth_spec.rb +26 -0
- data/spec/kong/client_spec.rb +297 -0
- data/spec/kong/consumer_spec.rb +72 -0
- data/spec/kong/error_spec.rb +23 -0
- data/spec/kong/hmac_auth_spec.rb +26 -0
- data/spec/kong/key_auth_spec.rb +26 -0
- data/spec/kong/oauth2_token_spec.rb +19 -0
- data/spec/kong/oauth_app_spec.rb +19 -0
- data/spec/kong/plugin_spec.rb +62 -0
- data/spec/kong/server_spec.rb +39 -0
- data/spec/kong/target_spec.rb +53 -0
- data/spec/kong/upstream_spec.rb +37 -0
- data/spec/kong/util_spec.rb +29 -0
- data/spec/spec_helper.rb +19 -0
- data/tasks/rspec.rake +5 -0
- metadata +153 -0
@@ -0,0 +1,62 @@
|
|
1
|
+
require_relative "../spec_helper"
|
2
|
+
|
3
|
+
describe Kong::Plugin do
|
4
|
+
let(:valid_attribute_names) do
|
5
|
+
%w(id api_id name config enabled consumer_id)
|
6
|
+
end
|
7
|
+
|
8
|
+
describe 'ATTRIBUTE_NAMES' do
|
9
|
+
it 'contains valid names' do
|
10
|
+
expect(subject.class::ATTRIBUTE_NAMES).to eq(valid_attribute_names)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe 'API_END_POINT' do
|
15
|
+
it 'contains valid end point' do
|
16
|
+
expect(subject.class::API_END_POINT).to eq('/plugins/')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#init_attributes' do
|
21
|
+
it 'uses correct api end point if api_id is present' do
|
22
|
+
subject = described_class.new({ api_id: ':api_id' })
|
23
|
+
expect(subject.api_end_point).to eq('/apis/:api_id/plugins/')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#create' do
|
28
|
+
it 'transforms config keys to config.key format' do
|
29
|
+
headers = { 'Content-Type' => 'application/json' }
|
30
|
+
attributes = { 'api_id' => ':api_id', 'config.anonymous' => '12345' }
|
31
|
+
expect(Kong::Client.instance).to receive(:post).with('/apis/:api_id/plugins/', attributes, nil, headers).and_return(attributes)
|
32
|
+
subject = described_class.new({ api_id: ':api_id', config: { 'anonymous' => '12345' } })
|
33
|
+
subject.create
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'transforms nested config keys to config.key format' do
|
37
|
+
headers = { 'Content-Type' => 'application/json' }
|
38
|
+
attributes = { 'api_id' => ':api_id', 'config.anonymous' => '12345', 'config.first.second' => '1' }
|
39
|
+
expect(Kong::Client.instance).to receive(:post).with('/apis/:api_id/plugins/', attributes, nil, headers).and_return(attributes)
|
40
|
+
subject = described_class.new({ api_id: ':api_id', config: { 'anonymous' => '12345', 'first' => { 'second' => '1' } } })
|
41
|
+
subject.create
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe '#update' do
|
46
|
+
it 'transforms config keys to config.key format' do
|
47
|
+
headers = { 'Content-Type' => 'application/json' }
|
48
|
+
attributes = { 'api_id' => ':api_id', 'config.anonymous' => '12345' }
|
49
|
+
expect(Kong::Client.instance).to receive(:patch).with('/apis/:api_id/plugins/', attributes, nil, headers).and_return(attributes)
|
50
|
+
subject = described_class.new({ api_id: ':api_id', config: { 'anonymous' => '12345' } })
|
51
|
+
subject.update
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'transforms nested config keys to config.key format' do
|
55
|
+
headers = { 'Content-Type' => 'application/json' }
|
56
|
+
attributes = { 'api_id' => ':api_id', 'config.anonymous' => '12345', 'config.first.second' => '1' }
|
57
|
+
expect(Kong::Client.instance).to receive(:patch).with('/apis/:api_id/plugins/', attributes, nil, headers).and_return(attributes)
|
58
|
+
subject = described_class.new({ api_id: ':api_id', config: { 'anonymous' => '12345', 'first' => { 'second' => '1' } } })
|
59
|
+
subject.update
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require_relative "../spec_helper"
|
2
|
+
|
3
|
+
describe Kong::Server do
|
4
|
+
describe '.info' do
|
5
|
+
it 'makes GET / request' do
|
6
|
+
expect(Kong::Client.instance).to receive(:get).with('/')
|
7
|
+
described_class.info
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '.version' do
|
12
|
+
it 'returns version information' do
|
13
|
+
allow(Kong::Client.instance).to receive(:get).with('/')
|
14
|
+
.and_return({ 'version' => '0.10.0' })
|
15
|
+
expect(described_class.version).to eq('0.10.0')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '.status' do
|
20
|
+
it 'makes GET /status request' do
|
21
|
+
expect(Kong::Client.instance).to receive(:get).with('/status')
|
22
|
+
described_class.status
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '.cluster' do
|
27
|
+
it 'makes GET /cluster request' do
|
28
|
+
expect(Kong::Client.instance).to receive(:get).with('/cluster')
|
29
|
+
described_class.cluster
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '.remove_node' do
|
34
|
+
it 'makes DELETE /cluster/nodes/:name request' do
|
35
|
+
expect(Kong::Client.instance).to receive(:delete).with('/cluster/nodes/:name')
|
36
|
+
described_class.remove_node(':name')
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require_relative "../spec_helper"
|
2
|
+
|
3
|
+
describe Kong::Target do
|
4
|
+
let(:upstream_id) { '1234' }
|
5
|
+
|
6
|
+
let(:valid_attribute_names) do
|
7
|
+
%w(id upstream_id target weight)
|
8
|
+
end
|
9
|
+
|
10
|
+
subject { described_class.new(upstream_id: upstream_id) }
|
11
|
+
|
12
|
+
context 'without an upstream_id' do
|
13
|
+
it 'raises an ArgumentError' do
|
14
|
+
expect { described_class.new }
|
15
|
+
.to raise_error(ArgumentError)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe 'ATTRIBUTE_NAMES' do
|
20
|
+
it 'contains valid names' do
|
21
|
+
expect(subject.class::ATTRIBUTE_NAMES).to eq(valid_attribute_names)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'API_END_POINT' do
|
26
|
+
it 'contains valid end point' do
|
27
|
+
expect(subject.class::API_END_POINT).to eq('/targets/')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#init_attributes' do
|
32
|
+
it 'uses the correct api end point if the upstream_id is present' do
|
33
|
+
expect(subject.api_end_point).to eq("/upstreams/#{upstream_id}/targets/")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '.upstream' do
|
38
|
+
it 'requests the attached Upstream' do
|
39
|
+
expect(Kong::Upstream).to receive(:find).with(upstream_id)
|
40
|
+
subject.upstream
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe '.active?' do
|
45
|
+
it 'returns true if the weight is > 0' do
|
46
|
+
target1 = described_class.new(upstream_id: upstream_id, target: 'google.com', weight: 100)
|
47
|
+
target2 = described_class.new(upstream_id: upstream_id, target: 'google.com', weight: 0)
|
48
|
+
|
49
|
+
expect(target1).to be_active
|
50
|
+
expect(target2).to_not be_active
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative "../spec_helper"
|
2
|
+
|
3
|
+
describe Kong::Upstream do
|
4
|
+
let(:valid_attribute_names) do
|
5
|
+
%w(id name slots orderlist)
|
6
|
+
end
|
7
|
+
|
8
|
+
describe 'ATTRIBUTE_NAMES' do
|
9
|
+
it 'contains valid names' do
|
10
|
+
expect(subject.class::ATTRIBUTE_NAMES).to eq(valid_attribute_names)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe 'API_END_POINT' do
|
15
|
+
it 'contains a valid end point' do
|
16
|
+
expect(subject.class::API_END_POINT).to eq('/upstreams/')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '.targets' do
|
21
|
+
it 'requests targets attached to the Upstream' do
|
22
|
+
subject.id = '12345'
|
23
|
+
|
24
|
+
expect(Kong::Client.instance)
|
25
|
+
.to receive(:get).with("/upstreams/12345/targets")
|
26
|
+
.and_return({
|
27
|
+
'data' => [{ 'upstream_id' => 12345, 'target' => 'google.com:80', 'weight' => 100 }],
|
28
|
+
'total' => 1
|
29
|
+
})
|
30
|
+
|
31
|
+
targets = subject.targets
|
32
|
+
|
33
|
+
expect(targets.size).to eq(1)
|
34
|
+
expect(targets.first).to be_a(Kong::Target)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative "../spec_helper"
|
2
|
+
|
3
|
+
describe Kong::Util do
|
4
|
+
describe '.flatten' do
|
5
|
+
subject { described_class.method(:flatten) }
|
6
|
+
|
7
|
+
it 'works' do
|
8
|
+
expect(subject[{
|
9
|
+
a: {
|
10
|
+
b: 1,
|
11
|
+
c: {
|
12
|
+
d: 3
|
13
|
+
}
|
14
|
+
},
|
15
|
+
b: 2
|
16
|
+
}]).to include({
|
17
|
+
"a.b" => 1,
|
18
|
+
"a.c.d" => 3,
|
19
|
+
"b" => 2,
|
20
|
+
})
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'accepts a scope' do
|
24
|
+
expect(subject[{ a: "1" }, 'config']).to eq({
|
25
|
+
"config.a" => "1"
|
26
|
+
})
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# This file was generated by the `rspec --init` command. Conventionally, all
|
2
|
+
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
3
|
+
# Require this file using `require "spec_helper"` to ensure that it is only
|
4
|
+
# loaded once.
|
5
|
+
#
|
6
|
+
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
7
|
+
|
8
|
+
require 'kong'
|
9
|
+
|
10
|
+
RSpec.configure do |config|
|
11
|
+
config.run_all_when_everything_filtered = true
|
12
|
+
config.filter_run :focus
|
13
|
+
|
14
|
+
# Run specs in random order to surface order dependencies. If you find an
|
15
|
+
# order dependency and want to debug it, you can fix the order by providing
|
16
|
+
# the seed, which is printed after each run.
|
17
|
+
# --seed 1234
|
18
|
+
config.order = 'random'
|
19
|
+
end
|
data/tasks/rspec.rake
ADDED
metadata
ADDED
@@ -0,0 +1,153 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: kong-client
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ecosystem API Team
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-02-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.17'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.17'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '12.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '12.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: excon
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: A Ruby client for the Kong API
|
56
|
+
email:
|
57
|
+
- ecosystem-apis@rdstation.com
|
58
|
+
- renan.porto@rdstation.com
|
59
|
+
- rogerio.angeliski@rdstation.com
|
60
|
+
executables: []
|
61
|
+
extensions: []
|
62
|
+
extra_rdoc_files: []
|
63
|
+
files:
|
64
|
+
- ".gitignore"
|
65
|
+
- ".hound.yml"
|
66
|
+
- ".rubocop.yml"
|
67
|
+
- ".travis.yml"
|
68
|
+
- CHANGELOG.md
|
69
|
+
- Gemfile
|
70
|
+
- LICENSE
|
71
|
+
- README.md
|
72
|
+
- Rakefile
|
73
|
+
- kong.gemspec
|
74
|
+
- lib/kong.rb
|
75
|
+
- lib/kong/acl.rb
|
76
|
+
- lib/kong/api.rb
|
77
|
+
- lib/kong/base.rb
|
78
|
+
- lib/kong/basic_auth.rb
|
79
|
+
- lib/kong/belongs_to_api.rb
|
80
|
+
- lib/kong/belongs_to_consumer.rb
|
81
|
+
- lib/kong/client.rb
|
82
|
+
- lib/kong/consumer.rb
|
83
|
+
- lib/kong/error.rb
|
84
|
+
- lib/kong/hmac_auth.rb
|
85
|
+
- lib/kong/jwt.rb
|
86
|
+
- lib/kong/key_auth.rb
|
87
|
+
- lib/kong/oauth2_token.rb
|
88
|
+
- lib/kong/oauth_app.rb
|
89
|
+
- lib/kong/plugin.rb
|
90
|
+
- lib/kong/server.rb
|
91
|
+
- lib/kong/target.rb
|
92
|
+
- lib/kong/upstream.rb
|
93
|
+
- lib/kong/util.rb
|
94
|
+
- lib/kong/version.rb
|
95
|
+
- spec/kong/acl_spec.rb
|
96
|
+
- spec/kong/api_spec.rb
|
97
|
+
- spec/kong/base_spec.rb
|
98
|
+
- spec/kong/basic_auth_spec.rb
|
99
|
+
- spec/kong/client_spec.rb
|
100
|
+
- spec/kong/consumer_spec.rb
|
101
|
+
- spec/kong/error_spec.rb
|
102
|
+
- spec/kong/hmac_auth_spec.rb
|
103
|
+
- spec/kong/key_auth_spec.rb
|
104
|
+
- spec/kong/oauth2_token_spec.rb
|
105
|
+
- spec/kong/oauth_app_spec.rb
|
106
|
+
- spec/kong/plugin_spec.rb
|
107
|
+
- spec/kong/server_spec.rb
|
108
|
+
- spec/kong/target_spec.rb
|
109
|
+
- spec/kong/upstream_spec.rb
|
110
|
+
- spec/kong/util_spec.rb
|
111
|
+
- spec/spec_helper.rb
|
112
|
+
- tasks/rspec.rake
|
113
|
+
homepage: https://github.com/ResultadosDigitais/kong-client-ruby
|
114
|
+
licenses:
|
115
|
+
- Apache-2.0
|
116
|
+
metadata: {}
|
117
|
+
post_install_message:
|
118
|
+
rdoc_options: []
|
119
|
+
require_paths:
|
120
|
+
- lib
|
121
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 2.0.0
|
126
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
131
|
+
requirements: []
|
132
|
+
rubygems_version: 3.4.6
|
133
|
+
signing_key:
|
134
|
+
specification_version: 4
|
135
|
+
summary: A Ruby client for the Kong API
|
136
|
+
test_files:
|
137
|
+
- spec/kong/acl_spec.rb
|
138
|
+
- spec/kong/api_spec.rb
|
139
|
+
- spec/kong/base_spec.rb
|
140
|
+
- spec/kong/basic_auth_spec.rb
|
141
|
+
- spec/kong/client_spec.rb
|
142
|
+
- spec/kong/consumer_spec.rb
|
143
|
+
- spec/kong/error_spec.rb
|
144
|
+
- spec/kong/hmac_auth_spec.rb
|
145
|
+
- spec/kong/key_auth_spec.rb
|
146
|
+
- spec/kong/oauth2_token_spec.rb
|
147
|
+
- spec/kong/oauth_app_spec.rb
|
148
|
+
- spec/kong/plugin_spec.rb
|
149
|
+
- spec/kong/server_spec.rb
|
150
|
+
- spec/kong/target_spec.rb
|
151
|
+
- spec/kong/upstream_spec.rb
|
152
|
+
- spec/kong/util_spec.rb
|
153
|
+
- spec/spec_helper.rb
|