middleman-more 3.1.0.beta.1 → 3.1.0.beta.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,94 +1,83 @@
1
- # Extension namespace
2
- module Middleman
3
- module Extensions
1
+ # Minify Javascript Extension
2
+ class Middleman::Extensions::MinifyJavascript < ::Middleman::Extension
3
+ option :compressor, nil, 'Set the JS compressor to use.'
4
+ option :inline, false, 'Whether to minify JS inline within HTML files'
5
+ option :ignore, [], 'Patterns to avoid minifying'
4
6
 
5
- # Minify Javascript Extension
6
- module MinifyJavascript
7
+ def initialize(app, options_hash={}, &block)
8
+ super
7
9
 
8
- # Setup extension
9
- class << self
10
-
11
- # Once registered
12
- def registered(app, options={})
13
- app.config.define_setting :js_compressor, nil, 'Set the JS compressor to use. Deprecated in favor of the :compressor option when activating :minify_js'
14
-
15
- ignore = Array(options[:ignore]) << /\.min\./
16
- inline = options[:inline] || false
17
-
18
- # Once config is parsed
19
- app.after_configuration do
20
- chosen_compressor = js_compressor || options[:compressor] || begin
21
- require 'uglifier'
22
- ::Uglifier.new
23
- end
24
-
25
- # Setup Rack middlware to minify JS
26
- use Rack, :compressor => chosen_compressor,
27
- :ignore => ignore,
28
- :inline => inline
29
- end
30
- end
31
- alias :included :registered
32
- end
33
-
34
- # Rack middleware to look for JS and compress it
35
- class Rack
10
+ app.config.define_setting :js_compressor, nil, 'Set the JS compressor to use. Deprecated in favor of the :compressor option when activating :minify_js'
11
+ end
36
12
 
37
- # Init
38
- # @param [Class] app
39
- # @param [Hash] options
40
- def initialize(app, options={})
41
- @app = app
42
- @compressor = options[:compressor]
43
- @ignore = options[:ignore]
44
- @inline = options[:inline]
45
- end
13
+ def after_configuration
14
+ chosen_compressor = app.config[:js_compressor] || options[:compressor] || begin
15
+ require 'uglifier'
16
+ ::Uglifier.new
17
+ end
46
18
 
47
- # Rack interface
48
- # @param [Rack::Environmemt] env
49
- # @return [Array]
50
- def call(env)
51
- status, headers, response = @app.call(env)
19
+ # Setup Rack middleware to minify CSS
20
+ app.use Rack, :compressor => chosen_compressor,
21
+ :ignore => Array(options[:ignore]) + [/\.min\./],
22
+ :inline => options[:inline]
23
+ end
52
24
 
53
- path = env["PATH_INFO"]
25
+ # Rack middleware to look for JS and compress it
26
+ class Rack
27
+
28
+ # Init
29
+ # @param [Class] app
30
+ # @param [Hash] options
31
+ def initialize(app, options={})
32
+ @app = app
33
+ @compressor = options[:compressor]
34
+ @ignore = options[:ignore]
35
+ @inline = options[:inline]
36
+ end
54
37
 
55
- begin
56
- if (path.end_with?('.html') || path.end_with?('.php')) && @inline
57
- uncompressed_source = ::Middleman::Util.extract_response_text(response)
38
+ # Rack interface
39
+ # @param [Rack::Environmemt] env
40
+ # @return [Array]
41
+ def call(env)
42
+ status, headers, response = @app.call(env)
58
43
 
59
- minified = uncompressed_source.gsub(/(<script[^>]*>\s*(?:\/\/(?:(?:<!--)|(?:<!\[CDATA\[))\n)?)(.*?)((?:(?:\n\s*)?\/\/(?:(?:-->)|(?:\]\]>)))?\s*<\/script>)/m) do |match|
60
- first = $1
61
- javascript = $2
62
- last = $3
44
+ path = env["PATH_INFO"]
63
45
 
