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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 42e2b8582bab65a923ff12fe788b8c6564c7d546
4
- data.tar.gz: a4a024126915eeb6167914de4a38469ff201b957
3
+ metadata.gz: 1cc3151a9e156b1619ba0d40b3d29e6992297423
4
+ data.tar.gz: 2c9478cac7c2a17bb6f7bc98d323293323e96a7d
5
5
  SHA512:
6
- metadata.gz: 7a9f9f430eedea601dcde8416388cd4e3578da1ae725e0bedee1dea59b0fe46f0b965da4029738af761cab6fab839b3baf9d08112f9bc3f4c97c27181f3ed622
7
- data.tar.gz: 0dca56d19adf82be44f7841785c58c7c7e37cd9c84ade4c4479834f436e235ba880b4cc17eb2c73379697d7c5206386152aa95b6d193fae75ffec7ce69935754
6
+ metadata.gz: b5f4fca50610a51738abcc1517189a3acbcc05ad30832072306e81b99ad5a1f569eec5c5f587c8ae6ec334575f2ae5f9198eb7527ec8f2d47648ec353b90caf3
7
+ data.tar.gz: d5019afb5410c5c0a284f0f268c8194b309150b5a1513a13aa9bf801923a382fea919a9c49f8c8d88049d1e2aec05426db3641731736bcb89ca0aea8c3c91ec3
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.3.3
5
+ before_install: gem install bundler -v 1.14.3
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # ConvoxApiClient
1
+ # Convox API Client
2
2
 
3
3
  Thin wrapper around the Convox console API found at:
4
4
 
@@ -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 "bundler", "~> 1.14"
25
- spec.add_development_dependency "rake", "~> 10.0"
26
- spec.add_development_dependency "rspec", "~> 3.0"
27
- spec.add_development_dependency "byebug"
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
@@ -1,5 +1,8 @@
1
1
  require 'httparty'
2
2
  require 'httmultiparty'
3
+ require 'faye/websocket'
4
+ require 'eventmachine'
5
+
3
6
  require 'convox_api_client/version'
4
7
  require 'convox_api_client/client'
5
8
 
@@ -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
- query = {}
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[:rack] = rack if rack
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
- query = {}
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
- query = {}
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
- query = {}
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: authorization_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
- query = {}
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
- query = {}
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
- query = {}
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
- query = {}
82
- query[:rack] = rack if rack
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
- query = {}
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
- query = {}
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
- query = {}
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
- query = {}
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
- private
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}"}
@@ -1,3 +1,3 @@
1
1
  module ConvoxApiClient
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
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.1.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-01-31 00:00:00.000000000 Z
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.0'
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: '3.0'
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