trying to refine design doc change detection
This commit is contained in:
parent
d0f8b0be68
commit
19cd7ae41e
|
@ -98,7 +98,7 @@ module CouchRest
|
|||
if saved
|
||||
changes = force
|
||||
design_doc['views'].each do |name, view|
|
||||
if saved['views'][name] != view
|
||||
if !compare_views(saved['views'][name], view)
|
||||
changes = true
|
||||
saved['views'][name] = view
|
||||
end
|
||||
|
@ -114,6 +114,12 @@ module CouchRest
|
|||
end
|
||||
end
|
||||
|
||||
# Return true if the two views match
|
||||
def compare_views(orig, repl)
|
||||
return false if orig.nil? or repl.nil?
|
||||
(orig['map'].to_s.strip == repl['map'].to_s.strip) && (orig['reduce'].to_s.strip == repl['reduce'].to_s.strip)
|
||||
end
|
||||
|
||||
end # module ClassMethods
|
||||
|
||||
end
|
||||
|
|
|
@ -33,6 +33,27 @@ describe "ExtendedDocument views" do
|
|||
doc = Article.database.get Article.design_doc.id
|
||||
doc['views']['by_date'].should_not be_nil
|
||||
end
|
||||
it "should save design doc if a view changed" do
|
||||
Article.by_date
|
||||
orig = Article.stored_design_doc
|
||||
orig['views']['by_date']['map'] = "function() { }"
|
||||
Article.database.save_doc(orig)
|
||||
rev = Article.stored_design_doc['_rev']
|
||||
Article.req_design_doc_refresh # prepare for re-load
|
||||
Article.by_date
|
||||
orig = Article.stored_design_doc
|
||||
orig['views']['by_date']['map'].should eql(Article.design_doc['views']['by_date']['map'])
|
||||
orig['_rev'].should_not eql(rev)
|
||||
end
|
||||
it "should not save design doc if not changed" do
|
||||
Article.by_date
|
||||
orig = Article.stored_design_doc['_rev']
|
||||
Article.req_design_doc_refresh
|
||||
Article.by_date
|
||||
Article.stored_design_doc['_rev'].should eql(orig)
|
||||
end
|
||||
|
||||
|
||||
it "should return the matching raw view result" do
|
||||
view = Article.by_date :raw => true
|
||||
view['rows'].length.should == 4
|
||||
|
|
Loading…
Reference in a new issue