64
- # Only compress script tags that contain JavaScript (as opposed
65
- # to something like jQuery templates, identified with a "text/html"
66
- # type.
67
- if first =~ /<script>/ || first.include?('text/javascript')
68
- minified_js = @compressor.compress(javascript)
46
+ begin
47
+ if (path.end_with?('.html') || path.end_with?('.php')) && @inline
48
+ uncompressed_source = ::Middleman::Util.extract_response_text(response)
69
49
 
70
- first << minified_js << last
71
- else
72
- match
73
- end
74
- end
50
+ minified = uncompressed_source.gsub(/(<script[^>]*>\s*(?:\/\/(?:(?:<!--)|(?:<!\[CDATA\[))\n)?)(.*?)((?:(?:\n\s*)?\/\/(?:(?:-->)|(?:\]\]>)))?\s*<\/script>)/m) do |match|
51
+ first = $1
52
+ javascript = $2
53
+ last = $3
75
54
 
76
- headers["Content-Length"] = ::Rack::Utils.bytesize(minified).to_s
77
- response = [minified]
78
- elsif path.end_with?('.js') && @ignore.none? {|ignore| Middleman::Util.path_match(ignore, path) }
79
- uncompressed_source = ::Middleman::Util.extract_response_text(response)
80
- minified_js = @compressor.compress(uncompressed_source)
55
+ # Only compress script tags that contain JavaScript (as opposed
56
+ # to something like jQuery templates, identified with a "text/html"
57
+ # type.
58
+ if first =~ /<script>/ || first.include?('text/javascript')
59
+ minified_js = @compressor.compress(javascript)
81
60
 
82
- headers["Content-Length"] = ::Rack::Utils.bytesize(minified_js).to_s
83
- response = [minified_js]
61
+ first << minified_js << last
62
+ else
63
+ match
84
64
  end
85
- rescue ExecJS::ProgramError => e
86
- warn "WARNING: Couldn't compress JavaScript in #{path}: #{e.message}"
87
65
  end
88
66
 
89
- [status, headers, response]
67
+ headers["Content-Length"] = ::Rack::Utils.bytesize(minified).to_s
68
+ response = [minified]
69
+ elsif path.end_with?('.js') && @ignore.none? {|ignore| Middleman::Util.path_match(ignore, path) }
70
+ uncompressed_source = ::Middleman::Util.extract_response_text(response)
71
+ minified_js = @compressor.compress(uncompressed_source)
72
+
73
+ headers["Content-Length"] = ::Rack::Utils.bytesize(minified_js).to_s
74
+ response = [minified_js]
90
75
  end
76
+ rescue ExecJS::ProgramError => e
77
+ warn "WARNING: Couldn't compress JavaScript in #{path}: #{e.message}"
91
78
  end
79
+
80
+ [status, headers, response]
92
81
  end
93
82
  end
94
83
  end
@@ -1,44 +1,28 @@
1
- # Extension namespace
2
- module Middleman
3
- module Extensions
1
+ # Relative Assets extension
2
+ class Middleman::Extensions::RelativeAssets < ::Middleman::Extension
4
3
 
5
- # Relative Assets extension
6
- module RelativeAssets
4
+ def initialize(app, options_hash={}, &block)
5
+ super
7
6
 
8
- # Setup extension
9
- class << self
10
-
11
- # Once registered
12
- def registered(app)
13
- # Tell compass to use relative assets
14
- app.compass_config do |config|
15
- config.relative_assets = true
16
- end
17
-
18
- # Include instance methods
19
- app.send :include, InstanceMethods
20
- end
21
-
22
- alias :included :registered
23
- end
24
-
25
- # Relative Assets instance method
26
- module InstanceMethods
27
-
28
- # asset_url override for relative assets
29
- # @param [String] path
30
- # @param [String] prefix
31
- # @return [String]
32
- def asset_url(path, prefix="")
33
- path = super(path, prefix)
7
+ # After compass is setup, make it use the registered cache buster
8
+ app.compass_config do |config|
9
+ config.relative_assets = true
10
+ end
11
+ end
34
12
 
