mirror of
https://github.com/tests-always-included/mo.git
synced 2024-12-18 16:27:52 +00:00
49 lines
1.2 KiB
Plaintext
49 lines
1.2 KiB
Plaintext
|
#!/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
|