Skip to content

Commit

Permalink
One more map/reduce example with a JS function passed from the client
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelklishin committed May 14, 2012
1 parent cfe9d23 commit e0e7ae2
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 7 deletions.
3 changes: 2 additions & 1 deletion project.clj
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
:source-paths ["src/clojure"]
:profiles {:1.4 {:dependencies [[org.clojure/clojure "1.4.0"]]}
:1.5 {:dependencies [[org.clojure/clojure "1.5.0-master-SNAPSHOT"]]}
:dev {:dependencies [[org.clojure/core.cache "0.5.0" :exclusions [org.clojure/clojure]]]}}
:dev {:resource-paths ["test/resources"]
:dependencies [[org.clojure/core.cache "0.5.0" :exclusions [org.clojure/clojure]]]}}
:mailing-list {:name "clojure-riak"
:archive "https://groups.google.com/group/clojure-riak"
:post "clojure-riak@googlegroups.com"}
Expand Down
29 changes: 23 additions & 6 deletions test/clojurewerkz/welle/test/mr_test.clj
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@
(:require [clojurewerkz.welle.core :as wc]
[clojurewerkz.welle.kv :as kv]
[clojurewerkz.welle.buckets :as wb]
[clojurewerkz.welle.mr :as mr])
(:import com.basho.riak.client.http.util.Constants
java.util.UUID))
[clojurewerkz.welle.mr :as mr]
[clojurewerkz.support.js :as js])
(:import com.basho.riak.client.http.util.Constants))

(wc/connect!)

(deftest ^{:mr true} test-basic-map-reduce-with-erlang-builtins
(let [bucket-name "clojurewerkz.welle.test.mr-test"
(let [bucket-name "clojurewerkz.welle.mr1"
bucket (wb/update bucket-name)]
(doseq [l (range 0 200)]
(kv/store bucket-name (str "java_" l) (str l) :content-type "text/plain"))
Expand All @@ -31,7 +31,7 @@


(deftest ^{:mr true} test-basic-map-reduce-with-mixed-builtins
(let [bucket-name "clojurewerkz.welle.test.mr-test"
(let [bucket-name "clojurewerkz.welle.mr2"
bucket (wb/update bucket-name)]
(doseq [l (range 0 200)]
(kv/store bucket-name (str "java_" l) (str l) :content-type "text/plain"))
Expand All @@ -46,4 +46,21 @@
{:reduce {:language "javascript"
:name "Riak.reduceSum"}}]})]
(is (= [19900] result)))
(drain bucket-name)))
(drain bucket-name)))


(deftest ^{:mr true :focus true} test-map-reduce-with-a-source-js-function
(let [bucket-name "clojurewerkz.welle.mr3"
_ (wb/update bucket-name)]
(drain bucket-name)
(kv/store bucket-name "1" {:state "CA" :quantity 1 :price 199.00} :content-type Constants/CTYPE_JSON_UTF8)
(kv/store bucket-name "2" {:state "NY" :quantity 2 :price 199.00} :content-type Constants/CTYPE_JSON_UTF8)
(kv/store bucket-name "3" {:state "NY" :quantity 1 :price 299.00} :content-type Constants/CTYPE_JSON_UTF8)
(kv/store bucket-name "4" {:state "IL" :quantity 2 :price 11.50 } :content-type Constants/CTYPE_JSON_UTF8)
(kv/store bucket-name "5" {:state "CA" :quantity 2 :price 2.95 } :content-type Constants/CTYPE_JSON_UTF8)
(kv/store bucket-name "6" {:state "IL" :quantity 3 :price 5.50 } :content-type Constants/CTYPE_JSON_UTF8)
(let [result (mr/map-reduce {:inputs bucket-name
:query [{:map {:language "javascript" :source (js/load-resource "js/fn1") :keep false}}
{:reduce {:language "javascript" :name "Riak.reduceSum"}}]})]
(is (= [941.4] result)))
(kv/delete-all bucket-name "1" "2" "3" "4" "5" "6")))
5 changes: 5 additions & 0 deletions test/resources/js/fn1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
function(value, key, _) {
var data = Riak.mapValuesJson(value)[0];

return [(data.price * data.quantity)];
}
14 changes: 14 additions & 0 deletions test/resources/js/fn2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
function (values, _) {
values = Riak.filterNotFound(values);

var acc = {};
values.forEach(function(pair) {
var k = pair[0], v = pair[1];
if(typeof acc[k] === 'undefined') {
acc[k] = 0;
} else {
acc[k] = acc[k] + v;
};
});
return [acc];
}

0 comments on commit e0e7ae2

Please sign in to comment.