35
- if path.include?("//") || !current_resource
36
- path
37
- else
38
- current_dir = Pathname('/' + current_resource.destination_path)
39
- Pathname(path).relative_path_from(current_dir.dirname).to_s
40
- end
41
- end
13
+ helpers do
14
+ # asset_url override for relative assets
15
+ # @param [String] path
16
+ # @param [String] prefix
17
+ # @return [String]
18
+ def asset_url(path, prefix="")
19
+ path = super(path, prefix)
20
+
21
+ if path.include?("//") || !current_resource
22
+ path
23
+ else
24
+ current_dir = Pathname('/' + current_resource.destination_path)
25
+ Pathname(path).relative_path_from(current_dir.dirname).to_s
42
26
  end
43
27
  end
44
28
  end
@@ -21,9 +21,8 @@ module Middleman
21
21
 
22
22
  # Setup default helpers
23
23
  require "middleman-more/core_extensions/default_helpers"
24
- Middleman::Application.register Middleman::CoreExtensions::DefaultHelpers
24
+ Middleman::CoreExtensions::DefaultHelpers.new(app)
25
25
 
26
- # i18n
27
26
  require "i18n"
28
27
  app.after_configuration do
29
28
  # This is for making the tests work - since the tests
@@ -32,16 +31,14 @@ module Middleman
32
31
  # exist anymore.
33
32
  ::I18n.load_path.delete_if {|path| path =~ %r{tmp/aruba}}
34
33
  ::I18n.reload!
35
- end
34
+ end if ENV["TEST"]
36
35
 
37
- Middleman::Extensions.register(:i18n) do
38
- require "middleman-more/core_extensions/i18n"
39
- Middleman::CoreExtensions::Internationalization
40
- end
36
+ require "middleman-more/core_extensions/i18n"
37
+ Middleman::CoreExtensions::Internationalization.register(:i18n)
41
38
 
42
39
  # Compass framework
43
40
  require "middleman-more/core_extensions/compass"
44
- Middleman::Application.register Middleman::CoreExtensions::Compass
41
+ Middleman::CoreExtensions::Compass.new(app)
45
42
 
46
43
  ###
47
44
  # Setup Optional Extensions
@@ -49,69 +46,51 @@ module Middleman
49
46
 
50
47
  # CacheBuster adds a query string to assets in dynamic templates to
51
48
  # avoid browser caches failing to update to your new content.
52
- Middleman::Extensions.register(:cache_buster) do
53
- require "middleman-more/extensions/cache_buster"
54
- Middleman::Extensions::CacheBuster
55
- end
49
+ require "middleman-more/extensions/cache_buster"
50
+ Middleman::Extensions::CacheBuster.register
56
51
 
57
52
  # MinifyCss compresses CSS
58
- Middleman::Extensions.register(:minify_css) do
59
- require "middleman-more/extensions/minify_css"
60
- Middleman::Extensions::MinifyCss
61
- end
53
+ require "middleman-more/extensions/minify_css"
54
+ Middleman::Extensions::MinifyCss.register
62
55
 
63
56
  # MinifyJavascript compresses JS
64
- Middleman::Extensions.register(:minify_javascript) do
65
- require "middleman-more/extensions/minify_javascript"
66
- Middleman::Extensions::MinifyJavascript
67
- end
57
+ require "middleman-more/extensions/minify_javascript"
58
+ Middleman::Extensions::MinifyJavascript.register
68
59
 
69
60
  # RelativeAssets allow any asset path in dynamic templates to be either
70
61
  # relative to the root of the project or use an absolute URL.
71
- Middleman::Extensions.register(:relative_assets) do
72
- require "middleman-more/extensions/relative_assets"
73
- Middleman::Extensions::RelativeAssets
74
- end
62
+ require "middleman-more/extensions/relative_assets"
63
+ Middleman::Extensions::RelativeAssets.register
75
64
 
