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