bashly 0.5.1 → 0.6.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ca34648c628c4e7fe167d5f5b0d253792e9b4d3c494b253ed68d0127e4935572
4
- data.tar.gz: 5247da7780a8424dd0a808ace6d182ed4284597e094122d94a8716bfca8f343b
3
+ metadata.gz: 01c46120b6cecba45cf9b55dd726ce4b66888ba3fc11d3383557a554ac51b154
4
+ data.tar.gz: 9682934a468d1624d05924f4ca5bd76d6438c26853fed1ad8098865dae669bc2
5
5
  SHA512:
6
- metadata.gz: 2145d1f4125d762c3d583f560c4caa9f4b98cfc2500e7e7b9ac977f4284a190a150a26da6e935c4e59c689f5efcd627924a10091cff0d4d91f00c3f60d26b943
7
- data.tar.gz: 9df4695f43e4c57371f876de1dee3eab587bb227b7b0ee51d52d1772faf119cbd59cb117f5a1e3cbb06ef49b5796cd02b6fecba685b733aa35c51442fe9baf19
6
+ metadata.gz: bb068fa1b263a1f820910b548cd48fde9cc1ae8607c50eea381361f9cbfe952581a4e1c9e54ac31e20a96c6ccba876d2a58b2f0ec6e8a59c3f8a467fbe0bde43
7
+ data.tar.gz: 653410059e779fffdf9aa28d8c23a0a2cc8d3ba0a7911651deaf2669fc1b4d744dc3a3824124ba79140813d331510ec14a1b47f852049c305ab47fe55fe9c89d
data/README.md CHANGED
@@ -15,322 +15,9 @@ Create beautiful bash scripts from simple YAML configuration
15
15
 
16
16
  </div>
17
17
 
18
+ ## Documentation
18
19
 
