scalingo 3.0.0.beta.2 → 3.0.0.beta.3

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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +8 -0
  3. data/CHANGELOG.md +11 -0
  4. data/README.md +4 -14
  5. data/lib/scalingo/api/client.rb +38 -10
  6. data/lib/scalingo/api/endpoint.rb +12 -2
  7. data/lib/scalingo/api/response.rb +7 -1
  8. data/lib/scalingo/auth/keys.rb +4 -4
  9. data/lib/scalingo/auth/scm_integrations.rb +4 -4
  10. data/lib/scalingo/auth/tokens.rb +6 -6
  11. data/lib/scalingo/auth/two_factor_auth.rb +4 -4
  12. data/lib/scalingo/auth/user.rb +2 -2
  13. data/lib/scalingo/bearer_token.rb +15 -0
  14. data/lib/scalingo/billing/profile.rb +3 -3
  15. data/lib/scalingo/client.rb +26 -113
  16. data/lib/scalingo/configuration.rb +7 -36
  17. data/lib/scalingo/core_client.rb +106 -0
  18. data/lib/scalingo/regional/addons.rb +21 -8
  19. data/lib/scalingo/regional/apps.rb +8 -8
  20. data/lib/scalingo/regional/collaborators.rb +4 -4
  21. data/lib/scalingo/regional/containers.rb +4 -4
  22. data/lib/scalingo/regional/deployments.rb +3 -3
  23. data/lib/scalingo/regional/domains.rb +5 -5
  24. data/lib/scalingo/regional/environment.rb +6 -6
  25. data/lib/scalingo/regional/events.rb +4 -4
  26. data/lib/scalingo/regional/logs.rb +2 -2
  27. data/lib/scalingo/regional/metrics.rb +2 -2
  28. data/lib/scalingo/regional/notifiers.rb +7 -7
  29. data/lib/scalingo/regional/operations.rb +1 -1
  30. data/lib/scalingo/regional/scm_repo_links.rb +8 -8
  31. data/lib/scalingo/token_holder.rb +31 -0
  32. data/lib/scalingo/version.rb +1 -1
  33. data/samples/regional/addons/token-200.json +49 -0
  34. data/samples/regional/addons/token-404.json +24 -0
  35. data/scalingo.gemspec +1 -1
  36. data/spec/scalingo/api/client_spec.rb +58 -11
  37. data/spec/scalingo/api/endpoint_spec.rb +3 -2
  38. data/spec/scalingo/api/response_spec.rb +16 -16
  39. data/spec/scalingo/auth_spec.rb +1 -1
  40. data/spec/scalingo/billing_spec.rb +11 -0
  41. data/spec/scalingo/configuration_spec.rb +32 -30
  42. data/spec/scalingo/regional/addons_spec.rb +16 -0
  43. data/spec/scalingo/regional_spec.rb +1 -1
  44. metadata +8 -2
@@ -22,9 +22,10 @@ RSpec.describe Scalingo::API::Endpoint do
22
22
 
23
23
  describe "unpack" do
24
24
  it "forwards unpack to Response" do
25
- expect(Scalingo::API::Response).to receive(:unpack).with(client, :a, :b, :c).and_return(:d).once
25
+ mock = proc { 1 }
26
26
 
27
- expect(subject.send(:unpack, :a, :b, :c)).to eq :d
27
+ expect(Scalingo::API::Response).to receive(:unpack).with(client, key: :a, &mock).and_return(:d).once
28
+ expect(subject.send(:unpack, :a, &mock)).to eq :d
28
29
  end
29
30
  end
30
31
  end
@@ -33,19 +33,19 @@ RSpec.describe Scalingo::API::Response do
33
33
  }
34
34
 
35
35
  it "passes the client supplied" do
36
- object = described_class.unpack(:some_client, response)
36
+ object = described_class.unpack(:some_client) { response }
37
37
 
38
38
  expect(object.client).to eq :some_client
39
39
  end
40
40
 
41
41
  it "passes the response status" do
42
- object = described_class.unpack(:client, response)
42
+ object = described_class.unpack(:client) { response }
43
43
 
