From c240f2d48a3677954c4bcb57c36587833cbda2c0 Mon Sep 17 00:00:00 2001
From: Jeremy Kemper <jeremy@bitsweat.net>
Date: Mon, 29 Oct 2007 04:01:58 +0000
Subject: compute_public_path behaves well with mailers also. Closes #10014.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8052 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
---
 .../lib/action_view/helpers/asset_tag_helper.rb    | 22 ++++++++++++++++------
 1 file changed, 16 insertions(+), 6 deletions(-)

diff --git a/actionpack/lib/action_view/helpers/asset_tag_helper.rb b/actionpack/lib/action_view/helpers/asset_tag_helper.rb
index c38462ba9f..f0229980b0 100644
--- a/actionpack/lib/action_view/helpers/asset_tag_helper.rb
+++ b/actionpack/lib/action_view/helpers/asset_tag_helper.rb
@@ -387,10 +387,18 @@ module ActionView
         # a single or wildcarded asset host, if configured, with the correct
         # request protocol.
         def compute_public_path(source, dir, ext = nil, include_host = true)
-          cache_key = [ @controller.request.protocol,
-                        ActionController::Base.asset_host,
-                        @controller.request.relative_url_root,
-                        dir, source, ext, include_host ].join
+          has_request = @controller.respond_to?(:request)
+
+          cache_key =
+            if has_request
+              [ @controller.request.protocol,
+                ActionController::Base.asset_host,
+                @controller.request.relative_url_root,
+                dir, source, ext, include_host ].join
+            else
+              [ ActionController::Base.asset_host,
+                dir, source, ext, include_host ].join
+            end
 
           ActionView::Base.computed_public_paths[cache_key] ||=
             begin
@@ -400,13 +408,15 @@ module ActionView
                 source
               else
                 source = "/#{dir}/#{source}" unless source[0] == ?/
-                source = "#{@controller.request.relative_url_root}#{source}"
+                if has_request
+                  source = "#{@controller.request.relative_url_root}#{source}"
+                end
                 rewrite_asset_path!(source)
 
                 if include_host
                   host = compute_asset_host(source)
 
-                  unless host.blank? or host =~ %r{^[-a-z]+://}
+                  if has_request && !host.blank? && host !~ %r{^[-a-z]+://}
                     host = "#{@controller.request.protocol}#{host}"
                   end
 
-- 
cgit v1.2.3