faastruby 0.5.15 → 0.5.16

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: 90642de9a37ebb95e7a59cc0d1814166c183ae077a84fc0eb89d413b91afde50
4
- data.tar.gz: 1a8fc95eef7bb5faac20e14381d70c4201960aa2680d5cdefb2e1042a52af8f3
3
+ metadata.gz: 4c2140df8e1c0f5ab07372b83c80d26e7395b64a02d8e722b50e7acdfaa4a8a8
4
+ data.tar.gz: 73e3b0a89b4dea4393a09fc33ffec3fcadbdbfce2069ccc3cdb60d7e96ab064e
5
5
  SHA512:
6
- metadata.gz: 782132facb71a4184825634a89eb14a11064cad0b189157fc61e2c88134d51a34927804657975e52716e1ad92d7bf85603be45057cb6ca9ec0ba288d5d4066a1
7
- data.tar.gz: fb063c0d5f9944ad8ba14611b0c4d38e84152fb25532a2059e18cdcb5958e3741f2018865827e5fe34f1bb181424a8626716d3e0bbc68df53ee0a8214ae6ad96
6
+ metadata.gz: b5d46a540b29c8d43f15e939a455a7046caf501756eb3187e85116296b7dcc8ca96c3d8a6acb7f12fad506ad120d530845b5090651fa1896d822bc58fa2543c8
7
+ data.tar.gz: aca215d48d18df5ba9609205a90a849ce0dd6ebb247f4210f6885831691b3271dca813baa9e2a67be0e4cef18b5ede29909c5361ba97de3b904313985e9b4f17
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.16 - unreleased
4
+ - Remove unused arguments from update workspace `run` method.
5
+ - Update Help
6
+ - Change the argument that measures the execution time on `run` to `--measure`
7
+ - Add argument to read context from STDIN when running `deploy-to`
8
+ - Switch default config files method from array to multiline string
9
+ - Allow passwords with up to 50 characters.
10
+ - Fix bug preventing `faastruby deploy` to deploy the secrets.
11
+
3
12
  ## 0.5.15 - Mar 18 2019
4
13
  - Remove `nil` entries from error array before trying to print error messages
5
14
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- faastruby (0.5.15)
4
+ faastruby (0.5.16)
5
5
  colorize (~> 0.8)
6
6
  faastruby-rpc (~> 0.2.5)
7
7
  listen (~> 3.1)
@@ -1,7 +1,7 @@
1
1
  module FaaStRuby
2
2
  module Command
3
3
  module Account
4
- PASSWORD_REGEX = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,20}$/
4
+ PASSWORD_REGEX = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,50}$/
5
5
  EMAIL_REGEX = /\A([\w+\-].?)+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i
6
6
  require 'faastruby/cli/commands/account/base_command'
7
7
  require 'io/console'
@@ -21,11 +21,11 @@ module FaaStRuby
21
21
  print "Email: "
22
22
  email = STDIN.gets.chomp
23
23
  end
24
- puts "\nNow type in a password. It must contain 8 to 20 characters and have at least one uppercase letter, one lowercase letter, one number and one special character @ $ ! % * ? &"
24
+ puts "\nNow type in a password. It must contain 8 to 50 characters and have at least one uppercase letter, one lowercase letter, one number and one special character @ $ ! % * ? &"
25
25
  print "Password: "
26
26
  password = STDIN.noecho(&:gets).chomp
27
27
  until password_is_valid?(password) do
28
- puts "\nYour password must contain 8 to 20 characters and have at least one uppercase letter, one lowercase letter, one number and one special character @ $ ! % * ? &\nPlease try again:".red
28
+ puts "\nYour password must contain 8 to 50 characters and have at least one uppercase letter, one lowercase letter, one number and one special character @ $ ! % * ? &\nPlease try again:".red
29
29
  print "Password: "
30
30
  password = STDIN.noecho(&:gets).chomp
31
31
  end
@@ -90,10 +90,14 @@ module FaaStRuby
90
90
  puts "\nUsage: faastruby #{self.class.help}"
91
91
  puts %(
92
92
  -f,--function PATH/TO/FUNCTION # Specify the directory where the function is.
93
- --context DATA # The data to be stored as context in the cloud,
94
- # accessible via 'event.context' from within your function.
95
- --set-root # Set the function as the root route of the workspace/
96
- --set-catch-all # Set the function as the catch-all route of the workspace.
93
+ --context 'JSON_STRING' # The data to be stored as execution context
94
+ # in the cloud, accessible via 'event.context'
95
+ # from within your function.
96
+ # The context data must be a JSON String, and
97
+ # have maximum size of 4KB.
98
+ --context-from-stdin # Read context data from STDIN.
99
+ --set-root # Set the function as the root route for the workspace.
100
+ --set-catch-all # Set the function as the catch-all route for the workspace.
97
101
  --dont-create-workspace # Don't try to create the workspace if it doesn't exist.
98
102
  )