44
44
  expect(object.status).to eq status
45
45
  end
46
46
 
47
47
  it "passes the response headers" do
48
- object = described_class.unpack(:client, response)
48
+ object = described_class.unpack(:client) { response }
49
49
 
50
50
  expect(object.headers).to eq headers
51
51
  end
@@ -54,7 +54,7 @@ RSpec.describe Scalingo::API::Response do
54
54
  let(:body) { "" }
55
55
 
56
56
  it "without key" do
57
- object = described_class.unpack(client, response)
57
+ object = described_class.unpack(client) { response }
58
58
 
59
59
  expect(object.data).to eq ""
60
60
  expect(object.full_body).to eq ""
@@ -62,7 +62,7 @@ RSpec.describe Scalingo::API::Response do
62
62
  end
63
63
 
64
64
  it "ignores key if supplied" do
65
- object = described_class.unpack(client, response, key: :key)
65
+ object = described_class.unpack(client, key: :key) { response }
66
66
 
67
67
  expect(object.data).to eq ""
68
68
  expect(object.full_body).to eq ""
@@ -74,7 +74,7 @@ RSpec.describe Scalingo::API::Response do
74
74
  let(:body) { nil }
75
75
 
76
76
  it "without key" do
77
- object = described_class.unpack(client, response)
77
+ object = described_class.unpack(client) { response }
78
78
 
79
79
  expect(object.data).to eq nil
80
80
  expect(object.full_body).to eq nil
@@ -82,7 +82,7 @@ RSpec.describe Scalingo::API::Response do
82
82
  end
83
83
 
84
84
  it "ignores key if supplied" do
85
- object = described_class.unpack(client, response, key: :key)
85
+ object = described_class.unpack(client, key: :key) { response }
86
86
 
87
87
  expect(object.data).to eq nil
88
88
  expect(object.full_body).to eq nil
@@ -94,7 +94,7 @@ RSpec.describe Scalingo::API::Response do
94
94
  let(:body) { "this is a string body, probably due to an error" }
95
95
 
96
96
  it "without key" do
97
- object = described_class.unpack(client, response)
97
+ object = described_class.unpack(client) { response }
98
98
 
99
99
  expect(object.data).to eq body
100
100
  expect(object.full_body).to eq body
@@ -102,7 +102,7 @@ RSpec.describe Scalingo::API::Response do
102
102
  end
103
103
 
104
104
  it "ignores key if supplied" do
105
- object = described_class.unpack(client, response, key: :key)
105
+ object = described_class.unpack(client, key: :key) { response }
106
106
 
107
107
  expect(object.data).to eq body
108
108
  expect(object.full_body).to eq body
@@ -116,7 +116,7 @@ RSpec.describe Scalingo::API::Response do
116
116
  }
117
117
 
118
118
  it "without key" do
119
- object = described_class.unpack(client, response)
119
+ object = described_class.unpack(client) { response }
120
120
 
121
121
  expect(object.data).to eq body
122
122
  expect(object.full_body).to eq body
@@ -124,7 +124,7 @@ RSpec.describe Scalingo::API::Response do
124
124
  end
125
125
 
126
126
  it "ignores key if supplied" do
127
- object = described_class.unpack(client, response, key: :root)
127
+ object = described_class.unpack(client, key: :root) { response }
128
128
 
129
129
  expect(object.data).to eq body
130
130
  expect(object.full_body).to eq body
@@ -138,7 +138,7 @@ RSpec.describe Scalingo::API::Response do
138
138
  }
139
139
 
140
140
  it "without key" do
141
- object = described_class.unpack(client, response)
141
+ object = described_class.unpack(client) { response }
142
142
 
143
143
  expect(object.data).to eq body
144
144
  expect(object.full_body).to eq body
@@ -146,7 +146,7 @@ RSpec.describe Scalingo::API::Response do
146
146
  end
147
147
 
148
148
  it "with valid key" do
149
- object = described_class.unpack(client, response, key: :root)
149
+ object = described_class.unpack(client, key: :root) { response }
150
150
 
151
151
  expect(object.data).to eq({key: :value})
152
152
  expect(object.full_body).to eq body
