bashly 0.2.4 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +50 -9
- data/lib/bashly/extensions/string.rb +3 -3
- data/lib/bashly/models/base.rb +1 -0
- data/lib/bashly/models/command.rb +13 -0
- data/lib/bashly/models/environment_variable.rb +11 -0
- data/lib/bashly/templates/bashly.yml +4 -2
- data/lib/bashly/templates/strings.yml +2 -1
- data/lib/bashly/version.rb +1 -1
- data/lib/bashly/views/argument/usage.erb +1 -1
- data/lib/bashly/views/command/command_filter.erb +1 -1
- data/lib/bashly/views/command/dependencies_filter.erb +9 -0
- data/lib/bashly/views/command/environment_variables_filter.erb +9 -0
- data/lib/bashly/views/command/master_script.erb +1 -1
- data/lib/bashly/views/command/parse_requirements.erb +18 -0
- data/lib/bashly/views/command/{parse_args_case.erb → parse_requirements_case.erb} +1 -1
- data/lib/bashly/views/command/{parse_args_while.erb → parse_requirements_while.erb} +2 -2
- data/lib/bashly/views/command/run.erb +1 -1
- data/lib/bashly/views/command/usage.erb +2 -2
- data/lib/bashly/views/command/usage_environment_variables.erb +3 -4
- data/lib/bashly/views/command/usage_examples.erb +1 -1
- data/lib/bashly/views/environment_variable/usage.erb +4 -0
- data/lib/bashly/views/flag/usage.erb +1 -1
- metadata +9 -5
- data/lib/bashly/views/command/parse_args.erb +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b40fa2dc3cc6b3f0f65b961ea06dab0230eb0346eaa7c51575f12e27f16bcc3e
|
4
|
+
data.tar.gz: 704cc06b8d06539c123d2fabd450764fa8926705acc584ef47da87e5f2ab3e87
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6b5755ebda8ded8cc3a414063b8c9f7559b34fb5682d8f351f55f2be768ac4d39868cacca11c7b6a39741f3c00b13c8ee1f2d14d24307518f8e9954afabbe3d4
|
7
|
+
data.tar.gz: 540459bf266a62c289fd0fc0799f45e0e72bfbe3117dcf975ad623c022beba7327f97331d6a6539b69901ccf82fc2696a329622f0b7126951fc53cfdf583d0c7
|
data/README.md
CHANGED
@@ -119,6 +119,15 @@ See the [examples](examples) folder for more examples.
|
|
119
119
|
Configuration Reference
|
120
120
|
--------------------------------------------------
|
121
121
|
|
122
|
+
The `bashly.yml` configuration file consists of these types:
|
123
|
+
|
124
|
+
- [Command](#command-options) - defines the root command as well as any
|
125
|
+
subcommand.
|
126
|
+
- [Argument](#argument-options) - defines positional arguments.
|
127
|
+
- [Flag](#flag-options) - defines option flags.
|
128
|
+
- [Environment Variable](#environment-variable-options) - defines
|
129
|
+
environment variables required (or desired) by your script.
|
130
|
+
|
122
131
|
### Command options
|
123
132
|
|
124
133
|
Unless otherwise specified, these definitiona can be used for both the root
|
@@ -149,11 +158,9 @@ examples:
|
|
149
158
|
- myscript download
|
150
159
|
- myscript download --force
|
151
160
|
|
152
|
-
# Specify an array of environment variables needed by your script
|
153
|
-
|
154
|
-
|
155
|
-
environment_variable:
|
156
|
-
VARIABLE_NAME: Variable help text
|
161
|
+
# Specify an array of environment variables needed by your script.
|
162
|
+
environment_variables:
|
163
|
+
- ... see below ...
|
157
164
|
|
158
165
|
# Specify the array of subcommands to generate.
|
159
166
|
# Each subcommand will have its own args and flags.
|
@@ -164,12 +171,18 @@ commands:
|
|
164
171
|
# Specify the array of positional arguments this script needs.
|
165
172
|
# If this is provided, then you cannot specify commands.
|
166
173
|
args:
|
167
|
-
- ...
|
174
|
+
- ... see below ...
|
168
175
|
|
169
176
|
# Specify the array of option flags this script needs.
|
170
177
|
# If this is provided, then you cannot specify commands.
|
171
178
|
flags:
|
172
|
-
- ...
|
179
|
+
- ... see below ...
|
180
|
+
|
181
|
+
# Specify an array of any required external dependencies (commands).
|
182
|
+
# The script execution will be halted with a friendly error unless all
|
183
|
+
# dependency commands exist.
|
184
|
+
dependencies:
|
185
|
+
- curl
|
173
186
|
```
|
174
187
|
|
175
188
|
|
@@ -208,8 +221,9 @@ required: true
|
|
208
221
|
The below configuration generates this flag:
|
209
222
|
|
210
223
|
```
|
211
|
-
|
212
|
-
|
224
|
+
Options:
|
225
|
+
-o, --output DIRECTORY (required)
|
226
|
+
Specify the output directory
|
213
227
|
```
|
214
228
|
|
215
229
|
The flag's value will be available to you as `${args[--output]}` in your
|
@@ -234,6 +248,33 @@ arg: directory
|
|
234
248
|
required: true
|
235
249
|
```
|
236
250
|
|
251
|
+
### Environment Variable options
|
252
|
+
|
253
|
+
The below configuration generates this environment variable usage text:
|
254
|
+
|
255
|
+
```
|
256
|
+
Environment Variables:
|
257
|
+
SECRET_KEY (required)
|
258
|
+
Your API secret key
|
259
|
+
```
|
260
|
+
|
261
|
+
If an environment variable is defined as required (false by default), the
|
262
|
+
execution of the script will be halted with a friendly error if it is not
|
263
|
+
set.
|
264
|
+
|
265
|
+
```yaml
|
266
|
+
# The name of the variable (it will be automatically capitalized).
|
267
|
+
name: secret_key
|
268
|
+
|
269
|
+
# The message to display when using --help.
|
270
|
+
# This can have multiple lines.
|
271
|
+
help: Your API secret key
|
272
|
+
|
273
|
+
# Specify if this variable is required.
|
274
|
+
required: true
|
275
|
+
```
|
276
|
+
|
277
|
+
|
237
278
|
|
238
279
|
Real World Examples
|
239
280
|
--------------------------------------------------
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class String
|
2
|
-
def
|
3
|
-
gsub
|
2
|
+
def sanitize_for_print
|
3
|
+
gsub("\n", "\\n").gsub("\"", "\\\"")
|
4
4
|
end
|
5
5
|
|
6
6
|
def indent(offset)
|
@@ -9,7 +9,7 @@ class String
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def to_underscore
|
12
|
-
gsub(/(.)([A-Z])/,'\1_\2').gsub(
|
12
|
+
gsub(/(.)([A-Z])/,'\1_\2').gsub(/[\- ]/, '_').downcase
|
13
13
|
end
|
14
14
|
|
15
15
|
def wrap(length = 80)
|
data/lib/bashly/models/base.rb
CHANGED
@@ -55,6 +55,14 @@ module Bashly
|
|
55
55
|
result
|
56
56
|
end
|
57
57
|
|
58
|
+
# Returns an array of EnvironmentVariables
|
59
|
+
def environment_variables
|
60
|
+
return [] unless options["environment_variables"]
|
61
|
+
options["environment_variables"].map do |options|
|
62
|
+
EnvironmentVariable.new options
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
58
66
|
# Returns the bash filename that is expected to hold the user code
|
59
67
|
# for this command
|
60
68
|
def filename
|
@@ -107,6 +115,11 @@ module Bashly
|
|
107
115
|
args.select &:required
|
108
116
|
end
|
109
117
|
|
118
|
+
# Returns an array of all the required EnvironmentVariables
|
119
|
+
def required_environment_variables
|
120
|
+
environment_variables.select &:required
|
121
|
+
end
|
122
|
+
|
110
123
|
# Returns an array of all the required Flags
|
111
124
|
def required_flags
|
112
125
|
flags.select &:required
|
@@ -3,7 +3,8 @@ help: Sample application
|
|
3
3
|
version: 0.1.0
|
4
4
|
|
5
5
|
environment_variables:
|
6
|
-
|
6
|
+
- name: api_key
|
7
|
+
help: Set your API key
|
7
8
|
|
8
9
|
commands:
|
9
10
|
- name: download
|
@@ -27,7 +28,8 @@ commands:
|
|
27
28
|
- cli download example.com ./output -f
|
28
29
|
|
29
30
|
environment_variables:
|
30
|
-
|
31
|
+
- name: default_target_location
|
32
|
+
help: Set the default location to download to
|
31
33
|
|
32
34
|
- name: upload
|
33
35
|
short: u
|
@@ -16,4 +16,5 @@ invalid_argument: "invalid argument: %{arg}"
|
|
16
16
|
invalid_flag: "invalid option: %{flag}"
|
17
17
|
missing_required_argument: "missing required argument: %{arg}\\nusage: %{usage}"
|
18
18
|
missing_required_flag: "missing required flag: %{usage}"
|
19
|
-
|
19
|
+
missing_required_environment_variable: "missing required environment variable: %{var}"
|
20
|
+
missing_dependency: "missing dependency: %{dependency}"
|
data/lib/bashly/version.rb
CHANGED
@@ -0,0 +1,9 @@
|
|
1
|
+
# :command.dependencies_filter
|
2
|
+
<%- if dependencies -%>
|
3
|
+
<%- dependencies.each do |dependency| -%>
|
4
|
+
if ! [[ -x "$(command -v <%= dependency %>)" ]]; then
|
5
|
+
echo -e "<%= strings[:missing_dependency] % { dependency: dependency } -%>"
|
6
|
+
exit 1
|
7
|
+
fi
|
8
|
+
<%- end -%>
|
9
|
+
<%- end -%>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# :command.environment_variables_filter
|
2
|
+
<%- if required_environment_variables.any? -%>
|
3
|
+
<%- required_environment_variables.each do |env_var| -%>
|
4
|
+
if [[ -z "$<%= env_var.name.upcase %>" ]]; then
|
5
|
+
echo -e "<%= strings[:missing_required_environment_variable] % { var: env_var.name.upcase } -%>"
|
6
|
+
exit 1
|
7
|
+
fi
|
8
|
+
<%- end -%>
|
9
|
+
<%- end -%>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# :command.parse_requirements
|
2
|
+
<%- if root_command? -%>
|
3
|
+
parse_requirements() {
|
4
|
+
<%- else -%>
|
5
|
+
<%= function_name %>_parse_requirements() {
|
6
|
+
<%- end -%>
|
7
|
+
<%= render(:fixed_flags_filter).indent 2 %>
|
8
|
+
<%= render(:environment_variables_filter).indent 2 %>
|
9
|
+
<%= render(:dependencies_filter).indent 2 %>
|
10
|
+
<%= render(:command_filter).indent 2 %>
|
11
|
+
<%= render(:required_args_filter).indent 2 %>
|
12
|
+
<%= render(:required_flags_filter).indent 2 %>
|
13
|
+
<%= render(:parse_requirements_while).indent 2 %>
|
14
|
+
}
|
15
|
+
|
16
|
+
<%- commands.each do |command| %>
|
17
|
+
<%= command.render :parse_requirements %>
|
18
|
+
<%- end -%>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# :command.
|
1
|
+
# :command.parse_requirements_while
|
2
2
|
while [[ $# -gt 0 ]]; do
|
3
3
|
key="$1"
|
4
4
|
case "$key" in
|
@@ -13,7 +13,7 @@ while [[ $# -gt 0 ]]; do
|
|
13
13
|
;;
|
14
14
|
|
15
15
|
* )
|
16
|
-
<%= render(:
|
16
|
+
<%= render(:parse_requirements_case).indent 4 %>
|
17
17
|
;;
|
18
18
|
|
19
19
|
esac
|
@@ -7,7 +7,7 @@
|
|
7
7
|
<%- else -%>
|
8
8
|
echo -e "<%= full_name %>"
|
9
9
|
echo
|
10
|
-
echo -e "<%= help.wrap(78).indent(2).
|
10
|
+
echo -e "<%= help.wrap(78).indent(2).sanitize_for_print %>"
|
11
11
|
echo
|
12
12
|
<%- end -%>
|
13
13
|
else
|
@@ -32,7 +32,7 @@
|
|
32
32
|
<%= render(:usage_fixed_flags).indent 4 %>
|
33
33
|
<%= render(:usage_flags).indent 4 if flags.any? %>
|
34
34
|
<%= render(:usage_args).indent 4 if args.any? %>
|
35
|
-
<%= render(:usage_environment_variables).indent 4 if environment_variables %>
|
35
|
+
<%= render(:usage_environment_variables).indent 4 if environment_variables.any? %>
|
36
36
|
<%= render(:usage_examples).indent 4 if examples %>
|
37
37
|
|
38
38
|
fi
|
@@ -1,7 +1,6 @@
|
|
1
1
|
# :command.usage_environment_variables
|
2
2
|
echo -e "<%= strings[:environment_variables] %>"
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
|
4
|
+
<%- environment_variables.each do |env_var| -%>
|
5
|
+
<%= env_var.render(:usage) %>
|
6
6
|
<%- end -%>
|
7
|
-
echo
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bashly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Danny Ben Shitrit
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-11-
|
11
|
+
date: 2019-11-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colsole
|
@@ -78,6 +78,7 @@ files:
|
|
78
78
|
- lib/bashly/models/argument.rb
|
79
79
|
- lib/bashly/models/base.rb
|
80
80
|
- lib/bashly/models/command.rb
|
81
|
+
- lib/bashly/models/environment_variable.rb
|
81
82
|
- lib/bashly/models/flag.rb
|
82
83
|
- lib/bashly/polyfills/hash.rb
|
83
84
|
- lib/bashly/settings.rb
|
@@ -95,14 +96,16 @@ files:
|
|
95
96
|
- lib/bashly/views/command/default_initialize_script.erb
|
96
97
|
- lib/bashly/views/command/default_root_script.erb
|
97
98
|
- lib/bashly/views/command/default_script.erb
|
99
|
+
- lib/bashly/views/command/dependencies_filter.erb
|
100
|
+
- lib/bashly/views/command/environment_variables_filter.erb
|
98
101
|
- lib/bashly/views/command/fixed_flags_filter.erb
|
99
102
|
- lib/bashly/views/command/function.erb
|
100
103
|
- lib/bashly/views/command/initialize.erb
|
101
104
|
- lib/bashly/views/command/inspect_args.erb
|
102
105
|
- lib/bashly/views/command/master_script.erb
|
103
|
-
- lib/bashly/views/command/
|
104
|
-
- lib/bashly/views/command/
|
105
|
-
- lib/bashly/views/command/
|
106
|
+
- lib/bashly/views/command/parse_requirements.erb
|
107
|
+
- lib/bashly/views/command/parse_requirements_case.erb
|
108
|
+
- lib/bashly/views/command/parse_requirements_while.erb
|
106
109
|
- lib/bashly/views/command/required_args_filter.erb
|
107
110
|
- lib/bashly/views/command/required_flags_filter.erb
|
108
111
|
- lib/bashly/views/command/root_command.erb
|
@@ -116,6 +119,7 @@ files:
|
|
116
119
|
- lib/bashly/views/command/usage_flags.erb
|
117
120
|
- lib/bashly/views/command/user_lib.erb
|
118
121
|
- lib/bashly/views/command/version_command.erb
|
122
|
+
- lib/bashly/views/environment_variable/usage.erb
|
119
123
|
- lib/bashly/views/flag/case.erb
|
120
124
|
- lib/bashly/views/flag/usage.erb
|
121
125
|
homepage: https://github.com/dannyben/bashly
|
@@ -1,16 +0,0 @@
|
|
1
|
-
# :command.parse_args
|
2
|
-
<%- if root_command? -%>
|
3
|
-
parse_args() {
|
4
|
-
<%- else -%>
|
5
|
-
<%= function_name %>_parse_args() {
|
6
|
-
<%- end -%>
|
7
|
-
<%= render(:fixed_flags_filter).indent 2 %>
|
8
|
-
<%= render(:command_filter).indent 2 %>
|
9
|
-
<%= render(:required_args_filter).indent 2 %>
|
10
|
-
<%= render(:required_flags_filter).indent 2 %>
|
11
|
-
<%= render(:parse_args_while).indent 2 %>
|
12
|
-
}
|
13
|
-
|
14
|
-
<%- commands.each do |command| %>
|
15
|
-
<%= command.render 'parse_args' %>
|
16
|
-
<%- end -%>
|