Skip to content

Commit

Permalink
Add basic json renderers
Browse files Browse the repository at this point in the history
  • Loading branch information
Joshua Davey committed Mar 17, 2017
1 parent 290b2e7 commit bc9d10a
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 5 deletions.
1 change: 1 addition & 0 deletions project.clj
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
:url "https://github.com/joegallo/doric"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[cheshire "5.7.0"]]
:profiles {:1.6 {:dependencies [[org.clojure/clojure "1.6.0"]]}
:1.7 {:dependencies [[org.clojure/clojure "1.7.0"]]}
:1.8 {:dependencies [[org.clojure/clojure "1.8.0"]]}
Expand Down
7 changes: 5 additions & 2 deletions src/doric/core.clj
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
[doric.org]
[doric.raw]
[doric.html]
[doric.csv]))
[doric.csv]
[doric.json]))

(defn column-defaults [col]
(merge col
Expand Down Expand Up @@ -58,7 +59,9 @@
(def renderers {:csv doric.csv/renderer
:html doric.html/renderer
:org doric.org/renderer
:raw doric.raw/renderer})
:raw doric.raw/renderer
:json (doric.json/make-renderer)
:json-pretty (doric.json/make-renderer true)})

(defn mapify [rows]
(let [example (first rows)]
Expand Down
16 changes: 16 additions & 0 deletions src/doric/json.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
(ns doric.json
(:require [cheshire.core :as json]
[doric.protocols :as proto]))

(defrecord JSONRenderer [cheshire-opts]
proto/Render
(-render-lazy [_ cols data]
(map #(json/generate-string % cheshire-opts) data))
(-render [_ cols data]
(json/generate-string data cheshire-opts)))

(defn make-renderer
([]
(make-renderer false))
([pretty]
(->JSONRenderer {:pretty pretty})))
17 changes: 14 additions & 3 deletions test/doric/test/core.clj
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
(ns doric.test.core
(:refer-clojure :exclude [format name when])
(:use [doric.core]
[clojure.test]
[doric.org :only [assemble]]))
(:require [clojure.test :refer :all]
[cheshire.core :as json]
[doric.core :refer :all]
[doric.org :refer [assemble]]))

(deftest test-column-defaults
(is (= "foo" (:title (columnize {:title "foo"}))))
Expand Down Expand Up @@ -64,6 +65,16 @@
[{:1 3 :2 4}])]
(is (= 0 @calls))))))

(deftest test-json
(let [data [{:a 1 :b "2"} {:a 2 :b "42"}]
out (table {:format :json} data)]
(is (= data (json/parse-string out true)))))

(deftest test-json-table*
(let [data [{:a 1 :b "2"} {:a 2 :b "42"}]
out (table* {:format :json} data)]
(is (= data (map #(json/parse-string % true) out)))))

(deftest test-empty-table
(let [empty-table "|--|\n| |\n|--|\n|--|"]
(is (= empty-table (table [])))
Expand Down

0 comments on commit bc9d10a

Please sign in to comment.