scalingo 3.0.0.beta.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 +7 -0
- data/.gitignore +6 -0
- data/.rubocop.yml +16 -0
- data/.travis.yml +24 -0
- data/CHANGELOG.md +29 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +110 -0
- data/LICENSE.txt +22 -0
- data/README.md +147 -0
- data/Rakefile +6 -0
- data/bin/console +12 -0
- data/bin/setup +8 -0
- data/lib/scalingo.rb +2 -0
- data/lib/scalingo/api/client.rb +79 -0
- data/lib/scalingo/api/endpoint.rb +23 -0
- data/lib/scalingo/api/response.rb +71 -0
- data/lib/scalingo/auth.rb +21 -0
- data/lib/scalingo/auth/keys.rb +56 -0
- data/lib/scalingo/auth/scm_integrations.rb +57 -0
- data/lib/scalingo/auth/tokens.rb +78 -0
- data/lib/scalingo/auth/two_factor_auth.rb +61 -0
- data/lib/scalingo/auth/user.rb +31 -0
- data/lib/scalingo/bearer_token.rb +20 -0
- data/lib/scalingo/client.rb +105 -0
- data/lib/scalingo/config.rb +38 -0
- data/lib/scalingo/error/expired_token.rb +6 -0
- data/lib/scalingo/error/unauthenticated.rb +6 -0
- data/lib/scalingo/errors.rb +2 -0
- data/lib/scalingo/regional.rb +35 -0
- data/lib/scalingo/regional/addons.rb +109 -0
- data/lib/scalingo/regional/apps.rb +109 -0
- data/lib/scalingo/regional/collaborators.rb +57 -0
- data/lib/scalingo/regional/containers.rb +57 -0
- data/lib/scalingo/regional/deployments.rb +44 -0
- data/lib/scalingo/regional/domains.rb +70 -0
- data/lib/scalingo/regional/environment.rb +83 -0
- data/lib/scalingo/regional/events.rb +55 -0
- data/lib/scalingo/regional/logs.rb +38 -0
- data/lib/scalingo/regional/metrics.rb +41 -0
- data/lib/scalingo/regional/notifiers.rb +96 -0
- data/lib/scalingo/regional/operations.rb +18 -0
- data/lib/scalingo/regional/scm_repo_links.rb +109 -0
- data/lib/scalingo/version.rb +3 -0
- data/samples/auth/keys/_meta.json +13 -0
- data/samples/auth/keys/all-200.json +62 -0
- data/samples/auth/keys/create-201.json +67 -0
- data/samples/auth/keys/create-422.json +34 -0
- data/samples/auth/keys/destroy-204.json +19 -0
- data/samples/auth/keys/destroy-404.json +19 -0
- data/samples/auth/keys/show-200.json +60 -0
- data/samples/auth/keys/show-404.json +19 -0
- data/samples/auth/scm_integrations/_meta.json +14 -0
- data/samples/auth/scm_integrations/all-200.json +41 -0
- data/samples/auth/scm_integrations/create-201.json +41 -0
- data/samples/auth/scm_integrations/create-422.json +36 -0
- data/samples/auth/scm_integrations/destroy-204.json +15 -0
- data/samples/auth/scm_integrations/destroy-404.json +23 -0
- data/samples/auth/scm_integrations/show-200.json +34 -0
- data/samples/auth/scm_integrations/show-404.json +23 -0
- data/samples/auth/tokens/_meta.json +13 -0
- data/samples/auth/tokens/all-200.json +32 -0
- data/samples/auth/tokens/create-201.json +37 -0
- data/samples/auth/tokens/destroy-204.json +19 -0
- data/samples/auth/tokens/destroy-404.json +19 -0
- data/samples/auth/tokens/exchange-200.json +25 -0
- data/samples/auth/tokens/exchange-401.json +24 -0
- data/samples/auth/tokens/renew-200.json +32 -0
- data/samples/auth/tokens/renew-404.json +20 -0
- data/samples/auth/two_factor_auth/_meta.json +10 -0
- data/samples/auth/two_factor_auth/disable-not-initiated.json +23 -0
- data/samples/auth/two_factor_auth/disable-success.json +29 -0
- data/samples/auth/two_factor_auth/initiate-already-enabled.json +29 -0
- data/samples/auth/two_factor_auth/initiate-success.json +36 -0
- data/samples/auth/two_factor_auth/initiate-wrong-provider.json +29 -0
- data/samples/auth/two_factor_auth/status.json +29 -0
- data/samples/auth/two_factor_auth/validate-not-initiated.json +29 -0
- data/samples/auth/two_factor_auth/validate-success.json +49 -0
- data/samples/auth/two_factor_auth/validate-wrong.json +29 -0
- data/samples/auth/user/_meta.json +10 -0
- data/samples/auth/user/self.json +54 -0
- data/samples/auth/user/update-200.json +59 -0
- data/samples/auth/user/update-422.json +33 -0
- data/samples/regional/addons/_meta.json +22 -0
- data/samples/regional/addons/categories-guest.json +36 -0
- data/samples/regional/addons/categories-logged.json +37 -0
- data/samples/regional/addons/destroy-204.json +19 -0
- data/samples/regional/addons/destroy-404.json +24 -0
- data/samples/regional/addons/find-200.json +48 -0
- data/samples/regional/addons/find-404.json +24 -0
- data/samples/regional/addons/for-200.json +50 -0
- data/samples/regional/addons/providers-guest.json +588 -0
- data/samples/regional/addons/providers-logged.json +705 -0
- data/samples/regional/addons/provision-201.json +58 -0
- data/samples/regional/addons/provision-400.json +29 -0
- data/samples/regional/addons/sso-200.json +49 -0
- data/samples/regional/addons/sso-404.json +24 -0
- data/samples/regional/addons/update-200.json +58 -0
- data/samples/regional/addons/update-404.json +30 -0
- data/samples/regional/apps/_meta.json +52 -0
- data/samples/regional/apps/all.json +99 -0
- data/samples/regional/apps/create-201.json +66 -0
- data/samples/regional/apps/create-422.json +34 -0
- data/samples/regional/apps/destroy-204.json +19 -0
- data/samples/regional/apps/destroy-404.json +24 -0
- data/samples/regional/apps/destroy-422.json +27 -0
- data/samples/regional/apps/find-200.json +60 -0
- data/samples/regional/apps/find-404.json +24 -0
- data/samples/regional/apps/logs_url.json +62 -0
- data/samples/regional/apps/rename-200.json +65 -0
- data/samples/regional/apps/rename-404.json +29 -0
- data/samples/regional/apps/rename-422.json +33 -0
- data/samples/regional/apps/transfer-200.json +65 -0
- data/samples/regional/apps/transfer-404.json +27 -0
- data/samples/regional/apps/transfer-422.json +34 -0
- data/samples/regional/apps/update-200.json +66 -0
- data/samples/regional/apps/update-stack-404.json +30 -0
- data/samples/regional/collaborators/_meta.json +17 -0
- data/samples/regional/collaborators/accept-200.json +60 -0
- data/samples/regional/collaborators/accept-400.json +24 -0
- data/samples/regional/collaborators/accept-404.json +24 -0
- data/samples/regional/collaborators/destroy-204.json +19 -0
- data/samples/regional/collaborators/destroy-404.json +24 -0
- data/samples/regional/collaborators/for-200.json +34 -0
- data/samples/regional/collaborators/invite-201.json +37 -0
- data/samples/regional/collaborators/invite-422.json +34 -0
- data/samples/regional/containers/_meta.json +25 -0
- data/samples/regional/containers/for-200.json +39 -0
- data/samples/regional/containers/restart-202.json +28 -0
- data/samples/regional/containers/restart-422.json +33 -0
- data/samples/regional/containers/scale-202.json +48 -0
- data/samples/regional/containers/scale-422.json +36 -0
- data/samples/regional/containers/sizes-guest.json +115 -0
- data/samples/regional/containers/sizes-logged.json +116 -0
- data/samples/regional/deployments/_meta.json +8 -0
- data/samples/regional/deployments/find-200.json +45 -0
- data/samples/regional/deployments/find-404.json +24 -0
- data/samples/regional/deployments/for-with-paging.json +35 -0
- data/samples/regional/deployments/for-without-pages.json +56 -0
- data/samples/regional/deployments/logs-200.json +22 -0
- data/samples/regional/deployments/logs-404.json +24 -0
- data/samples/regional/domains/_meta.json +21 -0
- data/samples/regional/domains/create-201.json +44 -0
- data/samples/regional/domains/create-422.json +33 -0
- data/samples/regional/domains/destroy-204.json +19 -0
- data/samples/regional/domains/destroy-404.json +24 -0
- data/samples/regional/domains/find-200.json +38 -0
- data/samples/regional/domains/find-404.json +24 -0
- data/samples/regional/domains/for-200.json +40 -0
- data/samples/regional/domains/update-200.json +44 -0
- data/samples/regional/domains/update-404.json +30 -0
- data/samples/regional/domains/update-422.json +33 -0
- data/samples/regional/environment/_meta.json +43 -0
- data/samples/regional/environment/bulk-destroy-204.json +19 -0
- data/samples/regional/environment/bulk-update-200.json +70 -0
- data/samples/regional/environment/create-201.json +36 -0
- data/samples/regional/environment/create-422.json +37 -0
- data/samples/regional/environment/destroy-204.json +19 -0
- data/samples/regional/environment/destroy-404.json +24 -0
- data/samples/regional/environment/for-200.json +31 -0
- data/samples/regional/environment/update-200.json +35 -0
- data/samples/regional/environment/update-404.json +30 -0
- data/samples/regional/events/_meta.json +3 -0
- data/samples/regional/events/all-200.json +619 -0
- data/samples/regional/events/categories-guest.json +66 -0
- data/samples/regional/events/categories-logged.json +67 -0
- data/samples/regional/events/for-200.json +404 -0
- data/samples/regional/events/types-guest.json +288 -0
- data/samples/regional/events/types-logged.json +289 -0
- data/samples/regional/logs/_meta.json +11 -0
- data/samples/regional/logs/archives-200.json +28 -0
- data/samples/regional/logs/get-guest-200.json +18 -0
- data/samples/regional/logs/get-logged-200.json +19 -0
- data/samples/regional/logs/get-with-limit-200.json +18 -0
- data/samples/regional/metrics/_meta.json +15 -0
- data/samples/regional/metrics/for-invalid-400.json +23 -0
- data/samples/regional/metrics/for-valid-cpu-200.json +747 -0
- data/samples/regional/metrics/for-valid-router-404.json +23 -0
- data/samples/regional/metrics/types-guest.json +66 -0
- data/samples/regional/metrics/types-logged.json +67 -0
- data/samples/regional/notifiers/_meta.json +23 -0
- data/samples/regional/notifiers/create-201.json +55 -0
- data/samples/regional/notifiers/create-404.json +30 -0
- data/samples/regional/notifiers/create-422.json +36 -0
- data/samples/regional/notifiers/destroy-204.json +19 -0
- data/samples/regional/notifiers/destroy-404.json +24 -0
- data/samples/regional/notifiers/find-200.json +47 -0
- data/samples/regional/notifiers/find-404.json +24 -0
- data/samples/regional/notifiers/for-200.json +49 -0
- data/samples/regional/notifiers/platforms-guest.json +184 -0
- data/samples/regional/notifiers/platforms-logged.json +185 -0
- data/samples/regional/notifiers/test-200.json +22 -0
- data/samples/regional/notifiers/test-404.json +25 -0
- data/samples/regional/notifiers/update-200.json +53 -0
- data/samples/regional/operations/_meta.json +5 -0
- data/samples/regional/operations/find-200.json +31 -0
- data/samples/regional/operations/find-404.json +24 -0
- data/samples/regional/scm_repo_links/_meta.json +22 -0
- data/samples/regional/scm_repo_links/create-201.json +54 -0
- data/samples/regional/scm_repo_links/destroy-204.json +15 -0
- data/samples/regional/scm_repo_links/manual-deploy-200.json +32 -0
- data/samples/regional/scm_repo_links/show-200.json +43 -0
- data/samples/regional/scm_repo_links/update-200.json +50 -0
- data/scalingo.gemspec +51 -0
- data/spec/scalingo/auth/keys_spec.rb +58 -0
- data/spec/scalingo/auth/scm_integrations_spec.rb +58 -0
- data/spec/scalingo/auth/tokens_spec.rb +74 -0
- data/spec/scalingo/auth/two_factor_auth_spec.rb +69 -0
- data/spec/scalingo/auth/user_spec.rb +25 -0
- data/spec/scalingo/regional/addons_spec.rb +133 -0
- data/spec/scalingo/regional/apps_spec.rb +137 -0
- data/spec/scalingo/regional/collaborators_spec.rb +69 -0
- data/spec/scalingo/regional/containers_spec.rb +67 -0
- data/spec/scalingo/regional/deployments_spec.rb +45 -0
- data/spec/scalingo/regional/domains_spec.rb +84 -0
- data/spec/scalingo/regional/environment_spec.rb +77 -0
- data/spec/scalingo/regional/events_spec.rb +65 -0
- data/spec/scalingo/regional/logs_spec.rb +39 -0
- data/spec/scalingo/regional/metrics_spec.rb +46 -0
- data/spec/scalingo/regional/notifiers_spec.rb +113 -0
- data/spec/scalingo/regional/operations_spec.rb +19 -0
- data/spec/scalingo/regional/scm_repo_links_spec.rb +48 -0
- metadata +488 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 9fd4bd22f57705fe4066a2f1de8d830c4557383777a49b7a7258a9e8c7b99077
|
|
4
|
+
data.tar.gz: fbf139e41c1a12c007e08b6c64e4e8d3b54d14500f7b44b14c7ba4ba8bfce7be
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 06271d0e9010d2d4835be48fa43b49545600b63f938e75ef504d17cec8434f07a9f8a5efc15cf411c9a1729c308c99a9b3504539d134530bf93acd73ec2f4565
|
|
7
|
+
data.tar.gz: 819dd71a0fb81443f934c5ed6f500c7c03105cc1113f4df60cbdb2655d4cfd057d39d38d8535b78f58d24f6deabe4c4b800c31e1022f82d719547e7646ed33d3
|
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
inherit_from: []
|
|
2
|
+
|
|
3
|
+
inherit_gem:
|
|
4
|
+
standard: config/base.yml
|
|
5
|
+
|
|
6
|
+
require:
|
|
7
|
+
- standard
|
|
8
|
+
- rubocop-performance
|
|
9
|
+
|
|
10
|
+
Style/TrailingCommaInArguments:
|
|
11
|
+
Enabled: true
|
|
12
|
+
EnforcedStyleForMultiline: consistent_comma
|
|
13
|
+
|
|
14
|
+
Style/Alias:
|
|
15
|
+
Enabled: true
|
|
16
|
+
EnforcedStyle: prefer_alias_method
|
data/.travis.yml
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
language: ruby
|
|
2
|
+
cache: bundler
|
|
3
|
+
rvm:
|
|
4
|
+
- 2.5.8
|
|
5
|
+
- 2.6.6
|
|
6
|
+
- 2.7.1
|
|
7
|
+
before_install:
|
|
8
|
+
- gem install bundler
|
|
9
|
+
install: bundle update --jobs=3 --retry=3
|
|
10
|
+
|
|
11
|
+
stages:
|
|
12
|
+
- lint
|
|
13
|
+
- test
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
include:
|
|
17
|
+
- stage: lint
|
|
18
|
+
name: "Linter"
|
|
19
|
+
language: ruby
|
|
20
|
+
rvm: 2.7.1
|
|
21
|
+
before_install:
|
|
22
|
+
- gem install bundler
|
|
23
|
+
install: bundle update --jobs=3 --retry=3
|
|
24
|
+
script: bundle exec rubocop
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
## 3.0.0.beta1 - 2020/06/12
|
|
2
|
+
|
|
3
|
+
* Full rewrite of the gem, **zero** backwards compatibility. Refer to the `README` for more information.
|
|
4
|
+
|
|
5
|
+
## 2.0.1 - 2019/12/11
|
|
6
|
+
|
|
7
|
+
* Bugfix: payload was not correctly serialized to JSON for POST/PUT/PATCH queries
|
|
8
|
+
|
|
9
|
+
## 2.0.0 - 2019/12/05
|
|
10
|
+
|
|
11
|
+
* Compatibility with new API tokens
|
|
12
|
+
* Compatibility with multi-region infrastructure
|
|
13
|
+
* Add missing resources: `regions`, `autoscalers`, `notifiers`, `alerts`
|
|
14
|
+
|
|
15
|
+
## 1.1.1 - 2019/01/08
|
|
16
|
+
|
|
17
|
+
* Update metadata on rubygems
|
|
18
|
+
|
|
19
|
+
## 1.1.0 - 2019/01/08
|
|
20
|
+
|
|
21
|
+
* Add /apps/:id/containers and /apps/:id/stats endpoints
|
|
22
|
+
|
|
23
|
+
## 1.0.0 - 2017/24/01
|
|
24
|
+
|
|
25
|
+
* First tag 1.0.0, API won't be broken
|
|
26
|
+
|
|
27
|
+
## 1.0.0.alpha1
|
|
28
|
+
|
|
29
|
+
* Initial alpha release
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
scalingo (3.0.0.beta.1)
|
|
5
|
+
activemodel (>= 5, < 7)
|
|
6
|
+
activesupport (>= 5, < 7)
|
|
7
|
+
dry-configurable (~> 0.11)
|
|
8
|
+
faraday (~> 1.0.1)
|
|
9
|
+
faraday_middleware (~> 1.0.0)
|
|
10
|
+
multi_json (~> 1.0, >= 1.0.3)
|
|
11
|
+
|
|
12
|
+
GEM
|
|
13
|
+
remote: https://rubygems.org/
|
|
14
|
+
specs:
|
|
15
|
+
activemodel (6.0.3.1)
|
|
16
|
+
activesupport (= 6.0.3.1)
|
|
17
|
+
activesupport (6.0.3.1)
|
|
18
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
19
|
+
i18n (>= 0.7, < 2)
|
|
20
|
+
minitest (~> 5.1)
|
|
21
|
+
tzinfo (~> 1.1)
|
|
22
|
+
zeitwerk (~> 2.2, >= 2.2.2)
|
|
23
|
+
addressable (2.7.0)
|
|
24
|
+
public_suffix (>= 2.0.2, < 5.0)
|
|
25
|
+
ast (2.4.0)
|
|
26
|
+
coderay (1.1.2)
|
|
27
|
+
concurrent-ruby (1.1.6)
|
|
28
|
+
crack (0.4.3)
|
|
29
|
+
safe_yaml (~> 1.0.0)
|
|
30
|
+
diff-lcs (1.3)
|
|
31
|
+
dry-configurable (0.11.5)
|
|
32
|
+
concurrent-ruby (~> 1.0)
|
|
33
|
+
dry-core (~> 0.4, >= 0.4.7)
|
|
34
|
+
dry-equalizer (~> 0.2)
|
|
35
|
+
dry-core (0.4.9)
|
|
36
|
+
concurrent-ruby (~> 1.0)
|
|
37
|
+
dry-equalizer (0.3.0)
|
|
38
|
+
faraday (1.0.1)
|
|
39
|
+
multipart-post (>= 1.2, < 3)
|
|
40
|
+
faraday_middleware (1.0.0)
|
|
41
|
+
faraday (~> 1.0)
|
|
42
|
+
hashdiff (1.0.1)
|
|
43
|
+
i18n (1.8.3)
|
|
44
|
+
concurrent-ruby (~> 1.0)
|
|
45
|
+
method_source (1.0.0)
|
|
46
|
+
minitest (5.14.1)
|
|
47
|
+
multi_json (1.14.1)
|
|
48
|
+
multipart-post (2.1.1)
|
|
49
|
+
parallel (1.19.1)
|
|
50
|
+
parser (2.7.1.2)
|
|
51
|
+
ast (~> 2.4.0)
|
|
52
|
+
pry (0.13.1)
|
|
53
|
+
coderay (~> 1.1)
|
|
54
|
+
method_source (~> 1.0)
|
|
55
|
+
public_suffix (4.0.4)
|
|
56
|
+
rainbow (3.0.0)
|
|
57
|
+
rake (10.5.0)
|
|
58
|
+
rexml (3.2.4)
|
|
59
|
+
rspec (3.9.0)
|
|
60
|
+
rspec-core (~> 3.9.0)
|
|
61
|
+
rspec-expectations (~> 3.9.0)
|
|
62
|
+
rspec-mocks (~> 3.9.0)
|
|
63
|
+
rspec-core (3.9.1)
|
|
64
|
+
rspec-support (~> 3.9.1)
|
|
65
|
+
rspec-expectations (3.9.1)
|
|
66
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
67
|
+
rspec-support (~> 3.9.0)
|
|
68
|
+
rspec-mocks (3.9.1)
|
|
69
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
70
|
+
rspec-support (~> 3.9.0)
|
|
71
|
+
rspec-support (3.9.2)
|
|
72
|
+
rubocop (0.83.0)
|
|
73
|
+
parallel (~> 1.10)
|
|
74
|
+
parser (>= 2.7.0.1)
|
|
75
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
76
|
+
rexml
|
|
77
|
+
ruby-progressbar (~> 1.7)
|
|
78
|
+
unicode-display_width (>= 1.4.0, < 2.0)
|
|
79
|
+
rubocop-performance (1.5.2)
|
|
80
|
+
rubocop (>= 0.71.0)
|
|
81
|
+
ruby-progressbar (1.10.1)
|
|
82
|
+
safe_yaml (1.0.5)
|
|
83
|
+
standard (0.4.2)
|
|
84
|
+
rubocop (~> 0.83.0)
|
|
85
|
+
rubocop-performance (~> 1.5.2)
|
|
86
|
+
thread_safe (0.3.6)
|
|
87
|
+
tzinfo (1.2.7)
|
|
88
|
+
thread_safe (~> 0.1)
|
|
89
|
+
unicode-display_width (1.7.0)
|
|
90
|
+
webmock (3.8.3)
|
|
91
|
+
addressable (>= 2.3.6)
|
|
92
|
+
crack (>= 0.3.2)
|
|
93
|
+
hashdiff (>= 0.4.0, < 2.0.0)
|
|
94
|
+
zeitwerk (2.3.0)
|
|
95
|
+
|
|
96
|
+
PLATFORMS
|
|
97
|
+
ruby
|
|
98
|
+
|
|
99
|
+
DEPENDENCIES
|
|
100
|
+
bundler (~> 2.0)
|
|
101
|
+
pry (~> 0.13.1)
|
|
102
|
+
rake (~> 10.0)
|
|
103
|
+
rspec (~> 3.0)
|
|
104
|
+
rubocop (~> 0.83.0)
|
|
105
|
+
scalingo!
|
|
106
|
+
standard (~> 0.4.2)
|
|
107
|
+
webmock (~> 3.8.0)
|
|
108
|
+
|
|
109
|
+
BUNDLED WITH
|
|
110
|
+
2.1.4
|
data/LICENSE.txt
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Copyright (c) 2014 aki017
|
|
2
|
+
|
|
3
|
+
MIT License
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
6
|
+
a copy of this software and associated documentation files (the
|
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
11
|
+
the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be
|
|
14
|
+
included in all copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# Scalingo
|
|
2
|
+
|
|
3
|
+
A ruby wrapper for the Scalingo API
|
|
4
|
+
|
|
5
|
+
### Migration from v2
|
|
6
|
+
|
|
7
|
+
This gem is changing its name from `scalingo-ruby-api` to `scalingo`,
|
|
8
|
+
and the versionning does **not** reset; the first major version of `scalingo`
|
|
9
|
+
will therefore be `3.x.x`.
|
|
10
|
+
|
|
11
|
+
You can check the version 2 at [the v2 branch of this repository](https://github.com/Scalingo/scalingo-ruby-api/tree/v2)
|
|
12
|
+
|
|
13
|
+
### The road to 3.0.0
|
|
14
|
+
|
|
15
|
+
This gem is still in beta version, but its API should not change a lot until a final release.
|
|
16
|
+
However, configuration may change. An issue will be opened and pinned to follow up the work that remains to be done.
|
|
17
|
+
|
|
18
|
+
## Installation
|
|
19
|
+
|
|
20
|
+
```ruby
|
|
21
|
+
gem "scalingo", "3.0.0.beta.1"
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
And then execute:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
bundle
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Usage
|
|
31
|
+
|
|
32
|
+
```ruby
|
|
33
|
+
require "scalingo"
|
|
34
|
+
|
|
35
|
+
scalingo = Scalingo::Client.new
|
|
36
|
+
scalingo.authenticate_with(access_token: ENV["SCALINGO_TOKEN"])
|
|
37
|
+
scalingo.user.self
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Conventions
|
|
41
|
+
|
|
42
|
+
Most methods map to one (and only one) request, and their signature follows this format:
|
|
43
|
+
|
|
44
|
+
```ruby
|
|
45
|
+
client.section.request(id, payload = {}, headers = nil, &block)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
* Depending on the request, there may be no id (collection and/or singular resource, such as `user`), one, or two ids (many resources are nested under an app).
|
|
49
|
+
* Most of the time, this library won't do any processing of the payload, but there's a few things to know:
|
|
50
|
+
* the root key shouldn't be specified, the library handles it
|
|
51
|
+
* in some cases, the payload isn't passed as supplied (`metrics`, for instance, extracts the parts that are meant to be used as url fragments)
|
|
52
|
+
* headers can be supplied on a per-request basis, using either the last argument or the block version:
|
|
53
|
+
* when using the last argument, you may have to pass an empty hash payload (`{}`)
|
|
54
|
+
* when using the block form, the faraday object is supplied as argument, and you can do any kind of treatment you would like
|
|
55
|
+
|
|
56
|
+
## Configuration
|
|
57
|
+
|
|
58
|
+
```ruby
|
|
59
|
+
Scalingo.configure do |config|
|
|
60
|
+
# Known regions. Each region should have a corresponding entry in the urls settings below
|
|
61
|
+
config.regions = %i[osc_fr1 osc_secnum_fr1]
|
|
62
|
+
|
|
63
|
+
# Default region
|
|
64
|
+
config.defaul_region = :osc_fr1
|
|
65
|
+
|
|
66
|
+
# Endpoints URLS
|
|
67
|
+
config.urls.auth = "https://auth.scalingo.com/v1"
|
|
68
|
+
config.urls.osc_fr1 = "https://api.osc-fr1.scalingo.com/v1"
|
|
69
|
+
config.urls.osc_secnum_fr1 = "https://api.osc-secnum-fr1.scalingo.com/v1"
|
|
70
|
+
|
|
71
|
+
# Configure the User Agent header
|
|
72
|
+
config.user_agent = "Scalingo Ruby Client v#{Scalingo::VERSION}"
|
|
73
|
+
|
|
74
|
+
# For how long is a bearer token considered valid (it will raise passed this delay).
|
|
75
|
+
# Set to nil to never raise.
|
|
76
|
+
config.exchanged_token_validity = 1.hour
|
|
77
|
+
|
|
78
|
+
# Raise an exception when trying to use an authenticated connection without a bearer token set
|
|
79
|
+
# Having this setting to true prevents performing requests that would fail due to lack of authentication headers.
|
|
80
|
+
config.raise_on_missing_authentication = true
|
|
81
|
+
|
|
82
|
+
# These headers will be added to every request. Individual methods may override them.
|
|
83
|
+
# This should be a hash or a callable object that returns a hash.
|
|
84
|
+
config.additional_headers = {}
|
|
85
|
+
|
|
86
|
+
# Raise an exception when the bearer token in use is supposed to be invalid
|
|
87
|
+
config.raise_on_expired_token = false
|
|
88
|
+
end
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
:warning: If you change the settings for the list of regions, you **cannot** use `require "scalingo"`; you must follow this template :
|
|
92
|
+
|
|
93
|
+
```ruby
|
|
94
|
+
|
|
95
|
+
require "scalingo/config"
|
|
96
|
+
|
|
97
|
+
Scalingo.configure do |config|
|
|
98
|
+
config.regions = %i[my-regions]
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
require "scalingo/client"
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Response object
|
|
105
|
+
|
|
106
|
+
Responses are parsed with the keys symbolized and then encapsulated in a `Scalingo::API::Response` object:
|
|
107
|
+
* `response.status` containts the HTTP status code
|
|
108
|
+
* `response.data` contains the "relevant" data, without the json root key (when relevant)
|
|
109
|
+
* `response.full_data` contains the full response body
|
|
110
|
+
* `response.meta` contains the meta object, if there's any
|
|
111
|
+
* `response.headers` containts all the response headers
|
|
112
|
+
|
|
113
|
+
Some helper methods are defined on this object:
|
|
114
|
+
* `response.successful?` returns true when the code is 2XX
|
|
115
|
+
* `response.paginated?` returns true if the reponse has metadata relative to pagination
|
|
116
|
+
* `response.operation?` returns true if the response contains a header relative to an ongoing operation
|
|
117
|
+
* `response.operation` returns the URL to query to get the status of the operation
|
|
118
|
+
|
|
119
|
+
## Examples
|
|
120
|
+
|
|
121
|
+
```ruby
|
|
122
|
+
require "scalingo"
|
|
123
|
+
|
|
124
|
+
scalingo = Scalingo::Client.new
|
|
125
|
+
|
|
126
|
+
scalingo.authenticate_with(access_token: "my_access_token")
|
|
127
|
+
# OR
|
|
128
|
+
scalingo.authenticate_with(bearer_token: "my_bearer_jwt")
|
|
129
|
+
|
|
130
|
+
# Return your profile
|
|
131
|
+
scalingo.self
|
|
132
|
+
|
|
133
|
+
# List your SSH Keys
|
|
134
|
+
scalingo.keys.all # OR scalingo.auth.keys.all
|
|
135
|
+
|
|
136
|
+
# Show one SSH Key
|
|
137
|
+
scalingo.keys.show("my-key-id")
|
|
138
|
+
|
|
139
|
+
# List your apps on the default region
|
|
140
|
+
scalingo.apps.all # OR scalingo.region.apps.all
|
|
141
|
+
|
|
142
|
+
# List your apps on osc-fr1
|
|
143
|
+
scalingo.osc_fr1.apps.all
|
|
144
|
+
|
|
145
|
+
# Preview the creation of an app on the default region
|
|
146
|
+
scalingo.apps.create(name: "my-new-app", dry_run: true)
|
|
147
|
+
```
|
data/Rakefile
ADDED
data/bin/console
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require "bundler/setup"
|
|
4
|
+
require "scalingo"
|
|
5
|
+
|
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
|
8
|
+
|
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
|
10
|
+
require "pry"
|
|
11
|
+
|
|
12
|
+
Pry.start
|
data/bin/setup
ADDED
data/lib/scalingo.rb
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
module Scalingo
|
|
2
|
+
module API
|
|
3
|
+
class Client
|
|
4
|
+
attr_reader :scalingo, :url
|
|
5
|
+
|
|
6
|
+
def initialize(scalingo, url)
|
|
7
|
+
@scalingo = scalingo
|
|
8
|
+
@url = url
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.register_handlers!(handlers)
|
|
12
|
+
handlers.each do |method_name, klass|
|
|
13
|
+
define_method(method_name) do
|
|
14
|
+
value = instance_variable_get("@#{method_name}")
|
|
15
|
+
|
|
16
|
+
if value.nil?
|
|
17
|
+
value = klass.new(self)
|
|
18
|
+
instance_variable_set("@#{method_name}", value)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
value
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
## Faraday objects
|
|
27
|
+
def connection_options
|
|
28
|
+
headers = {
|
|
29
|
+
"User-Agent" => Scalingo.config.user_agent
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (extra = Scalingo.config.additional_headers).present?
|
|
33
|
+
extra.respond_to?(:call) ? headers.update(extra.call) : headers.update(extra)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
{
|
|
37
|
+
url: url,
|
|
38
|
+
headers: headers
|
|
39
|
+
}
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def connection(allow_guest: false)
|
|
43
|
+
if allow_guest
|
|
44
|
+
begin
|
|
45
|
+
authenticated_connection
|
|
46
|
+
rescue
|
|
47
|
+
unauthenticated_connection
|
|
48
|
+
end
|
|
49
|
+
else
|
|
50
|
+
authenticated_connection
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def unauthenticated_connection
|
|
55
|
+
@unauthenticated_conn ||= Faraday.new(connection_options) { |conn|
|
|
56
|
+
conn.response :json, content_type: /\bjson$/, parser_options: {symbolize_names: true}
|
|
57
|
+
}
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def authenticated_connection
|
|
61
|
+
return @connection if @connection
|
|
62
|
+
|
|
63
|
+
if Scalingo.config.raise_on_missing_authentication && !scalingo.token&.value
|
|
64
|
+
raise Error::Unauthenticated
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
@connection = Faraday.new(connection_options) { |conn|
|
|
68
|
+
conn.response :json, content_type: /\bjson$/, parser_options: {symbolize_names: true}
|
|
69
|
+
conn.request :json
|
|
70
|
+
|
|
71
|
+
if scalingo.token&.value
|
|
72
|
+
auth_header = Faraday::Request::Authorization.header "Bearer", scalingo.token.value
|
|
73
|
+
conn.headers[Faraday::Request::Authorization::KEY] = auth_header
|
|
74
|
+
end
|
|
75
|
+
}
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|