426 lines
29 KiB
HTML
426 lines
29 KiB
HTML
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<link rel="stylesheet" href="../../coverage.css"/> <title> dog_and_duck/quack/cli.clj </title>
|
|
</head>
|
|
<body>
|
|
<span class="covered" title="1 out of 1 forms covered">
|
|
001 (ns dog-and-duck.quack.cli
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
002 (:require [clojure.data.json :refer [read-str]]
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
003 [clojure.java.io :refer [resource]]
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
004 [clojure.pprint :refer [pprint]]
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
005 [clojure.string :refer [join]]
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
006 [clojure.tools.cli :refer [parse-opts]]
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
007 [clojure.walk :refer [keywordize-keys]]
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
008 [dog-and-duck.quack.picky.constants :refer [severity]]
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
009 [dog-and-duck.quack.picky.objects :refer [object-faults]]
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
010 [dog-and-duck.quack.picky.utils :refer [filter-severity]]
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
011 [hiccup.core :refer [html]]
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
012 [scot.weft.i18n.core :refer [get-message *config*]]
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
013 [trptr.java-wrapper.locale :as locale])
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
014 (:gen-class))
|
|
</span><br/>
|
|
<span class="blank" title="0 out of 0 forms covered">
|
|
015
|
|
</span><br/>
|
|
<span class="covered" title="2 out of 2 forms covered">
|
|
016 (def ^:const stylesheet-url
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
017 ;; TODO: fix this to github pages before go live
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
018 "https://simon-brooke.github.io/dog-and-duck/style.css")
|
|
</span><br/>
|
|
<span class="blank" title="0 out of 0 forms covered">
|
|
019
|
|
</span><br/>
|
|
<span class="covered" title="1 out of 1 forms covered">
|
|
020 (def cli-options
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
021 ;; An option with a required argument
|
|
</span><br/>
|
|
<span class="covered" title="7 out of 7 forms covered">
|
|
022 [["-i" "--input SOURCE" "The file or URL to validate"
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
023 :default "standard input"]
|
|
</span><br/>
|
|
<span class="covered" title="6 out of 6 forms covered">
|
|
024 ["-o" "--output DEST" "The file to write to, defaults to standard out"
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
025 :default "standard output"]
|
|
</span><br/>
|
|
<span class="covered" title="9 out of 9 forms covered">
|
|
026 ["-f" "--format FORMAT" "The format to output, one of `edn` `csv` `html`"
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
027 :default :edn
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 3 forms covered">
|
|
028 :parse-fn #(keyword %)
|
|
</span><br/>
|
|
<span class="partial" title="3 out of 9 forms covered">
|
|
029 :validate [#(#{:csv :edn :html} %) "Expect one of `edn` `csv` `html`"]]
|
|
</span><br/>
|
|
<span class="covered" title="5 out of 5 forms covered">
|
|
030 ["-l" "--language LANG" "The ISO 639-1 code for the language to output"
|
|
</span><br/>
|
|
<span class="covered" title="4 out of 4 forms covered">
|
|
031 :default (-> (locale/get-default) locale/to-language-tag)]
|
|
</span><br/>
|
|
<span class="covered" title="9 out of 9 forms covered">
|
|
032 ["-s" "--severity LEVEL" "The minimum severity of faults to report"
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
033 :default :info
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 3 forms covered">
|
|
034 :parse-fn #(keyword %)
|
|
</span><br/>
|
|
<span class="partial" title="5 out of 8 forms covered">
|
|
035 :validate [#(severity %) (join " "
|
|
</span><br/>
|
|
<span class="covered" title="3 out of 3 forms covered">
|
|
036 (cons
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
037 "Expected one of"
|
|
</span><br/>
|
|
<span class="covered" title="4 out of 4 forms covered">
|
|
038 (map name severity)))]]
|
|
</span><br/>
|
|
<span class="covered" title="3 out of 3 forms covered">
|
|
039 ["-h" "--help"]])
|
|
</span><br/>
|
|
<span class="blank" title="0 out of 0 forms covered">
|
|
040
|
|
</span><br/>
|
|
<span class="covered" title="1 out of 1 forms covered">
|
|
041 (defn validate
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
042 [source]
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 6 forms covered">
|
|
043 (println (str "Reading " source))
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 6 forms covered">
|
|
044 (let [input (read-str (slurp source))]
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 11 forms covered">
|
|
045 (cond (map? input) (object-faults (keywordize-keys input))
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 8 forms covered">
|
|
046 (and (coll? input)
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 8 forms covered">
|
|
047 (every? map? input)) (map #(object-faults
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 3 forms covered">
|
|
048 (keywordize-keys %)
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 1 forms covered">
|
|
049 input)))))
|
|
</span><br/>
|
|
<span class="blank" title="0 out of 0 forms covered">
|
|
050
|
|
</span><br/>
|
|
<span class="covered" title="1 out of 1 forms covered">
|
|
051 (defn output-csv
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
052 [faults]
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 10 forms covered">
|
|
053 (let [cols (set (reduce concat (map keys faults)))]
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 15 forms covered">
|
|
054 (with-out-str
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 9 forms covered">
|
|
055 (println (join ", " (map name cols)))
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 3 forms covered">
|
|
056 (map
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 12 forms covered">
|
|
057 #(println (join ", " (map (fn [p] (p %)) cols)))
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 1 forms covered">
|
|
058 faults))))
|
|
</span><br/>
|
|
<span class="blank" title="0 out of 0 forms covered">
|
|
059
|
|
</span><br/>
|
|
<span class="covered" title="1 out of 1 forms covered">
|
|
060 (defn html-header-row
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
061 [cols]
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 16 forms covered">
|
|
062 (apply vector (cons :tr (map #(vector :th (name %)) cols))))
|
|
</span><br/>
|
|
<span class="blank" title="0 out of 0 forms covered">
|
|
063
|
|
</span><br/>
|
|
<span class="covered" title="1 out of 1 forms covered">
|
|
064 (defn html-fault-row
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
065 [fault cols]
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 2 forms covered">
|
|
066 (apply
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 14 forms covered">
|
|
067 vector (cons :tr (map (fn [col] (vector :td (col fault))) cols))))
|
|
</span><br/>
|
|
<span class="blank" title="0 out of 0 forms covered">
|
|
068
|
|
</span><br/>
|
|
<span class="covered" title="1 out of 1 forms covered">
|
|
069 (defn- version-string []
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 3 forms covered">
|
|
070 (join
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
071 " "
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 2 forms covered">
|
|
072 ["dog-and-duck/quack"
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 2 forms covered">
|
|
073 (try
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 21 forms covered">
|
|
074 (some->>
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 3 forms covered">
|
|
075 (resource "META-INF/maven/dog-and-duck/dog-and-duck/pom.properties")
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 1 forms covered">
|
|
076 slurp
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 3 forms covered">
|
|
077 (re-find #"version=(.*)")
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 1 forms covered">
|
|
078 second)
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
079 (catch Exception _ nil))]))
|
|
</span><br/>
|
|
<span class="blank" title="0 out of 0 forms covered">
|
|
080
|
|
</span><br/>
|
|
<span class="covered" title="1 out of 1 forms covered">
|
|
081 (defn output-html
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
082 [faults opts]
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 13 forms covered">
|
|
083 (let [source-name (if (= (:input opts) *in*) "Standard input" (str (:input opts)))
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 8 forms covered">
|
|
084 title (join " " [(get-message :validation-report-for) source-name])
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 9 forms covered">
|
|
085 cols (set (reduce concat (map keys faults)))
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 2 forms covered">
|
|
086 version (version-string)]
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 3 forms covered">
|
|
087 (str
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
088 "<!DOCTYPE html>"
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 130 forms covered">
|
|
089 (html
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
090 [:html
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
091 [:head
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 1 forms covered">
|
|
092 [:title title]
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 1 forms covered">
|
|
093 [:meta {:name "generator" :content version}]
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 1 forms covered">
|
|
094 [:link {:rel "stylesheet" :media "screen" :href stylesheet-url :type "text/css"}]]
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
095 [:body
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 1 forms covered">
|
|
096 [:h1 title]
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 10 forms covered">
|
|
097 [:p (join " " (remove nil? [(get-message :generated-on)
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 1 forms covered">
|
|
098 (java.time.LocalDateTime/now)
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 3 forms covered">
|
|
099 (get-message :by)
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 1 forms covered">
|
|
100 version]))]
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
101 (if-not
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 2 forms covered">
|
|
102 (empty? faults)
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 1 forms covered">
|
|
103 (apply
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 1 forms covered">
|
|
104 vector
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
105 :table
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 2 forms covered">
|
|
106 (html-header-row cols)
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 1 forms covered">
|
|
107 (map
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 2 forms covered">
|
|
108 #(html-fault-row % cols)
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 1 forms covered">
|
|
109 faults))
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 5 forms covered">
|
|
110 [:p (get-message :no-faults-found)])]]))))
|
|
</span><br/>
|
|
<span class="blank" title="0 out of 0 forms covered">
|
|
111
|
|
</span><br/>
|
|
<span class="covered" title="1 out of 1 forms covered">
|
|
112 (defn output
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
113 [content options]
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 7 forms covered">
|
|
114 (let [faults (filter-severity content (:severity options))]
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 5 forms covered">
|
|
115 (spit (:output options)
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 5 forms covered">
|
|
116 (case (:format options)
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 4 forms covered">
|
|
117 :html (output-html faults options)
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 3 forms covered">
|
|
118 :csv (output-csv faults)
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 18 forms covered">
|
|
119 (with-out-str (pprint faults))))))
|
|
</span><br/>
|
|
<span class="blank" title="0 out of 0 forms covered">
|
|
120
|
|
</span><br/>
|
|
<span class="covered" title="1 out of 1 forms covered">
|
|
121 (defn -main [& args]
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 5 forms covered">
|
|
122 (let [opts (parse-opts args cli-options)
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 7 forms covered">
|
|
123 options (assoc (:options opts)
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 8 forms covered">
|
|
124 :input (if (= (:input (:options opts)) "standard input")
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 1 forms covered">
|
|
125 *in*
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 5 forms covered">
|
|
126 (:input (:options opts)))
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 8 forms covered">
|
|
127 :output (if (= (:output (:options opts)) "standard output")
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 1 forms covered">
|
|
128 *out*
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 5 forms covered">
|
|
129 (:output (:options opts))))]
|
|
</span><br/>
|
|
<span class="not-tracked" title="0 out of 0 forms covered">
|
|
130 ;;(println options)
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 5 forms covered">
|
|
131 (when (:help options)
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 5 forms covered">
|
|
132 (println (:summary opts)))
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 5 forms covered">
|
|
133 (when (:errors opts)
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 5 forms covered">
|
|
134 (println (:errors opts)))
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 13 forms covered">
|
|
135 (when-not (or (:help options) (:errors options))
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 16 forms covered">
|
|
136 (binding [*config* (assoc *config* :default-language (:language options))]
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 2 forms covered">
|
|
137 (output
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 5 forms covered">
|
|
138 (validate (:input options))
|
|
</span><br/>
|
|
<span class="not-covered" title="0 out of 1 forms covered">
|
|
139 options)))))
|
|
</span><br/>
|
|
</body>
|
|
</html>
|