提交 c3cff4d4 编写于 作者: J Joshua Peek

Ensure AssetUrlHelper can be mixed into AC::Base

上级 1e2b0ce9
......@@ -135,8 +135,7 @@ def asset_path(source, options = {})
source = compute_asset_path(source, options)
end
current_request = controller.request if controller.respond_to?(:request)
if relative_url_root = config.relative_url_root || current_request.try(:script_name)
if relative_url_root = config.relative_url_root || asset_request.try(:script_name)
source = "#{relative_url_root}#{source}" unless source.starts_with?("#{relative_url_root}/")
end
......@@ -180,10 +179,7 @@ def compute_asset_path(source, options = {})
# or the value returned from invoking call on an object responding to call
# (proc or otherwise).
def compute_asset_host(source = "", options = {})
if controller.respond_to?(:request)
request = controller.request
end
request = asset_request
host = config.asset_host
host ||= request.base_url if request && options[:protocol] == :request
return unless host
......@@ -342,6 +338,17 @@ def font_url(source)
url_to_asset(source, type: :font)
end
alias_method :url_to_font, :font_url # aliased to avoid conflicts with an font_url named route
private
# Get current request if self is a controller. If self is a
# view, check the parent controller's request.
def asset_request
if respond_to?(:request)
request
elsif respond_to?(:controller) && controller.respond_to?(:request)
controller.request
end
end
end
end
end
......@@ -13,6 +13,8 @@ def config
class AssetTagHelperTest < ActionView::TestCase
tests ActionView::Helpers::AssetTagHelper
attr_reader :request
def setup
super
silence_warnings do
......@@ -598,6 +600,8 @@ def test_caching_image_path_with_caching_and_proc_asset_host_using_request
class AssetTagHelperNonVhostTest < ActionView::TestCase
tests ActionView::Helpers::AssetTagHelper
attr_reader :request
def setup
super
@controller = BasicController.new
......@@ -720,3 +724,32 @@ def test_assert_css_and_js_of_the_same_name_return_correct_extension
assert_dom_equal(%(/collaboration/hieraki/stylesheets/foo.css), stylesheet_path("foo"))
end
end
class AssetUrlHelperControllerTest < ActionView::TestCase
tests ActionView::Helpers::AssetUrlHelper
def setup
super
@controller = BasicController.new
@controller.extend ActionView::Helpers::AssetUrlHelper
@request = Class.new do
attr_accessor :script_name
def protocol() 'http://' end
def ssl?() false end
def host_with_port() 'www.example.com' end
def base_url() 'http://www.example.com' end
end.new
@controller.request = @request
end
def test_asset_path
assert_equal "/foo", @controller.asset_path("foo")
end
def test_asset_url
assert_equal "http://www.example.com/foo", @controller.asset_url("foo")
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册