respect-validation/bin/update-currency-codes
Henrique Moody e0fbed32c9
Update list of currency codes
Also updates the script that updates the currency codes.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2020-05-20 15:02:44 +02:00

46 lines
1.3 KiB
Bash
Executable file

#!/usr/bin/env bash
# Usage: {script} TLD_FILENAME
# Update list of TLD
set -euo pipefail
declare -r IFS=$'\n'
declare -r URL="https://www.currency-iso.org/dam/downloads/lists/list_one.xml"
declare -r RULE="${1}"
declare -r TEMPORARY_XML=$(mktemp)
download_list()
{
echo "Downloading list from '${URL}'"
curl --silent --location "${1}" --output "${2}"
}
update_currency_codes()
{
local -r filename_rule="${1}"
local -r filename_xml="${2}"
local -r number_of_items=$(grep "<CcyNtry>" "${filename_xml}" | wc --lines)
local -r temporary_rule=$(mktemp)
echo "Updating list in '${filename_rule}'"
{
sed -n "/^</,/ return \[/p" "${filename_rule}"
for index in $(seq 1 ${number_of_items}); do
local name=$(xml sel --template --value-of "//CcyNtry[${index}]/CcyNm" < "${filename_xml}")
local code=$(xml sel --template --value-of "//CcyNtry[${index}]/Ccy" < "${filename_xml}")
if [[ -z "${code}" ]]; then
continue
fi
echo " '${code}', //" $(sed --regexp-extended 's, +$,,' <<< "${name}")
done | sort --unique
sed --silent '/^ \]/,/^}/p' "${filename_rule}"
} > "${temporary_rule}"
mv "${temporary_rule}" "${filename_rule}"
}
download_list "${URL}" "${TEMPORARY_XML}"
update_currency_codes "${RULE}" "${TEMPORARY_XML}"