19
- ## Table of Contents
20
-
21
- - [Table of Contents](#table-of-contents)
22
- - [Installation](#installation)
23
- - [Prerequisites](#prerequisites)
24
- - [What is Bashly](#what-is-bashly)
25
- - [Usage](#usage)
26
- - [Using the input arguments in your code](#using-the-input-arguments-in-your-code)
27
- - [Examples](#examples)
28
- - [Configuration Reference](#configuration-reference)
29
- - [Command options](#command-options)
30
- - [Argument options](#argument-options)
31
- - [Flag options](#flag-options)
32
- - [Environment Variable options](#environment-variable-options)
33
- - [Extensible Scripts](#extensible-scripts)
34
- - [Real World Examples](#real-world-examples)
35
- - [Contributing / Support](#contributing--support)
36
-
37
- ---
38
-
39
-
40
- ## Installation
41
-
42
- ```shell
43
- $ gem install bashly
44
- ```
45
-
46
- or with Docker:
47
-
48
- ```shell
49
- $ alias bashly='docker run --rm -it --volume "$PWD:/app" dannyben/bashly'
50
- ```
51
-
52
- ## Prerequisites
53
-
54
- The bash scripts generated by bashly require bash 4 or higher due to heavy
55
- use of associative arrays.
56
-
57
-
58
- ## What is Bashly
59
-
60
- Bashly is a command line application (written in Ruby) that lets you generate
61
- feature-rich bash command line tools.
62
-
63
- The design intention is to let you focus on your specific code, without
64
- worrying about command line argument parsing, usage texts, error messages
65
- and other functions that are usually handled by a framework in any other
66
- programming language.
67
-
68
- Bahsly is responsible for:
69
-
70
- - Generating a **single, standalone bash script**.
71
- - Generating **usage texts** and help screens, showing your tool's arguments,
72
- flags and commands (works for subcommands also).
73
- - Parsing the user's command line and extracting:
74
- - Optional or required **positional arguments**.
75
- - Optional or required **option flags** (with or without flag arguments).
76
- - **Commands** (and subcommands).
77
- - Standard flags (like **--help** and **--version**).
78
- - Providing you with a place to input your code for each of the functions
79
- your tool performs, and merging it back to the final script.
80
- - Providing you with additional (optional) framework-style, standard
81
- library functions:
82
- - **Color output**.
83
- - **Config file management** (INI format).
84
- - **YAML parsing**.
85
- - and more.
86
-
87
-
88
- ## Usage
89
-
90
- The `bashly.yml` file can be set up to generate two types of scripts:
91
-
92
- 1. Script with commands (for example, like `docker` or `git`).
93
- 2. Script without commands (for example, like `ls`)
94
-
95
- This is detected automatically by the contents of the configuration: If it
96
- contains a `commands` definition, it will generate a script with commands.
97
-
98
- In an empty directory, create a sample configuration file by running
99
-
100
- ```shell
101
- $ bashly init
102
- # or, to generate a simpler configuration:
103
- $ bashly init --minimal
104
- ```
105
-
106
- This will create a sample `src/bashly.yml` file.
107
- You can edit this file to specify which arguments, flags and commands you
108
- need in your bash script.
109
-
110
- Then, generate an initial bash script and function placeholder scripts by
111
- running
112
-
113
- ```shell
114
- $ bashly generate
115
- ```
116
-
117
- This will:
118
-
119
- 1. Create the bash executable script.
120
- 2. Create files for you to edit in the `src` folder.
121
-
122
- Finally, edit the files in the `src` folder. Each of your script's commands
123
- get their own file. Once you edit, run `bashly generate` again to merge the
124
- content from your functions back into the script.
125
-
126
- ### Using the input arguments in your code
127
-
128
- In order to access the parsed arguments in any of your partial scripts, you
129
- may simply access the `$args` associative array.
130
-
131
- For example:
132
-
133
- 1. Generate a minimal configuration with `bashly init --minimal`
134
- 2. Generate the bash script with `bashly generate`
135
- 3. Run the script with `./download hello --force`
136
-
137
- You will notice that all the arguments of the associative array are printed
138
- on screen. This is done by the `inspect_args` function that was inserted into
139
- the generated partial script `src/root_command.sh`.
140
-
141
- You can now access these variables by modifying `sec/root_command.sh` like
142
- this:
143
-
144
-
145
- ```bash
146
- # src/root_command.sh
147
- source_url=${args[source]}
148
- force=${args[--force]}
149
-
150
- if [[ $force ]]; then
151
- echo "downloading $source_url with --force"
152
- else
153
- echo "downloading $source_url"
154
- fi
155
- ```
156
-
157
- After editing the file, run `bashly generate` (or `bashly g` for short) and
158
- run:
159
-
160
- ```
161
- $ ./download a --force
162
- downloading a with --force
163
- ```
164
-
165
-
166
- ## Examples
167
-
168
- The [examples folder](examples#readme) contains many detailed and documented
169
- example configuration files, with their output.
170
-
171
-
172
- ## Configuration Reference
173
-
174
- The `bashly.yml` configuration file consists of these types:
175
-
176
- - [Command](#command-options) - defines the root command as well as any
177
- subcommand.
178
- - [Argument](#argument-options) - defines positional arguments.
179
- - [Flag](#flag-options) - defines option flags.
180
- - [Environment Variable](#environment-variable-options) - defines
181
- environment variables required (or desired) by your script.
182
-
183
- ### Command options
184
-
185
- Unless otherwise specified, these definitions can be used for both the root
186
- command and subcommands (under the `commands` definition).
187
-
188
- Option | Description
189
- -----------|-------------
190
- `name` | The name of the script or subcommand.
191
- `short` | An additional, optional pattern - usually used to denote a one letter variation of the command name. You can add `*` as a suffix, to denote a "starts with" pattern - for example `short: m*`. *Applicable only in subcommands*.
192
- `help` | The header text to display when using `--help`. This option can have multiple lines. In this case, the first line will be used as summary wherever appropriate.
193
- `version` | The string to display when using `--version`. *Applicable only in the main command*.
194
- `default` | Setting this to `true` on any command, will cause any unrecognized command line to be passed to this command. *Applicable only in subcommands*.
195
- `extensible` | Specify that this command can be [externally extended](#extensible-scripts). *Applicable only in the main command*.
196
- `examples` | Specify an array of examples to show when using `--help`. Each example can have multiple lines.
197
- `environment_variables` | Specify an array of [environment variables](#environment-variable-options) needed by your script.
198
- `commands` | Specify the array of [commands](#command-options). Each command will have its own args and flags. Note: if `commands` is provided, you cannot specify flags or args at the same level.
199
- `args` | Specify the array of [positional arguments](#argument-options) this script needs.
200
- `flags` | Specify the array of option [flags](#flag-options) this script needs.
201
- `catch_all` | Specify that this command should allow for additional arbitrary arguments or flags. It can be set in one of three ways:<br>- Set to `true` to just enable it.<br>- Set to a string, to use this string in the usage help text.<br>- Set to a hash containing `label` and `help` keys, to show a detailed help for it when running with `--help`.
202
- `dependencies` | Specify an array of any required external dependencies (commands). The script execution will be halted with a friendly error unless all dependency commands exist.
203
- `group` | In case you have many commands, use this option to specify a caption to display before this command. This option is purely for display purposes, and needs to be specified only for the first command in each group.
204
- `footer` | Add a custom message that will be displayed at the end of the `--help` text.
205
-
206
- ### Argument options
207
-
208
- The argument's value will be available to you as `${args[user]}` in your
209
- bash function.
210
-
211
- Option | Description
212
- -----------|-------------
213
- `name` | The name of the argument.
214
- `help` | The message to display when using `--help`. Can have multiple lines.
215
- `required` | Specify if this argument is required. Note that once you define an optional argument (without required: true) then you cannot define required arguments after it.
216
- `default` | The value to use in case it is not provided by the user. Implies that this argument is optional.
217
- `allowed` | Limit the allowed values by providing an array.
218
-
219
- ### Flag options
220
-
221
- The flag's value will be available to you as `${args[--output]}` in your
222
- bash function (regardless of whether the user provided it with the long or
223
- short form).
224
-
225
- Option | Description
226
- -----------|-------------
227
- `long` | The long form of the flag.
228
- `short` | The short form of the flag.
229
- `help` | The text to display when using `--help`. Can have multiple lines.
230
- `arg` | If the flag requires an argument, specify its name here.
231
- `required` | Specify if this flag is required.
232
- `default` | The value to use in case it is not provided by the user. Implies that this flag is optional, and only makes sense when the flag has an argument.
233
- `allowed` | For flags with an argument, you can limit the allowed values by providing an array.
234
-
235
- #### Special handling for -v and -h
236
-
237
- The `-v` and `-h` flags will be used as the short options for `--version` and
238
- `--help` respectively **only if you are not using them in any of your own
239
- flags**.
240
-
241
- ### Environment variable options
242
-
243
- If an environment variable is defined as required (false by default), the
244
- execution of the script will be halted with a friendly error if it is not
245
- set.
246
-
247
- Option | Description
248
- -----------|-------------
249
- `name` | The name of the variable (it will be automatically capitalized).
250
- `help` | The message to display when using --help. Can have multiple lines.
251
- `required` | Specify if this variable is required.
252
-
253
-
254
- ## Extensible Scripts
255
-
256
- You may configure your generated bash script to delegate any unknown command
257
- to an external executable, by setting the `extensible` option to either `true`,
258
- or to a different external command.
259
-
260
- This is similar to how `git` works. When you execute `git whatever`, the `git`
261
- command will look for a file named `git-whatever` in the path, and execute it.
262
-
263
- Note that this option cannot be specified together with the `default` option,
264
- since both specify a handler for unknown commands.
265
-
266
- Bashly supports two operation modes.
267
-
268
- ### Extension Mode (`extensible: true`)
269
-
270
- By setting `extensible` to `true`, a specially named executable will be called
271
- when an unknown command is called by the user.
272
-
273
- Given this `bashly.yml` configuration:
274
-
275
- ```yaml
276
- name: myscript
277
- help: Example
278
- version: 0.1.0
279
- extensible: true
280
-
281
- commands:
282
- - name: upload
283
- help: Upload a file
284
- ```
285
-
286
- And this user command:
287
-
288
- ```
289
- $ myscript something
290
-
291
- ```
292
-
293
- The generated script will look for an executable named `myscript-something`
294
- in the path. If found, it will be called.
295
-
296
- See the [extensible example](examples/extensible).
297
-
298
-
299
- ### Delegate Mode (`extensible: <executable name>`)
300
-
301
- By setting `extensible` to any string, unknown command calls by the user will
302
- be delegated to the executable with that name.
303
-
304
- Given this `bashly.yml` configuration:
305
-
306
- ```yaml
307
- name: mygit
308
- help: Example
309
- version: 0.1.0
310
- extensible: git
311
-
312
- commands:
313
- - name: push
314
- help: Push to my repository
315
- ```
316
-
317
- And this user command:
318
-
319
- ```
320
- $ mygit status
321
-
322
- ```
323
-
324
- The generated script will execute `git status`.
325
-
326
- See the [extensible-delegate example](examples/extensible-delegate).
327
-
328
-
329
- ## Real World Examples
330
-
331
- - [Rush][rush] - a Personal Package Manager
332
- - [Alf][alf] - a generator for bash aliases and sub-aliases
333
- - [git-changelog][git-changelog] - a change log generator
20
+ Visit the [Bashly Documentation][docs] site.
334
21
 
335
22
 
336
23
  ## Contributing / Support
@@ -341,6 +28,5 @@ to contribute, feel free to [open an issue][issues].
341
28
 
342
29
 
343
30
  [issues]: https://github.com/DannyBen/bashly/issues
344
- [rush]: https://github.com/DannyBen/rush-cli
345
- [alf]: https://github.com/DannyBen/alf
346
- [git-changelog]: https://github.com/DannyBen/git-changelog
31
+ [docs]: https://bashly.dannyb.co/
32
+
@@ -8,15 +8,24 @@ module Bashly
8
8
  usage "bashly add config [--force]"
9
9
  usage "bashly add colors [--force]"
10
10
  usage "bashly add yaml [--force]"
11
+ usage "bashly add comp FORMAT [OUTPUT]"
11
12
  usage "bashly add (-h|--help)"
12
13
 
13
14
  option "-f --force", "Overwrite existing files"
14
15
 
16
+ param "FORMAT", "Output format, can be one of:\n function : generate a function file to be included in your script.\n script : generate a standalone bash completions script.\n yaml : generate a yaml compatible with completely."
17
+ param "OUTPUT", "For the 'comp function' command: Name of the generated function.\nFor the 'comp script' or 'comp yaml' commands: path to output file.\nIn all cases, this is optional and will have sensible defaults."
18
+
15
19
  command "strings", "Copy an additional configuration file to your project, allowing you to customize all the tips and error strings."
16
20
  command "lib", "Create the additional lib directory for additional user scripts. All *.sh scripts in this folder will be included in the final bash script."
17
21
  command "config", "Add standard functions for handling INI files to the lib directory."
18
22
  command "colors", "Add standard functions for printing colorful and formatted text to the lib directory."
19
23
  command "yaml", "Add standard functions for reading YAML files to the lib directory."
24
+ command "comp", "Generate a bash completions script or function."
25
+
26
+ example "bashly add strings --force"
27
+ example "bashly add comp function"
28
+ example "bashly add comp script completions.bash"
20
29
 
21
30
  environment "BASHLY_SOURCE_DIR", "The path containing the bashly configuration and source files [default: src]"
22
31
 
@@ -40,7 +49,25 @@ module Bashly
40
49
  safe_copy_lib "yaml.sh"
41
50
  end
42
51
 
52
+ def comp_command
53
+ format = args['FORMAT']
54
+ output = args['OUTPUT']
55
+
56
+ case format
57
+ when "function"
58
+ save_comp_function output
59
+ when "yaml"
60
+ save_comp_yaml output
61
+ when "script"
62
+ save_comp_script output
63
+ else
64
+ raise Error, "Unrecognized format: #{format}"
65
+ end
66
+
67
+ end
68
+
43
69
  private
70
+
44
71
  def safe_copy_lib(libfile)
45
72
  safe_copy asset("templates/lib/#{libfile}"), "#{Settings.source_dir}/lib/#{libfile}"
46
73
  end
@@ -63,6 +90,61 @@ module Bashly
63
90
  FileUtils.mkdir_p target_dir unless Dir.exist? target_dir
64
91
  FileUtils.cp source, target
65
92
  end
93
+
94
+ def config
95
+ @config ||= Config.new "#{Settings.source_dir}/bashly.yml"
96
+ end
97
+
98
+ def command
99
+ @command ||= Models::Command.new config
100
+ end
101
+
102
+ def completions
103
+ @completions ||= command.completion_data
104
+ end
105
+
106
+ def completions_script
107
+ @completions_script ||= command.completion_script
108
+ end
109
+
110
+ def completions_function
111
+ @completions_function ||= command.completion_function
112
+ end
113
+
114
+ def save_comp_yaml(filename = nil)
115
+ filename ||= "#{Settings.target_dir}/completions.yml"
116
+ File.write filename, completions.to_yaml
117
+ say "created !txtgrn!#{filename}"
118
+ say ""
119
+ say "This file can be converted to a completions script using the !txtgrn!completely!txtrst! gem."
120
+ end
121
+
122
+ def save_comp_script(filename = nil)
123
+ filename ||= "#{Settings.target_dir}/completions.bash"
124
+ File.write filename, completions_script
125
+ say "created !txtgrn!#{filename}"
126
+ say ""
127
+ say "In order to enable completions, run:"
128
+ say ""
129
+ say " !txtpur!$ source #{filename}"
130
+ end
131
+
132
+ def save_comp_function(name = nil)
133
+ name ||= "send_completions"
134
+ target_dir = "#{Settings.source_dir}/lib"
135
+ filename = "#{target_dir}/#{name}.sh"
136
+
137
+ FileUtils.mkdir_p target_dir unless Dir.exist? target_dir
138
+ File.write filename, completions_function
139
+
140
+ say "created !txtgrn!#{filename}"
141
+ say ""
142
+ say "In order to use it in your script, create a command or a flag (for example: !txtgrn!#{command.name} completions!txtrst! or !txtgrn!#{command.name} --completions!txtrst!) that calls the !txtgrn!#{name}!txtrst! function."
143
+ say "Your users can then run something like this to enable completions:"
144
+ say ""
145
+ say " !txtpur!$ eval \"$(#{command.name} completions)\""
146
+ end
147
+
66
148
  end
67
149
  end
68
150
  end
@@ -0,0 +1,47 @@
1
+ require 'completely'
2
+
3
+ module Bashly
4
+ # This is a `Command` concern responsible for providing bash completion data
5
+ module Completions
6
+ def completion_data(with_version: true)
7
+ result = { full_name => completion_words(with_version: with_version) }
8
+
9
+ commands.each do |command|
10
+ result.merge! command.completion_data(with_version: false)
11
+ end
12
+
13
+ result
14
+ end
15
+
16
+ def completion_script
17
+ completion_generator.script
18
+ end
19
+
20
+ def completion_function(name = nil)
21
+ completion_generator.wrapper_function(name)
22
+ end
23
+
24
+ private
25
+
26
+ def completion_generator
27
+ Completely::Completions.new(completion_data)
28
+ end
29
+
30
+ def completion_flag_names
31
+ flags.map(&:name) + flags.map(&:short)
32
+ end
33
+
34
+ def completion_words(with_version: false)
35
+ trivial_flags = %w[--help -h]
36
+ trivial_flags += %w[--version -v] if with_version
37
+ all = (
38
+ command_names + trivial_flags +
39
+ completion_flag_names
40
+ )
41
+
42
+ all += completions if completions
43
+ all.compact.uniq.sort
44
+ end
45
+
46
+ end
47
+ end
@@ -4,10 +4,7 @@ module Bashly
4
4
  module Renderable
5
5
  def render(view)
6
6
  template = File.read view_path(view)
7
- # TODO: This new format is only supported in Ruby >= 2.6
8
- # So for now, we keep the old deprecated syntax
9
- # ERB.new(template, trim_mode: '%-').result(binding)
10
- ERB.new(template, nil, '%-').result(binding)
7
+ ERB.new(template, trim_mode: '%-').result(binding)
11
8
  end
12
9
 
13
10
  def strings
@@ -9,6 +9,7 @@ module Bashly
9
9
  allowed
10
10
  arg
11
11
  catch_all
12
+ completions
12
13
  default
13
14
  dependencies
14
15
  description
@@ -1,6 +1,8 @@
1
1
  module Bashly
2
2
  module Models
3
3
  class Command < Base
4
+ include Completions
5
+
4
6
  # Returns the name to be used as an action.
5
7
  # - If it is the root command, the action is "root"
6
8
  # - Else, it is all the parents, except the first tone (root) joined
@@ -90,6 +92,11 @@ module Bashly
90
92
  commands.find { |c| c.default }
91
93
  end
92
94
 
95
+ # Returns an array of all the default Environment Variables
96
+ def default_environment_variables
97
+ environment_variables.select &:default
98
+ end
99
+
93
100
  # Returns an array of all the default Flags
94
101
  def default_flags
95
102
  flags.select &:default
@@ -17,7 +17,7 @@ config_init() {
17
17
  [[ -f "$CONFIG_FILE" ]] || touch "$CONFIG_FILE"
18
18
  }
19
19
 
20
- # Get a value from the config
20
+ # Get a value from the config.
21
21
  # Usage: result=$(config_get hello)
22
22
  config_get() {
23
23
  key=$1
@@ -66,7 +66,7 @@ config_set() {
66
66
  printf "%b\n" "$output" > "$CONFIG_FILE"
67
67
  }
68
68
 
69
- # Delete a key from teh config.
69
+ # Delete a key from the config.
70
70
  # Usage: config_del key
71
71
  config_del() {
72
72
  key=$1
@@ -92,7 +92,7 @@ config_show() {
92
92
  cat "$CONFIG_FILE"
93
93
  }
94
94
 
95
- # Return an array of the keys in the config file
95
+ # Return an array of the keys in the config file.
96
96
  # Usage:
97
97
  #
98
98
  # for k in $(config_keys); do
@@ -114,7 +114,7 @@ config_keys() {
114
114
  echo "${keys[@]}"
115
115
  }
116
116
 
117
- # Returns true if the specified key exists in the config file
117
+ # Returns true if the specified key exists in the config file.
118
118
  # Usage:
119
119
  #
120
120
  # if config_has_key "key" ; then
@@ -31,3 +31,4 @@ missing_required_environment_variable: "missing required environment variable: %
31
31
  missing_dependency: "missing dependency: %{dependency}"
32
32
  disallowed_flag: "%{name} must be one of: %{allowed}"
33
33
  disallowed_argument: "%{name} must be one of: %{allowed}"
34
+ unsupported_bash_version: "bash version 4 or higher is required"
@@ -1,3 +1,3 @@
1
1
  module Bashly
2
- VERSION = "0.5.1"
2
+ VERSION = "0.6.3"
3
3
  end
@@ -1,4 +1,9 @@
1
1
  # :command.environment_variables_filter
2
+ <%- if default_environment_variables.any? -%>
3
+ <%- default_environment_variables.each do |env_var| -%>
4
+ export <%= env_var.name.upcase %>="${<%= env_var.name.upcase %>:-<%= env_var.default %>}"
5
+ <%- end -%>
6
+ <%- end -%>
2
7
  <%- if required_environment_variables.any? -%>
3
8
  <%- required_environment_variables.each do |env_var| -%>
4
9
  if [[ -z "$<%= env_var.name.upcase %>" ]]; then
@@ -2,7 +2,12 @@
2
2
  initialize() {
3
3
  version="<%= version %>"
4
4
  long_usage=''
5
- set -e
5
+ set -e
6
+
7
+ if [[ "${BASH_VERSINFO:-0}" -lt 4 ]]; then
8
+ printf "<%= strings[:unsupported_bash_version] -%>\n"
9
+ exit 1
10
+ fi
6
11
 
7
12
  <%= load_user_file("initialize.sh", placeholder: false).indent 2 %>
8
13
  }
@@ -1,4 +1,7 @@
1
1
  # :environment_variable.usage
2
2
  echo " <%= usage_string extended: true %>"
3
3
  printf "<%= help.wrap(76).indent(4).sanitize_for_print %>\n"
4
+ <%- if default -%>
5
+ printf " <%= strings[:default] % { value: default } -%>\n"
6
+ <%- end -%>
4
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.5.1
4
+ version: 0.6.3
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: 2021-07-02 00:00:00.000000000 Z
11
+ date: 2021-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colsole
@@ -24,6 +24,26 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: completely
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.1'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 0.1.2
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '0.1'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 0.1.2
27
47
  - !ruby/object:Gem::Dependency
28
48
  name: mister_bin
29
49
  requirement: !ruby/object:Gem::Requirement
@@ -69,6 +89,7 @@ files:
69
89
  - lib/bashly/commands/init.rb
70
90
  - lib/bashly/commands/preview.rb
71
91
  - lib/bashly/concerns/asset_helper.rb
92
+ - lib/bashly/concerns/completions.rb
72
93
  - lib/bashly/concerns/renderable.rb
73
94
  - lib/bashly/config.rb
74
95
  - lib/bashly/exceptions.rb
@@ -141,14 +162,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
141
162
  requirements:
142
163
  - - ">="
143
164
  - !ruby/object:Gem::Version
144
- version: 2.3.0
165
+ version: 2.7.0
145
166
  required_rubygems_version: !ruby/object:Gem::Requirement
146
167
  requirements:
147
168
  - - ">="
148
169
  - !ruby/object:Gem::Version
149
170
  version: '0'
150
171
  requirements: []
151
- rubygems_version: 3.2.16
172
+ rubygems_version: 3.2.25
152
173
  signing_key:
153
174
  specification_version: 4
154
175
  summary: Bash Command Line Tool Generator