mirror of
https://github.com/tests-always-included/mo.git
synced 2024-12-18 16:27:52 +00:00
parent
eac2685632
commit
9f6d3bcdab
48
demo/function-for-foreach
Executable file
48
demo/function-for-foreach
Executable file
@ -0,0 +1,48 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Example for how #29 can get implemented.
|
||||||
|
|
||||||
|
cd "$(dirname "$0")" # Go to the script's directory
|
||||||
|
|
||||||
|
foreach() {
|
||||||
|
# Trying to use unique names
|
||||||
|
local foreachSourceName foreachIterator foreachEvalString foreachContent
|
||||||
|
|
||||||
|
foreachContent=$(cat)
|
||||||
|
|
||||||
|
if [[ "$2" != "as" && "$2" != "in" ]]; then
|
||||||
|
echo "Invalid foreach - bad format."
|
||||||
|
elif [[ "$(declare -p "$1")" != "declare -"[aA]* ]]; then
|
||||||
|
echo "$1 is not an array"
|
||||||
|
else
|
||||||
|
foreachSourceName="${1}[@]"
|
||||||
|
|
||||||
|
for foreachIterator in "${!foreachSourceName}"; do
|
||||||
|
foreachEvalString=$(declare -p "$foreachIterator")
|
||||||
|
foreachEvalString="declare -A $3=${foreachEvalString#*=}"
|
||||||
|
eval "$foreachEvalString"
|
||||||
|
echo "$foreachContent" | mo
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# The links are associative arrays
|
||||||
|
declare -A resque hub rip
|
||||||
|
resque=([name]=Resque [url]=http://example.com/resque)
|
||||||
|
hub=([name]=Hub [url]=http://example.com/hub)
|
||||||
|
rip=([name]=Rip [url]=http://example.com/rip)
|
||||||
|
|
||||||
|
# This is a list of the link arrays
|
||||||
|
links=(resque hub rip)
|
||||||
|
|
||||||
|
# Source mo in order to work with arrays
|
||||||
|
. ../mo
|
||||||
|
|
||||||
|
# Process the template
|
||||||
|
cat <<EOF | mo --allow-function-arguments
|
||||||
|
Here are your links:
|
||||||
|
{{#foreach links as link}}
|
||||||
|
* [{{link.name}}]({{link.url}})
|
||||||
|
{{/foreach}}
|
||||||
|
|
||||||
|
EOF
|
Loading…
Reference in New Issue
Block a user