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:
parent
406eaebfc9
commit
b89d327a61
4 changed files with 37 additions and 43 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue