Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Using the sum of bytes instead the hash of the path when replacing th…

…e wildcard of the assets path because in ruby 1.9 is not consistent
  • Loading branch information...
commit f6a6b51ae551b7f936e974cba3ad4b30422d6804 1 parent 298a083
@acroca acroca authored
View
3  actionpack/lib/action_view/asset_paths.rb
@@ -111,7 +111,8 @@ def compute_asset_host(source)
args << current_request if (arity > 1 || arity < 0) && has_request?
host.call(*args)
else
- (host =~ /%d/) ? host % (source.hash % 4) : host
+ source_num = source.bytes.sum
@fxn Owner
fxn added a note

Just wondering, is the sum better than just taking source.bytes % 4? I think source.bytes will generally be evenly distributed mod 4, a priori I see no bias in the number of bytes of an asset.

@fxn Owner
fxn added a note

Well, the last char may have a bias, it will generally be "s", (css, js), g (png, jpg)... nah, forget the comment.

@tenderlove Owner

Is this hash supposed to be unique?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
+ (host =~ /%d/) ? host % (source_num % 4) : host
end
end
end
View
5 actionpack/test/template/asset_tag_helper_test.rb
@@ -689,9 +689,9 @@ def test_caching_javascript_include_tag_when_caching_on_and_using_subdirectory
@controller.config.asset_host = 'http://a%d.example.com'
config.perform_caching = true
- hash = '/javascripts/cache/money.js'.hash % 4
+ number = '/javascripts/cache/money.js'.bytes.sum % 4
assert_dom_equal(
- %(<script src="http://a#{hash}.example.com/javascripts/cache/money.js" type="text/javascript"></script>),
+ %(<script src="http://a#{number}.example.com/javascripts/cache/money.js" type="text/javascript"></script>),
javascript_include_tag(:all, :cache => "cache/money")
)
@@ -1129,6 +1129,7 @@ def test_should_ignore_asset_host_on_scheme_relative_url
end
def test_should_wildcard_asset_host_between_zero_and_four
+ String.any_instance.expects(:hash).times(0)
@tenderlove Owner

This is not a good assertion. Are we not allowed to use strings as hash keys in our implementation?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@controller.config.asset_host = 'http://a%d.example.com'
assert_match(%r(http://a[0123].example.com/collaboration/hieraki/images/xml.png), image_path('xml.png'))
end
Please sign in to comment.
Something went wrong with that request. Please try again.