|
1 | 1 | (ns dev.playground |
2 | | - (:require [codes.clj.docs.extractor.core :as core] |
| 2 | + (:require [clj-http.client :as http] |
| 3 | + [clojure.java.io :as io] |
| 4 | + [codes.clj.docs.extractor.core :as core] |
3 | 5 | [codes.clj.docs.extractor.datalevin :as datalevin] |
4 | 6 | [datalevin.core :as d] |
5 | | - [datalevin.util :as util])) |
| 7 | + [datalevin.util :as util]) |
| 8 | + (:import [java.io File])) |
| 9 | + |
| 10 | +(defn get-url [git-url] |
| 11 | + (-> (http/get git-url {:as :json}) |
| 12 | + :body)) |
| 13 | + |
| 14 | +(defn download-unzip [dir url] |
| 15 | + (let [stream (-> (http/get url {:as :byte-array}) |
| 16 | + :body |
| 17 | + io/input-stream |
| 18 | + java.util.zip.ZipInputStream.)] |
| 19 | + (loop [file-data (.getNextEntry stream)] |
| 20 | + (when file-data |
| 21 | + (let [file-path (str dir File/separatorChar (.getName file-data)) |
| 22 | + saveFile (File. file-path)] |
| 23 | + (if (.isDirectory file-data) |
| 24 | + (when-not (.exists saveFile) |
| 25 | + (.mkdirs saveFile)) |
| 26 | + (let [parentDir (File. (.substring file-path 0 (.lastIndexOf file-path (int File/separatorChar))))] |
| 27 | + (when-not (.exists parentDir) |
| 28 | + (.mkdirs parentDir)) |
| 29 | + (io/copy stream saveFile)))) |
| 30 | + (recur (.getNextEntry stream)))))) |
6 | 31 |
|
7 | 32 | (comment |
8 | | - ; reset database |
| 33 | + ; reset database & download unzip from releases |
| 34 | + (let [dir "target/docs-db"] |
| 35 | + (println "deleting") |
| 36 | + (try (util/delete-files dir) (catch Exception _)) |
| 37 | + (println "downloading") |
| 38 | + (->> "https://api.github.com/repos/clj-codes/docs.extractor/releases/latest" |
| 39 | + get-url |
| 40 | + :tag_name |
| 41 | + (format "https://github.com/clj-codes/docs.extractor/releases/download/%s/docs-db.zip") |
| 42 | + (download-unzip dir))) |
| 43 | + |
| 44 | + ; reset database & generate new database |
9 | 45 | (let [dir "target/docs-db"] |
10 | 46 | (println "deleting") |
11 | 47 | (try (util/delete-files dir) (catch Exception _)) |
|
31 | 67 | :definition/name |
32 | 68 | :definition/group |
33 | 69 | :definition/artifact |
34 | | - :definition/namespace]) ...] |
| 70 | + :definition/namespace |
| 71 | + :definition/git-source]) ...] |
35 | 72 | :in $ ?q |
36 | 73 | :where |
37 | 74 | [(str ".*" ?q ".*") ?pattern] |
|
52 | 89 | (let [conn (d/get-conn "target/docs-db" datalevin/db-schemas) |
53 | 90 | db (d/db conn) |
54 | 91 | result (doall (d/q '[:find (count ?e) |
55 | | - :in $ ?q |
| 92 | + :in $ |
56 | 93 | :where [?e]] |
57 | | - db |
58 | | - "assoc"))] |
| 94 | + db))] |
59 | 95 | (d/close conn) |
60 | 96 | result) |
61 | 97 |
|
62 | | - ; tests with temporary database |
63 | | - (let [db (-> (d/empty-db "/tmp/mydb" |
64 | | - {:text {:db/valueType :db.type/string}}) |
65 | | - (d/db-with |
66 | | - [{:db/id 1 :text "assoc!"} |
67 | | - {:db/id 2 :text "assoc"} |
68 | | - {:db/id 3 :text "assoc-in"} |
69 | | - {:db/id 4 :text "assoc-dom"} |
70 | | - {:db/id 5 :text "assoc-meta"} |
71 | | - {:db/id 6 :text "associative?"}]))] |
72 | | - (d/q '[:find (pull ?e [*]) |
73 | | - :in $ ?q |
74 | | - :where ;[(fulltext $ ?q) [[?e ?a ?v]]] |
75 | | - [(str ".*" ?q ".*") ?pattern] |
76 | | - [(re-pattern ?pattern) ?regex] |
77 | | - [(re-matches ?regex ?name)] |
78 | | - [?e :text ?name]] |
79 | | - db |
80 | | - "assoc"))) |
| 98 | + ; tests with fulltext search |
| 99 | + (let [conn (d/get-conn "target/docs-db" datalevin/db-schemas) |
| 100 | + db (d/db conn) |
| 101 | + result (doall (d/q '[:find ?e ?name ?a ?v |
| 102 | + :in $ ?q |
| 103 | + :where |
| 104 | + [(fulltext $ ?q) [[?e ?a ?v]]] |
| 105 | + [?e :definition/name ?name]] |
| 106 | + db |
| 107 | + "assoc"))] |
| 108 | + (d/close conn) |
| 109 | + result)) |
0 commit comments