faastruby 0.4.18 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -3
  3. data/Gemfile.lock +28 -4
  4. data/README.md +63 -5
  5. data/faastruby.gemspec +5 -1
  6. data/lib/faastruby.rb +1 -0
  7. data/lib/faastruby/api.rb +154 -6
  8. data/lib/faastruby/base.rb +3 -9
  9. data/lib/faastruby/cli.rb +39 -12
  10. data/lib/faastruby/cli/base_command.rb +66 -0
  11. data/lib/faastruby/cli/commands.rb +122 -59
  12. data/lib/faastruby/cli/commands/account/base_command.rb +10 -0
  13. data/lib/faastruby/cli/commands/account/confirm.rb +94 -0
  14. data/lib/faastruby/cli/commands/account/login.rb +86 -0
  15. data/lib/faastruby/cli/commands/account/logout.rb +59 -0
  16. data/lib/faastruby/cli/commands/account/signup.rb +76 -0
  17. data/lib/faastruby/cli/commands/{function.rb → function/base_command.rb} +2 -11
  18. data/lib/faastruby/cli/commands/function/build.rb +18 -11
  19. data/lib/faastruby/cli/commands/function/deploy_to.rb +100 -37
  20. data/lib/faastruby/cli/commands/function/new.rb +89 -36
  21. data/lib/faastruby/cli/commands/function/remove_from.rb +21 -6
  22. data/lib/faastruby/cli/commands/function/run.rb +15 -15
  23. data/lib/faastruby/cli/commands/function/test.rb +5 -4
  24. data/lib/faastruby/cli/commands/function/update_context.rb +10 -3
  25. data/lib/faastruby/cli/commands/function/upgrade.rb +62 -61
  26. data/lib/faastruby/cli/commands/help.rb +33 -20
  27. data/lib/faastruby/cli/commands/project/base_command.rb +14 -0
  28. data/lib/faastruby/cli/commands/project/deploy.rb +114 -0
  29. data/lib/faastruby/cli/commands/project/down.rb +58 -0
  30. data/lib/faastruby/cli/commands/project/new.rb +237 -0
  31. data/lib/faastruby/cli/commands/workspace/cp.rb +107 -0
  32. data/lib/faastruby/cli/commands/workspace/create.rb +35 -27
  33. data/lib/faastruby/cli/commands/workspace/destroy.rb +14 -7
  34. data/lib/faastruby/cli/commands/workspace/list.rb +15 -6
  35. data/lib/faastruby/cli/commands/workspace/migrate.rb +93 -0
  36. data/lib/faastruby/cli/commands/workspace/rm.rb +81 -0
  37. data/lib/faastruby/cli/commands/workspace/update.rb +62 -0
  38. data/lib/faastruby/cli/credentials.rb +58 -57
  39. data/lib/faastruby/cli/new_credentials.rb +63 -0
  40. data/lib/faastruby/cli/package.rb +1 -0
  41. data/lib/faastruby/cli/template.rb +7 -7
  42. data/lib/faastruby/local.rb +188 -0
  43. data/lib/faastruby/local/crystal_runtime.cr +170 -0
  44. data/lib/faastruby/local/functions.rb +7 -0
  45. data/lib/faastruby/local/functions/crystal.rb +64 -0
  46. data/lib/faastruby/local/functions/function.rb +173 -0
  47. data/lib/faastruby/local/functions/ruby.rb +28 -0
  48. data/lib/faastruby/local/listeners.rb +5 -0
  49. data/lib/faastruby/local/listeners/listener.rb +104 -0
  50. data/lib/faastruby/local/logger.rb +37 -0
  51. data/lib/faastruby/local/monkey_patch.rb +38 -0
  52. data/lib/faastruby/local/processors.rb +7 -0
  53. data/lib/faastruby/local/processors/function.rb +151 -0
  54. data/lib/faastruby/local/processors/processor.rb +116 -0
  55. data/lib/faastruby/local/processors/static_file.rb +48 -0
  56. data/lib/faastruby/local/static_files.rb +5 -0
  57. data/lib/faastruby/local/static_files/static_file.rb +59 -0
  58. data/lib/faastruby/server.rb +44 -3
  59. data/lib/faastruby/server/app.rb +107 -0
  60. data/lib/faastruby/server/concurrency_controller.rb +50 -50
  61. data/lib/faastruby/server/config.ru +2 -0
  62. data/lib/faastruby/server/event.rb +3 -0
  63. data/lib/faastruby/server/event_hub.rb +7 -6
  64. data/lib/faastruby/server/local.rb +22 -0
  65. data/lib/faastruby/server/logger.rb +50 -0
  66. data/lib/faastruby/server/project_config.rb +44 -0
  67. data/lib/faastruby/server/puma.rb +4 -0
  68. data/lib/faastruby/server/response.rb +40 -0
  69. data/lib/faastruby/server/runner.rb +116 -21
  70. data/lib/faastruby/server/runner_methods.rb +17 -16
  71. data/lib/faastruby/server/sentinel.rb +496 -0
  72. data/lib/faastruby/supported_runtimes.rb +8 -0
  73. data/lib/faastruby/user.rb +77 -0
  74. data/lib/faastruby/version.rb +1 -1
  75. data/lib/faastruby/workspace.rb +36 -3
  76. data/templates/crystal/example-blank/handler.cr +3 -0
  77. data/templates/crystal/example/spec/handler_spec.cr +11 -6
  78. data/templates/public-web/assets/images/background.png +0 -0
  79. data/templates/public-web/assets/images/ruby.png +0 -0
  80. data/templates/public-web/assets/javascripts/main.js +1 -0
  81. data/templates/public-web/assets/stylesheets/main.css +70 -0
  82. data/templates/public-web/favicon.ico +0 -0
  83. data/templates/ruby/api-404/handler.rb +6 -0
  84. data/templates/ruby/api-root/handler.rb +6 -0
  85. data/templates/ruby/example-blank/handler.rb +0 -23
  86. data/templates/ruby/web-404/404.html +36 -0
  87. data/templates/ruby/web-404/handler.rb +3 -0
  88. data/templates/ruby/web-root/handler.rb +10 -0
  89. data/templates/ruby/web-root/index.html.erb +37 -0
  90. data/templates/ruby/web-root/template.rb +13 -0
  91. metadata +102 -21
  92. data/exe/faastruby-server +0 -76
  93. data/lib/faastruby/cli/commands/credentials.rb +0 -11
  94. data/lib/faastruby/cli/commands/credentials/add.rb +0 -58
  95. data/lib/faastruby/cli/commands/credentials/list.rb +0 -58
  96. data/lib/faastruby/cli/commands/workspace.rb +0 -13
  97. data/lib/faastruby/cli/commands/workspace/deploy.rb +0 -50
  98. data/templates/crystal/example-blank/README.md +0 -22
  99. data/templates/crystal/example-blank/spec/handler_spec.cr +0 -8
  100. data/templates/crystal/example-blank/spec/spec_helper.cr +0 -4
  101. data/templates/crystal/example-blank/src/handler.cr +0 -25
  102. data/templates/ruby/example-blank/Gemfile +0 -7
  103. data/templates/ruby/example-blank/README.md +0 -22
  104. data/templates/ruby/example-blank/spec/handler_spec.rb +0 -16
  105. data/templates/ruby/example-blank/spec/spec_helper.rb +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 45aba1191c45d93ec188ef15d6c7ee7b029d17aa22c04a83037998b8bf9120f1
