gistfile1.txt
· 1.3 KiB · Text
Ham
#!/usr/bin/env bash
# ============================================
# Flag Registry
# ============================================
declare -A _REGISTERED_FLAGS=()
# ============================================
# Registration
# ============================================
function flag::register() {
local flag="$1"
_REGISTERED_FLAGS["$flag"]=1
}
function flag::registered() {
[[ -n "${_REGISTERED_FLAGS["$1"]:-}" ]]
}
# ============================================
# Parsing
# ============================================
# Parse flags from args into associative array
# Usage: flag::parse "$@"
# Access: flag::get --name
declare -A _FLAG_VALUES=()
function flag::parse() {
_FLAG_VALUES=()
while [[ $# -gt 0 ]]; do
case "$1" in
--*)
local key="$1"
# Boolean flag (no value follows, or next arg is another flag)
if [[ $# -eq 1 || "$2" == --* ]]; then
_FLAG_VALUES["$key"]="true"
shift
else
_FLAG_VALUES["$key"]="$2"
shift 2
fi
;;
*)
shift
;;
esac
done
}
function flag::get() {
echo "${_FLAG_VALUES["$1"]:-}"
}
function flag::enabled() {
[[ "${_FLAG_VALUES["$1"]:-}" == "true" ]]
}
function flag::set() {
local key="$1"
local value="$2"
_FLAG_VALUES["$key"]="$value"
}
| 1 | #!/usr/bin/env bash |
| 2 | |
| 3 | # ============================================ |
| 4 | # Flag Registry |
| 5 | # ============================================ |
| 6 | |
| 7 | declare -A _REGISTERED_FLAGS=() |
| 8 | |
| 9 | # ============================================ |
| 10 | # Registration |
| 11 | # ============================================ |
| 12 | |
| 13 | function flag::register() { |
| 14 | local flag="$1" |
| 15 | _REGISTERED_FLAGS["$flag"]=1 |
| 16 | } |
| 17 | |
| 18 | function flag::registered() { |
| 19 | [[ -n "${_REGISTERED_FLAGS["$1"]:-}" ]] |
| 20 | } |
| 21 | |
| 22 | # ============================================ |
| 23 | # Parsing |
| 24 | # ============================================ |
| 25 | |
| 26 | # Parse flags from args into associative array |
| 27 | # Usage: flag::parse "$@" |
| 28 | # Access: flag::get --name |
| 29 | declare -A _FLAG_VALUES=() |
| 30 | |
| 31 | function flag::parse() { |
| 32 | _FLAG_VALUES=() |
| 33 | |
| 34 | while [[ $# -gt 0 ]]; do |
| 35 | case "$1" in |
| 36 | --*) |
| 37 | local key="$1" |
| 38 | # Boolean flag (no value follows, or next arg is another flag) |
| 39 | if [[ $# -eq 1 || "$2" == --* ]]; then |
| 40 | _FLAG_VALUES["$key"]="true" |
| 41 | shift |
| 42 | else |
| 43 | _FLAG_VALUES["$key"]="$2" |
| 44 | shift 2 |
| 45 | fi |
| 46 | ;; |
| 47 | *) |
| 48 | shift |
| 49 | ;; |
| 50 | esac |
| 51 | done |
| 52 | } |
| 53 | |
| 54 | function flag::get() { |
| 55 | echo "${_FLAG_VALUES["$1"]:-}" |
| 56 | } |
| 57 | |
| 58 | function flag::enabled() { |
| 59 | [[ "${_FLAG_VALUES["$1"]:-}" == "true" ]] |
| 60 | } |
| 61 | |
| 62 | function flag::set() { |
| 63 | local key="$1" |
| 64 | local value="$2" |
| 65 | _FLAG_VALUES["$key"]="$value" |
| 66 | } |
| 67 |