@@ -154,7 +154,7 @@ RSpec.describe Scalingo::API::Response do
154
154
  end
155
155
 
156
156
  it "with invalid key" do
157
- object = described_class.unpack(client, response, key: :other)
157
+ object = described_class.unpack(client, key: :other) { response }
158
158
 
159
159
  expect(object.data).to eq nil
160
160
  expect(object.full_body).to eq body
@@ -167,7 +167,7 @@ RSpec.describe Scalingo::API::Response do
167
167
  }
168
168
 
169
169
  it "extracts the meta object" do
170
- object = described_class.unpack(client, response)
170
+ object = described_class.unpack(client) { response }
171
171
 
172
172
  expect(object.meta).to eq({meta1: :value})
173
173
  end
@@ -179,7 +179,7 @@ RSpec.describe Scalingo::API::Response do
179
179
  let(:body) { {root: {key: :value}} }
180
180
 
181
181
  it "does not dig in the response hash, even with a valid key" do
182
- object = described_class.unpack(client, response, key: :root)
182
+ object = described_class.unpack(client, key: :root) { response }
183
183
 
184
184
  expect(object.data).to eq body
185
185
  expect(object.full_body).to eq body
@@ -1,7 +1,7 @@
1
1
  require "spec_helper"
2
2
 
3
3
  RSpec.describe Scalingo::Auth do
4
- subject { described_class.new(:client, :url) }
4
+ subject { described_class.new("url") }
5
5
 
6
6
  %w[keys scm_integrations tokens two_factor_auth user].each do |section|
7
7
  it "handles requests for #{section}" do
@@ -0,0 +1,11 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Scalingo::Billing do
4
+ subject { described_class.new("url") }
5
+
6
+ %w[profile].each do |section|
7
+ it "handles requests for #{section}" do
8
+ expect(subject.respond_to?(section)).to be true
9
+ end
10
+ end
11
+ end
@@ -3,36 +3,6 @@ require "spec_helper"
3
3
  RSpec.describe Scalingo::Configuration do
4
4
  subject { described_class.default }
5
5
 
6
- describe "default_region" do
7
- it "must be an existing region" do
8
- expect {
9
- subject.default_region = "another-region"
10
- }.to raise_error(ArgumentError)
11
- end
12
- end
13
-
14
- describe "regions" do
15
- it "can be assigned from a hash" do
16
- subject.regions = {
17
- local_name: "some-url"
18
- }
19
-
20
- expect(subject.regions.local_name).to eq "some-url"
21
- end
22
-
23
- it "can be assigned from a openstruct" do
24
- subject.regions = OpenStruct.new(local_name: "some-url")
25
-
26
- expect(subject.regions.local_name).to eq "some-url"
27
- end
28
-
29
- it "raises with an argument from the wrong type" do
30
- expect {
31
- subject.regions = "1"
32
- }.to raise_error(ArgumentError)
33
- end
34
- end
35
-
36
6
  describe "inheritance" do
37
7
  it "can inherit configuration from a parent" do
38
8
  object = described_class.new({}, subject)
@@ -52,4 +22,36 @@ RSpec.describe Scalingo::Configuration do
52
22
  expect(object.user_agent).to eq "Agent"
53
23
  end
54
24
  end
25
+
26
+ describe "faraday adapter" do
27
+ let(:scalingo) { Scalingo::Client.new(config).tap { |s| s.authenticate_with(bearer_token: "some-token") } }
28
+ let(:client) { Scalingo::API::Client.new("http://example.test", scalingo: scalingo) }
29
+
30
+ context "when unspecified" do
31
+ let(:config) { {} }
32
+
33
+ it "uses the default one when unspecificied" do
34
+ expect(client.authenticated_connection.adapter).to eq Faraday::Adapter::NetHttp
35
+ expect(client.unauthenticated_connection.adapter).to eq Faraday::Adapter::NetHttp
36
+ end
37
+ end
38
+
39
+ context "when set to an unkown adapter" do
40
+ let(:config) { {faraday_adapter: :yo} }
41
+
42
+ it "uses the default one when unspecificied" do
43
+ expect { client.authenticated_connection.adapter }.to raise_error(Faraday::Error)
44
+ expect { client.unauthenticated_connection.adapter }.to raise_error(Faraday::Error)
45
+ end
46
+ end
47
+
48
+ context "when set to a valid adapter" do
49
+ let(:config) { {faraday_adapter: :test} }
50
+
51
+ it "uses the default one when unspecificied" do
52
+ expect(client.authenticated_connection.adapter).to eq Faraday::Adapter::Test
53
+ expect(client.unauthenticated_connection.adapter).to eq Faraday::Adapter::Test
54
+ end
55
+ end
56
+ end
55
57
  end