4
- data.tar.gz: 37c5af350995b96d8d299980865ad06688a70b74acafa24a591ca2b50711d8e2
3
+ metadata.gz: 8e947223f9a44c7019dab288b430f625aa030004c574f77be0a1702e29d7582e
4
+ data.tar.gz: ab438317e8aca46fd893cf29160d1537dd9421085b6c457cb50b9cb2eb2a1c20
5
5
  SHA512:
6
- metadata.gz: 9c933a8f74157af31f8295034c7b81c081eb9bec68ad7295bb1365095a7b24c1f49fad9c8963c4a50fbdc53779b4baab8924cde5d9f4576cd3eefa645aa9184f
7
- data.tar.gz: 4fd99240f8ab2065f5cdeeaa22ec886d5a3d9513a16ee81d5df3c9f4e92ea8a1355af9be9407e34ba50753ea4ffbf79a2d9b41886c1123366737a9f3e3c80c94
6
+ metadata.gz: 6830c604ae0693f66f5583ced3695d5c7fc49cb117dab05dc9770dfaecc21fbfc97d0c5080cffb35bf700c84c7ea122be56e1480cd7d5362bcf15f663ccdb11d
7
+ data.tar.gz: 80183f91c9e2c2f07f50e86f853f1c01a8f917739591e4c8b0323a70d80f0ddbc5eeec056f91e7f22c529733a338cb4371a09c0c8093f354d8fb9394d68422aa
@@ -1,7 +1,10 @@
1
1
  # Changelog
