Skip to content

Commit ca78679

Browse files
committed
bugfix (apply instead of map in process function), major refactoring
1 parent 28b7715 commit ca78679

File tree

2 files changed

+21
-22
lines changed

2 files changed

+21
-22
lines changed

project.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
:license {:name "EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0"
55
:url "https://www.eclipse.org/legal/epl-2.0/"}
66
:dependencies [[org.clojure/clojure "1.10.1"]
7-
[org.clojure/core.async "1.3.610"]
87
[org.clojure/data.json "1.0.0"]
8+
[org.clojure/core.async "1.3.610"]
99
[org.clojure/tools.cli "1.0.194"]
1010
[lambdaisland/deep-diff2 "2.0.108"]
1111
[juji/editscript "0.4.6"]]

src/json_diff/core.clj

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
(ns json-diff.core
2-
(:require [clojure.data.json :as json]
2+
(:require [clojure.java.io :as io]
3+
[clojure.data.json :as json]
34
[clojure.core.async :refer [>! <!! go chan]]
5+
[clojure.tools.cli :refer [parse-opts]]
46
[lambdaisland.deep-diff2 :as ddiff]
5-
[clojure.java.io :as io]
6-
[editscript.core :as edcore]
7-
;; [editscript.edit :as edit]
8-
[clojure.tools.cli :refer [parse-opts]])
7+
[editscript.core :refer [diff] :rename {diff compact-diff}])
8+
99
(:gen-class))
1010

1111
(def cli-options
@@ -14,45 +14,44 @@
1414
:parse-fn #(keyword %)
1515
:validate [#(% #{:visual :patch}) "possible modes are 'visual' or 'patch'"]]])
1616

17-
(defn parse
18-
"opens JSON file and parses it"
19-
[file-name]
20-
(with-open [f (io/reader file-name)]
21-
(json/read f)))
22-
2317
(defn parse-async
2418
"opens JSON file and parses it asynchronously, returns channel"
2519
[file-name]
26-
(go (parse file-name)))
20+
(go (with-open [f (io/reader file-name)]
21+
(json/read f))))
2722

2823
(defn process
2924
[f & files]
3025
(->> files
3126
(map parse-async)
32-
(map #(<!! %))
33-
(map f)))
27+
(map <!!)
28+
(apply f)))
3429

3530
(defn patch
36-
"returns compact patch between two JSON objects"
31+
"prints compact patch between two JSON objects"
3732
[left right]
38-
(println (edcore/diff left right {:algo :quick})))
33+
(println (compact-diff left right {:algo :quick})))
3934

4035
(defn diff
41-
"returns visual diff between two JSON objects"
36+
"prints visual diff between two JSON objects"
4237
[left right]
4338
(ddiff/pretty-print
4439
(ddiff/diff left right)))
4540

41+
(defn print-error-exit
42+
"prints error message and exits with error code"
43+
[msg code]
44+
(println msg)
45+
(System/exit code))
46+
4647
(defn -main
4748
"main function"
4849
[& args]
4950
(let [{files :arguments
5051
errors :errors
5152
{:keys [mode]} :options} (parse-opts args cli-options)]
5253
(cond
53-
errors (do (apply println errors)
54-
(System/exit 1))
55-
(not= 2 (count files)) (do (println "you need to pass two JSON files!")
56-
(System/exit 1))
54+
errors (print-error-exit (str errors) 1)
55+
(not= 2 (count files)) (print-error-exit "you need to pass two JSON files!" 1)
5756
(= :visual mode) (apply process diff files)
5857
(= :patch mode) (apply process patch files))))

0 commit comments

Comments
 (0)