From 50774213080a65bf80f419d92affb4baad48d1f9 Mon Sep 17 00:00:00 2001 From: Daniel Restrepo Montoya Date: Thu, 3 Nov 2016 12:44:49 -0500 Subject: [PATCH 01/12] Function get-pullrequest and an utility function to clean arrays --- src/hacktoboy/core.clj | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/hacktoboy/core.clj b/src/hacktoboy/core.clj index 3585e28..7ed74dd 100644 --- a/src/hacktoboy/core.clj +++ b/src/hacktoboy/core.clj @@ -12,8 +12,28 @@ (let [s (user key)] (subs s 0 (- (.length s) (.length "{/privacy}"))))) -;;Get Url Events of Barista Public Members (defn members-url-events [org-name] + "Get Url Events of Public Members for org-name" (map (partial get-value "events_url") (parse->clojure (str base-url "/orgs/" org-name "/members")))) -(members-url-events "BaristaVentures") +(defn get-pullrequest [event] + (let [type (get event "type") + actor (get-in event ["actor" "login"]) + repo (get-in event ["repo" "name"]) + date (get event "created_at")] + (if (= type "PullRequestEvent") + (str actor " - " type " - " repo " - " date)))) + +(defn clean-arr [arr] + (loop [init arr + final '()] + (if (empty? init) + final + (let [[element & remaining] init] + (recur remaining + (if (= element nil) + final + (conj final element))))))) + +;;Get all PullRequestEvents of Barista Ventures Public Members +(map clean-arr (map (fn [arr] (map print-event arr)) (map parse->clojure (members-url-events "BaristaVentures")))) From 3a5b1eef4f163c6569a34b4796a214416f2a29d2 Mon Sep 17 00:00:00 2001 From: Daniel Restrepo Montoya Date: Thu, 3 Nov 2016 13:02:52 -0500 Subject: [PATCH 02/12] change testing case --- src/hacktoboy/core.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hacktoboy/core.clj b/src/hacktoboy/core.clj index 7ed74dd..afa29af 100644 --- a/src/hacktoboy/core.clj +++ b/src/hacktoboy/core.clj @@ -36,4 +36,4 @@ (conj final element))))))) ;;Get all PullRequestEvents of Barista Ventures Public Members -(map clean-arr (map (fn [arr] (map print-event arr)) (map parse->clojure (members-url-events "BaristaVentures")))) +(map clean-arr (map (fn [arr] (map get-pullrequest arr)) (map parse->clojure (members-url-events "BaristaVentures")))) From f40f3cf7bbef87724b4d55b6bc46fb3c57b3a9b7 Mon Sep 17 00:00:00 2001 From: Daniel Restrepo Montoya Date: Thu, 3 Nov 2016 15:46:01 -0500 Subject: [PATCH 03/12] Configure main to target core --- project.clj | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/project.clj b/project.clj index 91e1ac1..1b359a5 100644 --- a/project.clj +++ b/project.clj @@ -3,4 +3,5 @@ :url "http://example.com/FIXME" :license {:name "Eclipse Public License" :url "http://www.eclipse.org/legal/epl-v10.html"} - :dependencies [[org.clojure/clojure "1.8.0"] [cheshire "5.6.3"]] ) + :dependencies [[org.clojure/clojure "1.8.0"] [cheshire "5.6.3"]] + :main "hacktoboy.core") From dfd4ad5b260fc66faf269223902871df80bfacba Mon Sep 17 00:00:00 2001 From: Daniel Restrepo Montoya Date: Thu, 3 Nov 2016 22:00:15 -0500 Subject: [PATCH 04/12] Support token in function members-url-events to list private members --- src/hacktoboy/core.clj | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/hacktoboy/core.clj b/src/hacktoboy/core.clj index afa29af..9b1f50e 100644 --- a/src/hacktoboy/core.clj +++ b/src/hacktoboy/core.clj @@ -12,17 +12,24 @@ (let [s (user key)] (subs s 0 (- (.length s) (.length "{/privacy}"))))) -(defn members-url-events [org-name] - "Get Url Events of Public Members for org-name" - (map (partial get-value "events_url") (parse->clojure (str base-url "/orgs/" org-name "/members")))) +(defn members-url-events + ([org-name] + "Get Url Events of Public Members for org-name" + (map (partial get-value "events_url") (parse->clojure (str base-url "/orgs/" org-name "/members")))) + ([org-name token] + "Get Url Events for all Member for org-ame. Requires token and be member" + (map (partial get-value "events_url") (parse->clojure (str base-url "/orgs/" org-name "/members?access_token=" token))))) + (defn get-pullrequest [event] (let [type (get event "type") actor (get-in event ["actor" "login"]) repo (get-in event ["repo" "name"]) + action (get-in event ["payload" "action"]) date (get event "created_at")] (if (= type "PullRequestEvent") - (str actor " - " type " - " repo " - " date)))) + (if (.startsWith date "2016-10") + (str actor " - " type " - " action " - " repo " - " date))))) (defn clean-arr [arr] (loop [init arr From 87dcaf4ccbcfbc4ed4ccf6ef4de2c98d44bbab06 Mon Sep 17 00:00:00 2001 From: Daniel Restrepo Montoya Date: Fri, 4 Nov 2016 06:58:50 -0500 Subject: [PATCH 05/12] Change property to avoid problem with cider-jack-in --- project.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project.clj b/project.clj index 1b359a5..0b76132 100644 --- a/project.clj +++ b/project.clj @@ -4,4 +4,4 @@ :license {:name "Eclipse Public License" :url "http://www.eclipse.org/legal/epl-v10.html"} :dependencies [[org.clojure/clojure "1.8.0"] [cheshire "5.6.3"]] - :main "hacktoboy.core") + :main hacktoboy.core) From d6ab5428f7f45aa2d25799a74a621253b87ec606 Mon Sep 17 00:00:00 2001 From: Daniel Restrepo Montoya Date: Fri, 4 Nov 2016 09:58:22 -0500 Subject: [PATCH 06/12] New function cout-pr and logic to Get Members Score --- src/hacktoboy/core.clj | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/hacktoboy/core.clj b/src/hacktoboy/core.clj index 9b1f50e..2ea34c6 100644 --- a/src/hacktoboy/core.clj +++ b/src/hacktoboy/core.clj @@ -29,7 +29,7 @@ date (get event "created_at")] (if (= type "PullRequestEvent") (if (.startsWith date "2016-10") - (str actor " - " type " - " action " - " repo " - " date))))) + (hash-map :actor actor :repo repo :date date))))) (defn clean-arr [arr] (loop [init arr @@ -42,5 +42,10 @@ final (conj final element))))))) -;;Get all PullRequestEvents of Barista Ventures Public Members -(map clean-arr (map (fn [arr] (map get-pullrequest arr)) (map parse->clojure (members-url-events "BaristaVentures")))) +(defn count-pr [arr-pr] + (if (> (count arr-pr) 0) + {:user (get (first arr-pr) :actor) :score (count arr-pr) :lastpr (get (first arr-pr) :date)})) + +;;Get Members Score +(sort-by :score > (filter (fn [x] (> (count x) 0)) (map count-pr (map clean-arr (map (fn [arr] (map get-pullrequest arr)) + (map parse->clojure (members-url-events "BaristaVentures"))))))) From 8d54f5959c52314d66c77e034fbce87146d6fa96 Mon Sep 17 00:00:00 2001 From: Daniel Restrepo Montoya Date: Fri, 4 Nov 2016 14:00:33 -0500 Subject: [PATCH 07/12] Add main function to print members score --- src/hacktoboy/core.clj | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/hacktoboy/core.clj b/src/hacktoboy/core.clj index 2ea34c6..67e1223 100644 --- a/src/hacktoboy/core.clj +++ b/src/hacktoboy/core.clj @@ -47,5 +47,8 @@ {:user (get (first arr-pr) :actor) :score (count arr-pr) :lastpr (get (first arr-pr) :date)})) ;;Get Members Score -(sort-by :score > (filter (fn [x] (> (count x) 0)) (map count-pr (map clean-arr (map (fn [arr] (map get-pullrequest arr)) - (map parse->clojure (members-url-events "BaristaVentures"))))))) +(defn -main [& args] + (map (fn [m] (println (str (get m :user) " - " (get m :score)))) + (sort-by :score > (filter (fn [x] (> (count x) 0)) + (map count-pr (map clean-arr (map (fn [arr] (map get-pullrequest arr)) + (map parse->clojure (members-url-events "BaristaVentures"))))))))) From 90a733f8cf0e9a47dea50b9f2ce5f489c9665620 Mon Sep 17 00:00:00 2001 From: Daniel Restrepo Montoya Date: Fri, 4 Nov 2016 14:58:23 -0500 Subject: [PATCH 08/12] Refactor in Main Fuction to accep 1 or 2 to arguments --- src/hacktoboy/core.clj | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/hacktoboy/core.clj b/src/hacktoboy/core.clj index 67e1223..4b40969 100644 --- a/src/hacktoboy/core.clj +++ b/src/hacktoboy/core.clj @@ -48,7 +48,8 @@ ;;Get Members Score (defn -main [& args] - (map (fn [m] (println (str (get m :user) " - " (get m :score)))) + (println "User - Score") + (apply println (map (fn [m] (str "\n" (get m :user) " - " (get m :score))) (sort-by :score > (filter (fn [x] (> (count x) 0)) (map count-pr (map clean-arr (map (fn [arr] (map get-pullrequest arr)) - (map parse->clojure (members-url-events "BaristaVentures"))))))))) + (map parse->clojure (apply members-url-events args)))))))))) From 8aea71c311ab4dc6b6f2350f6ea9d991c8f26435 Mon Sep 17 00:00:00 2001 From: Daniel Restrepo Montoya Date: Tue, 8 Nov 2016 16:03:37 -0500 Subject: [PATCH 09/12] Heavy Refactor --- src/hacktoboy/core.clj | 44 ++++++++++++++---------------------------- 1 file changed, 14 insertions(+), 30 deletions(-) diff --git a/src/hacktoboy/core.clj b/src/hacktoboy/core.clj index 4b40969..e904111 100644 --- a/src/hacktoboy/core.clj +++ b/src/hacktoboy/core.clj @@ -19,37 +19,21 @@ ([org-name token] "Get Url Events for all Member for org-ame. Requires token and be member" (map (partial get-value "events_url") (parse->clojure (str base-url "/orgs/" org-name "/members?access_token=" token))))) - - -(defn get-pullrequest [event] - (let [type (get event "type") - actor (get-in event ["actor" "login"]) - repo (get-in event ["repo" "name"]) - action (get-in event ["payload" "action"]) - date (get event "created_at")] - (if (= type "PullRequestEvent") - (if (.startsWith date "2016-10") - (hash-map :actor actor :repo repo :date date))))) - -(defn clean-arr [arr] - (loop [init arr - final '()] - (if (empty? init) - final - (let [[element & remaining] init] - (recur remaining - (if (= element nil) - final - (conj final element))))))) - -(defn count-pr [arr-pr] - (if (> (count arr-pr) 0) - {:user (get (first arr-pr) :actor) :score (count arr-pr) :lastpr (get (first arr-pr) :date)})) + +(defn count-user-pr [arr] + (loop [[h & t] arr prs '()] + (if (empty? h) + (if (> (count prs) 0) + {:user (:actor (first prs)) :score (count prs) :last (:date (last prs))}) + (recur t (if (and (= (get h "type") "PullRequestEvent") (.startsWith (get h "created_at") "2016-10")) + (conj prs {:actor (get-in h ["actor" "login"]) :repo (get-in h ["repo" "name"]) :date (get h "created_at")}) + prs))))) ;;Get Members Score (defn -main [& args] (println "User - Score") - (apply println (map (fn [m] (str "\n" (get m :user) " - " (get m :score))) - (sort-by :score > (filter (fn [x] (> (count x) 0)) - (map count-pr (map clean-arr (map (fn [arr] (map get-pullrequest arr)) - (map parse->clojure (apply members-url-events args)))))))))) + (apply println (map (fn [m] (str "\n" (:user m) " - " (:score m))) + (sort-by :score > (filter (fn [x] (> (count x) 0)) + (map count-user-pr + (map parse->clojure (apply members-url-events args)))))))) + From 057061aa73b5ddc210977dbd034fc8eddbb4801a Mon Sep 17 00:00:00 2001 From: Daniel Restrepo Montoya Date: Wed, 9 Nov 2016 07:39:34 -0500 Subject: [PATCH 10/12] Refactor if-when and Destructuring --- src/hacktoboy/core.clj | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/hacktoboy/core.clj b/src/hacktoboy/core.clj index e904111..2de6881 100644 --- a/src/hacktoboy/core.clj +++ b/src/hacktoboy/core.clj @@ -21,12 +21,12 @@ (map (partial get-value "events_url") (parse->clojure (str base-url "/orgs/" org-name "/members?access_token=" token))))) (defn count-user-pr [arr] - (loop [[h & t] arr prs '()] - (if (empty? h) - (if (> (count prs) 0) + (loop [[{type "type" date "created_at" {name "name"} "repo" {login "login"} "actor"} & t] arr prs '()] + (if (empty? type) + (when (> (count prs) 0) {:user (:actor (first prs)) :score (count prs) :last (:date (last prs))}) - (recur t (if (and (= (get h "type") "PullRequestEvent") (.startsWith (get h "created_at") "2016-10")) - (conj prs {:actor (get-in h ["actor" "login"]) :repo (get-in h ["repo" "name"]) :date (get h "created_at")}) + (recur t (if (and (= type "PullRequestEvent") (.startsWith date "2016-10")) + (conj prs {:actor login :repo name :date date}) prs))))) ;;Get Members Score From cb3f5256048f7338d7b243e5836f30899965047b Mon Sep 17 00:00:00 2001 From: Daniel Restrepo Montoya Date: Tue, 15 Nov 2016 08:33:20 -0500 Subject: [PATCH 11/12] Refactor using Reduce in count-user-pr function --- src/hacktoboy/core.clj | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/hacktoboy/core.clj b/src/hacktoboy/core.clj index 2de6881..2751494 100644 --- a/src/hacktoboy/core.clj +++ b/src/hacktoboy/core.clj @@ -19,21 +19,25 @@ ([org-name token] "Get Url Events for all Member for org-ame. Requires token and be member" (map (partial get-value "events_url") (parse->clojure (str base-url "/orgs/" org-name "/members?access_token=" token))))) - -(defn count-user-pr [arr] - (loop [[{type "type" date "created_at" {name "name"} "repo" {login "login"} "actor"} & t] arr prs '()] - (if (empty? type) - (when (> (count prs) 0) - {:user (:actor (first prs)) :score (count prs) :last (:date (last prs))}) - (recur t (if (and (= type "PullRequestEvent") (.startsWith date "2016-10")) - (conj prs {:actor login :repo name :date date}) - prs))))) + +(defn count-user-pr [user-events] + "Count User Pull Request Events" + (if-let [user-score + (reduce (fn [final-prs pr] + (let [{type "type" date "created_at" {name "name"} "repo" {login "login"} "actor"} pr] + (if (and (= type "PullRequestEvent") (.startsWith date "2016-10")) + (conj final-prs {:actor login :repo name :date date}) + final-prs))) + '() + user-events)] + {:user (:actor (first user-score)) :score (count user-score) :last (:date (last user-score))})) ;;Get Members Score (defn -main [& args] (println "User - Score") (apply println (map (fn [m] (str "\n" (:user m) " - " (:score m))) - (sort-by :score > (filter (fn [x] (> (count x) 0)) + (sort-by :score > (filter (fn [x] (> (:score x) 0)) (map count-user-pr (map parse->clojure (apply members-url-events args)))))))) + From ca0a3c556c1abaac5932608aedbe6a01d7c068e0 Mon Sep 17 00:00:00 2001 From: Daniel Restrepo Montoya Date: Tue, 15 Nov 2016 12:30:19 -0500 Subject: [PATCH 12/12] Refactor. Lets reduce do the hard work --- src/hacktoboy/core.clj | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/hacktoboy/core.clj b/src/hacktoboy/core.clj index 2751494..cc5bd92 100644 --- a/src/hacktoboy/core.clj +++ b/src/hacktoboy/core.clj @@ -22,22 +22,20 @@ (defn count-user-pr [user-events] "Count User Pull Request Events" - (if-let [user-score - (reduce (fn [final-prs pr] - (let [{type "type" date "created_at" {name "name"} "repo" {login "login"} "actor"} pr] - (if (and (= type "PullRequestEvent") (.startsWith date "2016-10")) - (conj final-prs {:actor login :repo name :date date}) - final-prs))) - '() - user-events)] - {:user (:actor (first user-score)) :score (count user-score) :last (:date (last user-score))})) + (reduce (fn [final-prs pr] + (let [{type "type" date "created_at" {name "name"} "repo" {login "login"} "actor"} pr] + (if (and (= type "PullRequestEvent") (.startsWith date "2016-10")) + (if (empty? final-prs) + {:user login :score 1 :last date} + (assoc final-prs :score (inc (:score final-prs)))) + final-prs))) + '() + user-events)) ;;Get Members Score (defn -main [& args] (println "User - Score") (apply println (map (fn [m] (str "\n" (:user m) " - " (:score m))) - (sort-by :score > (filter (fn [x] (> (:score x) 0)) + (sort-by :score > (filter (fn [x] (> (count x) 0)) (map count-user-pr (map parse->clojure (apply members-url-events args)))))))) - -