29 lines
617 B
Ruby
29 lines
617 B
Ruby
|
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
|