76
65
  # GZIP assets and pages during build
77
- Middleman::Extensions.register(:gzip) do
78
- require "middleman-more/extensions/gzip"
79
- Middleman::Extensions::Gzip
80
- end
66
+ require "middleman-more/extensions/gzip"
67
+ Middleman::Extensions::Gzip.register
81
68
 
82
69
  # AssetHash appends a hash of the file contents to the assets filename
83
70
  # to avoid browser caches failing to update to your new content.
84
- Middleman::Extensions.register(:asset_hash) do
85
- require "middleman-more/extensions/asset_hash"
86
- Middleman::Extensions::AssetHash::Extension
87
- end
71
+ require "middleman-more/extensions/asset_hash"
72
+ Middleman::Extensions::AssetHash.register
88
73
 
89
74
  # AssetHost allows you to setup multiple domains to host your static
90
75
  # assets. Calls to asset paths in dynamic templates will then rotate
91
76
  # through each of the asset servers to better spread the load.
92
- Middleman::Extensions.register(:asset_host) do
93
- require "middleman-more/extensions/asset_host"
94
- Middleman::Extensions::AssetHost
95
- end
77
+ require "middleman-more/extensions/asset_host"
78
+ Middleman::Extensions::AssetHost.register
96
79
 
97
80
  # Provide Apache-style index.html files for directories
98
- Middleman::Extensions.register(:directory_indexes) do
99
- require "middleman-more/extensions/directory_indexes"
100
- Middleman::Extensions::DirectoryIndexes
101
- end
81
+ require "middleman-more/extensions/directory_indexes"
82
+ Middleman::Extensions::DirectoryIndexes.register
102
83
 
103
84
  # Lorem provides a handful of helpful prototyping methods to generate
104
85
  # words, paragraphs, fake images, names and email addresses.
105
86
  require "middleman-more/extensions/lorem"
106
- Middleman::Application.register Middleman::Extensions::Lorem
87
+ Middleman::Extensions::Lorem.new(app)
107
88
 
108
89
  # AutomaticImageSizes inspects the images used in your dynamic templates
109
90
  # and automatically adds width and height attributes to their HTML
110
91
  # elements.
111
- Middleman::Extensions.register(:automatic_image_sizes) do
112
- require "middleman-more/extensions/automatic_image_sizes"
113
- Middleman::Extensions::AutomaticImageSizes
114
- end
92
+ require "middleman-more/extensions/automatic_image_sizes"
93
+ Middleman::Extensions::AutomaticImageSizes.register
115
94
  end
116
95
  end
117
96
  end
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
17
17
  s.require_paths = ["lib"]
18
18
 
19
19
  s.add_dependency("middleman-core", Middleman::VERSION)
20
- s.add_dependency("uglifier", ["~> 1.3.0"])
20
+ s.add_dependency("uglifier", ["~> 2.0.1"])
21
21
  s.add_dependency("haml", [">= 3.1.6"])
22
22
  s.add_dependency("sass", [">= 3.1.20"])
23
23
  s.add_dependency("compass", [">= 0.12.2"])
@@ -25,5 +25,5 @@ Gem::Specification.new do |s|
25
25
  s.add_dependency("execjs", ["~> 1.4.0"])
26
26
  s.add_dependency("kramdown", ["~> 1.0.0"])
27
27
  s.add_dependency("i18n", ["~> 0.6.4"])
28
- s.add_dependency("padrino-helpers", ["0.10.7"])
28
+ s.add_dependency("padrino-helpers", ["0.11.1"])
29
29
  end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: middleman-more
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.0.beta.1
5
- prerelease: 6
4
+ version: 3.1.0.beta.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Thomas Reynolds
@@ -10,92 +9,81 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2013-04-14 00:00:00.000000000 Z
12
+ date: 2013-05-01 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: middleman-core
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
18
  - - '='
21
19
  - !ruby/object:Gem::Version
22
- version: 3.1.0.beta.1
20
+ version: 3.1.0.beta.2
23
21
  type: :runtime
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
25
  - - '='
