faastruby 0.5.6 → 0.5.7

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
  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