From 761f8bbb51380b7ca1ef0944b5ff0d8d0c0e6d08 Mon Sep 17 00:00:00 2001 From: Jacques Distler Date: Thu, 22 Oct 2009 17:57:13 -0500 Subject: [PATCH] Links From Published Webs Damn, but it's hard to get this right. I think I've finally done it, though. We'll see ... --- lib/url_generator.rb | 27 +++++++-------- test/fixtures/revisions.yml | 4 +-- test/functional/wiki_controller_test.rb | 46 +++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 16 deletions(-) diff --git a/lib/url_generator.rb b/lib/url_generator.rb index ba3fab57..125892dd 100644 --- a/lib/url_generator.rb +++ b/lib/url_generator.rb @@ -98,19 +98,13 @@ class UrlGenerator < AbstractUrlGenerator end when :publish if known_page - href = @controller.url_for :controller => 'wiki', :web => web_address, :action => 'published', - :id => name, :only_path => true - %{#{text}} + wikilink_for(mode, name, text, web_address) else %{#{text}} end when :show if known_page - web = Web.find_by_address(web_address) - action = web.published? && web != @web ? 'published' : 'show' - href = @controller.url_for :controller => 'wiki', :web => web_address, :action => action, - :id => name, :only_path => true - %{#{text}} + wikilink_for(mode, name, text, web_address) else href = @controller.url_for :controller => 'wiki', :web => web_address, :action => 'new', :id => name, :only_path => true @@ -118,11 +112,7 @@ class UrlGenerator < AbstractUrlGenerator end else if known_page - web = Web.find_by_address(web_address) - action = web.published? ? 'published' : 'show' - href = @controller.url_for :controller => 'wiki', :web => web_address, :action => action, - :id => name, :only_path => true - %{#{text}} + wikilink_for(mode, name, text, web_address) else href = @controller.url_for :controller => 'wiki', :web => web_address, :action => 'new', :id => name, :only_path => true @@ -190,5 +180,14 @@ class UrlGenerator < AbstractUrlGenerator %{[[#{name}:delete]]} end end - + + private + + def wikilink_for(mode, name, text, web_address) + web = Web.find_by_address(web_address) + action = web.published? && !(web == @web && mode != :publish) ? 'published' : 'show' + href = @controller.url_for :controller => 'wiki', :web => web_address, :action => action, + :id => name, :only_path => true + %{#{text}} + end end diff --git a/test/fixtures/revisions.yml b/test/fixtures/revisions.yml index 7adb6fd5..56a8535f 100644 --- a/test/fixtures/revisions.yml +++ b/test/fixtures/revisions.yml @@ -88,6 +88,6 @@ liquor_first_revision: updated_at: <%= 40.minutes.ago.to_formatted_s(:db) %> revised_at: <%= 40.minutes.ago.to_formatted_s(:db) %> page_id: 9 - content: "[[!redirects booze]]\n Drinky-poo." + content: "[[!redirects booze]]\n Drinky-poo. [[Instiki:HomePage|go there]]" author: Guest - ip: 127.0.0.2 + ip: 127.0.0.2 \ No newline at end of file diff --git a/test/functional/wiki_controller_test.rb b/test/functional/wiki_controller_test.rb index 691a4d75..0a1fe23b 100755 --- a/test/functional/wiki_controller_test.rb +++ b/test/functional/wiki_controller_test.rb @@ -329,6 +329,52 @@ class WikiControllerTest < ActionController::TestCase assert_response(:success) assert_equal @home, r.template_objects['page'] assert_match /That Way<\/a>/, r.body + + r = process 'save', 'web' => 'instiki', 'id' => 'HomePage', 'content' => 'Contents of a new page', + 'author' => 'AuthorOfNewPage' + assert_equal Web.find_by_address('instiki').has_page?('HomePage'), true + + r = process('published', 'web' => 'wiki1', 'id' => 'liquor') + + assert_response(:success) + assert_equal @liquor, r.template_objects['page'] + assert_match /go there<\/a>/, r.body + + r = process('show', 'web' => 'wiki1', 'id' => 'liquor') + + assert_response(:success) + assert_equal @liquor, r.template_objects['page'] + assert_match /go there<\/a>/, r.body + + Web.find_by_address('instiki').update_attribute(:published, true) + + r = process('published', 'web' => 'wiki1', 'id' => 'liquor') + + assert_response(:success) + assert_equal @liquor, r.template_objects['page'] + assert_match /go there<\/a>/, r.body + + r = process('show', 'web' => 'wiki1', 'id' => 'liquor') + + assert_response(:success) + assert_equal @liquor, r.template_objects['page'] + assert_match /go there<\/a>/, r.body + + set_web_property :published, false + + r = process('show', 'web' => 'wiki1', 'id' => 'liquor') + + assert_response(:success) + assert_equal @liquor, r.template_objects['page'] + assert_match /go there<\/a>/, r.body + + Web.find_by_address('instiki').update_attribute(:published, false) + + r = process('show', 'web' => 'wiki1', 'id' => 'liquor') + + assert_response(:success) + assert_equal @liquor, r.template_objects['page'] + assert_match /go there<\/a>/, r.body end