2
2
 
3
- ## 0.4.19 - Unreleased
3
+ ## 0.5.0 - Mar 8 2019
4
+ - Introduces FaaStRuby Local
5
+ - Introduce user accounts and a migration tool to move the legacy workspace credentials into your account.
4
6
  - New key on faastruby.yml - `before_build` allows you to specify commands to run locally before building and uploading the function package.
7
+ - New command: `update-workspace WORKSPACE_NAME --runners INT` - set the number of runners for a workspace.
5
8
 
6
9
  ## 0.4.18 - Feb 6 2019
7
10
  - Bumps runtime crystal:0.27.1 to crystal:0.27.2
@@ -26,7 +29,7 @@
26
29
  - Better message when updating the function context
27
30
  - Fixed output when creating a function with `faastruby new`
28
31
 
29
- A new version of the platform API was released in tandem to address the issue that would erase contexts when a function is redeployed. Thanks [Justin](https://github.com/presidentbeef) again for pointing that out.
32
+ A new version of the platform API was released in tandem to address the issue that would erase contexts when a function is redeployed. Thanks [Justin](https://github.com/presidentbeef) again for pointing that out.
30
33
 
31
34
  ## 0.4.12 - Jan 26 2019
32
35
  Special thanks to [Sean Earle](https://github.com/HellRok) for fixing those bugs!
@@ -40,7 +43,7 @@ Special thanks to [Sean Earle](https://github.com/HellRok) for fixing those bugs
40
43
  - Fix command `faastruby server`
41
44
 
42
45
  ## 0.4.9 - Jan 13 2019
43
- - Changes in `faastruby server`
46
+ - Changes in `faastruby server`
44
47
  - Cleaned up code
45
48
  - Logs are easier to read
46
49
  - Function responses show up in the log
@@ -1,15 +1,19 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- faastruby (0.4.18)
4
+ faastruby (0.5.0)
5
5
  colorize (~> 0.8)
6
- faastruby-rpc (~> 0.2.1)
6
+ faastruby-rpc (~> 0.2)
7
+ filewatcher (~> 1.1)
8
+ listen (~> 3.1)
7
9
  oj (~> 3.6)
8
10
  puma (~> 3.12)
9
11
  rest-client (~> 2.0)
12
+ rouge (~> 3.3)
10
13
  rubyzip (~> 1.2)
11
14
  sinatra (~> 2.0)
12
15
  sinatra-contrib (~> 2.0)
16
+ tmuxinator (~> 0.15)
13
17
  tty-spinner (~> 0.8)
14
18
  tty-table (~> 0.10)
15
19
 
@@ -18,7 +22,7 @@ GEM
18
22
  specs:
19
23
  addressable (2.5.2)
20
24
  public_suffix (>= 2.0.2, < 4.0)
21
- backports (3.11.4)
25
+ backports (3.12.0)
22
26
  colorize (0.8.1)
23
27
  crack (0.4.3)
24
28
  safe_yaml (~> 1.0.0)
@@ -26,11 +30,19 @@ GEM
26
30
  domain_name (0.5.20180417)
27
31
  unf (>= 0.0.5, < 1.0.0)
28
32
  equatable (0.5.0)
33
+ erubis (2.7.0)
29
34
  faastruby-rpc (0.2.1)
30
35
  oj (~> 3.6)
36
+ ffi (1.10.0)
37
+ filewatcher (1.1.1)
38
+ optimist (~> 3.0)
31
39
  hashdiff (0.3.7)
32
40
  http-cookie (1.0.3)
33
41
  domain_name (~> 0.5)
42
+ listen (3.1.5)
43
+ rb-fsevent (~> 0.9, >= 0.9.4)
44
+ rb-inotify (~> 0.9, >= 0.9.7)
45
+ ruby_dep (~> 1.2)
34
46
  mime-types (3.2.2)
35
47
  mime-types-data (~> 3.2015)
36
48
  mime-types-data (3.2018.0812)
@@ -38,7 +50,8 @@ GEM
38
50
  mustermann (1.0.3)
39
51
  necromancer (0.4.0)
40
52
  netrc (0.11.0)
41
- oj (3.7.8)
53
+ oj (3.7.9)
54
+ optimist (3.0.0)
42
55
  pastel (0.7.2)
43
56
  equatable (~> 0.5.0)
44
57
  tty-color (~> 0.4.0)
@@ -48,10 +61,14 @@ GEM
48
61
  rack-protection (2.0.5)
49
62
  rack
50
63
  rake (10.5.0)
64
+ rb-fsevent (0.10.3)
65
+ rb-inotify (0.10.0)
66
+ ffi (~> 1.0)
51
67
  rest-client (2.0.2)
52
68
  http-cookie (>= 1.0.2, < 2.0)
53
69
  mime-types (>= 1.16, < 4.0)
54
70
  netrc (~> 0.8)
71
+ rouge (3.3.0)
55
72
  rspec (3.8.0)
56
73
  rspec-core (~> 3.8.0)
57
74
  rspec-expectations (~> 3.8.0)
@@ -65,6 +82,7 @@ GEM
65
82
  diff-lcs (>= 1.2.0, < 2.0)
66
83
  rspec-support (~> 3.8.0)
67
84
  rspec-support (3.8.0)
85
+ ruby_dep (1.5.0)
68
86
  rubyzip (1.2.2)
69
87
  safe_yaml (1.0.4)
70
88
  sinatra (2.0.5)
@@ -84,7 +102,12 @@ GEM
84
102
  unicode-display_width (~> 1.4.0)
85
103
  unicode_utils (~> 1.4.0)
86
104
  strings-ansi (0.1.0)
105
+ thor (0.20.3)
87
106
  tilt (2.0.9)
107
+ tmuxinator (0.15.0)
108
+ erubis (~> 2.6)
109
+ thor (~> 0.19, >= 0.15.0)
110
+ xdg (~> 2.2, >= 2.2.3)
88
111
  tty-color (0.4.3)
89
112
  tty-cursor (0.6.0)
90
113
  tty-screen (0.6.5)
@@ -105,6 +128,7 @@ GEM
105
128
  addressable (>= 2.3.6)
106
129
  crack (>= 0.3.2)
107
130
  hashdiff
131
+ xdg (2.2.3)
108
132
 
109
133
  PLATFORMS
110
134
  ruby
data/README.md CHANGED
@@ -10,23 +10,81 @@
10
10
  CLI tool for managing workspaces and functions hosted at [FaaStRuby](https://faastruby.io).
11
11
 
12
12
  ## What is FaaStRuby?
13
- FaaStRuby is a serverless platform built for Ruby developers.
13
+ FaaStRuby is a Serverless Software Development Platform for Ruby and Crystal.
14
14
 
15
15
  * [Tutorial](https://faastruby.io/getting-started)
16
16
 
17
17
  ## Try it
18
18
 
19
- 1. Install the gem:
19
+ Getting up and running is quick and easy:
20
+
21
+ ![Getting up and running](https://s3.amazonaws.com/faastruby/public/create-project.mp4)
22
+
23
+ 1. Install the gem so `faastruby` is available in your terminal
20
24
 
21
25
  ```
22
26
  ~$ gem install faastruby
23
27
  ```
24
28
 
25
- 2. Create a function and deploy it to a workspace:
29
+ 2. Create a new FaaStRuby project
30
+
31
+ ```
32
+ ~$ faastruby new-project hello-world
33
+ + d ./hello-world
34
+ + f ./hello-world/project.yml
35
+ + f ./hello-world/secrets.yml
36
+ + d ./hello-world/functions/root
37
+ + f ./hello-world/functions/root/index.html.erb
38
+ + f ./hello-world/functions/root/template.rb
39
+ + f ./hello-world/functions/root/handler.rb
40
+ + f ./hello-world/functions/root/faastruby.yml
41
+ + d ./hello-world/functions/catch-all
42
+ + f ./hello-world/functions/catch-all/404.html
43
+ + f ./hello-world/functions/catch-all/handler.rb
44
+ + f ./hello-world/functions/catch-all/faastruby.yml
45
+ + f ./hello-world/public/faastruby.yml
46
+ + f ./hello-world/.gitignore
47
+ Initialized empty Git repository in /Users/mf/OpenSource/faastruby/hello-world/.git/
48
+ Project 'hello-world' initialized.
49
+ Now run:
50
+ $ cd hello-world
51
+ $ faastruby local
52
+ ```
53
+
54
+ 3. Fire up the local development environment for your new project
26
55
 
27
56
  ```
28
- ~$ faastruby new hello-world
29
57
  ~$ cd hello-world
58
+ ~/hello-world$ faastruby local
59
+ Puma starting in single mode...
60
+ * Version 3.12.0 (ruby 2.5.3-p105), codename: Llamas in Pajamas
61
+ * Min threads: 0, max threads: 32
62
+ * Environment: production
63
+ sh: crystal: command not found
64
+ 2019-02-27 23:36:03 +0800 (EventHub) Channel subscriptions: {}
65
+ ---
66
+ 2019-02-27 23:36:03 +0800 (EventHub) Please restart the server if you modify channel subscriptions in 'faastruby.yml' for any function.
67
+ ---
68
+ 2019-02-27 23:36:03 +0800 (EventHub) Events thread started.
69
+ ---
70
+ 2019-02-27 23:36:03 +0800 (Sentinel) Ruby functions: ["root", "catch-all"]
71
+ ---
72
+ 2019-02-27 23:36:03 +0800 (Sentinel) Watching for new Ruby functions...
73
+ ```
74
+
75
+ As you can see, this runs with Ruby only. If you want to run Crystal as well (similar to Ruby, but with types and compiled to run very fast), simply [install Crystal](https://crystal-lang.org/reference/installation/) and start `faastruby local` again.
76
+
77
+
78
+ `faastruby local` is very powerful. When you add a new folder with a `handler.rb` or `handler.cr`, it will automatically be detected. FaaStRuby will automatically add the configuration for the function so you can jump straight in:
79
+
80
+ ![How to add a new folder and file](https://s3.amazonaws.com/faastruby/public/new-paths.mp4)
81
+
82
+ Changes to the code will automatically be detected and immediately refreshed for you, making local development easy and comfortable:
83
+ [!How to edit files and refresh them in the browser](https://s3.amazonaws.com/faastruby/public/local-file-refresh.mp4)
84
+
85
+ 4. Deploy it to a workspace:
86
+
87
+ ```
30
88
  ~/hello-world$ faastruby deploy-to awesome-prod
31
89
  ◐ Running tests... Passed!
32
90
  ...
@@ -50,4 +108,4 @@ Build lots of functions and share them with fellow Ruby devs!
50
108
 
51
109
  ## FaaStRuby + Hyperstack = fullstack Ruby apps!
52
110
 
53
- Do you think JavaScript is your only option for the front-end? Think again. [Hyperstack](https://hyperstack.org) is a Ruby DSL, compiled by Opal, bundled by Webpack, powered by React.
111
+ Do you think JavaScript is your only option for the front-end? Think again. [Hyperstack](https://hyperstack.org) is a Ruby DSL, compiled by Opal, bundled by Webpack, powered by React.
@@ -20,7 +20,11 @@ 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.1'
23
+ spec.add_runtime_dependency 'faastruby-rpc', '~> 0.2'
24
+ spec.add_runtime_dependency 'tmuxinator', '~> 0.15'
25
+ spec.add_runtime_dependency 'rouge', '~> 3.3'
26
+ spec.add_runtime_dependency 'listen', '~> 3.1'
27
+
24
28
 
25
29
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
26
30
  # to allow pushing to a single host or delete this section to allow pushing to any host.
@@ -4,3 +4,4 @@ require 'faastruby/base'
4
4
  require 'faastruby/api'
5
5
  require 'faastruby/function'
6
6
  require 'faastruby/workspace'
7
+ require 'faastruby/user'
@@ -7,7 +7,8 @@ module FaaStRuby
7
7
  def initialize
8
8
  @api_url = "#{FaaStRuby.api_host}/#{@@api_version}"
9
9
  @credentials = {'API-KEY' => FaaStRuby.api_key, 'API-SECRET' => FaaStRuby.api_secret}
10
- @headers = {content_type: 'application/json', accept: 'application/json'}.merge(@credentials)
10
+ @base_headers = {client_version: FaaStRuby::VERSION, content_type: 'application/json', accept: 'application/json'}
11
+ @headers = @base_headers.merge(@credentials)
11
12
  @struct = Struct.new(:response, :body, :errors, :code)
12
13
  @timeout = nil # disable request timeouts
13
14
  end
@@ -39,10 +40,154 @@ module FaaStRuby
39
40
  end
40
41
  end
41
42
 
42
- # def update_workspace(workspace_name, payload)
43
- # url = "#{@api_url}/workspaces/#{workspace_name}"
44
- # parse RestClient.patch(url, Oj.dump(payload), @headers)
45
- # end
43
+ def update_runners(workspace_name:, runners_max:)
44
+ url = "#{@api_url}/workspaces/#{workspace_name}/runners"
45
+ 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
53
+ end
54
+ end
55
+
56
+ def signup(email:, password:)
57
+ url = "#{@api_url}/users/signup"
58
+ payload = {
59
+ 'email' => email,
60
+ 'password' => password
61
+ }
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
69
+ end
70
+ end
71
+
72
+ def send_confirmation_code(email)
73
+ url = "#{@api_url}/users/confirm"
74
+ payload = {
75
+ 'email' => email
76
+ }
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
84
+ end
85
+ end
86
+
87
+ def confirm_account(confirmation_token)
88
+ url = "#{@api_url}/users/confirm"
89
+ payload = {
90
+ 'code' => confirmation_token
91
+ }
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
99
+ end
100
+ end
101
+
102
+ def logout(api_key:, api_secret:, all: false)
103
+ url = "#{@api_url}/users/logout"
104
+ headers = @base_headers.merge({'API-KEY' => api_key, 'API-SECRET' => api_secret})
105
+ payload = {
106
+ 'all' => all
107
+ }
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
115
+ end
116
+ end
117
+
118
+ def login(email:, password:)
119
+ url = "#{@api_url}/users/login"
120
+ payload = {
121
+ 'email' => email,
122
+ 'password' => password
123
+ }
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
131
+ end
132
+ end
133
+
134
+ def migrate_to_account(workspace_name:, api_key:, api_secret:)
135
+ url = "#{@api_url}/workspaces/#{workspace_name}/migrate"
136
+ payload = {
137
+ 'api_key' => api_key,
138
+ 'api_secret' => api_secret
139
+ }
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
147
+ end
148
+ end
149
+
150
+ def get_static_metadata(workspace_name)
151
+ 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
159
+ end
160
+ end
161
+
162
+ def upload_file(workspace_name:, relative_path:, package:)
163
+ url = "#{@api_url}/workspaces/#{workspace_name}/static/sync"
164
+ payload = {package: File.new(package, 'rb')}
165
+ 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
173
+ end
174
+ end
175
+
176
+ def delele_file(workspace_name:, relative_path:)
177
+ url = "#{@api_url}/workspaces/#{workspace_name}/static/sync"
178
+ payload = {
179
+ relative_path: relative_path
180
+ }
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
188
+ end
189
+ end
190
+
46
191
 
47
192
  def get_workspace_info(workspace_name)
48
193
  url = "#{@api_url}/workspaces/#{workspace_name}"
@@ -69,9 +214,12 @@ module FaaStRuby
69
214
  end
70
215
  end
71
216
 
72
- def deploy(workspace_name:, package:)
217
+ def deploy(workspace_name:, package:, root_to: nil, catch_all: nil, context: nil)
73
218
  url = "#{@api_url}/workspaces/#{workspace_name}/deploy"
74
219
  payload = {package: File.new(package, 'rb')}
220
+ payload[:root_to] = root_to if root_to
221
+ payload[:catch_all] = catch_all if catch_all
222
+ payload[:context] = context if context
75
223
  parse RestClient::Request.execute(method: :post, timeout: @timeout, url: url, payload: payload, headers: @credentials)
76
224
  rescue RestClient::ExceptionWithResponse => err
77
225
  case err.http_code
@@ -1,5 +1,6 @@
1
1
  module FaaStRuby
2
2
  ROOT_DOMAIN = ENV['FAASTRUBY_ROOT_DOMAIN'] || 'faastruby.io'
3
+ WORKSPACE_BASE_HOST = ENV['FAASTRUBY_WORKSPACE_BASE_HOST'] || 'faast.cloud'
3
4
  DEFAULT_REGION = 'tor1'
4
5
  REGIONS = [
5
6
  'tor1'
@@ -35,15 +36,8 @@ module FaaStRuby
35
36
  ENV['FAASTRUBY_HOST'] || "https://api.#{region}.#{ROOT_DOMAIN}"
36
37
  end
37
38
 
38
- def self.credentials_file
39
- return File.expand_path(ENV['FAASTRUBY_CREDENTIALS']) if ENV['FAASTRUBY_CREDENTIALS']
40
- if region == DEFAULT_REGION && File.file?(File.expand_path('~/.faastruby'))
41
- return File.expand_path('~/.faastruby')
42
- elsif region == DEFAULT_REGION
43
- return File.expand_path("~/.faastruby.#{region}")
44
- else
45
- return File.expand_path("~/.faastruby.#{region}")
46
- end
39
+ def self.workspace_host_for(workspace_name)
40
+ "https://#{workspace_name}.#{region}.#{WORKSPACE_BASE_HOST}"
47
41
  end
48
42
 
49
43
  class Configuration