99
103
  end
@@ -171,6 +175,8 @@ module FaaStRuby
171
175
  Dir.chdir @args.shift
172
176
  when '--context'
173
177
  @options['context'] = @args.shift
178
+ when '--context-from-stdin'
179
+ @options['context'] = STDIN.gets.chomp
174
180
  when '--quiet', '-q'
175
181
  @options['quiet'] = true
176
182
  when '--set-root'
@@ -39,15 +39,15 @@ module FaaStRuby
39
39
  def usage
40
40
  puts "\nUsage: faastruby #{self.class.help}"
41
41
  puts %(
42
- -b,--body 'DATA' # The request body
43
- --stdin # Read the request body from STDIN
44
- -m,--method METHOD # The request method
42
+ -b,--body 'DATA' # The request body.
43
+ --stdin # Read the request body from STDIN.
44
+ -m,--method METHOD # The request method.
45
45
  -h,--header 'Header: Value' # Set a header. Can be used multiple times.
46
- -f,--form 'a=1&b=2' # Send form data and set header 'Content-Type: application/x-www-form-urlencoded'
47
- -j,--json '{"a":"1"}' # Send JSON data and set header 'Content-Type: application/json'
48
- -t,--time # Return function run time in the response
46
+ -f,--form 'a=1&b=2' # Send form data and set header 'Content-Type: application/x-www-form-urlencoded'.
47
+ -j,--json '{"a":"1"}' # Send JSON data and set header 'Content-Type: application/json'.
48
+ --measure # Return function execution time in the response headers.
49
49
  -q,--query 'foo=bar' # Set a query parameter for the request. Can be used multiple times.
50
- --curl # Return the CURL command equivalent for the request
50
+ --curl # Print the equivalent CURL command for the request and exit.
51
51
  )
52
52
  end
53
53
 
@@ -69,8 +69,9 @@ module FaaStRuby
69
69
  @options['method'] = @args.shift.downcase
70
70
  when '-h', '--header'
71
71
  set_header
72
- when '-t', '--time'
73
- @options['time'] = true
72
+ when '--measure'
73
+ @options['headers'] ||= {}
74
+ @options['headers']['Benchmark'] = true
74
75
  when '--curl'
75
76
  @options['curl'] = true
76
77
  when '-q', '--query'
@@ -35,8 +35,12 @@ module FaaStRuby
35
35
  def usage
36
36
  puts "\nUsage: faastruby #{self.class.help}"
37
37
  puts %(
38
- -d, --data 'STRING' # The context data. Must be quoted.
39
- --stdin # Read context data from STDIN
38
+ -d, --data JSON_STRING' # The data to be stored as execution context
39
+ # in the cloud, accessible via 'event.context'
40
+ # from within your function.
41
+ # The context data must be a JSON String, and
42
+ # have maximum size of 4KB.
43
+ --stdin # Read context data from STDIN
40
44
  )
41
45
  end
42
46
 
@@ -7,19 +7,22 @@ module FaaStRuby
7
7
  end
8
8
 
9
9
  def run
10
- puts "faastRuby CLI - Manage workspaces and functions hosted at faastruby.io"
11
- puts "Version: #{FaaStRuby::VERSION}"
12
- puts
13
- puts "Usage: faastruby [update] [OPTIONS] COMMAND [--help | -h] [ARGS]"
14
- puts
15
- puts "To update to the latest version, run: faastruby update"
16
- puts
17
- puts "OPTIONS:"
18
- puts 'help, -h, --help # Displays this help'
19
- puts '-v # Print version and exit'
20
- puts '--region tor1 # Specify a region. "tor1" (default) is the only region available'
21
- puts "\nCOMMANDS:"
22
10
  puts %(
11
+ faastRuby CLI - Manage workspaces and functions hosted at faastruby.io
12
+ Version: #{FaaStRuby::VERSION}
13
+
14
+ Usage: faastruby [update] [OPTIONS] COMMAND [--help | -h] [ARGS]
15
+
16
+ To update to the latest version, run: faastruby update
17
+
18
+ OPTIONS:
19
+ help, -h, --help # Displays this help
20
+ -v # Print version and exit
21
+ --region tor1 # Specify a region. "tor1" (default) is the only
22
+ # region available at this time
23
+
24
+ COMMANDS:
25
+
23
26
  Accounts:
24
27
  signup
25
28
  confirm-account # Send a token over email for account confirmation
@@ -27,7 +30,7 @@ Accounts:
27
30
  logout
28
31
 
29
32
  Functions:
30
- new # Initialize a function in your local machine
33
+ new # Initialize a directory with a function template
31
34
  deploy-to # Deploy a function to a cloud workspace
32
35
  remove-from # Remove a function from a cloud workspace
33
36
  run # Trigger the function via HTTP endpoint
@@ -36,17 +39,22 @@ Functions:
36
39
  Projects:
37
40
  new-project # Initialize a project in your local machine
38
41
  deploy # Deploy all functions and static files of a project
42
+ down # Remove a workspace from the cloud. Must be executed
43
+ # from within a project directory.
39
44
 
40
45
  Workspaces:
41
46
  create-workspace # Create a cloud workspace
42
- destroy-workspace # Erase a workspace from the cloud
47
+ destroy-workspace # Remove a workspace and all its functions
48
+ # from the cloud. Can't be undone.
43
49
  list-workspace # List what's in a cloud workspace
44
- cp # Copy a static file from your local machine to a cloud workspace
50
+ cp # Copy a static file from your local machine to
51
+ # a cloud workspace
45
52
  rm # Remove a static file from a cloud workspace
46
53
  update-workspace # Update workspace settings
47
54
 
55
+ Run faastruby COMMAND --help for more details.
56
+
48
57
  )
