summaryrefslogtreecommitdiff
path: root/cli/source/core/scala/com/rockymadden/stringmetric/cli/Command.scala
diff options
context:
space:
mode:
Diffstat (limited to 'cli/source/core/scala/com/rockymadden/stringmetric/cli/Command.scala')
-rwxr-xr-xcli/source/core/scala/com/rockymadden/stringmetric/cli/Command.scala24
1 files changed, 24 insertions, 0 deletions
diff --git a/cli/source/core/scala/com/rockymadden/stringmetric/cli/Command.scala b/cli/source/core/scala/com/rockymadden/stringmetric/cli/Command.scala
new file mode 100755
index 0000000..fedc0d9
--- /dev/null
+++ b/cli/source/core/scala/com/rockymadden/stringmetric/cli/Command.scala
@@ -0,0 +1,24 @@
+package com.rockymadden.stringmetric.cli
+
+/** Defines the traits and provides basic implementations of a command. Commands are always implemented as objects. */
+trait Command {
+ def help(): Unit
+
+ final def error(error: Throwable, options: OptionMap): Unit =
+ if (!isUnitTest(options)) {
+ println(error.getMessage)
+ sys.exit(1)
+ } else throw error
+
+ def execute(options: OptionMap): Unit
+
+ final def exit(options: OptionMap): Unit = if (!isUnitTest(options)) sys.exit(0)
+
+ final protected[this] def isDebug(options: OptionMap): Boolean =
+ (options.contains('d) || (options.contains('debug) && options.get('debug) != "false"))
+
+ final protected[this] def isUnitTest(options: OptionMap): Boolean =
+ (options.contains('ut) || (options.contains('unitTest) && options.get('unitTest) != "false"))
+
+ def main(args: Array[String]): Unit
+}