Skip to content

Commit

Permalink
Adapt CSS Rewriter to properly parse Image URLs with cachebusters or …
Browse files Browse the repository at this point in the history
…other query params. Strip them during re-write. Adapt UploadTest to dynamically calc MD5 of JS/CSS stubs so they don't break if you add new content.
  • Loading branch information
Winfield Peterson authored and Menno van der Sman committed Oct 2, 2010
1 parent 2ce8e3e commit 7c13bab
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 7 deletions.
2 changes: 1 addition & 1 deletion lib/cloudfront_asset_host/css_rewriter.rb
Expand Up @@ -9,7 +9,7 @@ module CssRewriter

class << self
# matches optional quoted url(<path>)
ReplaceRexeg = /url\(["']?([^\)"']+)["']?\)/i
ReplaceRexeg = /url\(["']?([^\)\?"']+)(\?[^"']*)?["']?\)/i

# Returns the path to the temporary file that contains the
# rewritten stylesheet
Expand Down
4 changes: 3 additions & 1 deletion test/app/public/stylesheets/style.css
@@ -1,4 +1,6 @@
body { background-image: url(../images/image.png); }
body { background-image: url(/images/image.png); }
body { background-image: url('/images/image.png'); }
body { background-image: url("/images/image.png"); }
body { background-image: url("/images/image.png"); }
body { background-image: url("/images/image.png?98732857"); }
body { background-image: url("/images/image.png?fo0=bar"); }
13 changes: 8 additions & 5 deletions test/uploader_test.rb
Expand Up @@ -4,6 +4,9 @@ class UploaderTest < Test::Unit::TestCase

context "A configured uploader" do
setup do
@css_md5 = CloudfrontAssetHost.send(:md5sum, 'test/app/public/stylesheets/style.css')[0..8] #7026e6ce3
@js_md5 = CloudfrontAssetHost.send(:md5sum, 'test/app/public/javascripts/application.js')[0..8] #8ed41cb87

CloudfrontAssetHost.configure do |config|
config.cname = "assethost.com"
config.bucket = "bucketname"
Expand Down Expand Up @@ -31,14 +34,14 @@ class UploaderTest < Test::Unit::TestCase
should "calculate keys for paths" do
keys_with_paths = CloudfrontAssetHost::Uploader.keys_with_paths
assert_equal 3, keys_with_paths.length
assert_match %r{/test/app/public/javascripts/application\.js$}, keys_with_paths["8ed41cb87/javascripts/application.js"]
assert_match %r{/test/app/public/javascripts/application\.js$}, keys_with_paths["#{@js_md5}/javascripts/application.js"]
end

should "calculate gzip keys for paths" do
gz_keys_with_paths = CloudfrontAssetHost::Uploader.gzip_keys_with_paths
assert_equal 2, gz_keys_with_paths.length
assert_match %r{/test/app/public/javascripts/application\.js$}, gz_keys_with_paths["gz/8ed41cb87/javascripts/application.js"]
assert_match %r{/test/app/public/stylesheets/style\.css$}, gz_keys_with_paths["gz/bd258f13d/stylesheets/style.css"]
assert_match %r{/test/app/public/javascripts/application\.js$}, gz_keys_with_paths["gz/#{@js_md5}/javascripts/application.js"]
assert_match %r{/test/app/public/stylesheets/style\.css$}, gz_keys_with_paths["gz/#{@css_md5}/stylesheets/style.css"]
end

should "return a mimetype for an extension" do
Expand Down Expand Up @@ -81,9 +84,9 @@ class UploaderTest < Test::Unit::TestCase
should "not re-upload existing keys" do
CloudfrontAssetHost::Uploader.expects(:bucket).never
CloudfrontAssetHost::Uploader.stubs(:existing_keys).returns(
["gz/8ed41cb87/javascripts/application.js", "8ed41cb87/javascripts/application.js",
["gz/#{@js_md5}/javascripts/application.js", "#{@js_md5}/javascripts/application.js",
"d41d8cd98/images/image.png",
"bd258f13d/stylesheets/style.css", "gz/bd258f13d/stylesheets/style.css"]
"#{@css_md5}/stylesheets/style.css", "gz/#{@css_md5}/stylesheets/style.css"]
)

CloudfrontAssetHost::Uploader.upload!
Expand Down

0 comments on commit 7c13bab

Please sign in to comment.