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.
- checksums.yaml +4 -4
- data/lib/bashly/commands/completions.rb +3 -41
- data/lib/bashly/completions/README.md +3 -7
- data/lib/bashly/completions/bashly-completions.bash +2 -2
- data/lib/bashly/completions/completely.yaml +0 -4
- data/lib/bashly/concerns/settings_completions.rb +37 -0
- data/lib/bashly/config_validator.rb +18 -3
- data/lib/bashly/docs/arg.yml +12 -6
- data/lib/bashly/docs/command.yml +0 -12
- data/lib/bashly/docs/flag.yml +8 -4
- data/lib/bashly/libraries/libraries.yml +0 -15
- data/lib/bashly/libraries/settings/settings.yml +12 -6
- data/lib/bashly/script/argument.rb +17 -0
- data/lib/bashly/script/command.rb +1 -2
- data/lib/bashly/script/flag.rb +12 -1
- data/lib/bashly/script/introspection/commands.rb +5 -0
- data/lib/bashly/script/wrapper.rb +1 -1
- data/lib/bashly/settings.rb +7 -8
- data/lib/bashly/version.rb +1 -1
- data/lib/bashly/views/argument/completion.gtx +31 -0
- data/lib/bashly/views/argument/completion_filter.gtx +1 -0
- data/lib/bashly/views/command/completion_argument_candidates.gtx +12 -0
- data/lib/bashly/views/command/completion_argument_filter.gtx +25 -0
- data/lib/bashly/views/command/completion_command_candidates.gtx +3 -0
- data/lib/bashly/views/command/completion_flag_candidates.gtx +21 -0
- data/lib/bashly/views/command/completion_function.gtx +24 -0
- data/lib/bashly/views/command/completion_script.gtx +21 -0
- data/lib/bashly/views/command/completion_script_bash.gtx +63 -0
- data/lib/bashly/views/command/completion_script_zsh.gtx +52 -0
- data/lib/bashly/views/command/completion_word_filter.gtx +44 -0
- data/lib/bashly/views/command/completions.gtx +81 -0
- data/lib/bashly/views/command/inspect_args.gtx +3 -3
- data/lib/bashly/views/command/master_script.gtx +7 -4
- data/lib/bashly/views/command/start.gtx +12 -3
- data/lib/bashly/views/flag/completion.gtx +1 -0
- data/lib/bashly/views/flag/completion_filter.gtx +7 -0
- data/lib/bashly/views/flag/completion_filter_arg.gtx +10 -0
- data/lib/bashly/views/flag/completion_filter_block.gtx +8 -0
- data/lib/bashly/views/flag/completion_filter_no_arg.gtx +2 -0
- data/lib/bashly/views/flag/completion_value_candidates.gtx +31 -0
- data/lib/bashly/watch.rb +22 -50
- data/lib/bashly.rb +2 -5
- metadata +39 -39
- data/lib/bashly/completion_builder.rb +0 -231
- data/lib/bashly/concerns/completions.rb +0 -48
- data/lib/bashly/libraries/completions/completions_function.rb +0 -37
- data/lib/bashly/libraries/completions/completions_script.rb +0 -28
- data/lib/bashly/libraries/completions/completions_yaml.rb +0 -26
- /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
|
-
|
|
21
|
+
> {{ Settings.function_name :start }} "$@"
|
|
19
22
|
> fi
|
|
20
23
|
else
|
|
21
|
-
|
|
24
|
+
> {{ Settings.function_name :start }} "$@"
|
|
22
25
|
end
|
|
23
|
-
>
|
|
26
|
+
>
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
= view_marker
|
|
2
2
|
|
|
3
|
-
>
|
|
4
|
-
|
|
5
|
-
> {
|
|
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,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 '
|
|
1
|
+
require 'watchly'
|
|
2
2
|
|
|
3
3
|
module Bashly
|
|
4
|
-
# File system watcher - an ergonomic wrapper around the
|
|
4
|
+
# File system watcher - an ergonomic wrapper around the Watchly gem
|
|
5
5
|
class Watch
|
|
6
|
-
attr_reader :
|
|
6
|
+
attr_reader :interval, :targets
|
|
7
7
|
|
|
8
|
-
def initialize(*
|
|
9
|
-
@
|
|
10
|
-
@
|
|
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
|
-
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
|
|
30
|
-
!Settings.watch_evented
|
|
31
|
-
end
|
|
23
|
+
private
|
|
32
24
|
|
|
33
|
-
def
|
|
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
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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/
|
|
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://
|
|
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.
|
|
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.
|
|
326
|
+
rubygems_version: 4.0.17
|
|
327
327
|
specification_version: 4
|
|
328
|
-
summary: Bash
|
|
328
|
+
summary: Bash command-line framework and CLI generator
|
|
329
329
|
test_files: []
|