icasimpan/shcf

View on GitHub
core/bin/shcf_cli

Summary

Maintainability
Test Coverage
#!/bin/bash

##===================================================
##~usage: shcf_cli <cmd> [<cmd_params>]
##~where:
##~  * cmd        - Command supported, see below.
##~  * cmd_params - Depends on command. See below.
##~
##~ Command specific parameters:
##~   new       requires <project_name>
##~   bin       requires <project_name> <script_name>
##~   lib       requires <project_name> <lib_name>
##~   spawn     requires <project_name> <script_name>
##~   projects  <no_parameter>
##~
##~ For usage per command, use 'shcf_cli help <cmd>'
##~
##===================================================

## SHCF_ROOTDIR may have been named SHCF_PLATFORM_ROOTDIR and it won't matter functionality-wise...
## However, this name is better since it denotes that "there is no platform yet" till 'init' is called.
##
SHCF_ROOTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )"/../ && pwd )"
. $SHCF_ROOTDIR/etc/controller.bash.inc

# list of functions to auto-load
#
function_to_autoload="
create_init
case_shift
create_bin
create_help
create_lib
create_namespace
create_new
create_spawn
error_message
usage
create_projects
"
autoload_functions "$function_to_autoload"

# shcf_cli parameters. Parameters 2 & 3 depends on $cmd need,
# hence, the notation. Clarificatory declarations in respective
# command sections.
#
cmd=$(case_shift down $1)
_p2=$2
_p3=$3

# --------------------------------------------------
# tool main()
#
# supported sub-commands:
#  new      - to create a new shcf-based shell project
#  bin      - creation of new 'bin' scripts
#  lib      - creation of skeleton lib to a project
#  help     - shows the usage per command
#  projects - list of projects
# --------------------------------------------------

# Define common usage of shcf_cli parameter(s).
# Override in respective sub-command as needed
#
project=$_p2
new_entity=$_p3

# Now, start selection of sub-commands
#
case $cmd in
  "init")
    create_init $*
  ;;
  "new")
    create_new $project
  ;;
  "lib")
    create_lib $project $new_entity
  ;;
  "bin")
    create_bin $project $new_entity
  ;;
  "help")
    create_help $_p2
  ;;
  "projects")
    create_projects
  ;;
  "spawn")
     create_spawn $project $new_entity
  ;;
  *)
    err_msg="ERROR: Unsupported command ($cmd)"
    [[ $# -eq 0 ]] && err_msg='ERROR: input parameter(s) missing!'
    echo $err_msg; usage
  ;;
esac