@@ -99,6 +99,22 @@ RSpec.describe Scalingo::Regional::Addons do
99
99
  end
100
100
  end
101
101
 
102
+ describe_method "token" do
103
+ context "success" do
104
+ let(:arguments) { [meta[:app_id], meta[:id]] }
105
+ let(:stub_pattern) { "token-200" }
106
+
107
+ it_behaves_like "a singular object response"
108
+ end
109
+
110
+ context "not found" do
111
+ let(:arguments) { [meta[:app_id], meta[:not_found_id]] }
112
+ let(:stub_pattern) { "token-404" }
113
+
114
+ it_behaves_like "a not found response"
115
+ end
116
+ end
117
+
102
118
  describe_method "update" do
103
119
  context "success" do
104
120
  let(:arguments) { [meta[:app_id], meta[:id], meta[:update][:valid]] }
@@ -1,7 +1,7 @@
1
1
  require "spec_helper"
2
2
 
3
3
  RSpec.describe Scalingo::Regional do
4
- subject { described_class.new(:client, :url) }
4
+ subject { described_class.new("url") }
5
5
 
6
6
  %w[
7
7
  addons apps collaborators containers deployments domains environment events
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scalingo
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.beta.2
4
+ version: 3.0.0.beta.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leo Unbekandt
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2020-06-18 00:00:00.000000000 Z
12
+ date: 2020-08-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -210,6 +210,7 @@ files:
210
210
  - lib/scalingo/billing/profile.rb
211
211
  - lib/scalingo/client.rb
212
212
  - lib/scalingo/configuration.rb
213
+ - lib/scalingo/core_client.rb
213
214
  - lib/scalingo/error/expired_token.rb
214
215
  - lib/scalingo/error/unauthenticated.rb
215
216
  - lib/scalingo/errors.rb
@@ -227,6 +228,7 @@ files:
227
228
  - lib/scalingo/regional/notifiers.rb
228
229
  - lib/scalingo/regional/operations.rb
229
230
  - lib/scalingo/regional/scm_repo_links.rb
231
+ - lib/scalingo/token_holder.rb
230
232
  - lib/scalingo/version.rb
231
233
  - samples/auth/keys/_meta.json
232
234
  - samples/auth/keys/all-200.json
@@ -289,6 +291,8 @@ files:
289
291
  - samples/regional/addons/provision-400.json
290
292
  - samples/regional/addons/sso-200.json
291
293
  - samples/regional/addons/sso-404.json
294
+ - samples/regional/addons/token-200.json
295
+ - samples/regional/addons/token-404.json
292
296
  - samples/regional/addons/update-200.json
293
297
  - samples/regional/addons/update-404.json
294
298
  - samples/regional/apps/_meta.json
@@ -407,6 +411,7 @@ files:
407
411
  - spec/scalingo/auth_spec.rb
408
412
  - spec/scalingo/bearer_token_spec.rb
409
413
  - spec/scalingo/billing/profile_spec.rb
414
+ - spec/scalingo/billing_spec.rb
410
415
  - spec/scalingo/client_spec.rb
411
416
  - spec/scalingo/configuration_spec.rb
412
417
  - spec/scalingo/regional/addons_spec.rb
@@ -479,3 +484,4 @@ test_files:
479
484
  - spec/scalingo/auth_spec.rb
480
485
  - spec/scalingo/billing/profile_spec.rb
481
486
  - spec/scalingo/regional_spec.rb
487
+ - spec/scalingo/billing_spec.rb