49
- puts "Run faastruby COMMAND --help for more details."
50
58
  end
51
59
  end
52
60
  end
@@ -18,7 +18,7 @@ module FaaStRuby
18
18
  @options['functions'] += find_functions unless @options['functions'].any?
19
19
  @options['environment'] ||= 'stage'
20
20
  @project_yaml = YAML.load(File.read(PROJECT_YAML_FILE))['project'] rescue FaaStRuby::CLI.error("Could not find file 'project.yml'. Are you running this command from the project's folder?")
21
- @project_secrets = YAML.load(File.read(PROJECT_SECRETS_FILE)) rescue {secrets: {}}
21
+ @project_secrets = YAML.load(File.read(PROJECT_SECRETS_FILE))['secrets'] rescue {secrets: {}}
22
22
  @project_name = @project_yaml['name']
23
23
  @root_to = @project_yaml['root_to'] || 'root'
24
24
  @catch_all = @project_yaml['catch_all'] || 'catch-all'
@@ -124,7 +124,7 @@ module FaaStRuby
124
124
  -f,--function FUNCTION_PATH # Specify the path to the function directory in your local machine.
125
125
  # This argument can be repeated many times for multiple functions. Example:
126
126
  # -f path/to/function1 -f path/to/function2
127
- -e,--env ENVIRONMENT # ENVIRONMENT is added to the project name to compose the workspace name.
127
+ -e,--env ENVIRONMENT # ENVIRONMENT is added to the project's name to compose the workspace name.
128
128
  )
129
129
  end
130
130
 
@@ -31,10 +31,17 @@ module FaaStRuby
31
31
  end
32
32
 
33
33
  def usage
34
- puts "Usage: faastruby #{self.class.help}"
35
34
  puts %(
36
- -e,--env ENVIRONMENT # ENVIRONMENT is added to the project name to compose the workspace name.
37
- )
35
+
36
+ Remove a workspace from the cloud.
37
+ Must be executed from within a project's directory.
38
+
39
+ Usage: faastruby #{self.class.help}
40
+
41
+ -e,--env ENVIRONMENT # ENVIRONMENT is added to the project's name to compose the workspace name.
42
+ # Defaults to 'stage'
43
+
44
+ )
38
45
  end
39
46
 
40
47
  def parse_options
@@ -121,54 +121,54 @@ module FaaStRuby
121
121
  end
122
122
 
123
123
  def default_secrets_file
124
- [
125
- 'secrets:',
126
- " # Add secrets here and they will be available inside the function as \"event.context\"",
127
- " # Example:",
128
- " # prod:",
129
- " # root:",
130
- " # a_secret: bfe76f4557ffc2de901cb24e0f87436f",
131
- " # another/function:",
132
- " # another_secret: 4d1c281e.619a2489c.8b5d.dd945616d324",
133
- "",
134
- " # 'stage' is the default environment when you start Local",
135
- " # stage:",
136
- " # root:",
137
- " # a_secret: bfe76f4557ffc2de901cb24e0f87436f",
138
- " # another/function:",
139
- " # another_secret: 4d1c281e.619a2489c.8b5d.dd945616d324"
140
- ].join("\n")
124
+ %(secrets:
125
+ # Add secrets here and they will be available inside the function as "event.context"
126
+ # Example:
127
+ # prod:
128
+ # root:
129
+ # a_secret: bfe76f4557ffc2de901cb24e0f87436f
130
+ # another/function:
131
+ # another_secret: 4d1c281e.619a2489c.8b5d.dd945616d324
132
+
133
+ # 'stage' is the default environment when you start Local
134
+ # stage:
135
+ # root:
136
+ # a_secret: bfe76f4557ffc2de901cb24e0f87436f
137
+ # another/function:
138
+ # another_secret: 4d1c281e.619a2489c.8b5d.dd945616d324
139
+ )
141
140
  end
