mirror of
https://github.com/tests-always-included/mo.git
synced 2025-04-07 01:16:38 +00:00
Added array element interpolation
This commit is contained in:
parent
7604ce3054
commit
05499bd6cd
38
mo
38
mo
@ -1070,7 +1070,7 @@ mo::getArgument() {
|
||||
;;
|
||||
|
||||
*)
|
||||
mo::getArgumentDefault moArg "$moContent" "$moClosingDelimiter"
|
||||
mo::getArgumentDefault moArg "$moContent" "$moCurrent" "$moClosingDelimiter"
|
||||
esac
|
||||
|
||||
mo::debug "Found argument: ${moArg[0]} ${moArg[1]}"
|
||||
@ -1237,6 +1237,8 @@ mo::getArgumentSingleQuote() {
|
||||
#
|
||||
# $1 - Destination variable name, an array with two elements
|
||||
# $2 - Content
|
||||
# $3 - Current
|
||||
# $4 - Closing delimiter
|
||||
#
|
||||
# The array has the following elements.
|
||||
# [0] = argument type, "NAME" or "VALUE"
|
||||
@ -1245,16 +1247,36 @@ mo::getArgumentSingleQuote() {
|
||||
#
|
||||
# Returns nothing.
|
||||
mo::getArgumentDefault() {
|
||||
local moTemp moContent
|
||||
local moTemp moArgInner moArgParsed moBraceChunk moBreakChunk moTempBefore moContent
|
||||
|
||||
moTemp=$2
|
||||
mo::chomp moTemp "${moTemp%%"$3"*}"
|
||||
moTemp=${moTemp%%)*}
|
||||
moTemp=${moTemp%%\}*}
|
||||
mo::chomp moTemp "$2"
|
||||
moContent=${2:${#moTemp}}
|
||||
mo::debug "Parsed default argument: $moTemp"
|
||||
while :; do
|
||||
case "$moTemp" in
|
||||
*'{'*)
|
||||
moBreakChunk="${moTemp%%"$4"*}"
|
||||
moBraceChunk="${moTemp%%\{*}"
|
||||
[[ ${#moBreakChunk} -le ${#moBraceChunk} ]] && break;
|
||||
|
||||
local "$1" && mo::indirectArray "$1" "NAME" "$moTemp" "$moContent"
|
||||
moTempBefore="${moTemp%\{*}"
|
||||
moArgInner="${moTemp:${#moTempBefore}}"
|
||||
mo::getArgumentBrace moArgParsed "$moArgInner" "$3" '}'
|
||||
moTemp="$moTempBefore${moArgParsed[1]}${moArgParsed[2]}"
|
||||
;;
|
||||
|
||||
*)
|
||||
break;
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
mo::chomp moArgParsed "${moTemp%%"$4"*}"
|
||||
moArgParsed=${moArgParsed%%)*}
|
||||
moArgParsed=${moArgParsed%%\}*}
|
||||
moContent=${moTemp:${#moArgParsed}}$moContent
|
||||
mo::debug "Parsed default argument: $moArgParsed"
|
||||
|
||||
local "$1" && mo::indirectArray "$1" "NAME" "$moArgParsed" "$moContent"
|
||||
}
|
||||
|
||||
|
||||
|
32
tests/array-element-ref
Executable file
32
tests/array-element-ref
Executable file
@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env bash
|
||||
cd "${0%/*}" || exit 1
|
||||
. ../run-tests
|
||||
|
||||
MO_ALLOW_FUNCTION_ARGUMENTS=true
|
||||
|
||||
i=2
|
||||
k="bar"
|
||||
arrname="repo"
|
||||
|
||||
declare -a repo
|
||||
repo=( "resque" "hub" "rip" )
|
||||
|
||||
declare -A assoc
|
||||
assoc[foo]="111"
|
||||
assoc[bar]="222"
|
||||
assoc[baz]="333"
|
||||
|
||||
template() {
|
||||
cat <<EOF
|
||||
Specific Array Element: {{repo.{i}}}!
|
||||
Specific Array Element: {{assoc.{k}}}!
|
||||
EOF
|
||||
}
|
||||
expected() {
|
||||
cat <<EOF
|
||||
Specific Array Element: rip!
|
||||
Specific Array Element: 222!
|
||||
EOF
|
||||
}
|
||||
|
||||
runTest
|
Loading…
x
Reference in New Issue
Block a user