aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/lib/action_view/helpers/asset_tag_helper.rb13
-rw-r--r--actionpack/test/template/asset_tag_helper_test.rb11
2 files changed, 21 insertions, 3 deletions
diff --git a/actionpack/lib/action_view/helpers/asset_tag_helper.rb b/actionpack/lib/action_view/helpers/asset_tag_helper.rb
index 8d62f07b8c..850615632f 100644
--- a/actionpack/lib/action_view/helpers/asset_tag_helper.rb
+++ b/actionpack/lib/action_view/helpers/asset_tag_helper.rb
@@ -10,7 +10,7 @@ module ActionView
# in your environment.rb. These methods do not verify the assets exist before
# linking to them.
#
- # ActionController::Base.asset_host = "http://assets.example.com"
+ # ActionController::Base.asset_host = "assets.example.com"
# image_tag("rails.png")
# => <img src="http://assets.example.com/images/rails.png" alt="Rails" />
# stylesheet_include_tag("application")
@@ -212,7 +212,8 @@ module ActionView
# Add the .ext if not present. Return full URLs otherwise untouched.
# Prefix with /dir/ if lacking a leading /. Account for relative URL
# roots. Rewrite the asset path for cache-busting asset ids. Include
- # a single or wildcarded asset host if configured.
+ # a single or wildcarded asset host, if configured, with the correct
+ # request protocol.
def compute_public_path(source, dir, ext)
source += ".#{ext}" if File.extname(source).blank?
if source =~ %r{^[-a-z]+://}
@@ -221,7 +222,13 @@ module ActionView
source = "/#{dir}/#{source}" unless source[0] == ?/
source = "#{@controller.request.relative_url_root}#{source}"
rewrite_asset_path!(source)
- "#{compute_asset_host(source)}#{source}"
+
+ host = compute_asset_host(source)
+ unless host.blank? or host =~ %r{^[-a-z]+://}
+ host = "#{@controller.request.protocol}#{host}"
+ end
+
+ "#{host}#{source}"
end
end
diff --git a/actionpack/test/template/asset_tag_helper_test.rb b/actionpack/test/template/asset_tag_helper_test.rb
index 5393e30724..33705b8e7c 100644
--- a/actionpack/test/template/asset_tag_helper_test.rb
+++ b/actionpack/test/template/asset_tag_helper_test.rb
@@ -189,6 +189,10 @@ class AssetTagHelperNonVhostTest < Test::Unit::TestCase
def relative_url_root
"/collaboration/hieraki"
end
+
+ def protocol
+ 'gopher://'
+ end
end.new
@controller.request = @request
@@ -230,4 +234,11 @@ class AssetTagHelperNonVhostTest < Test::Unit::TestCase
ensure
ActionController::Base.asset_host = nil
end
+
+ def test_asset_host_without_protocol_should_use_request_protocol
+ ActionController::Base.asset_host = 'a.example.com'
+ assert_equal 'gopher://a.example.com/collaboration/hieraki/images/xml.png', image_path('xml.png')
+ ensure
+ ActionController::Base.asset_host = nil
+ end
end