Expire Caches for Redirected Links

[[!redirect foo]] should expire all pages which reference "foo".
Sounds simple, but this was a really gnarly bug to fix.
This commit is contained in:
Jacques Distler 2009-06-05 00:39:12 -05:00
parent ea6b04271b
commit 0943b7e510
5 changed files with 15 additions and 18 deletions

View file

@ -71,10 +71,6 @@ class Page < ActiveRecord::Base
def linked_from
web.select.pages_that_link_to(name)
end
def redirects_for
wiki_references.select { |ref| ref.redirected_page?}.map { |ref| ref.referenced_name }
end
def included_from
web.select.pages_that_include(name)

View file

@ -54,14 +54,9 @@ class WikiReference < ActiveRecord::Base
def self.pages_redirected_to(web, page_name)
names = []
if web.has_page?(page_name)
page = web.page(page_name)
redirected_names = page.redirects_for
redirected_names.each do |name|
names = names | self.pages_that_reference(web, name)
end
end
names
page = web.page(page_name)
Thread.current[:page_redirects][page.name].each { |name| names = names + self.pages_that_reference(web, name) }
names.uniq
end
def self.page_that_redirects_for(web, page_name)
@ -70,8 +65,8 @@ class WikiReference < ActiveRecord::Base
'WHERE wiki_references.referenced_name = ? ' +
"AND wiki_references.link_type = '#{REDIRECTED_PAGE}' " +
"AND pages.web_id = '#{web.id}'"
names = connection.select_all(sanitize_sql([query, page_name])).map { |row| row['name'] }
names[0]
row = connection.select_one(sanitize_sql([query, page_name]))
row['name'] if row
end
def self.pages_in_category(web, category)