Merge branch 'v3-stable'

Conflicts:
	middleman-core/lib/middleman-more/extensions/asset_hash.rb
This commit is contained in:
Ben Hollis 2014-06-28 18:48:49 -07:00
commit d7fd48ef7d
3 changed files with 47 additions and 5 deletions

View file

@ -3,12 +3,12 @@ Feature: GZIP assets during build
Scenario: Built assets should be gzipped
Given a successfully built app at "gzip-app"
Then the following files should exist:
| build/javascripts/test.js.gz |
| build/stylesheets/test.css.gz |
| build/index.html |
| build/index.html.gz |
| build/javascripts/test.js |
| build/javascripts/test.js.gz |
| build/stylesheets/test.css |
| build/index.html |
| build/stylesheets/test.css.gz |
When I run `file build/javascripts/test.js.gz`
Then the output should contain "gzip"
@ -19,3 +19,34 @@ Feature: GZIP assets during build
When I go to "/stylesheets/test.css"
Then I should see "test_selector"
Scenario: Only specified extensions should be gzipped
Given a fixture app "gzip-app"
And a file named "config.rb" with:
"""
activate :gzip, exts: %w(.js .html .htm)
"""
And a successfully built app at "gzip-app"
Then the following files should exist:
| build/index.html |
| build/index.html.gz |
| build/javascripts/test.js |
| build/javascripts/test.js.gz |
| build/stylesheets/test.css |
And the following files should not exist:
| build/stylesheets/test.css.gz |
Scenario: Gzipped files are not produced for ignored paths
Given a fixture app "gzip-app"
And a file named "config.rb" with:
"""
activate :gzip, ignore: ['index.html', %r(javascripts/.*)]
"""
And a successfully built app at "gzip-app"
Then the following files should exist:
| build/index.html |
| build/javascripts/test.js |
| build/stylesheets/test.css |
| build/stylesheets/test.css.gz |
And the following files should not exist:
| build/index.html.gz |
| build/javascripts/test.js.gz |

View file

@ -1,5 +1,6 @@
require 'active_support/core_ext/module/delegation'
require 'active_support/core_ext/class/attribute'
require 'middleman-core/configuration'
module Middleman
# Middleman's Extension API provides the ability to add functionality to Middleman

View file

@ -11,6 +11,7 @@
#
class Middleman::Extensions::Gzip < ::Middleman::Extension
option :exts, %w(.js .css .html .htm), 'File extensions to Gzip when building.'
option :ignore, [], 'Patterns to avoid gzipping'
class NumberHelpers
include ::Padrino::Helpers::NumberHelpers
@ -33,7 +34,7 @@ class Middleman::Extensions::Gzip < ::Middleman::Extension
# Fill a queue with inputs
in_queue = Queue.new
paths.each do |path|
in_queue << path if options.exts.include?(path.extname)
in_queue << path if should_gzip?(path)
end
num_paths = in_queue.size
@ -97,4 +98,13 @@ class Middleman::Extensions::Gzip < ::Middleman::Extension
[output_filename, old_size, new_size]
end
private
# Whether a path should be gzipped
# @param [Pathname] path A destination path
# @return [Boolean]
def should_gzip?(path)
options.exts.include?(path.extname) && options.ignore.none? { |ignore| Middleman::Util.path_match(ignore, path.to_s) }
end
end