142
141
 
143
142
  def default_project_file
144
- [
145
- "project:",
146
- " # The project name",
147
- " name: #{@project_name}",
148
- " # The project identifier is used to ensure your workspaces will have unique names.",
149
- " # This is not a secret, but don't lose it!",
150
- " identifier: #{Digest::MD5.hexdigest(Time.now.to_s).slice(0..5)}",
151
- "",
152
- " ## The 'public' directory, where you put static files.",
153
- " ## Files will be served from here first, meaning that if",
154
- " ## you have a function at '/product' and a folder '/product'",
155
- " ## inside the public folder, the public one will take precedence.",
156
- " ## Defaults to 'public'.",
157
- " # public_dir: public",
158
- "",
159
- " ## The name of the folder containing your functions. Defaults to 'functions'",
160
- " # functions_dir: functions",
161
- "",
162
- " ## The name of the function that will respond to requests made",
163
- " ## to '/'. Defaults to 'root'",
164
- " # root_to: root",
165
- "",
166
- " ## The setting 'catch_all' allows you to capture requests to",
167
- " ## non-existing functions and send them to another function.",
168
- " ## This is useful for setting custom 404 pages, for example.",
169
- " ## Defaults to 'catch-all'.",
170
- " # catch_all: catch-all"
171
- ].join("\n")
143
+ %(project:
144
+ # The project name
145
+ name: #{@project_name}
146
+
147
+ # The project identifier is used to ensure your workspaces will have unique names.
148
+ # This is not a secret, but don't lose it!
149
+ identifier: #{Digest::MD5.hexdigest(Time.now.to_s).slice(0..5)}
150
+
151
+ ## The 'public' directory is where you put static files.
152
+ ## Files will be served from there first, meaning that if
153
+ ## you have a function at 'functions/product' and a folder
154
+ ## 'public/product', the public one will take precedence.
155
+ ## Defaults to 'public'.
156
+ # public_dir: public
157
+
158
+ ## The name of the folder containing the project's functions.
159
+ ## Defaults to 'functions'.
160
+ # functions_dir: functions
161
+
162
+ ## The name of the function that will respond to requests made
163
+ ## to '/'. Defaults to 'root'
164
+ # root_to: root
165
+
166
+ ## The setting 'catch_all' allows you to capture requests to
167
+ ## non-existing functions and send them to another function.
168
+ ## This is useful for setting custom 404 pages, for example.
169
+ ## Defaults to 'catch-all'.
170
+ # catch_all: catch-all
171
+ )
172
172
  end
173
173
 
174
174
  def tmuxinator_config
@@ -39,8 +39,7 @@ module FaaStRuby
39
39
  def usage
40
40
  puts "\nUsage: faastruby #{self.class.help}"
41
41
  puts %(
42
- --create-local-dir # Create a local folder in addition to the cloud
43
- --local-only # Only create a local folder. Skip creating workspace on the cloud
42
+ --create-local-dir # Create a local directory with the workspace name.
44
43
  )
45
44
  end
46
45
 
@@ -14,7 +14,7 @@ module FaaStRuby
14
14
  load_credentials
15
15
  end
16
16
 
17
- def run(create_directory: true, exit_on_error: true)
17
+ def run
18
18
  spinner = spin("Updating the number of runners to #{@options['runners_max']}...")
19
19
  workspace = FaaStRuby::Workspace.new(name: @workspace_name)
20
20
  workspace.update_runners(@options['runners_max'])
@@ -30,6 +30,10 @@ module FaaStRuby
30
30
  puts "\nUsage: faastruby #{self.class.help}"
31
31
  puts %(
32
32
  --runners N # Assign N runners to the workspace.
33
+ # N must be an integer between 0 and 100.
34
+ # When set to 0, requests to any functions
35
+ # whithin the workspace will return HTTP error
36
+ # 429 - Too Many Requests.
33
37
  )
34
38
  end
35
39
 
@@ -1,3 +1,3 @@
1
1
  module FaaStRuby
2
- VERSION = '0.5.15'
2
+ VERSION = '0.5.16'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faastruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.15
4
+ version: 0.5.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paulo Arruda