class CouchRest::Upgrade

Attributes

dbname[RW]
newdb[RW]
olddb[RW]

Public Class Methods

new(dbname, old_couch, new_couch) click to toggle source
# File lib/couchrest/helper/upgrade.rb, line 4
def initialize dbname, old_couch, new_couch
  @dbname = dbname
  @olddb = old_couch.database dbname
  @newdb = new_couch.database!(dbname)
  @bulk_docs = []
end

Public Instance Methods

clone!() click to toggle source
# File lib/couchrest/helper/upgrade.rb, line 10
def clone!
  puts "#{dbname} - #{olddb.info['doc_count']} docs"
  streamer  = CouchRest::Streamer.new(olddb)
  streamer.view("_all_docs_by_seq") do |row|
    load_row_docs(row) if row
    maybe_flush_bulks
  end
  flush_bulks!
end

Private Instance Methods

flush_bulks!() click to toggle source
# File lib/couchrest/helper/upgrade.rb, line 26
def flush_bulks!
  url = CouchRest.paramify_url "#{@newdb.uri}/_bulk_docs", {:all_or_nothing => true}
  puts "posting #{@bulk_docs.length} bulk docs to #{url}"
  begin
    CouchRest.post url, {:docs => @bulk_docs}      
    @bulk_docs = []
  rescue Exception => e
    puts e.response
    raise e
  end
end
load_row_docs(row) click to toggle source
# File lib/couchrest/helper/upgrade.rb, line 38
def load_row_docs(row)
  results = @olddb.get(row["id"], {:open_revs => "all", :attachments => true})
  results.select{|r|r["ok"]}.each do |r|
    doc = r["ok"]
    if /^_/.match(doc["_id"]) && !/^_design/.match(doc["_id"])
      puts "invalid docid #{doc["_id"]} -- trimming"
      doc["_id"] = doc["_id"].sub('_','')
    end
    doc.delete('_rev')
    @bulk_docs << doc
  end
end
maybe_flush_bulks() click to toggle source
# File lib/couchrest/helper/upgrade.rb, line 22
def maybe_flush_bulks
  flush_bulks! if (@bulk_docs.length > 99)
end