faastruby 0.5.6 → 0.5.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f6c5b8269b49257d206406eb93f408d375f9c6ebdfe50f0fac40ee62a2fd8db3
4
- data.tar.gz: b289988fe2d42f3c49062fb19810c664cf4655a3296c6d5726390bad3c77d67b
3
+ metadata.gz: ac48887a263445c5c0392263683258407df738768d9b293c1462a859b9f5a46f
4
+ data.tar.gz: afb8800a278e4de5375b7bbdf702c324c1ac9b574a553d2583de437c51543bf3
5
5
  SHA512:
6
- metadata.gz: c34f895e38b4a72493e252ff84c6f3129a217fe36a7f68fb26775f06da8b129aa85cb262c1896410aae857720667cb35a3a83cae333077e94489e9d55698ff40
7
- data.tar.gz: 4c80da8ed9e3a45bd319d6ad726ebd8ab1f1dd7fb99f25db70adb58806544bbe5336046df3d1b48da8980238abc3a840431e904329d8f855d5b8fe412f9c2deb
6
+ metadata.gz: a57cad672290c2c46058e1f3e34787ecca9e04f320e1a1ca10a05d9ad7c22dd07e688a0335e3446c8d6c0c6958fbf87e5092768e3302916f3ecf87eb9361f632
7
+ data.tar.gz: b16c8c0d450d37cafa76b486b2c42276f68b68f1f01db532f75c1f0e5b554e15158a3cc5523f6253ee61c613d283917b76e7dc15192e4f34694a9aa5c28e6aa5
data/CHANGELOG.md CHANGED
@@ -1,7 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.7 - Mar 11 2019
4
+ - Refactor API class
5
+ - Bump faastruby-rpc dependency to 0.2.2
6
+ - Better API error handling
7
+ - Display alert when new gem version is available
8
+ - Add command `faastruby update`
9
+ - Quit server when FaaStRuby Local fails to start
10
+
3
11
  ## 0.5.6 - Mar 10 2019
4
- - Fix bug preventing require libraries. Thanks to
12
+ - Fix bug preventing require libraries. Thanks to @jbonney for spotting that one!
5
13
  - Support for static files with space in their names
6
14
  - Cleanup comments code
7
15
  - Limit the size of static files to 5MB
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- faastruby (0.5.5)
4
+ faastruby (0.5.6)
5
5
  colorize (~> 0.8)
6
6
  faastruby-rpc (~> 0.2)
7
7
  listen (~> 3.1)
data/faastruby.gemspec CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.add_runtime_dependency 'sinatra', '~> 2.0'
21
21
  spec.add_runtime_dependency 'sinatra-contrib', '~> 2.0'
22
22
  spec.add_runtime_dependency 'puma', '~> 3.12'
23
- spec.add_runtime_dependency 'faastruby-rpc', '~> 0.2'
23
+ spec.add_runtime_dependency 'faastruby-rpc', '~> 0.2.2'
24
24
  spec.add_runtime_dependency 'tmuxinator', '~> 0.15'
25
25
  spec.add_runtime_dependency 'rouge', '~> 3.3'
26
26
  spec.add_runtime_dependency 'listen', '~> 3.1'
data/lib/faastruby/api.rb CHANGED
@@ -13,43 +13,44 @@ module FaaStRuby
13
13
  @timeout = nil # disable request timeouts
14
14
  end
15
15
 
16
+ def execute_request
17
+ begin
18
+ yield
19
+ rescue SocketError, Errno::ENETUNREACH => e
20
+ FaaStRuby::CLI.error("\nCould not contact the server.\n#{e.message}") if defined?(FaaStRuby::CLI)
21
+ raise e
22
+ rescue RestClient::ExceptionWithResponse => err
23
+ case err.http_code
24
+ when 301, 302, 307
25
+ err.response.follow_redirection
26
+ else
27
+ parse err.response
28
+ end
29
+ end
30
+ end
31
+
16
32
  def create_workspace(workspace_name:, email: nil, provider: nil)
17
33
  url = "#{@api_url}/workspaces"
