1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Ensure AssetUrlHelper can be mixed into AC::Base

This commit is contained in:
Joshua Peek 2012-10-12 17:07:17 -05:00
parent 1e2b0ce95e
commit c3cff4d421
2 changed files with 46 additions and 6 deletions

View file

@ -135,8 +135,7 @@ module ActionView
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 @@ module ActionView
# 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 @@ module ActionView
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

View file

@ -13,6 +13,8 @@ end
class AssetTagHelperTest < ActionView::TestCase
tests ActionView::Helpers::AssetTagHelper
attr_reader :request
def setup
super
silence_warnings do
@ -598,6 +600,8 @@ end
class AssetTagHelperNonVhostTest < ActionView::TestCase
tests ActionView::Helpers::AssetTagHelper
attr_reader :request
def setup
super
@controller = BasicController.new
@ -720,3 +724,32 @@ class AssetTagHelperNonVhostTest < ActionView::TestCase
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