dokytree/samples/it_v1/schemas_builder/build.sh

53 lines
1.2 KiB
Bash
Raw Normal View History

2023-03-08 23:38:30 +00:00
#!/bin/bash
declare -r PARTDIR=./parts
declare -r SCHEMADIR=../schemas
declare -r OBJECTSDIR=./objects
getSchemaHeader() {
local DOC="{\n"
DOC+="\t\""'$schema'"\": \"http://json-schema.org/draft-07/schema#\",\n"
DOC+="\t\"title\": \"YAML Schema for computer\",\n"
DOC+="\t\"type\": \"object\",\n"
DOC+="\t\"additionalProperties\": false,\n"
DOC+="\t\"properties\": {\n"
echo -e "${DOC}"
}
getSchemaFooter() {
local DOC+="\t}\n"
DOC+="}\n"
echo -e "${DOC}"
}
getPart() {
local -r PARTFILE=${PARTDIR}/${1}.json
if [ ! -f "${PARTFILE}" ]; then
echo "${PARTFILE} not found"
exit 1
fi
tail -n +4 "${PARTFILE}" | head -n -2
}
buildObject() {
local -r OBJECTFILE=${1}
local DOC=$(getSchemaHeader)"\n"
while IFS= read -r LINE; do
if [[ ! $LINE =~ ^[[:space:]]*\#.*$ ]]; then
if [ -f ${PARTDIR}/"${LINE}".json ]; then
DOC+=$(getPart "${LINE}")",\n"
else
echo "Error: Part not found : ${LINE} in ${OBJECTFILE}"
fi
fi
done < "${OBJECTFILE}"
DOC="${DOC::-3}\n"
DOC+=$(getSchemaFooter)
local SCHEMAFILE=${SCHEMADIR}/$(basename "${OBJECTFILE}").json
echo -e "${DOC}" > "${SCHEMAFILE}"
}
for OBJECTFILE in "${OBJECTSDIR}"/*; do
buildObject "${OBJECTFILE}"
done