Allow sorting of rewriters. Fixes #1752

This commit is contained in:
Thomas Reynolds 2016-01-14 14:02:33 -08:00
parent d82ac590db
commit ff9c34bca9
5 changed files with 53 additions and 10 deletions

View file

@ -107,7 +107,45 @@ Feature: Assets get file hashes appended to them and references to them are upda
And I should see 'src="images/100px-5fd6fb90.jpg"' And I should see 'src="images/100px-5fd6fb90.jpg"'
And I should see 'srcset="images/100px-5fd6fb90.jpg 1x, images/200px-c11eb203.jpg 2x, images/300px-59adce76.jpg 3x"' And I should see 'srcset="images/100px-5fd6fb90.jpg 1x, images/200px-c11eb203.jpg 2x, images/300px-59adce76.jpg 3x"'
Scenario: Enabling an asset host still produces hashed files and references Scenario: Enabling an asset host still produces hashed files and references (hash first)
Given a fixture app "asset-hash-host-app"
And a file named "config.rb" with:
"""
activate :asset_hash
activate :directory_indexes
activate :asset_host, host: 'http://middlemanapp.com'
"""
Given the Server is running at "asset-hash-host-app"
When I go to "/"
Then I should see 'href="http://middlemanapp.com/stylesheets/site-4b64a653.css"'
Then I should see 'href="http://middlemanapp.com/stylesheets/fragment-a772891f.css"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?test"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg#test"'
When I go to "/subdir/"
Then I should see 'href="http://middlemanapp.com/stylesheets/site-4b64a653.css"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
When I go to "/other/"
Then I should see 'href="http://middlemanapp.com/stylesheets/site-4b64a653.css"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?test"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg#test"'
When I go to "/stylesheets/fragment-a772891f.css"
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg")'
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg?test")'
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test")'
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg#test")'
Scenario: Enabling an asset host still produces hashed files and references (host first)
Given a fixture app "asset-hash-host-app"
And a file named "config.rb" with:
"""
activate :asset_host, host: 'http://middlemanapp.com'
activate :directory_indexes
activate :asset_hash
"""
Given the Server is running at "asset-hash-host-app" Given the Server is running at "asset-hash-host-app"
When I go to "/" When I go to "/"
Then I should see 'href="http://middlemanapp.com/stylesheets/site-4b64a653.css"' Then I should see 'href="http://middlemanapp.com/stylesheets/site-4b64a653.css"'

View file

@ -1,4 +0,0 @@
activate :asset_hash
activate :directory_indexes
activate :asset_host, host: 'http://middlemanapp.com'

View file

@ -3,7 +3,7 @@
<% end %> <% end %>
<h2>Image url:</h2> <h2>Image url:</h2>
<%= image_tag('100px.jpg') %> <img src="/images/100px.jpg">
<%= image_tag('100px.jpg?test') %> <%= image_tag('100px.jpg?test') %>
<%= image_tag('100px.jpg?#test') %> <%= image_tag('100px.jpg?#test') %>
<%= image_tag('100px.jpg#test') %> <%= image_tag('100px.jpg#test') %>

View file

@ -17,7 +17,8 @@ module Middleman
proc: Or[Proc, Method], proc: Or[Proc, Method],
url_extensions: ArrayOf[String], url_extensions: ArrayOf[String],
source_extensions: ArrayOf[String], source_extensions: ArrayOf[String],
ignore: ArrayOf[IGNORE_DESCRIPTOR] ignore: ArrayOf[IGNORE_DESCRIPTOR],
after: Maybe[Symbol]
}.freeze }.freeze
def initialize(app, options_hash={}, &block) def initialize(app, options_hash={}, &block)
@ -32,8 +33,15 @@ module Middleman
end end
def after_configuration def after_configuration
app.use Rack, rewriters: @rewriters.values, rewriters = @rewriters.values.sort do |a, b|
middleman_app: @app if b[:after] && b[:after] == a[:id]
1
else
0
end
end
app.use Rack, rewriters: rewriters, middleman_app: @app
end end
class Rack class Rack

View file

@ -22,7 +22,8 @@ class Middleman::Extensions::AssetHash < ::Middleman::Extension
source_extensions: options.sources, source_extensions: options.sources,
ignore: @ignore, ignore: @ignore,
rewrite_ignore: options.rewrite_ignore, rewrite_ignore: options.rewrite_ignore,
proc: method(:rewrite_url) proc: method(:rewrite_url),
after: :asset_host
end end
Contract String, Or[String, Pathname], Any => Maybe[String] Contract String, Or[String, Pathname], Any => Maybe[String]