added streamer class
This commit is contained in:
parent
4630fcd944
commit
9e7738fd74
4 changed files with 55 additions and 1 deletions
|
@ -6,5 +6,6 @@ require File.dirname(__FILE__) + '/couch_rest'
|
||||||
require File.dirname(__FILE__) + '/database'
|
require File.dirname(__FILE__) + '/database'
|
||||||
require File.dirname(__FILE__) + '/pager'
|
require File.dirname(__FILE__) + '/pager'
|
||||||
require File.dirname(__FILE__) + '/file_manager'
|
require File.dirname(__FILE__) + '/file_manager'
|
||||||
|
require File.dirname(__FILE__) + '/streamer'
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,8 @@ require "base64"
|
||||||
|
|
||||||
class CouchRest
|
class CouchRest
|
||||||
class Database
|
class Database
|
||||||
attr_accessor :server, :host, :name
|
attr_reader :server, :host, :name, :root
|
||||||
|
|
||||||
def initialize server, name
|
def initialize server, name
|
||||||
@name = name
|
@name = name
|
||||||
@server = server
|
@server = server
|
||||||
|
|
29
lib/streamer.rb
Normal file
29
lib/streamer.rb
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
class CouchRest
|
||||||
|
class Streamer
|
||||||
|
attr_accessor :db
|
||||||
|
def initialize db
|
||||||
|
@db = db
|
||||||
|
end
|
||||||
|
|
||||||
|
def view name, params = nil
|
||||||
|
urlst = /^_/.match(name) ? "#{@db.root}/#{name}" : "#{@db.root}/_view/#{name}"
|
||||||
|
url = CouchRest.paramify_url urlst, params
|
||||||
|
IO.popen("curl --silent #{url}") do |view|
|
||||||
|
view.gets # discard header
|
||||||
|
while row = parse_line(view.gets)
|
||||||
|
yield row
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def parse_line line
|
||||||
|
return nil unless line
|
||||||
|
if /(\{.*\}),?/.match(line.chomp)
|
||||||
|
JSON.parse($1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
23
spec/streamer_spec.rb
Normal file
23
spec/streamer_spec.rb
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
require File.dirname(__FILE__) + '/spec_helper'
|
||||||
|
|
||||||
|
describe CouchRest::Streamer do
|
||||||
|
before(:all) do
|
||||||
|
@cr = CouchRest.new(COUCHHOST)
|
||||||
|
@db = @cr.database(TESTDB)
|
||||||
|
@db.delete! rescue nil
|
||||||
|
@db = @cr.create_db(TESTDB) rescue nil
|
||||||
|
@streamer = CouchRest::Streamer.new(@db)
|
||||||
|
@docs = (1..1000).collect{|i| {:integer => i, :string => i.to_s}}
|
||||||
|
@db.bulk_save(@docs)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should yield each row in a view" do
|
||||||
|
count = 0
|
||||||
|
sum = 0
|
||||||
|
@streamer.view("_all_docs") do |row|
|
||||||
|
count += 1
|
||||||
|
end
|
||||||
|
count.should == 1000
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
Loading…
Add table
Reference in a new issue