Skip to content

Commit

Permalink
Maven.org included in search results
Browse files Browse the repository at this point in the history
  • Loading branch information
jgoday committed May 8, 2014
1 parent 46ef825 commit 08a9578
Show file tree
Hide file tree
Showing 12 changed files with 128 additions and 16 deletions.
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/target
/classes
/checkouts
pom.xml
pom.xml.asc
*.jar
*.class
/.lein-*
/.nrepl-port
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# clojure-dep-finder

A Clojure app to find dependencies in clojars.
A Clojure app to find dependencies in clojars.org and maven.org.
It modifies leiningen project.clj file with the new dependency included.

## Options
Expand Down
1 change: 1 addition & 0 deletions TODO
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[ ] No results in search
4 changes: 3 additions & 1 deletion project.clj
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:main clojure-dep-finder.core
:dependencies [[org.clojure/clojure "1.5.1"]
:dependencies [[org.clojure/clojure "1.6.0"]
[org.clojure/core.async "0.1.303.0-886421-alpha"]
[org.clojure/tools.namespace "0.2.3"]
[clj-http "0.9.1"]
[enlive "1.1.5"]
[org.clojure/tools.cli "0.2.4"]])
20 changes: 20 additions & 0 deletions src/clojure_dep_finder/ascii.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
(ns clojure-dep-finder.ascii)

(def grey-color "\u001B[30m")
(def yellow-color "\u001B[33m")
(def blue-color "\u001B[34m")
(def green-color "\u001B[32m")
(def default-color "\u001B[m")

(def colors {:grey grey-color
:blue blue-color
:green green-color
:yellow yellow-color
:default default-color})

(defn wrap-in-color [msg color]
(str
(get colors color :default)
msg
default-color))

14 changes: 9 additions & 5 deletions src/clojure_dep_finder/clojars.clj
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
(ns clojure-dep-finder.clojars
(:require [net.cgrand.enlive-html :as html])
(:use [clojure-dep-finder.library :only [->Library]]
(:use [clojure-dep-finder.debug :only [info]]
[clojure-dep-finder.library :only [->Library]]
[clojure.string :only [trim]]))

(def search-url "https://clojars.org/search?q=")
Expand All @@ -14,9 +15,12 @@
(->Library
(safe-string (html/select node [:li :a :> html/text-node]))
(safe-string (html/select node [:li :> html/text-node]))
(safe-string (html/select node [:li :span.desc :> html/text-node]))))
(safe-string (html/select node [:li :span.desc :> html/text-node]))
"clojars"))

(defn search [name]
(let [url (java.net.URL. (make-url name))
data (html/html-resource url)]
(map parse-result (html/select data [:li.search-results]))))
(do
(info "Searching in clojars.org")
(let [url (java.net.URL. (make-url name))
data (html/html-resource url)]
(map parse-result (html/select data [:li.search-results])))))
25 changes: 20 additions & 5 deletions src/clojure_dep_finder/core.clj
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
(ns clojure-dep-finder.core
(:require [clojure-dep-finder.clojars :as clojars]
[clojure-dep-finder.mavendotorg :as mvn]
[clojure-dep-finder.leiningen :as lein]
[clojure-dep-finder.ask :refer [ask-for-number]]
[clojure.tools.cli :refer [cli]])
(:use [clojure-dep-finder.library])
[clojure.tools.cli :refer [cli]]
[clojure.core.async :refer
[chan timeout go >! alts!! <!! <!]])
(:use [clojure-dep-finder.debug :only [enable-debug info]]
[clojure-dep-finder.library])
(:gen-class))

(def no-search-msg "Error: You must enter a library name")
Expand All @@ -24,11 +28,21 @@
(lein/show-howto lib)
(lein/install-dependency lib)))

(defn- do-search
(defn- do-search [name]
(let [c (chan)]
(go (>! c (clojars/search name)))
(go (>! c (mvn/search name)))

(flatten
(reduce (fn [results _] (conj results (<!! (go (<! c)))))
[]
(range 2)))))

(defn- init-search
([name]
(do-search name false false))
([name no-write show-desc]
(let [values (clojars/search name)
(let [values (do-search name)
descs (create-jar-list values show-desc)
number (ask-for-number descs)]
(do-install (nth values number) no-write))))
Expand All @@ -37,6 +51,7 @@
(let [[opts args banner] (arguments args)]
(when (:help opts)
(println banner))
(enable-debug)
(if (nil? (first args))
(println no-search-msg)
(do-search (first args) (:no-write opts) (:desc opts)))))
(init-search (first args) (:no-write opts) (:desc opts)))))
18 changes: 18 additions & 0 deletions src/clojure_dep_finder/debug.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
(ns clojure-dep-finder.debug
(use [clojure-dep-finder.ascii :only [wrap-in-color]]))

(def debug-enabled (atom false))

(defn enable-debug []
(swap! debug-enabled (fn [_] true)))


(defn disable-debug []
(swap! debug-enabled (fn [_] false)))

(defn info [& msg]
(if @debug-enabled
(println
(wrap-in-color
(str " .. " msg)
:yellow))))
7 changes: 7 additions & 0 deletions src/clojure_dep_finder/dev.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
(ns clojure-dep-finder.dev
(require [clojure.tools.namespace.repl :refer (refresh)]
[clojure.repl :refer :all]))

(defn reset []
(stop)
(refresh))
2 changes: 1 addition & 1 deletion src/clojure_dep_finder/leiningen.clj
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
(defn- add-dependency [lib]
(let [proj (read-project)
to-replace ":dependencies ["
replace-with (str to-replace (leiningen-dep lib) "\n\t\t\t\t\t\t\t\t ")
replace-with (str to-replace (leiningen-dep lib) "\n\t\t\t ")
new-proj (str/replace proj to-replace replace-with)]
(write-to "project.clj" new-proj)))

Expand Down
12 changes: 9 additions & 3 deletions src/clojure_dep_finder/library.clj
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
(ns clojure-dep-finder.library)
(ns clojure-dep-finder.library
(use [clojure-dep-finder.ascii :only [wrap-in-color]]))

(defrecord Library [name version desc])
(defrecord Library [name version desc repo])

(defmulti name-and-version class)
(defmethod name-and-version Library [l]
(str (:name l) " (" (:version l) ")"))
(str
(wrap-in-color (:name l) :blue)
" ("
(wrap-in-color (:version l) :green)
") "
(wrap-in-color (:repo l) :grey)))

(defmulti complete-desc class)
(defmethod complete-desc Library [l]
Expand Down
30 changes: 30 additions & 0 deletions src/clojure_dep_finder/mavendotorg.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
(ns clojure-dep-finder.mavendotorg
(:require [clj-http.client :as http])
(:use [clojure-dep-finder.debug :only [info]]
[clojure-dep-finder.library :only [->Library]]
[clojure.string :only [trim]]))

(def max-rows 30)

(defn- search-url [name]
(str
"http://search.maven.org/solrsearch/select?q="
name "&rows=" max-rows "&wt=json"))

(defn- parse-result [node]
(->Library
(str (:g node) "/" (:a node))
(:latestVersion node)
(str "")
"maven"))

(defn- get-results [res]
(get-in res [:body :response :docs]))

(defn search [name]
(map
parse-result
(get-results
(do
(info "Searching in maven.org")
(http/get (search-url name) {:as :json})))))

0 comments on commit 08a9578

Please sign in to comment.