From 54a0afdf8e0a2edd41b15f74257f3e143a608c45 Mon Sep 17 00:00:00 2001 From: Chris Anderson Date: Mon, 13 Oct 2008 16:46:48 -0700 Subject: [PATCH] added block yields to db.view --- lib/couchrest/core/database.rb | 9 +++++++-- spec/couchrest/core/database_spec.rb | 7 +++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/couchrest/core/database.rb b/lib/couchrest/core/database.rb index d8d8cc3..3574bce 100644 --- a/lib/couchrest/core/database.rb +++ b/lib/couchrest/core/database.rb @@ -16,6 +16,7 @@ module CouchRest @server = server @host = server.uri @root = "#{host}/#{name}" + @streamer = Streamer.new(self) end # returns the database's uri @@ -48,13 +49,17 @@ module CouchRest end # Query a CouchDB view as defined by a _design document. Accepts paramaters as described in http://wiki.apache.org/couchdb/HttpViewApi - def view name, params = {} + def view name, params = {}, &block keys = params.delete(:keys) url = CouchRest.paramify_url "#{@root}/_view/#{name}", params if keys CouchRest.post(url, {:keys => keys}) else - CouchRest.get url + if block_given? + @streamer.view(name, params, &block) + else + CouchRest.get url + end end end diff --git a/spec/couchrest/core/database_spec.rb b/spec/couchrest/core/database_spec.rb index 768db3e..640d789 100644 --- a/spec/couchrest/core/database_spec.rb +++ b/spec/couchrest/core/database_spec.rb @@ -117,6 +117,13 @@ describe CouchRest::Database do rs = @db.view('first/test', :keys => ["another", "wild"]) rs['rows'].length.should == 2 end + it "should accept a block" do + rows = [] + rs = @db.view('first/test', :include_docs => true) do |row| + rows << row + end + rows.length.should == 3 + end end describe "GET (document by id) when the doc exists" do