diff options
author | Joshua Peek <josh@joshpeek.com> | 2012-10-12 17:07:17 -0500 |
---|---|---|
committer | Joshua Peek <josh@joshpeek.com> | 2012-10-12 17:07:17 -0500 |
commit | c3cff4d4219c556a5bfe4cbd72b96723b1633122 (patch) | |
tree | c7d06552789267c7d8014129f103644c51364de8 /actionpack | |
parent | 1e2b0ce95e48463361111ceae6eed7d4ad5462f0 (diff) | |
download | rails-c3cff4d4219c556a5bfe4cbd72b96723b1633122.tar.gz rails-c3cff4d4219c556a5bfe4cbd72b96723b1633122.tar.bz2 rails-c3cff4d4219c556a5bfe4cbd72b96723b1633122.zip |
Ensure AssetUrlHelper can be mixed into AC::Base
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/lib/action_view/helpers/asset_url_helper.rb | 19 | ||||
-rw-r--r-- | actionpack/test/template/asset_tag_helper_test.rb | 33 |
2 files changed, 46 insertions, 6 deletions
diff --git a/actionpack/lib/action_view/helpers/asset_url_helper.rb b/actionpack/lib/action_view/helpers/asset_url_helper.rb index 8cbcdfe99e..f2213efbb9 100644 --- a/actionpack/lib/action_view/helpers/asset_url_helper.rb +++ b/actionpack/lib/action_view/helpers/asset_url_helper.rb @@ -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 diff --git a/actionpack/test/template/asset_tag_helper_test.rb b/actionpack/test/template/asset_tag_helper_test.rb index 2059501fcc..08c927a4ab 100644 --- a/actionpack/test/template/asset_tag_helper_test.rb +++ b/actionpack/test/template/asset_tag_helper_test.rb @@ -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 |