clean up initial projects, add basic arg parsing to cli module
This commit is contained in:
parent
12eec6c30e
commit
0fa64f5ab7
|
@ -4,4 +4,11 @@
|
||||||
:license {:name "MIT License"
|
:license {:name "MIT License"
|
||||||
:url "http://opensource.org/licenses/MIT"}
|
:url "http://opensource.org/licenses/MIT"}
|
||||||
|
|
||||||
:dependencies [[org.clojure/clojure "1.8.0"]])
|
:dependencies [[org.clojure/clojure "1.8.0"]
|
||||||
|
[org.clojure/tools.logging "0.3.1"]
|
||||||
|
[log4j "1.2.16"]
|
||||||
|
[org.clojure/tools.cli "0.3.3"]
|
||||||
|
|
||||||
|
[vwowrla.core "0.1.0-SNAPSHOT"]]
|
||||||
|
|
||||||
|
:profiles {:repl {:source-paths ["repl"]}})
|
||||||
|
|
2
vwowrla.cli/repl/user.clj
Normal file
2
vwowrla.cli/repl/user.clj
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
(ns user
|
||||||
|
(:use vwowrla.cli.core))
|
13
vwowrla.cli/resources/log4j.properties
Normal file
13
vwowrla.cli/resources/log4j.properties
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
log4j.rootLogger=INFO, stdout, R
|
||||||
|
|
||||||
|
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
|
||||||
|
log4j.appender.stdout.Target=System.out
|
||||||
|
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
|
||||||
|
log4j.appender.stdout.layout.ConversionPattern=%d %-5p %c - %m%n
|
||||||
|
|
||||||
|
log4j.appender.R=org.apache.log4j.RollingFileAppender
|
||||||
|
log4j.appender.R.File=${log4j.logdir}vwowrla.cli.log
|
||||||
|
log4j.appender.R.MaxFileSize=10MB
|
||||||
|
log4j.appender.R.MaxBackupIndex=20
|
||||||
|
log4j.appender.R.layout=org.apache.log4j.PatternLayout
|
||||||
|
log4j.appender.R.layout.ConversionPattern=%d %-5p %c - %m%n
|
|
@ -1,6 +0,0 @@
|
||||||
(ns vwowrla.cli)
|
|
||||||
|
|
||||||
(defn foo
|
|
||||||
"I don't do a whole lot."
|
|
||||||
[x]
|
|
||||||
(println x "Hello, World!"))
|
|
75
vwowrla.cli/src/vwowrla/cli/core.clj
Normal file
75
vwowrla.cli/src/vwowrla/cli/core.clj
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
(ns vwowrla.cli.core
|
||||||
|
(:gen-class)
|
||||||
|
(:import
|
||||||
|
(java.util Date TimeZone))
|
||||||
|
(:require
|
||||||
|
[clojure.string :as string]
|
||||||
|
[clojure.tools.cli :as cli]))
|
||||||
|
|
||||||
|
(defn- get-current-year []
|
||||||
|
(+ 1900 (.getYear (Date.))))
|
||||||
|
|
||||||
|
(defn- get-timezone [^String tz]
|
||||||
|
(let [timezone (TimeZone/getTimeZone tz)]
|
||||||
|
(if (= (.getID timezone) tz)
|
||||||
|
timezone)))
|
||||||
|
|
||||||
|
(defn- ->usage-string [options-summary]
|
||||||
|
(->> ["Vanilla World of Warcraft Raid Log Analyzer"
|
||||||
|
""
|
||||||
|
"Usage: vwowrla.cli -n CHARNAME -y YEAR [options] LOGFILE"
|
||||||
|
""
|
||||||
|
"LOGFILE is the path/filename of the combat log file to parse."
|
||||||
|
""
|
||||||
|
options-summary
|
||||||
|
""]
|
||||||
|
(string/join \newline)))
|
||||||
|
|
||||||
|
(defn- ->error-string [errors]
|
||||||
|
(str "Invalid options/arguments.\n"
|
||||||
|
(string/join \newline errors)))
|
||||||
|
|
||||||
|
(defn- exit [status msg]
|
||||||
|
(println msg)
|
||||||
|
(System/exit status))
|
||||||
|
|
||||||
|
(def ^:private cli-options
|
||||||
|
[["-n" "--charname CHARNAME"
|
||||||
|
"Required. Character name of the player who recorded the combat log file."
|
||||||
|
:parse-fn #(-> (str %) (string/trim))
|
||||||
|
:validate [#(not (empty? %)) "Character name is required."]]
|
||||||
|
["-y" "--year YEAR"
|
||||||
|
"The year that the combat log was taken in. Current year if not specified."
|
||||||
|
:parse-fn #(Integer/parseInt %)]
|
||||||
|
["-z" "--timezone TIMEZONE"
|
||||||
|
"Timezone that the timestamps within the combat log file are in. Current timezone if not specified."
|
||||||
|
:parse-fn #(-> (str %) (string/trim))
|
||||||
|
:validate [#(or (empty? %)
|
||||||
|
(not (nil? (get-timezone %))))
|
||||||
|
"Valid timezone name/abbreviation is required."]]
|
||||||
|
["-h" "--help"]])
|
||||||
|
|
||||||
|
(defn -main [& args]
|
||||||
|
(let [{:keys [options arguments errors summary]} (cli/parse-opts args cli-options)]
|
||||||
|
; option pre-validations
|
||||||
|
(cond
|
||||||
|
(:help options) (exit 0 (->usage-string summary))
|
||||||
|
(not= (count arguments) 1) (exit 1 (->usage-string summary))
|
||||||
|
errors (exit 1 (->error-string errors)))
|
||||||
|
|
||||||
|
(let [filename (first arguments)
|
||||||
|
{:keys [year charname timezone]
|
||||||
|
:or {year (get-current-year)
|
||||||
|
charname nil
|
||||||
|
timezone (.getID (TimeZone/getDefault))}}
|
||||||
|
options]
|
||||||
|
(cond
|
||||||
|
(nil? charname)
|
||||||
|
(exit 1 (->error-string ["Character name is required."])))
|
||||||
|
|
||||||
|
; TODO: run parse
|
||||||
|
(println
|
||||||
|
"charname:" charname \newline
|
||||||
|
"year:" year \newline
|
||||||
|
"timezone:" timezone \newline
|
||||||
|
"logfile:" filename))))
|
|
@ -1,8 +0,0 @@
|
||||||
(ns vwowrla.cli-test
|
|
||||||
(:require
|
|
||||||
[clojure.test :refer :all]
|
|
||||||
[vwowrla.cli :refer :all]))
|
|
||||||
|
|
||||||
(deftest a-test
|
|
||||||
(testing "FIXME, I fail."
|
|
||||||
(is (= 0 1))))
|
|
6
vwowrla.core/dev-resources/log4j.properties
Normal file
6
vwowrla.core/dev-resources/log4j.properties
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
log4j.rootLogger=INFO, stdout
|
||||||
|
|
||||||
|
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
|
||||||
|
log4j.appender.stdout.Target=System.out
|
||||||
|
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
|
||||||
|
log4j.appender.stdout.layout.ConversionPattern=%d %-5p %c - %m%n
|
|
@ -4,4 +4,6 @@
|
||||||
:license {:name "MIT License"
|
:license {:name "MIT License"
|
||||||
:url "http://opensource.org/licenses/MIT"}
|
:url "http://opensource.org/licenses/MIT"}
|
||||||
|
|
||||||
:dependencies [[org.clojure/clojure "1.8.0"]])
|
:dependencies [[org.clojure/clojure "1.8.0"]
|
||||||
|
[org.clojure/tools.logging "0.3.1"]
|
||||||
|
[log4j "1.2.16"]])
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
(ns vwowrla.core)
|
|
||||||
|
|
||||||
(defn foo
|
|
||||||
"I don't do a whole lot."
|
|
||||||
[x]
|
|
||||||
(println x "Hello, World!"))
|
|
|
@ -1,8 +0,0 @@
|
||||||
(ns vwowrla.core-test
|
|
||||||
(:require
|
|
||||||
[clojure.test :refer :all]
|
|
||||||
[vwowrla.core :refer :all]))
|
|
||||||
|
|
||||||
(deftest a-test
|
|
||||||
(testing "FIXME, I fail."
|
|
||||||
(is (= 0 1))))
|
|
Reference in a new issue