bashly 1.0.7 → 1.0.8
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 +1 -1
- data/lib/bashly/libraries/config/config.sh +74 -94
- data/lib/bashly/libraries/ini/ini.sh +110 -0
- data/lib/bashly/libraries/libraries.yml +9 -1
- data/lib/bashly/version.rb +1 -1
- metadata +27 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b82e5ead650cc1774cf3870af91b9046b1e5f69f05484d833f72dd4090eab091
|
|
4
|
+
data.tar.gz: 26626b09b79382d2d4530241b5517ed04d3e4a27c004130adadad3b27421f100
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9e3b78d5975c92954347be94d567f28d240d628e080fb3d136382cc4f8fa1ae81827057ad3b61ac144b5ab930c3f5353128f9d6068b983d0e2e77ac996d4ab0d
|
|
7
|
+
data.tar.gz: 2595428ca74b3ada25619fc7839f99993f98bcda169b47fcda84c82b279ebcaa1882864d2d842c67f05ca1ca946f2f64867d6905892f2ff5f5f5107f32f49037
|
|
@@ -4,7 +4,7 @@ module Bashly
|
|
|
4
4
|
summary 'Install bash completions for bashly itself'
|
|
5
5
|
help 'Display the bash completions script or install it directly to your bash completions directory'
|
|
6
6
|
|
|
7
|
-
usage 'bashly completions [--install
|
|
7
|
+
usage 'bashly completions [--install|--uninstall]'
|
|
8
8
|
usage 'bashly completions (-h|--help)'
|
|
9
9
|
|
|
10
10
|
option '-i --install', 'Install the completions script to your bash completions directory'
|
|
@@ -1,128 +1,108 @@
|
|
|
1
|
-
## Config functions [@bashly-upgrade config]
|
|
1
|
+
## Config (INI) functions [@bashly-upgrade config]
|
|
2
2
|
## This file is a part of Bashly standard library
|
|
3
3
|
##
|
|
4
4
|
## Usage:
|
|
5
|
-
## - In your script, set the CONFIG_FILE variable. For rxample:
|
|
6
|
-
## CONFIG_FILE=settings.ini.
|
|
7
|
-
## If it is unset, it will default to 'config.ini'.
|
|
8
|
-
## - Use any of the functions below to access the config file.
|
|
9
5
|
##
|
|
10
|
-
##
|
|
11
|
-
##
|
|
12
|
-
## functions
|
|
6
|
+
## - Set the global variable CONFIG_FILE to the path of your INI file somewhere
|
|
7
|
+
## in your script (for example, in src/initialize.sh).
|
|
8
|
+
## - Use any of the following functions to access and manipulate the values.
|
|
9
|
+
## - INI sections are optional (i.e., sectionless key=value pairs are allowed).
|
|
13
10
|
##
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
|
|
12
|
+
## Show all the key=value pairs from your config file
|
|
13
|
+
config_show() {
|
|
14
|
+
config_load
|
|
15
|
+
ini_show
|
|
17
16
|
}
|
|
18
17
|
|
|
19
|
-
## Get a value from the config
|
|
20
|
-
##
|
|
18
|
+
## Get a single value from the config file:
|
|
19
|
+
##
|
|
20
|
+
## config_get login.email
|
|
21
|
+
##
|
|
22
|
+
## Get the value or a default one if it is not set:
|
|
23
|
+
##
|
|
24
|
+
## config_get login.user guest
|
|
25
|
+
##
|
|
26
|
+
## Assign the result to a variable:
|
|
27
|
+
##
|
|
28
|
+
## theme="$(config_get interface.theme)"
|
|
29
|
+
##
|
|
21
30
|
config_get() {
|
|
22
|
-
local key
|
|
23
|
-
local
|
|
24
|
-
local value=""
|
|
25
|
-
|
|
26
|
-
config_init
|
|
31
|
+
local key="$1"
|
|
32
|
+
local default_value="$2"
|
|
27
33
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
value="${BASH_REMATCH[1]}"
|
|
31
|
-
break
|
|
32
|
-
fi
|
|
33
|
-
done <"$CONFIG_FILE"
|
|
34
|
-
|
|
35
|
-
echo "$value"
|
|
34
|
+
config_load
|
|
35
|
+
echo "${ini["$key"]:-$default_value}"
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
##
|
|
39
|
-
##
|
|
38
|
+
## Create/update a key=value pair:
|
|
39
|
+
##
|
|
40
|
+
## config_set cloud.provider aws
|
|
41
|
+
##
|
|
40
42
|
config_set() {
|
|
41
|
-
local key
|
|
43
|
+
local key="$1"
|
|
42
44
|
shift
|
|
43
45
|
local value="$*"
|
|
44
46
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
local output=""
|
|
49
|
-
local found_key=""
|
|
50
|
-
local newline
|
|
51
|
-
|
|
52
|
-
while IFS= read -r line || [ -n "$line" ]; do
|
|
53
|
-
newline=$line
|
|
54
|
-
if [[ $line =~ $regex ]]; then
|
|
55
|
-
found_key="${BASH_REMATCH[1]}"
|
|
56
|
-
newline="$key = $value"
|
|
57
|
-
output="$output$newline\n"
|
|
58
|
-
elif [[ $line ]]; then
|
|
59
|
-
output="$output$line\n"
|
|
60
|
-
fi
|
|
61
|
-
done <"$CONFIG_FILE"
|
|
62
|
-
|
|
63
|
-
if [[ -z $found_key ]]; then
|
|
64
|
-
output="$output$key = $value\n"
|
|
65
|
-
fi
|
|
66
|
-
|
|
67
|
-
printf "%b\n" "$output" >"$CONFIG_FILE"
|
|
47
|
+
config_load
|
|
48
|
+
ini["$key"]="$value"
|
|
49
|
+
config_save
|
|
68
50
|
}
|
|
69
51
|
|
|
70
|
-
## Delete a key
|
|
71
|
-
##
|
|
52
|
+
## Delete a key=value pair:
|
|
53
|
+
##
|
|
54
|
+
## config_del login.email
|
|
55
|
+
##
|
|
72
56
|
config_del() {
|
|
73
|
-
local key
|
|
57
|
+
local key="$1"
|
|
74
58
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
config_init
|
|
79
|
-
|
|
80
|
-
while IFS= read -r line || [ -n "$line" ]; do
|
|
81
|
-
if [[ $line ]] && [[ ! $line =~ $regex ]]; then
|
|
82
|
-
output="$output$line\n"
|
|
83
|
-
fi
|
|
84
|
-
done <"$CONFIG_FILE"
|
|
85
|
-
|
|
86
|
-
printf "%b\n" "$output" >"$CONFIG_FILE"
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
## Show the config file
|
|
90
|
-
config_show() {
|
|
91
|
-
config_init
|
|
92
|
-
cat "$CONFIG_FILE"
|
|
59
|
+
config_load
|
|
60
|
+
unset "ini[$key]"
|
|
61
|
+
config_save
|
|
93
62
|
}
|
|
94
63
|
|
|
95
|
-
##
|
|
96
|
-
## Usage:
|
|
64
|
+
## Get an array of all keys:
|
|
97
65
|
##
|
|
98
|
-
## for
|
|
99
|
-
## echo "- $
|
|
66
|
+
## for key in $(config_keys); do
|
|
67
|
+
## echo "- $key = $(config_get "$key")";
|
|
100
68
|
## done
|
|
101
69
|
##
|
|
102
70
|
config_keys() {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
config_init
|
|
106
|
-
|
|
107
|
-
local keys=()
|
|
108
|
-
local key
|
|
109
|
-
|
|
110
|
-
while IFS= read -r line || [ -n "$line" ]; do
|
|
111
|
-
if [[ $line =~ $regex ]]; then
|
|
112
|
-
key="${BASH_REMATCH[1]}"
|
|
113
|
-
keys+=("$key")
|
|
114
|
-
fi
|
|
115
|
-
done <"$CONFIG_FILE"
|
|
116
|
-
echo "${keys[@]}"
|
|
71
|
+
config_load
|
|
72
|
+
ini_keys
|
|
117
73
|
}
|
|
118
74
|
|
|
119
|
-
##
|
|
120
|
-
## Usage:
|
|
75
|
+
## Check if a key exists:
|
|
121
76
|
##
|
|
122
|
-
## if config_has_key
|
|
77
|
+
## if config_has_key login.password; then
|
|
123
78
|
## echo "key exists"
|
|
124
79
|
## fi
|
|
125
80
|
##
|
|
126
81
|
config_has_key() {
|
|
127
82
|
[[ $(config_get "$1") ]]
|
|
128
83
|
}
|
|
84
|
+
|
|
85
|
+
## Force-load from file
|
|
86
|
+
## This should normally not be called, unless you suspect that the INI file
|
|
87
|
+
## was modified by external means during the run of your script.
|
|
88
|
+
config_reload() {
|
|
89
|
+
declare -g config_loaded=false
|
|
90
|
+
config_load
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
## Load an INI file (unless loaded) and populate the associative array
|
|
94
|
+
## NOTE: Normally there is no need to call this function, it is called as needed
|
|
95
|
+
config_load() {
|
|
96
|
+
[[ "$config_loaded" == "true" ]] && return
|
|
97
|
+
|
|
98
|
+
declare -g CONFIG_FILE=${CONFIG_FILE:=config.ini}
|
|
99
|
+
declare -g config_loaded=true
|
|
100
|
+
[[ -f "$CONFIG_FILE" ]] || touch "$CONFIG_FILE"
|
|
101
|
+
ini_load "$CONFIG_FILE"
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
## Save the associative array back to a file
|
|
105
|
+
## NOTE: Normally there is no need to call this function, it is called as needed
|
|
106
|
+
config_save() {
|
|
107
|
+
ini_save "$CONFIG_FILE"
|
|
108
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
## INI functions [@bashly-upgrade ini]
|
|
2
|
+
## This file is a part of Bashly standard library
|
|
3
|
+
##
|
|
4
|
+
## Usage:
|
|
5
|
+
##
|
|
6
|
+
## - In your script, call `ini_load path/to/config.ini`.
|
|
7
|
+
## - A global associative array named `ini` will become available to you,
|
|
8
|
+
## - When updating any of the associative array's values, call
|
|
9
|
+
## `ini_save path/to/config.ini` to save the data.
|
|
10
|
+
## - INI sections are optional.
|
|
11
|
+
##
|
|
12
|
+
## Get a value:
|
|
13
|
+
##
|
|
14
|
+
## ${ini[section1.key1]} # for keys under a [section]
|
|
15
|
+
## ${ini[key1]} # for keys not under a [section]
|
|
16
|
+
## ${ini[key1]:-default} # get a default value if the INI key is unset
|
|
17
|
+
##
|
|
18
|
+
## Update/create a value:
|
|
19
|
+
##
|
|
20
|
+
## ini[section1.key1]="value"
|
|
21
|
+
## ini_save path/to/config.ini
|
|
22
|
+
##
|
|
23
|
+
## Delete a value
|
|
24
|
+
##
|
|
25
|
+
## unset ini[section1.key1]
|
|
26
|
+
## ini_save path/to/config.ini
|
|
27
|
+
##
|
|
28
|
+
|
|
29
|
+
## Load an INI file and populate the associative array `ini`.
|
|
30
|
+
ini_load() {
|
|
31
|
+
declare -gA ini
|
|
32
|
+
|
|
33
|
+
local ini_file="$1"
|
|
34
|
+
|
|
35
|
+
local section=""
|
|
36
|
+
local key=""
|
|
37
|
+
local value=""
|
|
38
|
+
local section_regex="^\[(.+)\]"
|
|
39
|
+
local key_regex="^([^ =]+) *= *(.*) *$"
|
|
40
|
+
local comment_regex="^;"
|
|
41
|
+
|
|
42
|
+
while IFS= read -r line; do
|
|
43
|
+
if [[ $line =~ $comment_regex ]]; then
|
|
44
|
+
continue
|
|
45
|
+
elif [[ $line =~ $section_regex ]]; then
|
|
46
|
+
section="${BASH_REMATCH[1]}."
|
|
47
|
+
elif [[ $line =~ $key_regex ]]; then
|
|
48
|
+
key="${BASH_REMATCH[1]}"
|
|
49
|
+
value="${BASH_REMATCH[2]}"
|
|
50
|
+
ini["${section}${key}"]="$value"
|
|
51
|
+
fi
|
|
52
|
+
done <"$ini_file"
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
## Save the associative array `ini` back to a file
|
|
56
|
+
ini_save() {
|
|
57
|
+
declare -gA ini
|
|
58
|
+
|
|
59
|
+
local ini_file="$1"
|
|
60
|
+
|
|
61
|
+
local current_section=""
|
|
62
|
+
local has_free_keys=false
|
|
63
|
+
|
|
64
|
+
rm -f "$ini_file"
|
|
65
|
+
|
|
66
|
+
for key in $(ini_keys); do
|
|
67
|
+
[[ $key == *.* ]] && continue
|
|
68
|
+
has_free_keys=true
|
|
69
|
+
value="${ini[$key]}"
|
|
70
|
+
echo "$key = $value" >>"$ini_file"
|
|
71
|
+
done
|
|
72
|
+
|
|
73
|
+
[[ "${has_free_keys}" == "true" ]] && echo >>"$ini_file"
|
|
74
|
+
|
|
75
|
+
for key in $(ini_keys); do
|
|
76
|
+
[[ $key == *.* ]] || continue
|
|
77
|
+
value="${ini[$key]}"
|
|
78
|
+
IFS="." read -r section_name key_name <<<"$key"
|
|
79
|
+
|
|
80
|
+
if [[ "$current_section" != "$section_name" ]]; then
|
|
81
|
+
[[ $current_section ]] && echo >>"$ini_file"
|
|
82
|
+
echo "[$section_name]" >>"$ini_file"
|
|
83
|
+
current_section="$section_name"
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
echo "$key_name = $value" >>"$ini_file"
|
|
87
|
+
done
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
## Show all loaded key-value pairs
|
|
91
|
+
ini_show() {
|
|
92
|
+
declare -gA ini
|
|
93
|
+
|
|
94
|
+
for key in $(ini_keys); do
|
|
95
|
+
echo "$key = ${ini[$key]}"
|
|
96
|
+
done
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
## Get an array of all keys:
|
|
100
|
+
##
|
|
101
|
+
## for key in $(ini_keys); do
|
|
102
|
+
## echo "- $key = ${ini[$key]}";
|
|
103
|
+
## done
|
|
104
|
+
##
|
|
105
|
+
ini_keys() {
|
|
106
|
+
declare -gA ini
|
|
107
|
+
|
|
108
|
+
local keys=("${!ini[@]}")
|
|
109
|
+
for a in "${keys[@]}"; do echo "$a"; done | sort
|
|
110
|
+
}
|
|
@@ -20,10 +20,12 @@ completions_yaml:
|
|
|
20
20
|
handler: Bashly::Libraries::CompletionsYAML
|
|
21
21
|
|
|
22
22
|
config:
|
|
23
|
-
help: Add
|
|
23
|
+
help: Add functions for handling INI configuration files to the lib directory.
|
|
24
24
|
files:
|
|
25
25
|
- source: "config/config.sh"
|
|
26
26
|
target: "%{user_lib_dir}/config.%{user_ext}"
|
|
27
|
+
- source: "ini/ini.sh"
|
|
28
|
+
target: "%{user_lib_dir}/ini.%{user_ext}"
|
|
27
29
|
|
|
28
30
|
help:
|
|
29
31
|
help: Add a help command, in addition to the standard --help flag.
|
|
@@ -39,6 +41,12 @@ hooks:
|
|
|
39
41
|
- source: "hooks/after.sh"
|
|
40
42
|
target: "%{user_source_dir}/after.%{user_ext}"
|
|
41
43
|
|
|
44
|
+
ini:
|
|
45
|
+
help: Add low level functions for reading/writing INI files to the lib directory.
|
|
46
|
+
files:
|
|
47
|
+
- source: "ini/ini.sh"
|
|
48
|
+
target: "%{user_lib_dir}/ini.%{user_ext}"
|
|
49
|
+
|
|
42
50
|
lib:
|
|
43
51
|
help: |-
|
|
44
52
|
Create the lib directory for any additional user scripts.
|
data/lib/bashly/version.rb
CHANGED
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: 1.0.
|
|
4
|
+
version: 1.0.8
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Danny Ben Shitrit
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-
|
|
11
|
+
date: 2023-08-11 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: colsole
|
|
@@ -114,6 +114,26 @@ dependencies:
|
|
|
114
114
|
- - "~>"
|
|
115
115
|
- !ruby/object:Gem::Version
|
|
116
116
|
version: '1.0'
|
|
117
|
+
- !ruby/object:Gem::Dependency
|
|
118
|
+
name: psych
|
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
|
120
|
+
requirements:
|
|
121
|
+
- - ">="
|
|
122
|
+
- !ruby/object:Gem::Version
|
|
123
|
+
version: 3.3.2
|
|
124
|
+
- - "<"
|
|
125
|
+
- !ruby/object:Gem::Version
|
|
126
|
+
version: '7'
|
|
127
|
+
type: :runtime
|
|
128
|
+
prerelease: false
|
|
129
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
130
|
+
requirements:
|
|
131
|
+
- - ">="
|
|
132
|
+
- !ruby/object:Gem::Version
|
|
133
|
+
version: 3.3.2
|
|
134
|
+
- - "<"
|
|
135
|
+
- !ruby/object:Gem::Version
|
|
136
|
+
version: '7'
|
|
117
137
|
description: Generate bash command line tools using YAML configuration
|
|
118
138
|
email: db@dannyben.com
|
|
119
139
|
executables:
|
|
@@ -164,6 +184,7 @@ files:
|
|
|
164
184
|
- lib/bashly/libraries/hooks/after.sh
|
|
165
185
|
- lib/bashly/libraries/hooks/before.sh
|
|
166
186
|
- lib/bashly/libraries/hooks/initialize.sh
|
|
187
|
+
- lib/bashly/libraries/ini/ini.sh
|
|
167
188
|
- lib/bashly/libraries/lib/sample_function.sh
|
|
168
189
|
- lib/bashly/libraries/libraries.yml
|
|
169
190
|
- lib/bashly/libraries/settings/settings.yml
|
|
@@ -253,7 +274,7 @@ metadata:
|
|
|
253
274
|
homepage_uri: https://bashly.dannyb.co/
|
|
254
275
|
source_code_uri: https://github.com/DannyBen/bashly
|
|
255
276
|
rubygems_mfa_required: 'true'
|
|
256
|
-
post_install_message:
|
|
277
|
+
post_install_message:
|
|
257
278
|
rdoc_options: []
|
|
258
279
|
require_paths:
|
|
259
280
|
- lib
|
|
@@ -268,8 +289,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
268
289
|
- !ruby/object:Gem::Version
|
|
269
290
|
version: '0'
|
|
270
291
|
requirements: []
|
|
271
|
-
rubygems_version: 3.4.
|
|
272
|
-
signing_key:
|
|
292
|
+
rubygems_version: 3.4.18
|
|
293
|
+
signing_key:
|
|
273
294
|
specification_version: 4
|
|
274
295
|
summary: Bash Command Line Tool Generator
|
|
275
296
|
test_files: []
|