29
26
  - !ruby/object:Gem::Version
30
- version: 3.1.0.beta.1
27
+ version: 3.1.0.beta.2
31
28
  - !ruby/object:Gem::Dependency
32
29
  name: uglifier
33
30
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
31
  requirements:
36
32
  - - ~>
37
33
  - !ruby/object:Gem::Version
38
- version: 1.3.0
34
+ version: 2.0.1
39
35
  type: :runtime
40
36
  prerelease: false
41
37
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
38
  requirements:
44
39
  - - ~>
45
40
  - !ruby/object:Gem::Version
46
- version: 1.3.0
41
+ version: 2.0.1
47
42
  - !ruby/object:Gem::Dependency
48
43
  name: haml
49
44
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
45
  requirements:
52
- - - ! '>='
46
+ - - '>='
53
47
  - !ruby/object:Gem::Version
54
48
  version: 3.1.6
55
49
  type: :runtime
56
50
  prerelease: false
57
51
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
52
  requirements:
60
- - - ! '>='
53
+ - - '>='
61
54
  - !ruby/object:Gem::Version
62
55
  version: 3.1.6
63
56
  - !ruby/object:Gem::Dependency
64
57
  name: sass
65
58
  requirement: !ruby/object:Gem::Requirement
66
- none: false
67
59
  requirements:
68
- - - ! '>='
60
+ - - '>='
69
61
  - !ruby/object:Gem::Version
70
62
  version: 3.1.20
71
63
  type: :runtime
72
64
  prerelease: false
73
65
  version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
66
  requirements:
76
- - - ! '>='
67
+ - - '>='
77
68
  - !ruby/object:Gem::Version
78
69
  version: 3.1.20
79
70
  - !ruby/object:Gem::Dependency
80
71
  name: compass
81
72
  requirement: !ruby/object:Gem::Requirement
82
- none: false
83
73
  requirements:
84
- - - ! '>='
74
+ - - '>='
85
75
  - !ruby/object:Gem::Version
86
76
  version: 0.12.2
87
77
  type: :runtime
88
78
  prerelease: false
89
79
  version_requirements: !ruby/object:Gem::Requirement
90
- none: false
91
80
  requirements:
92
- - - ! '>='
81
+ - - '>='
93
82
  - !ruby/object:Gem::Version
94
83
  version: 0.12.2
95
84
  - !ruby/object:Gem::Dependency
96
85
  name: coffee-script
97
86
  requirement: !ruby/object:Gem::Requirement
98
- none: false
99
87
  requirements:
100
88
  - - ~>
101
89
  - !ruby/object:Gem::Version
@@ -103,7 +91,6 @@ dependencies:
103
91
  type: :runtime
104
92
  prerelease: false
105
93
  version_requirements: !ruby/object:Gem::Requirement
106
- none: false
107
94
  requirements:
108
95
  - - ~>
109
96
  - !ruby/object:Gem::Version
@@ -111,7 +98,6 @@ dependencies:
111
98
  - !ruby/object:Gem::Dependency
112
99
  name: execjs
113
100
  requirement: !ruby/object:Gem::Requirement
114
- none: false
115
101
  requirements:
116
102
  - - ~>
117
103
  - !ruby/object:Gem::Version
@@ -119,7 +105,6 @@ dependencies:
119
105
  type: :runtime
120
106
  prerelease: false
121
107
  version_requirements: !ruby/object:Gem::Requirement
122
- none: false
123
108
  requirements:
124
109
  - - ~>
125
110
  - !ruby/object:Gem::Version
@@ -127,7 +112,6 @@ dependencies:
127
112
  - !ruby/object:Gem::Dependency
128
113
  name: kramdown
129
114
  requirement: !ruby/object:Gem::Requirement
130
- none: false
131
115
  requirements:
132
116
  - - ~>
133
117
  - !ruby/object:Gem::Version
