]> source.dussan.org Git - redmine.git/commitdiff
Add named routes for attachments and use route helpers in #link_to_attachment.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 14 Jan 2013 20:44:48 +0000 (20:44 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 14 Jan 2013 20:44:48 +0000 (20:44 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@11187 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/helpers/application_helper.rb
config/routes.rb
test/unit/helpers/application_helper_test.rb

index 4825615a11a63006eaa0cdfe9db7d9811c620bc4..2a06ad926ef2ca74e1e0cb6a7cd7ebb3de787dbe 100644 (file)
@@ -91,14 +91,10 @@ module ApplicationHelper
   # * :download - Force download (default: false)
   def link_to_attachment(attachment, options={})
     text = options.delete(:text) || attachment.filename
-    action = options.delete(:download) ? 'download' : 'show'
-    opt_only_path = {}
-    opt_only_path[:only_path] = (options[:only_path] == false ? false : true)
-    options.delete(:only_path)
-    link_to(h(text),
-           {:controller => 'attachments', :action => action,
-            :id => attachment, :filename => attachment.filename}.merge(opt_only_path),
-           options)
+    route_method = options.delete(:download) ? :download_named_attachment_path : :named_attachment_path
+    html_options = options.slice!(:only_path)
+    url = send(route_method, attachment, attachment.filename, options)
+    link_to text, url, html_options
   end
 
   # Generates a link to a SCM revision
index 9a93b47806210ed67805e570eb7976bad5d4748b..7a1eb663aefebce365a1082d5b80fb9d518d42fc 100644 (file)
@@ -257,10 +257,10 @@ RedmineApp::Application.routes.draw do
   get 'projects/:id/repository', :to => 'repositories#show', :path => nil
 
   # additional routes for having the file name at the end of url
-  match 'attachments/:id/:filename', :controller => 'attachments', :action => 'show', :id => /\d+/, :filename => /.*/, :via => :get
-  match 'attachments/download/:id/:filename', :controller => 'attachments', :action => 'download', :id => /\d+/, :filename => /.*/, :via => :get
-  match 'attachments/download/:id', :controller => 'attachments', :action => 'download', :id => /\d+/, :via => :get
-  match 'attachments/thumbnail/:id(/:size)', :controller => 'attachments', :action => 'thumbnail', :id => /\d+/, :via => :get, :size => /\d+/
+  get 'attachments/:id/:filename', :to => 'attachments#show', :id => /\d+/, :filename => /.*/, :as => 'named_attachment'
+  get 'attachments/download/:id/:filename', :to => 'attachments#download', :id => /\d+/, :filename => /.*/, :as => 'download_named_attachment'
+  get 'attachments/download/:id', :to => 'attachments#download', :id => /\d+/
+  get 'attachments/thumbnail/:id(/:size)', :to => 'attachments#thumbnail', :id => /\d+/, :size => /\d+/
   resources :attachments, :only => [:show, :destroy]
 
   resources :groups do
index c5b3aaadc600f8ddb48058f6718db736542f6234..506c30cc7be4d73a45962d49fad6e10a56bf0f23 100644 (file)
@@ -1063,6 +1063,20 @@ RAW
     assert_equal ::I18n.t(:label_user_anonymous), t
   end
 
+  def test_link_to_attachment
+    a = Attachment.find(3)
+    assert_equal '<a href="/attachments/3/logo.gif">logo.gif</a>',
+      link_to_attachment(a)
+    assert_equal '<a href="/attachments/3/logo.gif">Text</a>',
+      link_to_attachment(a, :text => 'Text')
+    assert_equal '<a href="/attachments/3/logo.gif" class="foo">logo.gif</a>',
+      link_to_attachment(a, :class => 'foo')
+    assert_equal '<a href="/attachments/download/3/logo.gif">logo.gif</a>',
+      link_to_attachment(a, :download => true)
+    assert_equal '<a href="http://test.host/attachments/3/logo.gif">logo.gif</a>',
+      link_to_attachment(a, :only_path => false)
+  end
+
   def test_link_to_project
     project = Project.find(1)
     assert_equal %(<a href="/projects/ecookbook">eCookbook</a>),