diff --git a/examples/README.md b/examples/README.md index d3650a02..aaf15df1 100644 --- a/examples/README.md +++ b/examples/README.md @@ -313,8 +313,14 @@ META-INF/leiningen/borkdude/sci/project.clj See [examples/vim.clj](examples/vim.clj). -### YAML inspector +### Portal -This script uses [djblue/portal](https://github.com/djblue/portal/) for viewing a YAML file piped to stdin. +This script uses [djblue/portal](https://github.com/djblue/portal/) for inspecting EDN, JSON, XML or YAML files. -See [examples/yaml_inspector.clj](yaml_inspector.clj). +Examples usage: + +``` shell +$ examples/yaml_inspector.clj ~/git/clojure/pom.xml +``` + +See [portal.clj](portal.clj). diff --git a/examples/portal.clj b/examples/portal.clj new file mode 100755 index 00000000..3f846ca4 --- /dev/null +++ b/examples/portal.clj @@ -0,0 +1,56 @@ +#!/usr/bin/env bb + +(ns portal + (:require [babashka.classpath :as cp] + [cheshire.core :as json] + [clj-yaml.core :as yaml] + [clojure.data.xml :as xml] + [clojure.edn :as edn] + [clojure.java.shell :refer [sh]] + [clojure.string :as str])) + +(def cp (str/trim (:out (sh "clojure" "-Spath" "-Sdeps" "{:deps {djblue/portal {:mvn/version \"0.6.1\"}}}")))) +(cp/add-classpath cp) + +(require '[portal.api :as p]) + +(.addShutdownHook (Runtime/getRuntime) + (Thread. (fn [] (p/close)))) + +(p/open) +(p/tap) + +(def file (first *command-line-args*)) +(when-not file + (binding [*out* *err*] + "Usage: portal.clj ")) + +(def extension (last (str/split file #"\."))) +(def contents (slurp file)) + +(defn xml->hiccup [xml] + (if-let [t (:tag xml)] + (let [elt [t] + elt (if-let [attrs (:attr xml)] + (conj elt attrs) + elt)] + (into elt (map xml->hiccup (:content xml)))) + xml)) + +(def data (case extension + ("edn") + (edn/read-string contents) + ("json") + (json/parse-string contents) + ("yml" "yaml") + (yaml/parse-string contents) + ("xml") + (-> (xml/parse-str contents + :skip-whitespace true + :namespace-aware false) + (xml->hiccup)))) + +(tap> data) + +@(promise) + diff --git a/examples/yaml_inspector.clj b/examples/yaml_inspector.clj deleted file mode 100755 index de409813..00000000 --- a/examples/yaml_inspector.clj +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bb - -(ns yaml-inspector - (:require [babashka.classpath :as cp] - [clj-yaml.core :as yaml] - [clojure.java.shell :refer [sh]] - [clojure.string :as str])) - -(def cp (str/trim (:out (sh "clojure" "-Spath" "-Sdeps" "{:deps {djblue/portal {:mvn/version \"0.6.1\"}}}")))) -(cp/add-classpath cp) - -(require '[portal.api :as p]) -(p/open) -(p/tap) - -(def yaml (yaml/parse-string (slurp *in*))) -(tap> yaml) - -(.addShutdownHook (Runtime/getRuntime) - (Thread. (fn [] (p/close)))) - -@(promise) -