cleaned up the design view names since we don't need to use md5 view names anymore. (we are using different revision numbers)

This commit is contained in:
Matt Aimonetti 2009-05-17 19:34:02 -07:00
parent 406eaebfc9
commit b89d327a61
4 changed files with 37 additions and 43 deletions

View file

@ -81,6 +81,10 @@ module CouchRest
@klass.all_design_doc_versions(@database) @klass.all_design_doc_versions(@database)
end end
def model_design_doc
@klass.model_design_doc(@database)
end
def cleanup_design_docs! def cleanup_design_docs!
@klass.cleanup_design_docs!(@database) @klass.cleanup_design_docs!(@database)
end end

View file

@ -25,8 +25,7 @@ module CouchRest
design_doc['views'].each do |name, view| design_doc['views'].each do |name, view|
funcs << "#{name}/#{view['map']}#{view['reduce']}" funcs << "#{name}/#{view['map']}#{view['reduce']}"
end end
md5 = Digest::MD5.hexdigest(funcs.sort.join('')) self.design_doc_slug_cache = self.to_s
self.design_doc_slug_cache = "#{self.to_s}-#{md5}"
end end
def default_design_doc def default_design_doc

View file

@ -104,26 +104,34 @@ module CouchRest
fetch_view_with_docs(db, name, query, raw, &block) fetch_view_with_docs(db, name, query, raw, &block)
end end
# DEPRECATED
# user model_design_doc to retrieve the current design doc
def all_design_doc_versions(db = database) def all_design_doc_versions(db = database)
db.documents :startkey => "_design/#{self.to_s}-", db.documents :startkey => "_design/#{self.to_s}",
:endkey => "_design/#{self.to_s}-\u9999" :endkey => "_design/#{self.to_s}-\u9999"
end end
def model_design_doc(db = database)
begin
@model_design_doc = db.get("_design/#{self.to_s}")
rescue
nil
end
end
# Deletes any non-current design docs that were created by this class. # Deletes the current design doc for the current class.
# Running this when you're deployed version of your application is steadily # Running it to early could mean that live code has to regenerate
# and consistently using the latest code, is the way to clear out old design
# docs. Running it to early could mean that live code has to regenerate
# potentially large indexes. # potentially large indexes.
def cleanup_design_docs!(db = database) def cleanup_design_docs!(db = database)
ddocs = all_design_doc_versions(db) save_design_doc_on(db)
ddocs["rows"].each do |row| # db.refresh_design_doc
if (row['id'] != design_doc_id) # db.save_design_doc
db.delete_doc({ # design_doc = model_design_doc(db)
"_id" => row['id'], # if design_doc
"_rev" => row['value']['rev'] # db.delete_doc(design_doc)
}) # else
end # false
end # end
end end
private private

View file

@ -183,14 +183,13 @@ describe "ExtendedDocument views" do
it "should barf on all_design_doc_versions if no database given" do it "should barf on all_design_doc_versions if no database given" do
lambda{Unattached.all_design_doc_versions}.should raise_error lambda{Unattached.all_design_doc_versions}.should raise_error
end end
it "should clean up design docs left around on specific database" do it "should be able to cleanup the db/bump the revision number" do
Unattached.by_title :database=>@db # if the previous specs were not run, the model_design_doc will be blank
Unattached.all_design_doc_versions(@db)["rows"].length.should == 1
Unattached.view_by :questions Unattached.view_by :questions
Unattached.by_questions :database=>@db Unattached.by_questions(:database => @db)
Unattached.all_design_doc_versions(@db)["rows"].length.should == 2 original_revision = Unattached.model_design_doc(@db)['_rev']
Unattached.cleanup_design_docs!(@db) Unattached.cleanup_design_docs!(@db)
Unattached.all_design_doc_versions(@db)["rows"].length.should == 1 Unattached.model_design_doc(@db)['_rev'].should_not == original_revision
end end
end end
@ -246,12 +245,10 @@ describe "ExtendedDocument views" do
end end
it "should clean up design docs left around on specific database" do it "should clean up design docs left around on specific database" do
@us.by_title @us.by_title
@us.all_design_doc_versions["rows"].length.should == 1 original_id = @us.model_design_doc['_rev']
Unattached.view_by :professor Unattached.view_by :professor
@us.by_professor @us.by_professor
@us.all_design_doc_versions["rows"].length.should == 2 @us.model_design_doc['_rev'].should_not == original_id
@us.cleanup_design_docs!
@us.all_design_doc_versions["rows"].length.should == 1
end end
end end
@ -321,6 +318,7 @@ describe "ExtendedDocument views" do
before(:each) do before(:each) do
reset_test_db! reset_test_db!
Article.by_date Article.by_date
@original_doc_rev = Article.model_design_doc['_rev']
@design_docs = Article.database.documents :startkey => "_design/", :endkey => "_design/\u9999" @design_docs = Article.database.documents :startkey => "_design/", :endkey => "_design/\u9999"
end end
it "should not create a design doc on view definition" do it "should not create a design doc on view definition" do
@ -332,24 +330,9 @@ describe "ExtendedDocument views" do
ddocs = Article.all_design_doc_versions["rows"].length ddocs = Article.all_design_doc_versions["rows"].length
Article.view_by :updated_at Article.view_by :updated_at
Article.by_updated_at Article.by_updated_at
Article.all_design_doc_versions["rows"].length.should == ddocs + 1 @original_doc_rev.should_not == Article.model_design_doc['_rev']
Article.design_doc["views"].keys.should include("by_updated_at") Article.design_doc["views"].keys.should include("by_updated_at")
end end
end end
describe "with a lot of designs left around" do
before(:each) do
reset_test_db!
Article.by_date
Article.view_by :field
Article.by_field
end
it "should clean them up" do
Article.view_by :stream
Article.by_stream
Article.all_design_doc_versions["rows"].length.should > 1
Article.cleanup_design_docs!
Article.all_design_doc_versions["rows"].length.should == 1
end
end
end end