mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #15021 from hubertlepicki/allow_custom_host_in_asset_url
Allow custom asset host to be passed in asset_url
This commit is contained in:
commit
3acf28773b
4 changed files with 38 additions and 3 deletions
|
@ -1,3 +1,8 @@
|
|||
* Allow custom `:host` option to be passed to `asset_url` helper that
|
||||
overwrites `config.action_controller.asset_host` for particular asset.
|
||||
|
||||
*Hubert Łępicki*
|
||||
|
||||
* Deprecate `AbstractController::Base.parent_prefixes`.
|
||||
Override `AbstractController::Base.local_prefixes` when you want to change
|
||||
where to find views.
|
||||
|
@ -95,5 +100,4 @@
|
|||
|
||||
*Piotr Chmolowski, Łukasz Strzałkowski*
|
||||
|
||||
|
||||
Please check [4-1-stable](https://github.com/rails/rails/blob/4-1-stable/actionview/CHANGELOG.md) for previous changes.
|
||||
|
|
|
@ -147,7 +147,14 @@ module ActionView
|
|||
|
||||
# Computes the full URL to an asset in the public directory. This
|
||||
# will use +asset_path+ internally, so most of their behaviors
|
||||
# will be the same.
|
||||
# will be the same. If :host options is set, it overwrites global
|
||||
# +config.action_controller.asset_host+ setting.
|
||||
#
|
||||
# All other options provided are forwarded to +asset_path+ call.
|
||||
#
|
||||
# asset_url "application.js" # => http://example.com/application.js
|
||||
# asset_url "application.js", host: "http://cdn.example.com" # => http://cdn.example.com/javascripts/application.js
|
||||
#
|
||||
def asset_url(source, options = {})
|
||||
path_to_asset(source, options.merge(:protocol => :request))
|
||||
end
|
||||
|
@ -191,7 +198,8 @@ module ActionView
|
|||
# (proc or otherwise).
|
||||
def compute_asset_host(source = "", options = {})
|
||||
request = self.request if respond_to?(:request)
|
||||
host = config.asset_host if defined? config.asset_host
|
||||
host = options[:host]
|
||||
host ||= config.asset_host if defined? config.asset_host
|
||||
host ||= request.base_url if request && options[:protocol] == :request
|
||||
|
||||
if host.respond_to?(:call)
|
||||
|
|
|
@ -596,6 +596,10 @@ class AssetTagHelperNonVhostTest < ActionView::TestCase
|
|||
assert_equal "gopher://www.example.com", compute_asset_host("foo", :protocol => :request)
|
||||
end
|
||||
|
||||
def test_should_return_custom_host_if_passed_in_options
|
||||
assert_equal "http://custom.example.com", compute_asset_host("foo", :host => "http://custom.example.com")
|
||||
end
|
||||
|
||||
def test_should_ignore_relative_root_path_on_complete_url
|
||||
assert_dom_equal(%(http://www.example.com/images/xml.png), image_path("http://www.example.com/images/xml.png"))
|
||||
end
|
||||
|
@ -759,4 +763,15 @@ class AssetUrlHelperEmptyModuleTest < ActionView::TestCase
|
|||
assert @module.config.asset_host
|
||||
assert_equal "http://www.example.com/foo", @module.asset_url("foo")
|
||||
end
|
||||
|
||||
def test_asset_url_with_custom_asset_host
|
||||
@module.instance_eval do
|
||||
def config
|
||||
Struct.new(:asset_host).new("http://www.example.com")
|
||||
end
|
||||
end
|
||||
|
||||
assert @module.config.asset_host
|
||||
assert_equal "http://custom.example.com/foo", @module.asset_url("foo", :host => "http://custom.example.com")
|
||||
end
|
||||
end
|
||||
|
|
|
@ -913,6 +913,14 @@ that it plays nicely with the pipeline. You may find quirks related to your
|
|||
specific set up, you may not. The defaults nginx uses, for example, should give
|
||||
you no problems when used as an HTTP cache.
|
||||
|
||||
If you want to serve only some assets from your CDN, you can use custom
|
||||
`:host` option of `asset_url` helper, which overwrites value set in
|
||||
`config.action_controller.asset_host`.
|
||||
|
||||
```ruby
|
||||
asset_url 'image.png', :host => 'http://cdn.example.com'
|
||||
```
|
||||
|
||||
Customizing the Pipeline
|
||||
------------------------
|
||||
|
||||
|
|
Loading…
Reference in a new issue