Portal example [skip ci]
This commit is contained in:
parent
b61002d5df
commit
5543feeb2b
3 changed files with 65 additions and 26 deletions
|
|
@ -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).
|
||||
|
|
|
|||
56
examples/portal.clj
Executable file
56
examples/portal.clj
Executable file
|
|
@ -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 <file.(edn|json|xml|yaml)>"))
|
||||
|
||||
(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)
|
||||
|
||||
|
|
@ -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)
|
||||
|
||||
Loading…
Reference in a new issue