mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
Added the option to declare an asset_host as an object that responds to call (see http://github.com/dhh/asset-hosting-with-minimum-ssl for an example) [DHH]
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
*2.3.0 [Edge]*
|
||||
|
||||
* Added the option to declare an asset_host as an object that responds to call (see http://github.com/dhh/asset-hosting-with-minimum-ssl for an example) [DHH]
|
||||
|
||||
* Added support for multiple routes.rb files (useful for plugin engines). This also means that draw will no longer clear the route set, you have to do that by hand (shouldn't make a difference to you unless you're doing some funky stuff) [DHH]
|
||||
|
||||
* Dropped formatted_* routes in favor of just passing in :format as an option. This cuts resource routes generation in half #1359 [aaronbatalion]
|
||||
|
||||
@@ -80,6 +80,12 @@ module ActionView
|
||||
# end
|
||||
# }
|
||||
#
|
||||
# You can also implement a custom asset host object that responds to the call method and tasks one or two parameters just like the proc.
|
||||
#
|
||||
# config.action_controller.asset_host = AssetHostingWithMinimumSsl.new(
|
||||
# "http://asset%d.example.com", "https://asset1.example.com"
|
||||
# )
|
||||
#
|
||||
# === Using asset timestamps
|
||||
#
|
||||
# By default, Rails will append all asset paths with that asset's timestamp. This allows you to set a cache-expiration date for the
|
||||
@@ -359,6 +365,7 @@ module ActionView
|
||||
# compressed by gzip (leading to faster transfers). Caching will only happen if ActionController::Base.perform_caching
|
||||
# is set to true (which is the case by default for the Rails production environment, but not for the development
|
||||
# environment). Examples:
|
||||
|
||||
#
|
||||
# ==== Examples
|
||||
# stylesheet_link_tag :all, :cache => true # when ActionController::Base.perform_caching is false =>
|
||||
@@ -629,11 +636,12 @@ module ActionView
|
||||
# Pick an asset host for this source. Returns +nil+ if no host is set,
|
||||
# the host if no wildcard is set, the host interpolated with the
|
||||
# numbers 0-3 if it contains <tt>%d</tt> (the number is the source hash mod 4),
|
||||
# or the value returned from invoking the proc if it's a proc.
|
||||
# or the value returned from invoking the proc if it's a proc or the value from
|
||||
# invoking call if it's an object responding to call.
|
||||
def compute_asset_host(source)
|
||||
if host = ActionController::Base.asset_host
|
||||
if host.is_a?(Proc)
|
||||
case host.arity
|
||||
if host.is_a?(Proc) || host.respond_to?(:call)
|
||||
case host.is_a?(Proc) ? host.arity : host.method(:call).arity
|
||||
when 2
|
||||
host.call(source, request)
|
||||
else
|
||||
|
||||
@@ -359,6 +359,46 @@ class AssetTagHelperTest < ActionView::TestCase
|
||||
FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'secure.js'))
|
||||
end
|
||||
|
||||
def test_caching_javascript_include_tag_when_caching_on_with_2_argument_object_asset_host
|
||||
ENV['RAILS_ASSET_ID'] = ''
|
||||
ActionController::Base.asset_host = Class.new do
|
||||
def call(source, request)
|
||||
if request.ssl?
|
||||
"#{request.protocol}#{request.host_with_port}"
|
||||
else
|
||||
"#{request.protocol}assets#{source.length}.example.com"
|
||||
end
|
||||
end
|
||||
end.new
|
||||
|
||||
ActionController::Base.perform_caching = true
|
||||
|
||||
assert_equal '/javascripts/vanilla.js'.length, 23
|
||||
assert_dom_equal(
|
||||
%(<script src="http://assets23.example.com/javascripts/vanilla.js" type="text/javascript"></script>),
|
||||
javascript_include_tag(:all, :cache => 'vanilla')
|
||||
)
|
||||
|
||||
assert File.exist?(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'vanilla.js'))
|
||||
|
||||
class << @controller.request
|
||||
def protocol() 'https://' end
|
||||
def ssl?() true end
|
||||
end
|
||||
|
||||
assert_equal '/javascripts/secure.js'.length, 22
|
||||
assert_dom_equal(
|
||||
%(<script src="https://localhost/javascripts/secure.js" type="text/javascript"></script>),
|
||||
javascript_include_tag(:all, :cache => 'secure')
|
||||
)
|
||||
|
||||
assert File.exist?(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'secure.js'))
|
||||
|
||||
ensure
|
||||
FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'vanilla.js'))
|
||||
FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'secure.js'))
|
||||
end
|
||||
|
||||
def test_caching_javascript_include_tag_when_caching_on_and_using_subdirectory
|
||||
ENV["RAILS_ASSET_ID"] = ""
|
||||
ActionController::Base.asset_host = 'http://a%d.example.com'
|
||||
|
||||
Reference in New Issue
Block a user