18
34
  payload = {'name' => workspace_name}
19
35
  payload['email'] = email if email
20
36
  payload['provider'] = provider if provider
21
- parse RestClient::Request.execute(method: :post, timeout: @timeout, url: url, payload: Oj.dump(payload), headers: @headers)
22
- rescue RestClient::ExceptionWithResponse => err
23
- case err.http_code
24
- when 301, 302, 307
25
- err.response.follow_redirection
26
- else
27
- parse err.response
37
+ execute_request do
38
+ parse RestClient::Request.execute(method: :post, timeout: @timeout, url: url, payload: Oj.dump(payload), headers: @headers)
28
39
  end
29
40
  end
30
41
 
31
42
  def destroy_workspace(workspace_name)
32
43
  url = "#{@api_url}/workspaces/#{workspace_name}"
33
- parse RestClient::Request.execute(method: :delete, timeout: @timeout, url: url, headers: @headers)
34
- rescue RestClient::ExceptionWithResponse => err
35
- case err.http_code
36
- when 301, 302, 307
37
- err.response.follow_redirection
38
- else
39
- parse err.response
44
+ execute_request do
45
+ parse RestClient::Request.execute(method: :delete, timeout: @timeout, url: url, headers: @headers)
40
46
  end
41
47
  end
42
48
 
43
49
  def update_runners(workspace_name:, runners_max:)
44
50
  url = "#{@api_url}/workspaces/#{workspace_name}/runners"
45
51
  payload = {'runners_max' => runners_max}
46
- parse RestClient::Request.execute(method: :patch, timeout: @timeout, url: url, headers: @headers, payload: Oj.dump(payload))
47
- rescue RestClient::ExceptionWithResponse => err
48
- case err.http_code
49
- when 301, 302, 307
50
- err.response.follow_redirection
51
- else
52
- parse err.response
52
+ execute_request do
53
+ parse RestClient::Request.execute(method: :patch, timeout: @timeout, url: url, headers: @headers, payload: Oj.dump(payload))
53
54
  end
54
55
  end
55
56
 
@@ -59,13 +60,8 @@ module FaaStRuby
59
60
  'email' => email,
60
61
  'password' => password
61
62
  }
62
- parse RestClient::Request.execute(method: :post, timeout: @timeout, url: url, headers: @base_headers, payload: Oj.dump(payload))
63
- rescue RestClient::ExceptionWithResponse => err
64
- case err.http_code
65
- when 301, 302, 307
66
- err.response.follow_redirection
67
- else
68
- parse err.response
63
+ execute_request do
64
+ parse RestClient::Request.execute(method: :post, timeout: @timeout, url: url, headers: @base_headers, payload: Oj.dump(payload))
69
65
  end
70
66
  end
71
67
 
@@ -74,13 +70,8 @@ module FaaStRuby
74
70
  payload = {
75
71
  'email' => email
76
72
  }
77
- parse RestClient::Request.execute(method: :patch, timeout: @timeout, url: url, headers: @base_headers, payload: Oj.dump(payload))
78
- rescue RestClient::ExceptionWithResponse => err
79
- case err.http_code
80
- when 301, 302, 307
81
- err.response.follow_redirection
82
- else
83
- parse err.response
73
+ execute_request do
74
+ parse RestClient::Request.execute(method: :patch, timeout: @timeout, url: url, headers: @base_headers, payload: Oj.dump(payload))
84
75
  end
85
76
  end
86
77
 
@@ -89,13 +80,8 @@ module FaaStRuby
89
80
  payload = {
90
81
  'code' => confirmation_token
91
82
  }
92
- parse RestClient::Request.execute(method: :post, timeout: @timeout, url: url, headers: @base_headers, payload: Oj.dump(payload))
93
- rescue RestClient::ExceptionWithResponse => err
94
- case err.http_code
95
- when 301, 302, 307
96
- err.response.follow_redirection
97
- else
98
- parse err.response
83
+ execute_request do
84
+ parse RestClient::Request.execute(method: :post, timeout: @timeout, url: url, headers: @base_headers, payload: Oj.dump(payload))
99
85
  end
