mirror of
https://github.com/tests-always-included/mo.git
synced 2024-12-18 16:27:52 +00:00
51 lines
1.3 KiB
Bash
Executable File
51 lines
1.3 KiB
Bash
Executable File
#!/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)
|
|
|
|
local x
|
|
x=("${@}")
|
|
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 'links' 'as' 'link'}}
|
|
|
|
EOF
|