convox_api_client 0.1.0 → 0.2.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 +4 -4
- data/.travis.yml +5 -0
- data/README.md +1 -1
- data/convox_api_client.gemspec +6 -4
- data/lib/convox_api_client.rb +3 -0
- data/lib/convox_api_client/client.rb +48 -47
- data/lib/convox_api_client/version.rb +1 -1
- metadata +33 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1cc3151a9e156b1619ba0d40b3d29e6992297423
|
4
|
+
data.tar.gz: 2c9478cac7c2a17bb6f7bc98d323293323e96a7d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5f4fca50610a51738abcc1517189a3acbcc05ad30832072306e81b99ad5a1f569eec5c5f587c8ae6ec334575f2ae5f9198eb7527ec8f2d47648ec353b90caf3
|
7
|
+
data.tar.gz: d5019afb5410c5c0a284f0f268c8194b309150b5a1513a13aa9bf801923a382fea919a9c49f8c8d88049d1e2aec05426db3641731736bcb89ca0aea8c3c91ec3
|
data/.travis.yml
ADDED
data/README.md
CHANGED
data/convox_api_client.gemspec
CHANGED
@@ -20,9 +20,11 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_dependency 'httparty', '>= 0.14.0'
|
22
22
|
spec.add_dependency 'httmultiparty', '>= 0.3.16'
|
23
|
+
spec.add_dependency 'faye-websocket', '>= 0.10.6'
|
23
24
|
|
24
|
-
spec.add_development_dependency
|
25
|
-
spec.add_development_dependency
|
26
|
-
spec.add_development_dependency
|
27
|
-
spec.add_development_dependency
|
25
|
+
spec.add_development_dependency 'bundler', '~> 1.14'
|
26
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
27
|
+
spec.add_development_dependency 'rspec', '~> 3.5'
|
28
|
+
spec.add_development_dependency 'webmock', '~> 2.3.2'
|
29
|
+
spec.add_development_dependency 'byebug'
|
28
30
|
end
|
data/lib/convox_api_client.rb
CHANGED
@@ -2,69 +2,54 @@ module Convox
|
|
2
2
|
module Api
|
3
3
|
class Client
|
4
4
|
include HTTMultiParty
|
5
|
-
debug_output $stdout
|
6
5
|
format :json
|
7
6
|
base_uri 'https://console.convox.com'
|
8
7
|
|
9
|
-
def initialize(api_key)
|
8
|
+
def initialize(api_key, debug = false)
|
10
9
|
raise 'api_key must be set' if api_key.nil?
|
11
10
|
@api_key = api_key
|
11
|
+
self.class.debug_output $stdout if debug
|
12
12
|
end
|
13
13
|
|
14
14
|
def apps(rack: nil)
|
15
|
-
|
16
|
-
query[:rack] = rack if rack
|
17
|
-
parsed_response!(self.class.get('/apps', query: query, headers: authorization_headers))
|
15
|
+
parsed_response!(self.class.get('/apps', headers: headers(rack: rack)))
|
18
16
|
end
|
19
17
|
|
20
18
|
def create_app(name, rack: nil)
|
21
19
|
query = {name: name}
|
22
|
-
query
|
23
|
-
parsed_response!(self.class.post('/apps', query: query, headers: authorization_headers))
|
20
|
+
parsed_response!(self.class.post('/apps', query: query, headers: headers(rack: rack)))
|
24
21
|
end
|
25
22
|
|
26
23
|
def delete_app(name, rack: nil)
|
27
|
-
|
28
|
-
query[:rack] = rack if rack
|
29
|
-
parsed_response!(self.class.delete("/apps/#{name}", query: query, headers: authorization_headers))
|
24
|
+
parsed_response!(self.class.delete("/apps/#{name}", headers: headers(rack: rack)))
|
30
25
|
end
|
31
26
|
|
32
27
|
def app(app, rack: nil)
|
33
|
-
|
34
|
-
query[:rack] = rack if rack
|
35
|
-
parsed_response!(self.class.get("/apps/#{app}", query: query, headers: authorization_headers))
|
28
|
+
parsed_response!(self.class.get("/apps/#{app}", headers: headers(rack: rack)))
|
36
29
|
end
|
37
30
|
|
38
31
|
def app_builds(app, rack: nil)
|
39
|
-
|
40
|
-
query[:rack] = rack if rack
|
41
|
-
parsed_response!(self.class.get("/apps/#{app}/builds", query: query, headers: authorization_headers))
|
32
|
+
parsed_response!(self.class.get("/apps/#{app}/builds", headers: headers(rack: rack)))
|
42
33
|
end
|
43
34
|
|
44
35
|
def create_app_build(app, rack: nil, cache: nil, description: nil, manifest: 'docker-compose.yml', repo: nil, source: nil)
|
45
36
|
query = {}
|
46
|
-
query[:rack] = rack if rack
|
47
37
|
query[:cache] = cache if cache
|
48
38
|
query[:description] = description if description
|
49
39
|
query[:manifest] = manifest if manifest
|
50
40
|
query[:repo] = repo if repo
|
51
41
|
query[:source] = source if source
|
52
42
|
|
53
|
-
parsed_response!(self.class.post("/apps/#{app}/builds", query: query, headers:
|
43
|
+
parsed_response!(self.class.post("/apps/#{app}/builds", query: query, headers: headers(rack: rack)))
|
54
44
|
end
|
55
45
|
|
56
46
|
# API not functioning
|
57
47
|
def delete_app_build(app, build, rack: nil)
|
58
|
-
|
59
|
-
query[:rack] = rack if rack
|
60
|
-
parsed_response!(self.class.delete("/apps/#{app}/builds/#{build}", query: query, headers: authorization_headers))
|
48
|
+
parsed_response!(self.class.delete("/apps/#{app}/builds/#{build}", headers: headers(rack: rack)))
|
61
49
|
end
|
62
50
|
|
63
|
-
# API not functioning
|
64
51
|
def app_build(app, build, rack: nil)
|
65
|
-
|
66
|
-
query[:rack] = rack if rack
|
67
|
-
parsed_response!(self.class.delete("/apps/#{app}/builds/#{build}", query: query, headers: authorization_headers))
|
52
|
+
parsed_response!(self.class.get("/apps/#{app}/builds/#{build}", headers: headers(rack: rack)))
|
68
53
|
end
|
69
54
|
|
70
55
|
def update_app_build(app, build, rack: nil)
|
@@ -72,21 +57,16 @@ module Convox
|
|
72
57
|
end
|
73
58
|
|
74
59
|
def app_environment(app, rack: nil)
|
75
|
-
|
76
|
-
query[:rack] = rack if rack
|
77
|
-
parsed_response!(self.class.get("/apps/#{app}/environment", query: query, headers: authorization_headers))
|
60
|
+
parsed_response!(self.class.get("/apps/#{app}/environment", headers: headers(rack: rack)))
|
78
61
|
end
|
79
62
|
|
80
63
|
def set_app_environment(app, environment, rack: nil)
|
81
|
-
|
82
|
-
|
83
|
-
parsed_response!(self.class.post("/apps/#{app}/environment", query: query, body: environment, headers: authorization_headers))
|
64
|
+
environment = environment.to_a.collect{|e| e.join "="}.join "\n"
|
65
|
+
parsed_response!(self.class.post("/apps/#{app}/environment", body: environment, headers: headers(rack: rack)))
|
84
66
|
end
|
85
67
|
|
86
68
|
def delete_app_environment_key(app, key, rack: nil)
|
87
|
-
query
|
88
|
-
query[:rack] = rack if rack
|
89
|
-
parsed_response!(self.class.delete("/apps/#{app}/environment/#{key}", query: query, headers: authorization_headers))
|
69
|
+
parsed_response!(self.class.delete("/apps/#{app}/environment/#{key}", query: query, headers: headers(rack: rack)))
|
90
70
|
end
|
91
71
|
|
92
72
|
def app_formation(app, rack: nil)
|
@@ -122,27 +102,19 @@ module Convox
|
|
122
102
|
end
|
123
103
|
|
124
104
|
def app_releases(app, rack: nil)
|
125
|
-
|
126
|
-
query[:rack] = rack if rack
|
127
|
-
parsed_response!(self.class.get("/apps/#{app}/releases", query: query, headers: authorization_headers))
|
105
|
+
parsed_response!(self.class.get("/apps/#{app}/releases", headers: headers(rack: rack)))
|
128
106
|
end
|
129
107
|
|
130
108
|
def app_release(app, release, rack: nil)
|
131
|
-
|
132
|
-
query[:rack] = rack if rack
|
133
|
-
parsed_response!(self.class.get("/apps/#{app}/releases/#{release}", query: query, headers: authorization_headers))
|
109
|
+
parsed_response!(self.class.get("/apps/#{app}/releases/#{release}", headers: headers(rack: rack)))
|
134
110
|
end
|
135
111
|
|
136
112
|
def promote_app_release(app, release, rack: nil)
|
137
|
-
|
138
|
-
query[:rack] = rack if rack
|
139
|
-
parsed_response!(self.class.get("/apps/#{app}/releases/#{release}/promote", query: query, headers: authorization_headers))
|
113
|
+
parsed_response!(self.class.post("/apps/#{app}/releases/#{release}/promote", headers: headers(rack: rack)))
|
140
114
|
end
|
141
115
|
|
142
116
|
def app_ssls(app, rack: nil)
|
143
|
-
|
144
|
-
query[:rack] = rack if rack
|
145
|
-
parsed_response!(self.class.get("/apps/#{app}/ssl", query: query, headers: authorization_headers))
|
117
|
+
parsed_response!(self.class.get("/apps/#{app}/ssl", headers: headers(rack: rack)))
|
146
118
|
end
|
147
119
|
|
148
120
|
def set_app_ssl(app, process, port, rack: nil)
|
@@ -225,12 +197,41 @@ module Convox
|
|
225
197
|
raise 'Not implemented'
|
226
198
|
end
|
227
199
|
|
228
|
-
|
200
|
+
# Not documented in Swagger
|
201
|
+
def app_logs(app, rack: nil)
|
202
|
+
logs = []
|
203
|
+
EM.run {
|
204
|
+
ws = Faye::WebSocket::Client.new("wss://console.convox.com/apps/#{app}/logs", nil, {headers: headers(rack)})
|
205
|
+
|
206
|
+
ws.on :open do |event|
|
207
|
+
EventMachine.add_timer 2, proc { ws.close }
|
208
|
+
end
|
209
|
+
|
210
|
+
ws.on :message do |event|
|
211
|
+
logs << event.data
|
212
|
+
end
|
213
|
+
|
214
|
+
ws.on :close do |event|
|
215
|
+
p [:close, event.code, event.reason]
|
216
|
+
ws = nil
|
217
|
+
EM.stop_event_loop
|
218
|
+
end
|
219
|
+
}
|
220
|
+
logs
|
221
|
+
end
|
222
|
+
|
223
|
+
private
|
229
224
|
def parsed_response!(response)
|
230
225
|
raise "Error: #{response.code} #{response.body}" unless response.code == 200
|
231
226
|
response.parsed_response
|
232
227
|
end
|
233
228
|
|
229
|
+
def headers(rack: nil)
|
230
|
+
headers = {}
|
231
|
+
headers[:rack] = rack if rack
|
232
|
+
headers.merge authorization_headers
|
233
|
+
end
|
234
|
+
|
234
235
|
def authorization_headers
|
235
236
|
auth_b64 = Base64.encode64("convox:#{@api_key}")
|
236
237
|
{'Authorization' => "Basic #{auth_b64}"}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: convox_api_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- fw.matt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-02-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 0.3.16
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: faye-websocket
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.10.6
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.10.6
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: bundler
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,14 +86,28 @@ dependencies:
|
|
72
86
|
requirements:
|
73
87
|
- - "~>"
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: '3.
|
89
|
+
version: '3.5'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3.5'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: webmock
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 2.3.2
|
76
104
|
type: :development
|
77
105
|
prerelease: false
|
78
106
|
version_requirements: !ruby/object:Gem::Requirement
|
79
107
|
requirements:
|
80
108
|
- - "~>"
|
81
109
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
110
|
+
version: 2.3.2
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: byebug
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -103,6 +131,7 @@ extra_rdoc_files: []
|
|
103
131
|
files:
|
104
132
|
- ".gitignore"
|
105
133
|
- ".rspec"
|
134
|
+
- ".travis.yml"
|
106
135
|
- CODE_OF_CONDUCT.md
|
107
136
|
- Gemfile
|
108
137
|
- LICENSE.txt
|