100
86
  end
101
87
 
@@ -105,13 +91,8 @@ module FaaStRuby
105
91
  payload = {
106
92
  'all' => all
107
93
  }
108
- parse RestClient::Request.execute(method: :delete, timeout: @timeout, url: url, headers: headers, payload: Oj.dump(payload))
109
- rescue RestClient::ExceptionWithResponse => err
110
- case err.http_code
111
- when 301, 302, 307
112
- err.response.follow_redirection
113
- else
114
- parse err.response
94
+ execute_request do
95
+ parse RestClient::Request.execute(method: :delete, timeout: @timeout, url: url, headers: headers, payload: Oj.dump(payload))
115
96
  end
116
97
  end
117
98
 
@@ -121,13 +102,8 @@ module FaaStRuby
121
102
  'email' => email,
122
103
  'password' => password
123
104
  }
124
- parse RestClient::Request.execute(method: :post, timeout: @timeout, url: url, headers: @base_headers, payload: Oj.dump(payload))
125
- rescue RestClient::ExceptionWithResponse => err
126
- case err.http_code
127
- when 301, 302, 307
128
- err.response.follow_redirection
129
- else
130
- parse err.response
105
+ execute_request do
106
+ parse RestClient::Request.execute(method: :post, timeout: @timeout, url: url, headers: @base_headers, payload: Oj.dump(payload))
131
107
  end
132
108
  end
133
109
 
@@ -137,25 +113,15 @@ module FaaStRuby
137
113
  'api_key' => api_key,
138
114
  'api_secret' => api_secret
139
115
  }
140
- parse RestClient::Request.execute(method: :post, timeout: @timeout, url: url, headers: @headers, payload: Oj.dump(payload))
141
- rescue RestClient::ExceptionWithResponse => err
142
- case err.http_code
143
- when 301, 302, 307
144
- err.response.follow_redirection
145
- else
146
- parse err.response
116
+ execute_request do
117
+ parse RestClient::Request.execute(method: :post, timeout: @timeout, url: url, headers: @headers, payload: Oj.dump(payload))
147
118
  end
148
119
  end
149
120
 
150
121
  def get_static_metadata(workspace_name)
151
122
  url = "#{@api_url}/workspaces/#{workspace_name}/static/metadata"
152
- parse RestClient::Request.execute(method: :get, timeout: @timeout, url: url, headers: @headers)
153
- rescue RestClient::ExceptionWithResponse => err
154
- case err.http_code
155
- when 301, 302, 307
156
- err.response.follow_redirection
157
- else
158
- parse err.response
123
+ execute_request do
124
+ parse RestClient::Request.execute(method: :get, timeout: @timeout, url: url, headers: @headers)
159
125
  end
160
126
  end
161
127
 
@@ -163,13 +129,8 @@ module FaaStRuby
163
129
  url = "#{@api_url}/workspaces/#{workspace_name}/static/sync"
164
130
  payload = {package: File.new(package, 'rb')}
165
131
  payload[:relative_path] = relative_path
166
- parse RestClient::Request.execute(method: :post, timeout: @timeout, url: url, payload: payload, headers: @credentials)
167
- rescue RestClient::ExceptionWithResponse => err
168
- case err.http_code
169
- when 301, 302, 307
170
- err.response.follow_redirection
171
- else
172
- parse err.response
132
+ execute_request do
133
+ parse RestClient::Request.execute(method: :post, timeout: @timeout, url: url, payload: payload, headers: @credentials)
173
134
  end
174
135
  end
175
136
 
@@ -178,39 +139,24 @@ module FaaStRuby
178
139
  payload = {
179
140
  relative_path: relative_path
180
141
  }
181
- parse RestClient::Request.execute(method: :delete, timeout: @timeout, url: url, headers: @credentials, payload: payload)
182
- rescue RestClient::ExceptionWithResponse => err
183
- case err.http_code
184
- when 301, 302, 307
185
- err.response.follow_redirection
186
- else
187
- parse err.response
142
+ execute_request do
143
+ parse RestClient::Request.execute(method: :delete, timeout: @timeout, url: url, headers: @credentials, payload: payload)
188
144
  end
