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 +4 -4
- data/CHANGELOG.md +9 -1
- data/Gemfile.lock +1 -1
- data/faastruby.gemspec +1 -1
- data/lib/faastruby/api.rb +62 -129
- data/lib/faastruby/cli/commands.rb +24 -1
- data/lib/faastruby/cli/commands/help.rb +3 -1
- data/lib/faastruby/server/local.rb +3 -1
- data/lib/faastruby/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ac48887a263445c5c0392263683258407df738768d9b293c1462a859b9f5a46f
|
4
|
+
data.tar.gz: afb8800a278e4de5375b7bbdf702c324c1ac9b574a553d2583de437c51543bf3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
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
|
-
|
22
|
-
|
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
|
-
|
34
|
-
|
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
|
-
|
47
|
-
|
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
|
-
|
63
|
-
|
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
|
-
|
78
|
-
|
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
|
-
|
93
|
-
|
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
|
-
|
109
|
-
|
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
|
-
|
125
|
-
|
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
|
-
|
141
|
-
|
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
|
-
|
153
|
-
|
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
|
-
|
167
|
-
|
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
|
-
|
182
|
-
|
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
|
-
|
195
|
-
|
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
|
-
|
208
|
-
|
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
|
-
|
224
|
-
|
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
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
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
|
-
|
271
|
-
|
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
|
-
|
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
|
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
|
data/lib/faastruby/version.rb
CHANGED
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.
|
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-
|
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:
|
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:
|
152
|
+
version: 0.2.2
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: tmuxinator
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|