bashly 1.4.0 → 2.0.0.rc2

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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/lib/bashly/commands/completions.rb +3 -41
  3. data/lib/bashly/completions/README.md +3 -7
  4. data/lib/bashly/completions/bashly-completions.bash +2 -2
  5. data/lib/bashly/completions/completely.yaml +0 -4
  6. data/lib/bashly/concerns/settings_completions.rb +37 -0
  7. data/lib/bashly/config_validator.rb +18 -3
  8. data/lib/bashly/docs/arg.yml +12 -6
  9. data/lib/bashly/docs/command.yml +0 -12
  10. data/lib/bashly/docs/flag.yml +8 -4
  11. data/lib/bashly/libraries/libraries.yml +0 -15
  12. data/lib/bashly/libraries/settings/settings.yml +12 -6
  13. data/lib/bashly/script/argument.rb +17 -0
  14. data/lib/bashly/script/command.rb +1 -2
  15. data/lib/bashly/script/flag.rb +12 -1
  16. data/lib/bashly/script/introspection/commands.rb +5 -0
  17. data/lib/bashly/script/wrapper.rb +1 -1
  18. data/lib/bashly/settings.rb +7 -8
  19. data/lib/bashly/version.rb +1 -1
  20. data/lib/bashly/views/argument/completion.gtx +31 -0
  21. data/lib/bashly/views/argument/completion_filter.gtx +1 -0
  22. data/lib/bashly/views/command/completion_argument_candidates.gtx +12 -0
  23. data/lib/bashly/views/command/completion_argument_filter.gtx +25 -0
  24. data/lib/bashly/views/command/completion_command_candidates.gtx +3 -0
  25. data/lib/bashly/views/command/completion_flag_candidates.gtx +21 -0
  26. data/lib/bashly/views/command/completion_function.gtx +24 -0
  27. data/lib/bashly/views/command/completion_script.gtx +21 -0
  28. data/lib/bashly/views/command/completion_script_bash.gtx +63 -0
  29. data/lib/bashly/views/command/completion_script_zsh.gtx +52 -0
  30. data/lib/bashly/views/command/completion_word_filter.gtx +44 -0
  31. data/lib/bashly/views/command/completions.gtx +81 -0
  32. data/lib/bashly/views/command/inspect_args.gtx +3 -3
  33. data/lib/bashly/views/command/master_script.gtx +7 -4
  34. data/lib/bashly/views/command/start.gtx +12 -3
  35. data/lib/bashly/views/flag/completion.gtx +1 -0
  36. data/lib/bashly/views/flag/completion_filter.gtx +7 -0
  37. data/lib/bashly/views/flag/completion_filter_arg.gtx +10 -0
  38. data/lib/bashly/views/flag/completion_filter_block.gtx +8 -0
  39. data/lib/bashly/views/flag/completion_filter_no_arg.gtx +2 -0
  40. data/lib/bashly/views/flag/completion_value_candidates.gtx +31 -0
  41. data/lib/bashly/watch.rb +22 -50
  42. data/lib/bashly.rb +2 -5
  43. metadata +39 -39
  44. data/lib/bashly/completion_builder.rb +0 -231
  45. data/lib/bashly/concerns/completions.rb +0 -48
  46. data/lib/bashly/libraries/completions/completions_function.rb +0 -37
  47. data/lib/bashly/libraries/completions/completions_script.rb +0 -28
  48. data/lib/bashly/libraries/completions/completions_yaml.rb +0 -26
  49. /data/lib/bashly/views/wrapper/{bash3_bouncer.gtx → bash_version_bouncer.gtx} +0 -0