189
145
  end
190
146
 
191
147
 
192
148
  def get_workspace_info(workspace_name)
193
149
  url = "#{@api_url}/workspaces/#{workspace_name}"
194
- parse RestClient::Request.execute(method: :get, timeout: @timeout, url: url, headers: @headers)
195
- rescue RestClient::ExceptionWithResponse => err
196
- case err.http_code
197
- when 301, 302, 307
198
- err.response.follow_redirection
199
- else
200
- parse err.response
150
+ execute_request do
151
+ parse RestClient::Request.execute(method: :get, timeout: @timeout, url: url, headers: @headers)
201
152
  end
202
153
  end
203
154
 
204
155
  def refresh_credentials(workspace_name)
205
156
  url = "#{@api_url}/workspaces/#{workspace_name}/credentials"
206
157
  payload = {}
207
- parse RestClient::Request.execute(method: :put, timeout: @timeout, url: url, payload: payload, headers: @credentials)
208
- rescue RestClient::ExceptionWithResponse => err
209
- case err.http_code
210
- when 301, 302, 307
211
- err.response.follow_redirection
212
- else
213
- parse err.response
158
+ execute_request do
159
+ parse RestClient::Request.execute(method: :put, timeout: @timeout, url: url, payload: payload, headers: @credentials)
214
160
  end
215
161
  end
216
162
 
@@ -220,13 +166,8 @@ module FaaStRuby
220
166
  payload[:root_to] = root_to if root_to
221
167
  payload[:catch_all] = catch_all if catch_all
222
168
  payload[:context] = context if context
223
- parse RestClient::Request.execute(method: :post, timeout: @timeout, url: url, payload: payload, headers: @credentials)
224
- rescue RestClient::ExceptionWithResponse => err
225
- case err.http_code
226
- when 301, 302, 307
227
- err.response.follow_redirection
228
- else
229
- parse err.response
169
+ execute_request do
170
+ parse RestClient::Request.execute(method: :post, timeout: @timeout, url: url, payload: payload, headers: @credentials)
230
171
  end
231
172
  end
232
173
 
@@ -242,46 +183,38 @@ module FaaStRuby
242
183
  end
243
184
  end
244
185
 
245
- # def list_workspace_functions(workspace_name)
246
- # url = "#{@api_url}/workspaces/#{workspace_name}/functions"
247
- # parse RestClient.get(url, @headers){|response, request, result| response }
248
- # end
249
-
250
186
  def run(function_name:, workspace_name:, payload:, method:, headers: {}, time: false, query: nil)
251
187
  url = "#{FaaStRuby.api_host}/#{workspace_name}/#{function_name}#{query}"
252
188
  headers['Benchmark'] = true if time
253
- if method == 'get'
254
- RestClient::Request.execute(method: :get, timeout: @timeout, url: url, headers: headers)
255
- else
256
- RestClient::Request.execute(method: method.to_sym, timeout: @timeout, url: url, payload: payload, headers: headers)
257
- end
258
- rescue RestClient::ExceptionWithResponse => err
259
- case err.http_code
260
- when 301, 302, 307
261
- err.response.follow_redirection
262
- else
263
- return err.response
189
+ execute_request do
190
+ if method == 'get'
191
+ RestClient::Request.execute(method: :get, timeout: @timeout, url: url, headers: headers)
192
+ else
193
+ RestClient::Request.execute(method: method.to_sym, timeout: @timeout, url: url, payload: payload, headers: headers)
194
+ end
264
195
  end
265
196
  end
266
197
 
267
198
  def update_function_context(function_name:, workspace_name:, payload:)
268
199
  # payload is a string
269
200
  url = "#{@api_url}/workspaces/#{workspace_name}/functions/#{function_name}"
