Skip to content

Instantly share code, notes, and snippets.

@jaycfields
jaycfields / gist:3804008
Created September 29, 2012 13:27
solved with my-fn
(defn my-fn [result {:keys [name employer]}]
(update-in result [employer] conj name))
(reduce my-fn {}
[{:name "jay fields", :current-city "new york", :employer "drw.com"}
{:name "john dydo", :current-city "new york", :employer "drw.com"}
{:name "mike ward", :current-city "chicago", :employer "drw.com"}
{:name "chris george", :current-city "new york", :employer "thoughtworks.com"}])
@jaycfields
jaycfields / gist:3804058
Created September 29, 2012 13:54
solved with clojure.core
(->> [{:name "jay fields", :current-city "new york", :employer "drw.com"}
{:name "john dydo", :current-city "new york", :employer "drw.com"}
{:name "mike ward", :current-city "chicago", :employer "drw.com"}
{:name "chris george", :current-city "new york", :employer "thoughtworks.com"}]
(map (juxt :employer (comp list :name)))
(map (partial apply hash-map))
(apply merge-with concat))
@jaycfields
jaycfields / gist:3804117
Created September 29, 2012 14:13
reduce with an inline fn
(reduce (fn [result {:keys [name employer]}] (update-in result [employer] conj name)) {}
[{:name "jay fields", :current-city "new york", :employer "drw.com"}
{:name "john dydo", :current-city "new york", :employer "drw.com"}
{:name "mike ward", :current-city "chicago", :employer "drw.com"}
{:name "chris george", :current-city "new york", :employer "thoughtworks.com"}])
@jaycfields
jaycfields / gist:3804281
Created September 29, 2012 15:05
prefer comp to #()
;;; I prefer
(filter (comp #{"new york"} :current-city)
[{:name "jay fields", :current-city "new york", :employer "drw.com"}
{:name "john dydo", :current-city "new york", :employer "drw.com"}
{:name "mike ward", :current-city "chicago", :employer "drw.com"}
{:name "chris george", :current-city "new york", :employer "thoughtworks.com"}])
;;; over
(filter #(= "new york" (:current-city %))
[{:name "jay fields", :current-city "new york", :employer "drw.com"}
@jaycfields
jaycfields / gist:3804298
Created September 29, 2012 15:12
solved with clojure.set/join
(require 'clojure.set)
(clojure.set/join [{:current-city "new york"}]
[{:name "jay fields", :current-city "new york", :employer "drw.com"}
{:name "john dydo", :current-city "new york", :employer "drw.com"}
{:name "mike ward", :current-city "chicago", :employer "drw.com"}
{:name "chris george", :current-city "new york", :employer "thoughtworks.com"}])
(expect (interaction (one "hello" {:a :b :c {:dd :ee :ff :gg}}))
(do
(one "hello")
(one "hello" "world" "here")
(one "hello" {:a 1 2 3})))
failure in (failure_examples.clj:154) : failure.failure-examples
expected: (one "hello" {:a :b, :c {:ff :gg, :dd :ee}}) once
@jaycfields
jaycfields / blog.clj
Created October 31, 2012 17:31
the-ns
(ns blog)
(def all-updates (atom {}))
(def last-update (atom {}))
(defn process-update [{:keys [src] :as update}]
(swap! all-updates update-in [src] conj update)
(swap! last-update assoc src update))
@jaycfields
jaycfields / blog_expectations.clj
Created October 31, 2012 17:35
tests that kill state
(ns blog-expectations
(:use expectations
[blog :as b]))
(expect {"CNN" {:src "CNN" :headline "Election Update"}
"NY Times" {:src "NY Times" :headline "Movie Guide"}}
(do
(b/process-update {:src "NY Times" :headline "Market News"})
(b/process-update {:src "CNN" :headline "Election Update"})
(b/process-update {:src "NY Times" :headline "Movie Guide"})
@jaycfields
jaycfields / blog_expectations.clj
Created October 31, 2012 17:42
tests that redef state
(ns blog-expectations
(:use expectations
[blog :as b]))
(expect {"CNN" {:src "CNN" :headline "Election Update"}
"NY Times" {:src "NY Times" :headline "Movie Guide"}}
(with-redefs [b/all-updates (atom {})
b/last-update (atom {})]
(b/process-update {:src "NY Times" :headline "Market News"})
(b/process-update {:src "CNN" :headline "Election Update"})
@jaycfields
jaycfields / blog_expectations.clj
Last active October 12, 2015 06:58
tests that use redef-state
(ns blog-expectations
(:use expectations
[blog :as b]))
(expect {"CNN" {:src "CNN" :headline "Election Update"}
"NY Times" {:src "NY Times" :headline "Movie Guide"}}
(redef-state [blog]
(b/process-update {:src "NY Times" :headline "Market News"})
(b/process-update {:src "CNN" :headline "Election Update"})
(b/process-update {:src "NY Times" :headline "Movie Guide"})