@@ -135,7 +119,6 @@ dependencies:
135
119
  type: :runtime
136
120
  prerelease: false
137
121
  version_requirements: !ruby/object:Gem::Requirement
138
- none: false
139
122
  requirements:
140
123
  - - ~>
141
124
  - !ruby/object:Gem::Version
@@ -143,7 +126,6 @@ dependencies:
143
126
  - !ruby/object:Gem::Dependency
144
127
  name: i18n
145
128
  requirement: !ruby/object:Gem::Requirement
146
- none: false
147
129
  requirements:
148
130
  - - ~>
149
131
  - !ruby/object:Gem::Version
@@ -151,7 +133,6 @@ dependencies:
151
133
  type: :runtime
152
134
  prerelease: false
153
135
  version_requirements: !ruby/object:Gem::Requirement
154
- none: false
155
136
  requirements:
156
137
  - - ~>
157
138
  - !ruby/object:Gem::Version
@@ -159,19 +140,17 @@ dependencies:
159
140
  - !ruby/object:Gem::Dependency
160
141
  name: padrino-helpers
161
142
  requirement: !ruby/object:Gem::Requirement
162
- none: false
163
143
  requirements:
164
144
  - - '='
165
145
  - !ruby/object:Gem::Version
166
- version: 0.10.7
146
+ version: 0.11.1
167
147
  type: :runtime
168
148
  prerelease: false
169
149
  version_requirements: !ruby/object:Gem::Requirement
170
- none: false
171
150
  requirements:
172
151
  - - '='
173
152
  - !ruby/object:Gem::Version
174
- version: 0.10.7
153
+ version: 0.11.1
175
154
  description: A static site generator. Provides dozens of templating languages (Haml,
176
155
  Sass, Compass, Slim, CoffeeScript, and more). Makes minification, compression, cache
177
156
  busting, Yaml data (and more) an easy part of your development cycle.
@@ -188,7 +167,6 @@ files:
188
167
  - Rakefile
189
168
  - features/asset_hash.feature
190
169
  - features/asset_host.feature
191
- - features/asset_host_compass.feature
192
170
  - features/automatic_image_sizes.feature
193
171
  - features/cache_buster.feature
194
172
  - features/clean_build.feature
@@ -642,35 +620,30 @@ files:
642
620
  homepage: http://middlemanapp.com
643
621
  licenses:
644
622
  - MIT
623
+ metadata: {}
645
624
  post_install_message:
646
625
  rdoc_options: []
647
626
  require_paths:
648
627
  - lib
649
628
  required_ruby_version: !ruby/object:Gem::Requirement
650
- none: false
651
629
  requirements:
652
- - - ! '>='
630
+ - - '>='
653
631
  - !ruby/object:Gem::Version
654
632
  version: '0'
655
- segments:
656
- - 0
657
- hash: -1915495170693894069
658
633
  required_rubygems_version: !ruby/object:Gem::Requirement
659
- none: false
660
634
  requirements:
661
- - - ! '>'
635
+ - - '>'
662
636
  - !ruby/object:Gem::Version
663
637
  version: 1.3.1
664
638
  requirements: []
665
639
  rubyforge_project:
666
- rubygems_version: 1.8.24
640
+ rubygems_version: 2.0.0
667
641
  signing_key:
668
- specification_version: 3
642
+ specification_version: 4
669
643
  summary: Hand-crafted frontend development
670
644
  test_files:
671
645
  - features/asset_hash.feature
672
646
  - features/asset_host.feature
673
- - features/asset_host_compass.feature
674
647
  - features/automatic_image_sizes.feature
675
648
  - features/cache_buster.feature
676
649
  - features/clean_build.feature
@@ -1,7 +0,0 @@
1
- Feature: Alternate between multiple asset hosts
2
- In order to speed up page loading
3
-
4
- Scenario: Rendering css with the feature enabled
5
- Given the Server is running at "asset-host-app"
6
- When I go to "/stylesheets/asset_host.css"
7
- Then I should see "http://assets"