270
- parse RestClient::Request.execute(method: :patch, timeout: @timeout, url: url, payload: Oj.dump(payload), headers: @headers)
271
- # parse RestClient.patch(url, Oj.dump(payload), @headers){|response, request, result| response }
272
- rescue RestClient::ExceptionWithResponse => err
273
- case err.http_code
274
- when 301, 302, 307
275
- err.response.follow_redirection
276
- else
277
- parse err.response
201
+ execute_request do
202
+ parse RestClient::Request.execute(method: :patch, timeout: @timeout, url: url, payload: Oj.dump(payload), headers: @headers)
278
203
  end
279
204
  end
280
205
 
281
206
  def parse(response)
207
+ if latest_version = response.headers[:x_update_available]
208
+ puts "########### FaaStRuby Update Available ###########"
209
+ puts "# Latest version: #{latest_version} #"
210
+ puts "# Please run 'faastruby update' #"
211
+ puts "##################################################"
212
+ end
213
+
282
214
  begin
283
215
  body = Oj.load(response.body) unless [500, 408].include?(response.code)
284
216
  rescue Oj::ParseError => e
217
+ FaaStRuby::CLI.error("\nThe server has returned an invalid response. Status code: #{response.code}") if defined?(FaaStRuby::CLI)
285
218
  puts response.body
286
219
  raise e
287
220
  end
@@ -1,7 +1,7 @@
1
1
  module FaaStRuby
2
2
  module Command
3
3
  require 'faastruby/cli/base_command'
4
- # require 'faastruby/cli/credentials'
4
+
5
5
  COMMANDS = {
6
6
  'new' => Proc.new do
7
7
  require 'faastruby/cli/commands/function/new'
@@ -122,7 +122,30 @@ module FaaStRuby
122
122
  'migrate-workspaces' => Proc.new do
123
123
  require 'faastruby/cli/commands/workspace/migrate'
124
124
  FaaStRuby::Command::Workspace::Migrate
125
+ end,
126
+ 'update' => Proc.new do
127
+ FaaStRuby::Command::Update
125
128
  end
126
129
  }
130
+
131
+ class Update < BaseCommand
132
+ def initialize(args)
133
+ @args = args
134
+ help
135
+ end
136
+
137
+ def run
138
+ exec "gem update faastruby"
139
+ end
140
+
141
+ def self.help
142
+ "update"
143
+ end
144
+
145
+ def usage
146
+ puts "\n# Update FaaStRuby CLI to the latest version."
147
+ puts "\nUsage: faastruby #{self.class.help}\n\n"
148
+ end
149
+ end
127
150
  end
128
151
  end
@@ -10,7 +10,9 @@ module FaaStRuby
10
10
  puts "FaaStRuby CLI - Manage workspaces and functions hosted at faastruby.io"
11
11
  puts "Version: #{FaaStRuby::VERSION}"
12
12
  puts
13
- puts "Usage: faastruby [OPTIONS] COMMAND [--help | -h] [ARGS]"
13
+ puts "Usage: faastruby [update] [OPTIONS] COMMAND [--help | -h] [ARGS]"
14
+ puts
15
+ puts "To update to the latest version, run: faastruby update"
14
16
  puts
15
17
  puts "OPTIONS:"
16
18
  puts 'help, -h, --help # Displays this help'
@@ -15,7 +15,9 @@ module FaaStRuby
15
15
  system(cmd.join(" "))
16
16
  sleep 1
17
17
  end
18
- puts "FaaStRuby Local exited. Please press CTRL+C."
18
+ puts "FaaStRuby Local exited due to an error."
19
+ puts "If you think this shouldn't have happened, open an issue here: https://github.com/FaaStRuby/faastruby-cli/issues/new"
20
+ exit 1
19
21
  end
20
22
  end
21
23
  end
@@ -1,3 +1,3 @@
1
1
  module FaaStRuby
2
- VERSION = '0.5.6'
2
+ VERSION = '0.5.7'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faastruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.6
4
+ version: 0.5.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paulo Arruda
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-03-10 00:00:00.000000000 Z
11
+ date: 2019-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -142,14 +142,14 @@ dependencies:
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: '0.2'
145
+ version: 0.2.2
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: '0.2'
152
+ version: 0.2.2
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: tmuxinator
155
155
  requirement: !ruby/object:Gem::Requirement