@@ -0,0 +1,63 @@
1
+ = view_marker
2
+
3
+ > send_completions_bash() {
4
+ > echo $'_{{ name.to_underscore }}_completions() {'
5
+ > echo $' local completion_command="${COMP_WORDS[0]}"'
6
+ > echo $' local completion_current="${COMP_WORDS[COMP_CWORD]:-}"'
7
+ > echo $' local completion_word_count=$((COMP_CWORD - 1))'
8
+ > echo $' local -a completion_words=()'
9
+ > echo $' local -a completion_response=()'
10
+ > echo $' local -a completion_options=()'
11
+ > echo $' local -A completion_seen=()'
12
+ > echo $''
13
+ > echo $' if [[ $completion_word_count -gt 0 ]]; then'
14
+ > echo $' completion_words=("${COMP_WORDS[@]:1:completion_word_count}")'
15
+ > echo $' fi'
16
+ > echo $''
17
+ > echo $' COMPREPLY=()'
18
+ > echo $' while IFS= read -r completion_line; do'
19
+ > echo $' completion_response+=("$completion_line")'
20
+ > echo $' done < <("$completion_command" __complete "${completion_words[@]}" "$completion_current")'
21
+ > echo $''
22
+ > echo $' local completion_directive="${completion_response[-1]:-}"'
23
+ > echo $' if [[ $completion_directive == :options=* ]]; then'
24
+ > echo $' unset "completion_response[-1]"'
25
+ > echo $' IFS=, read -r -a completion_options <<< "${completion_directive#:options=}"'
26
+ > echo $' fi'
27
+ > echo $''
28
+ > echo $' COMPREPLY=("${completion_response[@]}")'
29
+ > echo $' local completion_candidate'
30
+ > echo $' for completion_candidate in "${COMPREPLY[@]}"; do'
31
+ > echo $' completion_seen["$completion_candidate"]=1'
32
+ > echo $' done'
33
+ > echo $''
34
+ > echo $' local completion_option'
35
+ > echo $' local completion_files=false'
36
+ > echo $' local completion_directories=false'
37
+ > echo $' for completion_option in "${completion_options[@]}"; do'
38
+ > echo $' case "$completion_option" in'
39
+ > echo $' files) completion_files=true ;;'
40
+ > echo $' directories) completion_directories=true ;;'
41
+ > echo $' no-space) compopt -o nospace ;;'
42
+ > echo $' esac'
43
+ > echo $' done'
44
+ > echo $''
45
+ > echo $' if [[ $completion_files == true ]]; then'
46
+ > echo $' while IFS= read -r completion_candidate; do'
47
+ > echo $' if [[ -z "${completion_seen[$completion_candidate]:-}" ]]; then'
48
+ > echo $' COMPREPLY+=("$completion_candidate")'
49
+ > echo $' completion_seen["$completion_candidate"]=1'
50
+ > echo $' fi'
51
+ > echo $' done < <(compgen -f -- "$completion_current")'
52
+ > echo $' elif [[ $completion_directories == true ]]; then'
53
+ > echo $' while IFS= read -r completion_candidate; do'
54
+ > echo $' if [[ -z "${completion_seen[$completion_candidate]:-}" ]]; then'
55
+ > echo $' COMPREPLY+=("$completion_candidate")'
56
+ > echo $' completion_seen["$completion_candidate"]=1'
57
+ > echo $' fi'
58
+ > echo $' done < <(compgen -d -- "$completion_current")'
59
+ > echo $' fi'
60
+ > echo $'}'
61
+ > echo $''
62
+ > echo $'complete -F _{{ name.to_underscore }}_completions {{ name }}'
63
+ > }
@@ -0,0 +1,52 @@
1
+ = view_marker
2
+
3
+ > send_completions_zsh() {
4
+ > echo $'#compdef {{ name }}'
5
+ > echo $''
6
+ > echo $'_{{ name.to_underscore }}_completions() {'
7
+ > echo $' local completion_command="${words[1]}"'
8
+ > echo $' local completion_current="${words[CURRENT]:-}"'
9
+ > echo $' local completion_output'
10
+ > echo $' local completion_directive'
11
+ > echo $' local -a completion_words=()'
12
+ > echo $' local -a completion_response=()'
13
+ > echo $' local -a completion_options=()'
14
+ > echo $' local -a completion_add_args=()'
15
+ > echo $''
16
+ > echo $' if (( CURRENT > 2 )); then'
17
+ > echo $' completion_words=("${words[2,$((CURRENT - 1))]}")'
18
+ > echo $' fi'
19
+ > echo $''
20
+ > echo $' completion_output="$("$completion_command" __complete "${completion_words[@]}" "$completion_current")"'
21
+ > echo $' completion_response=("${(@f)completion_output}")'
22
+ > echo $''
23
+ > echo $' completion_directive="${completion_response[-1]:-}"'
24
+ > echo $' if [[ $completion_directive == :options=* ]]; then'
25
+ > echo $' completion_response[-1]=()'
26
+ > echo $' completion_options=("${(@s:,:)${completion_directive#:options=}}")'
27
+ > echo $' fi'
28
+ > echo $''
29
+ > echo $' local completion_option'
30
+ > echo $' local completion_files=false'
31
+ > echo $' local completion_directories=false'
32
+ > echo $' for completion_option in "${completion_options[@]}"; do'
33
+ > echo $' case "$completion_option" in'
34
+ > echo $' files) completion_files=true ;;'
35
+ > echo $' directories) completion_directories=true ;;'
36
+ > echo $' no-space) completion_add_args=(-S "") ;;'
37
+ > echo $' esac'
38
+ > echo $' done'
39
+ > echo $''
40
+ > echo $' if (( ${#completion_response[@]} > 0 )); then'
41
+ > echo $' compadd "${completion_add_args[@]}" -- "${completion_response[@]}"'
42
+ > echo $' fi'
43
+ > echo $''
44
+ > echo $' if [[ $completion_files == true ]]; then'
45
+ > echo $' _files "${completion_add_args[@]}"'
46
+ > echo $' elif [[ $completion_directories == true ]]; then'
47
+ > echo $' _files -/ "${completion_add_args[@]}"'
48
+ > echo $' fi'
49
+ > echo $'}'
50
+ > echo $''
51
+ > echo $'compdef _{{ name.to_underscore }}_completions {{ name }}'
52
+ > }
@@ -0,0 +1,44 @@
1
+ > while [[ $# -gt 0 ]]; do
2
+ > case "$1" in
3
+ public_commands.each do |command|
4
+ > {{ command.aliases.join ' | ' }})
5
+ > shift
6
+ > {{ command.function_name }}_completion "$completion_current" "$@"
7
+ > return
8
+ > ;;
9
+ end
10
+ if fixed_flags?
11
+ if short_flag_exist? '-h'
12
+ > --help)
13
+ else
14
+ > --help | -h)
15
+ end
16
+ > completion_blocked_flags["--help"]=1
17
+ > shift
18
+ > ;;
19
+ if root_command?
20
+ if short_flag_exist? '-v'
21
+ > --version)
22
+ else
23
+ > --version | -v)
24
+ end
25
+ > completion_blocked_flags["--version"]=1
26
+ > shift
27
+ > ;;
28
+ end
29
+ end
30
+ public_flags.each do |flag|
31
+ = flag.render(:completion_filter).indent 4
32
+ end
33
+ > *)
34
+ if args.any?
35
+ = render(:completion_argument_filter).indent 6
36
+ elsif default_command
37
+ > {{ default_command.function_name }}_completion "$completion_current" "$@"
38
+ > return
39
+ else
40
+ > return
41
+ end
42
+ > ;;
43
+ > esac
44
+ > done
@@ -0,0 +1,81 @@
1
+ = view_marker
2
+
3
+ > completion_run() {
4
+ > local -a completion_words=("$@")
5
+ > local -A completion_blocked_flags=()
6
+ > local -A completion_emitted=()
7
+ > local -a completion_options=()
8
+ > local -A completion_options_seen=()
9
+ > local completion_count=${#completion_words[@]}
10
+ > local completion_current=""
11
+ >
12
+ > if [[ $completion_count -gt 0 ]]; then
13
+ > completion_current="${completion_words[$((completion_count - 1))]}"
14
+ > unset 'completion_words[completion_count - 1]'
15
+ > fi
16
+ >
17
+ > {{ function_name }}_completion "$completion_current" "${completion_words[@]}"
18
+ >
19
+ > local completion_options_string=""
20
+ > if [[ ${#completion_options[@]} -gt 0 ]]; then
21
+ > completion_options_string="$(
22
+ > IFS=,
23
+ > printf '%s' "${completion_options[*]}"
24
+ > )"
25
+ > fi
26
+ > printf ':options=%s\n' "$completion_options_string"
27
+ > }
28
+ >
29
+ > completion_candidates() {
30
+ > local completion_current="$1"
31
+ > shift
32
+ >
33
+ > local completion_candidate
34
+ > for completion_candidate in "$@"; do
35
+ > if [[ $completion_candidate == "$completion_current"* ]] &&
36
+ > [[ -z "${completion_emitted[$completion_candidate]:-}" ]]; then
37
+ > printf '%s\n' "$completion_candidate"
38
+ > completion_emitted["$completion_candidate"]=1
39
+ > fi
40
+ > done
41
+ > }
42
+ >
43
+ > completion_flag_candidates() {
44
+ > local completion_flag="$1"
45
+ > local completion_current="$2"
46
+ > shift 2
47
+ >
48
+ > if [[ -z "${completion_blocked_flags[$completion_flag]:-}" ]]; then
49
+ > completion_candidates "$completion_current" "$@"
50
+ > fi
51
+ > }
52
+ >
53
+ > completion_add_options() {
54
+ > local completion_option
55
+ > for completion_option in "$@"; do
56
+ > if [[ -z "${completion_options_seen[$completion_option]:-}" ]]; then
57
+ > completion_options+=("$completion_option")
58
+ > completion_options_seen["$completion_option"]=1
59
+ > fi
60
+ > done
61
+ > }
62
+ >
63
+ > completion_dynamic_candidates() {
64
+ > local completion_current="$1"
65
+ > local completion_output="$2"
66
+ >
67
+ > [[ -n $completion_output ]] || return
68
+ >
69
+ > local completion_candidate
70
+ > while IFS= read -r completion_candidate; do
71
+ > if [[ -n $completion_candidate ]]; then
72
+ > completion_candidates "$completion_current" "$completion_candidate"
73
+ > fi
74
+ > done <<<"$completion_output"
75
+ > }
76
+ >
77
+ = render :completion_script if Settings.completion_shells.any?
78
+ = render :completion_function
79
+ deep_commands.each do |command|
80
+ = command.render :completion_function
81
+ end
@@ -4,7 +4,7 @@
4
4
  > local k
5
5
  >
6
6
  > if ((${#args[@]})); then
7
- > readarray -t sorted_keys < <(printf '%s\n' "${!args[@]}" | sort)
7
+ > readarray -t sorted_keys < <(printf '%s\n' "${!args[@]}" | LC_ALL=C sort)
8
8
  > echo args:
9
9
  > for k in "${sorted_keys[@]}"; do
10
10
  > echo "- \${args[$k]} = ${args[$k]}"
@@ -28,7 +28,7 @@ end
28
28
 
29
29
  if Settings.enabled? :deps_array
30
30
  > if ((${#deps[@]})); then
31
- > readarray -t sorted_keys < <(printf '%s\n' "${!deps[@]}" | sort)
31
+ > readarray -t sorted_keys < <(printf '%s\n' "${!deps[@]}" | LC_ALL=C sort)
32
32
  > echo
33
33
  > echo deps:
34
34
  > for k in "${sorted_keys[@]}"; do
@@ -40,7 +40,7 @@ end
40
40
 
41
41
  if Settings.enabled? :env_var_names_array
42
42
  > if ((${#env_var_names[@]})); then
43
- > readarray -t sorted_names < <(printf '%s\n' "${env_var_names[@]}" | sort)
43
+ > readarray -t sorted_names < <(printf '%s\n' "${env_var_names[@]}" | LC_ALL=C sort)
44
44
  > echo
45
45
  > echo "environment variables:"
46
46
  > for k in "${sorted_names[@]}"; do
@@ -8,16 +8,19 @@
8
8
  = render :user_lib if user_lib.any?
9
9
  = render :command_functions
10
10
  = render :parse_requirements
11
+ = render :completions if Settings.completions?
11
12
  = render :user_hooks
12
13
  = render :initialize
13
14
  = render :run
14
15
 
15
- >
16
+ >
17
+ = render :start
18
+ >
16
19
  if Settings.enabled? :sourcing
17
20
  > if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
18
- = render(:start).indent 2
21
+ > {{ Settings.function_name :start }} "$@"
19
22
  > fi
20
23
  else
21
- = render :start
24
+ > {{ Settings.function_name :start }} "$@"
22
25
  end
23
- >
26
+ >
@@ -1,5 +1,14 @@
1
1
  = view_marker
2
2
 
3
- > command_line_args=("$@")
4
- > {{ Settings.function_name :initialize }}
5
- > {{ Settings.function_name :run }} "${command_line_args[@]}"
3
+ > {{ Settings.function_name :start }}() {
4
+ if Settings.completions?
5
+ > if [[ ${1:-} == "__complete" ]]; then
6
+ > completion_run "${@:2}"
7
+ > return
8
+ > fi
9
+ >
10
+ end
11
+ > command_line_args=("$@")
12
+ > {{ Settings.function_name :initialize }}
13
+ > {{ Settings.function_name :run }} "${command_line_args[@]}"
14
+ > }
@@ -0,0 +1 @@
1
+ > completion_flag_candidates {{ name }} "$completion_current" {{ aliases.join ' ' }}
@@ -0,0 +1,7 @@
1
+ > {{ aliases.join ' | ' }})
2
+ if arg
3
+ = render(:completion_filter_arg).indent 2
4
+ else
5
+ = render(:completion_filter_no_arg).indent 2
6
+ end
7
+ > ;;
@@ -0,0 +1,10 @@
1
+ > shift
2
+ > if [[ $# -eq 0 ]]; then
3
+ = render(:completion_value_candidates).indent 2
4
+ > return
5
+ > fi
6
+ if unique
7
+ > completion_used_flag_values["{{ name }}:$1"]=1
8
+ end
9
+ > shift
10
+ = render :completion_filter_block
@@ -0,0 +1,8 @@
1
+ unless repeatable
2
+ > completion_blocked_flags["{{ name }}"]=1
3
+ end
4
+ if conflicts
5
+ conflicts.each do |conflict|
6
+ > completion_blocked_flags["{{ conflict }}"]=1
7
+ end
8
+ end
@@ -0,0 +1,2 @@
1
+ = render :completion_filter_block
2
+ > shift
@@ -0,0 +1,31 @@
1
+ if allowed
2
+ > local -a completion_values=(
3
+ allowed.each do |value|
4
+ > "{{ value }}"
5
+ end
6
+ > )
7
+ if unique
8
+ > local completion_value
9
+ > for completion_value in "${completion_values[@]}"; do
10
+ > if [[ -z "${completion_used_flag_values["{{ name }}:$completion_value"]:-}" ]]; then
11
+ > completion_candidates "$completion_current" "$completion_value"
12
+ > fi
13
+ > done
14
+ else
15
+ > completion_candidates "$completion_current" "${completion_values[@]}"
16
+ end
17
+ end
18
+
19
+ if completion_static.any?
20
+ > completion_candidates "$completion_current" {{ completion_static.map { |value| Shellwords.shellescape value }.join ' ' }}
21
+ end
22
+
23
+ completion_dynamic.each do |command|
24
+ > if completion_output="$({ {{ command }}; } 2>/dev/null)"; then
25
+ > completion_dynamic_candidates "$completion_current" "$completion_output"
26
+ > fi
27
+ end
28
+
29
+ if completion_options.any?
30
+ > completion_add_options {{ completion_options.join ' ' }}
31
+ end
data/lib/bashly/watch.rb CHANGED
@@ -1,68 +1,40 @@
1
- require 'listen'
1
+ require 'watchly'
2
2
 
3
3
  module Bashly
4
- # File system watcher - an ergonomic wrapper around the Listen gem
4
+ # File system watcher - an ergonomic wrapper around the Watchly gem
5
5
  class Watch
6
- attr_reader :dirs, :options
6
+ attr_reader :interval, :targets
7
7
 
8
- def initialize(*dirs, **options)
9
- @options = default_options.merge(options).freeze
10
- @dirs = dirs.empty? ? ['.'] : dirs
8
+ def initialize(*targets, interval: nil)
9
+ @targets = targets.empty? ? ['.'] : targets
10
+ @interval = interval || default_interval
11
11
  end
12
12
 
13
- def on_change(&)
14
- start(&)
15
- wait
16
- ensure
17
- stop
18
- end
19
-
20
- private
13
+ def on_change
14
+ raise ArgumentError, 'block required' unless block_given?
21
15
 
22
- def default_options
23
- {
24
- force_polling: force_polling?,
25
- latency: latency,
26
- }
16
+ watcher.on_change do |changes|
17
+ yield normalize(changes)
18
+ end
19
+ rescue ::Interrupt => e
20
+ raise Bashly::Interrupt, cause: e
27
21
  end
28
22
 
29
- def force_polling?
30
- !Settings.watch_evented
31
- end
23
+ private
32
24
 
33
- def latency
25
+ def default_interval
34
26
  value = Settings.watch_latency.to_f
35
27
  value.positive? ? value : 0.1
36
28
  end
37
29
 
38
- def start(&block)
39
- raise ArgumentError, 'block required' unless block
40
-
41
- @listener = build_listener(&block)
42
- @listener.start
43
- end
44
-
45
- def stop
46
- @listener&.stop
47
- @listener = nil
48
- end
49
-
50
- def wait
51
- sleep
52
- rescue ::Interrupt => e
53
- raise Bashly::Interrupt, cause: e
54
- end
55
-
56
- def build_listener
57
- listen.to(*dirs, **options) do |modified, added, removed|
58
- yield changes(modified, added, removed)
59
- end
60
- end
61
-
62
- def changes(modified, added, removed)
63
- { modified:, added:, removed: }
30
+ def normalize(changes)
31
+ {
32
+ modified: changes.modified,
33
+ added: changes.added,
34
+ removed: changes.removed,
35
+ }
64
36
  end
65
37
 
66
- def listen = Listen
38
+ def watcher = @watcher ||= Watchly::Watcher.new(*targets, interval:)
67
39
  end
68
40
  end
data/lib/bashly.rb CHANGED
@@ -6,13 +6,13 @@ module Bashly
6
6
  autoloads 'bashly/refinements', %i[ComposeRefinements]
7
7
 
8
8
  autoloads 'bashly', %i[
9
- CLI CompletionBuilder Config ConfigValidator Library LibrarySource
9
+ CLI Config ConfigValidator Library LibrarySource
10
10
  LibrarySourceConfig MessageStrings RenderContext RenderSource Settings
11
11
  VERSION Watch
12
12
  ]
13
13
 
14
14
  autoloads 'bashly/concerns', %i[
15
- AssetHelper Completions Renderable ValidationHelpers
15
+ AssetHelper Renderable SettingsCompletions ValidationHelpers
16
16
  ]
17
17
 
18
18
  module Script
@@ -37,9 +37,6 @@ module Bashly
37
37
 
38
38
  module Libraries
39
39
  autoload :Base, 'bashly/libraries/base'
40
- autoload :CompletionsFunction, 'bashly/libraries/completions/completions_function'
41
- autoload :CompletionsScript, 'bashly/libraries/completions/completions_script'
42
- autoload :CompletionsYAML, 'bashly/libraries/completions/completions_yaml'
43
40
  autoload :Help, 'bashly/libraries/help/help'
44
41
  end
45
42
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bashly
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 2.0.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danny Ben Shitrit
@@ -23,20 +23,6 @@ dependencies:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
25
  version: '1.0'
26
- - !ruby/object:Gem::Dependency
27
- name: completely
28
- requirement: !ruby/object:Gem::Requirement
29
- requirements:
30
- - - "~>"
31
- - !ruby/object:Gem::Version
32
- version: 0.8.0
33
- type: :runtime
34
- prerelease: false
35
- version_requirements: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: 0.8.0
40
26
  - !ruby/object:Gem::Dependency
41
27
  name: gtx
42
28
  requirement: !ruby/object:Gem::Requirement
@@ -51,20 +37,6 @@ dependencies:
51
37
  - - "~>"
52
38
  - !ruby/object:Gem::Version
53
39
  version: 0.1.1
54
- - !ruby/object:Gem::Dependency
55
- name: listen
56
- requirement: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "~>"
59
- - !ruby/object:Gem::Version
60
- version: '3.9'
61
- type: :runtime
62
- prerelease: false
63
- version_requirements: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: '3.9'
68
40
  - !ruby/object:Gem::Dependency
69
41
  name: lp
70
42
  requirement: !ruby/object:Gem::Requirement
@@ -121,6 +93,20 @@ dependencies:
121
93
  - - "~>"
122
94
  - !ruby/object:Gem::Version
123
95
  version: 0.7.2
96
+ - !ruby/object:Gem::Dependency
97
+ name: watchly
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: 0.2.0
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: 0.2.0
124
110
  description: Generate bash command line tools using YAML configuration
125
111
  email: db@dannyben.com
126
112
  executables:
@@ -142,15 +128,14 @@ files:
142
128
  - lib/bashly/commands/render.rb
143
129
  - lib/bashly/commands/shell.rb
144
130
  - lib/bashly/commands/validate.rb
145
- - lib/bashly/completion_builder.rb
146
131
  - lib/bashly/completions/README.md
147
132
  - lib/bashly/completions/bashly-completions.bash
148
133
  - lib/bashly/completions/completely.yaml
149
134
  - lib/bashly/completions/completely.yaml.gtx
150
135
  - lib/bashly/concerns/asset_helper.rb
151
- - lib/bashly/concerns/completions.rb
152
136
  - lib/bashly/concerns/indentation_helper.rb
153
137
  - lib/bashly/concerns/renderable.rb
138
+ - lib/bashly/concerns/settings_completions.rb
154
139
  - lib/bashly/concerns/validation_helpers.rb
155
140
  - lib/bashly/config.rb
156
141
  - lib/bashly/config_validator.rb
@@ -166,9 +151,6 @@ files:
166
151
  - lib/bashly/extensions/yaml.rb
167
152
  - lib/bashly/libraries/base.rb
168
153
  - lib/bashly/libraries/colors/colors.sh
169
- - lib/bashly/libraries/completions/completions_function.rb
170
- - lib/bashly/libraries/completions/completions_script.rb
171
- - lib/bashly/libraries/completions/completions_yaml.rb
172
154
  - lib/bashly/libraries/config/config.sh
173
155
  - lib/bashly/libraries/help/help.rb
174
156
  - lib/bashly/libraries/help/help_command.sh
@@ -231,6 +213,8 @@ files:
231
213
  - lib/bashly/views/README.md
232
214
  - lib/bashly/views/argument/case.gtx
233
215
  - lib/bashly/views/argument/case_repeatable.gtx
216
+ - lib/bashly/views/argument/completion.gtx
217
+ - lib/bashly/views/argument/completion_filter.gtx
234
218
  - lib/bashly/views/argument/usage.gtx
235
219
  - lib/bashly/views/argument/validations.gtx
236
220
  - lib/bashly/views/command/argfile_filter.gtx
@@ -238,6 +222,16 @@ files:
238
222
  - lib/bashly/views/command/command_fallback.gtx
239
223
  - lib/bashly/views/command/command_filter.gtx
240
224
  - lib/bashly/views/command/command_functions.gtx
225
+ - lib/bashly/views/command/completion_argument_candidates.gtx
226
+ - lib/bashly/views/command/completion_argument_filter.gtx
227
+ - lib/bashly/views/command/completion_command_candidates.gtx
228
+ - lib/bashly/views/command/completion_flag_candidates.gtx
229
+ - lib/bashly/views/command/completion_function.gtx
230
+ - lib/bashly/views/command/completion_script.gtx
231
+ - lib/bashly/views/command/completion_script_bash.gtx
232
+ - lib/bashly/views/command/completion_script_zsh.gtx
233
+ - lib/bashly/views/command/completion_word_filter.gtx
234
+ - lib/bashly/views/command/completions.gtx
241
235
  - lib/bashly/views/command/default_assignments.gtx
242
236
  - lib/bashly/views/command/default_script.gtx
243
237
  - lib/bashly/views/command/dependencies_filter.gtx
@@ -291,16 +285,22 @@ files:
291
285
  - lib/bashly/views/flag/case.gtx
292
286
  - lib/bashly/views/flag/case_arg.gtx
293
287
  - lib/bashly/views/flag/case_no_arg.gtx
288
+ - lib/bashly/views/flag/completion.gtx
289
+ - lib/bashly/views/flag/completion_filter.gtx
290
+ - lib/bashly/views/flag/completion_filter_arg.gtx
291
+ - lib/bashly/views/flag/completion_filter_block.gtx
292
+ - lib/bashly/views/flag/completion_filter_no_arg.gtx
293
+ - lib/bashly/views/flag/completion_value_candidates.gtx
294
294
  - lib/bashly/views/flag/conflicts.gtx
295
295
  - lib/bashly/views/flag/needs.gtx
296
296
  - lib/bashly/views/flag/usage.gtx
297
297
  - lib/bashly/views/flag/validations.gtx
298
298
  - lib/bashly/views/variable/definition.gtx
299
- - lib/bashly/views/wrapper/bash3_bouncer.gtx
299
+ - lib/bashly/views/wrapper/bash_version_bouncer.gtx
300
300
  - lib/bashly/views/wrapper/header.gtx
301
301
  - lib/bashly/views/wrapper/wrapper.gtx
302
302
  - lib/bashly/watch.rb
303
- homepage: https://github.com/bashly-framework/bashly
303
+ homepage: https://bashly.dev
304
304
  licenses:
305
305
  - MIT
306
306
  metadata:
@@ -316,14 +316,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
316
316
  requirements:
317
317
  - - ">="
318
318
  - !ruby/object:Gem::Version
319
- version: '3.2'
319
+ version: '3.3'
320
320
  required_rubygems_version: !ruby/object:Gem::Requirement
321
321
  requirements:
322
322
  - - ">="
323
323
  - !ruby/object:Gem::Version
324
324
  version: '0'
325
325
  requirements: []
326
- rubygems_version: 4.0.15
326
+ rubygems_version: 4.0.17
327
327
  specification_version: 4
328
- summary: Bash Command Line Tool Generator
328
+ summary: Bash command-line framework and CLI generator
329
329
  test_files: []