got reduce support working for javascript views

This commit is contained in:
Chris Anderson 2008-05-17 13:41:16 -07:00
parent 81d27c6f16
commit 80c50ccf8f
2 changed files with 25 additions and 4 deletions

View file

@ -13,8 +13,16 @@ class CouchRest
CouchRest.get "#{@root}/_all_docs" CouchRest.get "#{@root}/_all_docs"
end end
def temp_view func def temp_view map, reduce = nil
JSON.parse(RestClient.post("#{@root}/_temp_view", func, {"Content-Type" => "text/javascript"})) if reduce
funcs = {
:map => map,
:reduce => reduce
}
else
funcs = map
end
JSON.parse(RestClient.post("#{@root}/_temp_view", JSON.unparse(funcs), {"Content-Type" => "text/javascript"}))
end end
def view name def view name

View file

@ -16,7 +16,7 @@ describe CouchRest::Database do
end end
end end
describe "query with _temp_view in Javascript" do describe "map query with _temp_view in Javascript" do
before(:each) do before(:each) do
@db.bulk_save([ @db.bulk_save([
{"wild" => "and random"}, {"wild" => "and random"},
@ -30,6 +30,20 @@ describe CouchRest::Database do
end end
end end
describe "map/reduce query with _temp_view in Javascript" do
before(:each) do
@db.bulk_save([
{"beverage" => "beer", :count => 4},
{"beverage" => "beer", :count => 2},
{"beverage" => "tea", :count => 3}
])
end
it "should return the result of the temporary function" do
rs = @db.temp_view("function(doc){map(doc.beverage, doc.count)}", "function(beverage,counts){return sum(counts)}")
rs['result'].should == 9
end
end
describe "select from an existing view" do describe "select from an existing view" do
before(:each) do before(:each) do
r = @db.save({"_id" => "_design/first", "views" => {"test" => "function(doc){for(var w in doc){ if(!w.match(/^_/))map(w,doc[w])}}"}}) r = @db.save({"_id" => "_design/first", "views" => {"test" => "function(doc){for(var w in doc){ if(!w.match(/^_/))map(w,doc[w])}}"}})
@ -98,7 +112,6 @@ describe CouchRest::Database do
lambda do lambda do
@db.get('twoB') @db.get('twoB')
end.should raise_error(RestClient::Request::RequestFailed) end.should raise_error(RestClient::Request::RequestFailed)
end end
end end