middleman-core 4.1.0.rc.1 → 4.1.0.rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -1
  3. data/features/asset_hash.feature +44 -6
  4. data/features/asset_host.feature +1 -0
  5. data/features/automatic_image_sizes.feature +18 -5
  6. data/fixtures/asset-hash-host-app/source/index.html.erb +1 -1
  7. data/fixtures/asset-host-app/config.rb +1 -0
  8. data/fixtures/asset-host-app/source/asset_host.html.erb +9 -0
  9. data/fixtures/automatic-image-size-app/source/markdown-sizes.html.markdown +1 -0
  10. data/lib/middleman-core/application.rb +68 -58
  11. data/lib/middleman-core/builder.rb +24 -18
  12. data/lib/middleman-core/callback_manager.rb +8 -1
  13. data/lib/middleman-core/contracts.rb +13 -102
  14. data/lib/middleman-core/core_extensions.rb +6 -0
  15. data/lib/middleman-core/core_extensions/collections/lazy_step.rb +1 -1
  16. data/lib/middleman-core/core_extensions/data.rb +3 -2
  17. data/lib/middleman-core/core_extensions/default_helpers.rb +5 -5
  18. data/lib/middleman-core/core_extensions/external_helpers.rb +6 -11
  19. data/lib/middleman-core/core_extensions/file_watcher.rb +1 -1
  20. data/lib/middleman-core/core_extensions/front_matter.rb +1 -0
  21. data/lib/middleman-core/core_extensions/i18n.rb +4 -4
  22. data/lib/middleman-core/core_extensions/inline_url_rewriter.rb +150 -0
  23. data/lib/middleman-core/core_extensions/routing.rb +22 -28
  24. data/lib/middleman-core/core_extensions/show_exceptions.rb +1 -7
  25. data/lib/middleman-core/extension.rb +19 -2
  26. data/lib/middleman-core/extension_manager.rb +2 -0
  27. data/lib/middleman-core/extensions.rb +12 -0
  28. data/lib/middleman-core/extensions/asset_hash.rb +21 -20
  29. data/lib/middleman-core/extensions/asset_host.rb +9 -10
  30. data/lib/middleman-core/extensions/automatic_image_sizes.rb +1 -1
  31. data/lib/middleman-core/extensions/cache_buster.rb +6 -12
  32. data/lib/middleman-core/extensions/gzip.rb +2 -2
  33. data/lib/middleman-core/extensions/lorem.rb +1 -1
  34. data/lib/middleman-core/extensions/minify_css.rb +2 -2
  35. data/lib/middleman-core/extensions/minify_javascript.rb +2 -2
  36. data/lib/middleman-core/extensions/relative_assets.rb +6 -12
  37. data/lib/middleman-core/preview_server.rb +11 -9
  38. data/lib/middleman-core/preview_server/server_hostname.rb +2 -2
  39. data/lib/middleman-core/rack.rb +1 -1
  40. data/lib/middleman-core/renderers/kramdown.rb +1 -1
  41. data/lib/middleman-core/renderers/less.rb +3 -4
  42. data/lib/middleman-core/renderers/markdown.rb +2 -8
  43. data/lib/middleman-core/renderers/redcarpet.rb +1 -1
  44. data/lib/middleman-core/renderers/sass.rb +8 -11
  45. data/lib/middleman-core/renderers/stylus.rb +1 -5
  46. data/lib/middleman-core/sitemap/extensions/ignores.rb +5 -4
  47. data/lib/middleman-core/sitemap/extensions/import.rb +12 -15
  48. data/lib/middleman-core/sitemap/extensions/move_file.rb +3 -3
  49. data/lib/middleman-core/sitemap/extensions/proxies.rb +4 -4
  50. data/lib/middleman-core/sitemap/extensions/redirects.rb +16 -28
  51. data/lib/middleman-core/sitemap/extensions/request_endpoints.rb +17 -35
  52. data/lib/middleman-core/sitemap/extensions/traversal.rb +5 -5
  53. data/lib/middleman-core/sitemap/resource.rb +16 -16
  54. data/lib/middleman-core/sitemap/store.rb +42 -31
  55. data/lib/middleman-core/sources.rb +9 -9
  56. data/lib/middleman-core/sources/source_watcher.rb +14 -10
  57. data/lib/middleman-core/step_definitions/server_steps.rb +12 -4
  58. data/lib/middleman-core/template_context.rb +1 -1
  59. data/lib/middleman-core/template_renderer.rb +74 -75
  60. data/lib/middleman-core/util.rb +19 -16
  61. data/lib/middleman-core/util/data.rb +86 -82
  62. data/lib/middleman-core/version.rb +1 -1
  63. data/middleman-core.gemspec +1 -0
  64. metadata +19 -39
  65. data/features/cli/preview_server-hook.feature +0 -17
  66. data/features/cli/preview_server.feature +0 -536
  67. data/features/cli_extension.feature +0 -14
  68. data/features/cli_init.feature +0 -89
  69. data/fixtures/asset-hash-host-app/config.rb +0 -4
  70. data/fixtures/preview-server-app/bin/dns_server.rb +0 -33
  71. data/fixtures/preview-server-app/config.rb +0 -0
  72. data/fixtures/preview-server-app/source/index.html.erb +0 -1
  73. data/fixtures/preview-server-app/source/layout.erb +0 -9
  74. data/fixtures/preview-server-app/source/layouts/custom.erb +0 -8
  75. data/fixtures/preview-server-app/source/real.html +0 -1
  76. data/fixtures/preview-server-app/source/real/index.html.erb +0 -5
  77. data/fixtures/preview-server-app/source/should_be_ignored.html +0 -1
  78. data/fixtures/preview-server-app/source/should_be_ignored2.html +0 -1
  79. data/fixtures/preview-server-app/source/should_be_ignored3.html +0 -1
  80. data/fixtures/preview-server-app/source/static.html +0 -1
  81. data/fixtures/preview-server-hook-app/config.rb +0 -19
  82. data/fixtures/preview-server-hook-app/source/index.html.erb +0 -9
  83. data/lib/middleman-core/middleware/inline_url_rewriter.rb +0 -109
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 404deb8049bbd24929ef1847e8cd92598db4e61e
4
- data.tar.gz: 758e2ac1ab487d3671e66cf3ac01c9fd5cc80f58
3
+ metadata.gz: d02a12c78f163c9213f8fdfb955ccc033b311e5c
4
+ data.tar.gz: f832b54139abcf4d4629d436b7007f8f132266a5
5
5
  SHA512:
6
- metadata.gz: 365df7410bf7945f84b566fc061b6b5aa60eada04c1bc2b28ccd1558ac90b04cd6132588212b601b7c89555d4b1bdcb5fb93bf9e7199cd140a3516338db72c52
7
- data.tar.gz: 56a33ca43a78ca4e2078b77fd57c78c25c2d5badfbfb2c75a764e504d7c3150e51cff954852299d71d3cfc2255763c9feec535320a6e0e31f54bc3e5826cf1d5
6
+ metadata.gz: 437c1700d0578d22e68c6b153fec52f25fa09add4aba8521ce13d60605c32593ad4754e30f58c682c5b3b81af35497ba0061d65cd56ccc5024c639bb0b549389
7
+ data.tar.gz: 371e370f1e1aab80b8c1ef4ca6fcaba1f091469a56c6506c23244d8b67ec359c33be317b4a4c1d6b28a94da07ad2826c8a31b105b01d14e4bf1c25dc86b9cb1b
data/Rakefile CHANGED
@@ -1,4 +1,4 @@
1
1
  # coding:utf-8
2
- RAKE_ROOT = __FILE__
2
+ RAKE_ROOT = __FILE__.freeze
3
3
  GEM_NAME = ENV['NAME'] || 'middleman-core'
4
4
  require File.expand_path(File.dirname(__FILE__) + '/../gem_rake_helper')
@@ -107,25 +107,63 @@ Feature: Assets get file hashes appended to them and references to them are upda
107
107
  And I should see 'src="images/100px-5fd6fb90.jpg"'
108
108
  And I should see 'srcset="images/100px-5fd6fb90.jpg 1x, images/200px-c11eb203.jpg 2x, images/300px-59adce76.jpg 3x"'
109
109
 
110
- Scenario: Enabling an asset host still produces hashed files and references
110
+ Scenario: Enabling an asset host still produces hashed files and references (hash first)
111
+ Given a fixture app "asset-hash-host-app"
112
+ And a file named "config.rb" with:
113
+ """
114
+ activate :asset_hash
115
+ activate :directory_indexes
116
+ activate :asset_host, host: 'http://middlemanapp.com'
117
+ """
118
+ Given the Server is running at "asset-hash-host-app"
119
+ When I go to "/"
120
+ Then I should see 'href="http://middlemanapp.com/stylesheets/site-4b64a653.css"'
121
+ Then I should see 'href="http://middlemanapp.com/stylesheets/fragment-a772891f.css"'
122
+ And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
123
+ And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?test"'
124
+ And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test"'
125
+ And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg#test"'
126
+ When I go to "/subdir/"
127
+ Then I should see 'href="http://middlemanapp.com/stylesheets/site-4b64a653.css"'
128
+ And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
129
+ When I go to "/other/"
130
+ Then I should see 'href="http://middlemanapp.com/stylesheets/site-4b64a653.css"'
131
+ And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
132
+ And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?test"'
133
+ And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test"'
134
+ And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg#test"'
135
+ When I go to "/stylesheets/fragment-a772891f.css"
136
+ And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg")'
137
+ And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg?test")'
138
+ And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test")'
139
+ And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg#test")'
140
+
141
+ Scenario: Enabling an asset host still produces hashed files and references (host first)
142
+ Given a fixture app "asset-hash-host-app"
143
+ And a file named "config.rb" with:
144
+ """
145
+ activate :asset_host, host: 'http://middlemanapp.com'
146
+ activate :directory_indexes
147
+ activate :asset_hash
148
+ """
111
149
  Given the Server is running at "asset-hash-host-app"
112
150
  When I go to "/"
113
- Then I should see 'href="http://middlemanapp.com/stylesheets/site-e587b659.css"'
114
- Then I should see 'href="http://middlemanapp.com/stylesheets/fragment-7af0b5ab.css"'
151
+ Then I should see 'href="http://middlemanapp.com/stylesheets/site-4b64a653.css"'
152
+ Then I should see 'href="http://middlemanapp.com/stylesheets/fragment-a772891f.css"'
115
153
  And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
116
154
  And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?test"'
117
155
  And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test"'
118
156
  And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg#test"'
119
157
  When I go to "/subdir/"
120
- Then I should see 'href="http://middlemanapp.com/stylesheets/site-e587b659.css"'
158
+ Then I should see 'href="http://middlemanapp.com/stylesheets/site-4b64a653.css"'
121
159
  And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
122
160
  When I go to "/other/"
123
- Then I should see 'href="http://middlemanapp.com/stylesheets/site-e587b659.css"'
161
+ Then I should see 'href="http://middlemanapp.com/stylesheets/site-4b64a653.css"'
124
162
  And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
125
163
  And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?test"'
126
164
  And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test"'
127
165
  And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg#test"'
128
- When I go to "/stylesheets/fragment-7af0b5ab.css"
166
+ When I go to "/stylesheets/fragment-a772891f.css"
129
167
  And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg")'
130
168
  And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg?test")'
131
169
  And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test")'
@@ -8,6 +8,7 @@ Feature: Alternate between multiple asset hosts
8
8
  """
9
9
  And the Server is running
10
10
  When I go to "/asset_host.html"
11
+ Then I should see "'.google-analytics.com/ga.js'"
11
12
  Then I should see 'src="https://code.jquery.com/jquery-2.1.3.min.js"'
12
13
  Then I should see content matching %r{http://assets1.example.com/}
13
14
  Then I should not see content matching %r{http://assets1.example.com//}
@@ -2,15 +2,28 @@ Feature: Automatically detect and insert image dimensions into tags
2
2
  In order to speed up development and appease YSlow
3
3
 
4
4
  Scenario: Rendering an image with the feature disabled
5
- Given "automatic_image_sizes" feature is "disabled"
5
+ Given a fixture app "automatic-image-size-app"
6
+ And a file named "config.rb" with:
7
+ """
8
+ """
6
9
  And the Server is running at "automatic-image-size-app"
7
10
  When I go to "/auto-image-sizes.html"
8
11
  Then I should not see "width="
9
12
  And I should not see "height="
10
-
13
+ When I go to "/markdown-sizes.html"
14
+ Then I should not see "width="
15
+ And I should not see "height="
16
+
11
17
  Scenario: Rendering an image with the feature enabled
12
- Given "automatic_image_sizes" feature is "enabled"
18
+ Given a fixture app "automatic-image-size-app"
19
+ And a file named "config.rb" with:
20
+ """
21
+ activate :automatic_image_sizes
22
+ """
13
23
  And the Server is running at "automatic-image-size-app"
14
24
  When I go to "/auto-image-sizes.html"
15
- Then I should see "width="
16
- And I should see "height="
25
+ Then I should see 'width="1"'
26
+ And I should see 'height="1"'
27
+ When I go to "/markdown-sizes.html"
28
+ Then I should see 'width="1"'
29
+ And I should see 'height="1"'
@@ -3,7 +3,7 @@
3
3
  <% end %>
4
4
 
5
5
  <h2>Image url:</h2>
6
- <%= image_tag('100px.jpg') %>
6
+ <img src="/images/100px.jpg">
7
7
  <%= image_tag('100px.jpg?test') %>
8
8
  <%= image_tag('100px.jpg?#test') %>
9
9
  <%= image_tag('100px.jpg#test') %>
@@ -0,0 +1 @@
1
+ activate :asset_host, host: "http://assets1.example.com"
@@ -44,3 +44,12 @@
44
44
  <a href="https://github.com/angular/angular.js">Angular.js</a>
45
45
 
46
46
  <script>(function(a,b,c,d){})(window,document,'script','//www.example.com/script.js');</script>
47
+
48
+ <script>
49
+ (function() {
50
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
51
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') +
52
+ '.google-analytics.com/ga.js';
53
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
54
+ })();
55
+ </script>
@@ -0,0 +1 @@
1
+ ![Alt text](/images/blank.gif)
@@ -70,27 +70,27 @@ module Middleman
70
70
 
71
71
  # Which port preview should start on.
72
72
  # @return [Fixnum]
73
- config.define_setting :port, 4567, 'The preview server port'
73
+ define_setting :port, 4567, 'The preview server port'
74
74
 
75
75
  # Which server name should be used
76
76
  # @return [NilClass, String]
77
- config.define_setting :server_name, nil, 'The server name of preview server'
77
+ define_setting :server_name, nil, 'The server name of preview server'
78
78
 
79
79
  # Which bind address the preview server should use
80
80
  # @return [NilClass, String]
81
- config.define_setting :bind_address, nil, 'The bind address of the preview server'
81
+ define_setting :bind_address, nil, 'The bind address of the preview server'
82
82
 
83
83
  # Whether to serve the preview server over HTTPS.
84
84
  # @return [Boolean]
85
- config.define_setting :https, false, 'Serve the preview server over SSL/TLS'
85
+ define_setting :https, false, 'Serve the preview server over SSL/TLS'
86
86
 
87
87
  # The (optional) path to the SSL cert to use for the preview server.
88
88
  # @return [String]
89
- config.define_setting :ssl_certificate, nil, 'Path to an X.509 certificate to use for the preview server'
89
+ define_setting :ssl_certificate, nil, 'Path to an X.509 certificate to use for the preview server'
90
90
 
91
91
  # The (optional) private key for the certificate in :ssl_certificate.
92
92
  # @return [String]
93
- config.define_setting :ssl_private_key, nil, "Path to an RSA private key for the preview server's certificate"
93
+ define_setting :ssl_private_key, nil, "Path to an RSA private key for the preview server's certificate"
94
94
 
95
95
  # Name of the source directory
96
96
  # @return [String]
@@ -170,7 +170,7 @@ module Middleman
170
170
  ignored = false
171
171
 
172
172
  file[:relative_path].ascend do |f|
173
- if f.basename.to_s.match %r{^_[^_]}
173
+ if f.basename.to_s =~ %r{^_[^_]}
174
174
  ignored = true
175
175
  break
176
176
  end
@@ -180,8 +180,7 @@ module Middleman
180
180
  end,
181
181
 
182
182
  layout: proc do |file, _sitemap_app|
183
- file[:relative_path].to_s.start_with?('layout.') ||
184
- file[:relative_path].to_s.start_with?('layouts/')
183
+ file[:relative_path].to_s.start_with?('layout.', 'layouts/')
185
184
  end
186
185
  }, 'Callbacks that can exclude paths from the sitemap'
187
186
 
@@ -210,43 +209,51 @@ module Middleman
210
209
  # Search the root of the project for required files
211
210
  $LOAD_PATH.unshift(root) unless $LOAD_PATH.include?(root)
212
211
 
213
- @callbacks = ::Middleman::CallbackManager.new
214
- @callbacks.install_methods!(self, [
215
- :initialized,
216
- :configure,
217
- :before_sitemap,
218
- :before_configuration,
219
- :after_configuration,
220
- :after_configuration_eval,
221
- :ready,
222
- :before_build,
223
- :after_build,
224
- :before_shutdown,
225
- :before, # Before Rack requests
226
- :before_render,
227
- :after_render,
228
- :before_server
229
- ])
230
-
231
- @middleware = Set.new
232
- @mappings = Set.new
233
-
234
- @template_context_class = Class.new(Middleman::TemplateContext)
235
- @generic_template_context = @template_context_class.new(self)
236
- @config_context = ConfigContext.new(self, @template_context_class)
237
-
238
- # Setup the default values from calls to set before initialization
239
- @config = ::Middleman::Configuration::ConfigurationManager.new
240
- @config.load_settings(self.class.config.all_settings)
241
-
242
- config[:source] = ENV['MM_SOURCE'] if ENV['MM_SOURCE']
243
-
244
- # TODO, make this less global
245
- ::Middleman::FileRenderer.cache.clear
246
- ::Middleman::TemplateRenderer.cache.clear
212
+ ::Middleman::Util.instrument 'application.setup' do
213
+ @callbacks = ::Middleman::CallbackManager.new
214
+ @callbacks.install_methods!(self, [
215
+ :initialized,
216
+ :configure,
217
+ :before_extensions,
218
+ :before_instance_block,
219
+ :before_sitemap,
220
+ :before_configuration,
221
+ :after_configuration,
222
+ :after_configuration_eval,
223
+ :ready,
224
+ :before_build,
225
+ :after_build,
226
+ :before_shutdown,
227
+ :before, # Before Rack requests
228
+ :before_render,
229
+ :after_render,
230
+ :before_server
231
+ ])
232
+
233
+ @middleware = Set.new
234
+ @mappings = Set.new
235
+
236
+ @template_context_class = Class.new(Middleman::TemplateContext)
237
+ @generic_template_context = @template_context_class.new(self)
238
+ @config_context = ConfigContext.new(self, @template_context_class)
239
+
240
+ # Setup the default values from calls to set before initialization
241
+ @config = ::Middleman::Configuration::ConfigurationManager.new
242
+ @config.load_settings(self.class.config.all_settings)
243
+
244
+ config[:source] = ENV['MM_SOURCE'] if ENV['MM_SOURCE']
245
+
246
+ # TODO, make this less global
247
+ ::Middleman::FileRenderer.cache.clear
248
+ ::Middleman::TemplateRenderer.cache.clear
249
+ end
250
+
251
+ execute_callbacks(:before_extensions)
247
252
 
248
253
  @extensions = ::Middleman::ExtensionManager.new(self)
249
254
 
255
+ execute_callbacks(:before_instance_block)
256
+
250
257
  # Evaluate a passed block if given
251
258
  config_context.instance_exec(&block) if block_given?
252
259
 
@@ -257,13 +264,6 @@ module Middleman
257
264
 
258
265
  ::Middleman::Extension.clear_after_extension_callbacks
259
266
 
260
- after_configuration_eval(&method(:prune_tilt_templates))
261
-
262
- start_lifecycle
263
- end
264
-
265
- # Boot the app.
266
- def start_lifecycle
267
267
  # Before config is parsed, before extensions get to it.
268
268
  execute_callbacks(:initialized)
269
269
 
@@ -273,10 +273,6 @@ module Middleman
273
273
  # Eval config.
274
274
  evaluate_configuration!
275
275
 
276
- if Object.const_defined?(:Encoding)
277
- Encoding.default_external = config[:encoding]
278
- end
279
-
280
276
  # Run any `configure` blocks for the current environment.
281
277
  execute_callbacks([:configure, config[:environment]])
282
278
 
@@ -286,6 +282,12 @@ module Middleman
286
282
  # Post parsing, pre-extension callback
287
283
  execute_callbacks(:after_configuration_eval)
288
284
 
285
+ if Object.const_defined?(:Encoding)
286
+ Encoding.default_external = config[:encoding]
287
+ end
288
+
289
+ prune_tilt_templates!
290
+
289
291
  # After extensions have worked after_config
290
292
  execute_callbacks(:after_configuration)
291
293
 
@@ -317,7 +319,7 @@ module Middleman
317
319
  end
318
320
 
319
321
  # Clean up missing Tilt exts
320
- def prune_tilt_templates
322
+ def prune_tilt_templates!
321
323
  ::Tilt.mappings.each do |key, _|
322
324
  begin
323
325
  ::Tilt[".#{key}"]
@@ -327,18 +329,26 @@ module Middleman
327
329
  end
328
330
  end
329
331
 
332
+ # Whether we're in a specific mode
333
+ # @param [Symbol] key
334
+ # @return [Boolean]
335
+ Contract Symbol => Bool
336
+ def mode?(key)
337
+ config[:mode] == key
338
+ end
339
+
330
340
  # Whether we're in server mode
331
341
  # @return [Boolean] If we're in dev mode
332
342
  Contract Bool
333
343
  def server?
334
- config[:mode] == :server
344
+ mode?(:server)
335
345
  end
336
346
 
337
347
  # Whether we're in build mode
338
348
  # @return [Boolean] If we're in dev mode
339
349
  Contract Bool
340
350
  def build?
341
- config[:mode] == :build
351
+ mode?(:build)
342
352
  end
343
353
 
344
354
  # Whether we're in a specific environment
@@ -420,6 +430,6 @@ module Middleman
420
430
  def to_s
421
431
  "#<Middleman::Application:0x#{object_id}>"
422
432
  end
423
- alias_method :inspect, :to_s # Ruby 2.0 calls inspect for NoMethodError instead of to_s
433
+ alias inspect to_s # Ruby 2.0 calls inspect for NoMethodError instead of to_s
424
434
  end
425
435
  end
@@ -20,7 +20,7 @@ module Middleman
20
20
  def_delegator :@app, :logger
21
21
 
22
22
  # Sort order, images, fonts, js/css and finally everything else.
23
- SORT_ORDER = %w(.png .jpeg .jpg .gif .bmp .svg .svgz .webp .ico .woff .woff2 .otf .ttf .eot .js .css)
23
+ SORT_ORDER = %w(.png .jpeg .jpg .gif .bmp .svg .svgz .webp .ico .woff .woff2 .otf .ttf .eot .js .css).freeze
24
24
 
25
25
  # Create a new Builder instance.
26
26
  # @param [Middleman::Application] app The app to build.
@@ -72,13 +72,17 @@ module Middleman
72
72
  Contract ResourceList
73
73
  def prerender_css
74
74
  logger.debug '== Prerendering CSS'
75
- css_files = @app.sitemap.resources.select do |resource|
76
- resource.ext == '.css'
77
- end.each(&method(:output_resource))
78
- logger.debug '== Checking for Compass sprites'
75
+
76
+ css_files = @app.sitemap.resources
77
+ .select { |resource| resource.ext == '.css' }
78
+ .each(&method(:output_resource))
79
+
79
80
  # Double-check for compass sprites
80
- @app.files.find_new_files!
81
- @app.sitemap.ensure_resource_list_updated!
81
+ if @app.files.find_new_files!.length > 0
82
+ logger.debug '== Checking for Compass sprites'
83
+ @app.sitemap.ensure_resource_list_updated!
84
+ end
85
+
82
86
  css_files
83
87
  end
84
88
 
@@ -89,10 +93,10 @@ module Middleman
89
93
  logger.debug '== Building files'
90
94
 
91
95
  @app.sitemap.resources
92
- .sort_by { |resource| SORT_ORDER.index(resource.ext) || 100 }
93
- .reject { |resource| resource.ext == '.css' }
94
- .select { |resource| !@glob || File.fnmatch(@glob, resource.destination_path) }
95
- .each(&method(:output_resource))
96
+ .sort_by { |resource| SORT_ORDER.index(resource.ext) || 100 }
97
+ .reject { |resource| resource.ext == '.css' }
98
+ .select { |resource| !@glob || File.fnmatch(@glob, resource.destination_path) }
99
+ .each(&method(:output_resource))
96
100
  end
97
101
 
98
102
  # Figure out the correct event mode.
@@ -115,9 +119,9 @@ module Middleman
115
119
  Contract Pathname, String => Tempfile
116
120
  def write_tempfile(output_file, contents)
117
121
  file = Tempfile.new([
118
- File.basename(output_file),
119
- File.extname(output_file)
120
- ])
122
+ File.basename(output_file),
123
+ File.extname(output_file)
124
+ ])
121
125
  file.binmode
122
126
  file.write(contents)
123
127
  file.close
@@ -131,24 +135,26 @@ module Middleman
131
135
  # @return [void]
132
136
  Contract Pathname, Or[String, Pathname] => Any
133
137
  def export_file!(output_file, source)
138
+ # ::Middleman::Util.instrument "write_file", output_file: output_file do
134
139
  source = write_tempfile(output_file, source.to_s) if source.is_a? String
135
140
 
136
141
  method, source_path = if source.is_a? Tempfile
137
- [FileUtils.method(:mv), source.path]
142
+ [::FileUtils.method(:mv), source.path]
138
143
  else
139
- [FileUtils.method(:cp), source.to_s]
144
+ [::FileUtils.method(:cp), source.to_s]
140
145
  end
141
146
 
142
147
  mode = which_mode(output_file, source_path)
143
148
 
144
149
  if mode == :created || mode == :updated
145
- FileUtils.mkdir_p(output_file.dirname)
150
+ ::FileUtils.mkdir_p(output_file.dirname)
146
151
  method.call(source_path, output_file.to_s)
147
152
  end
148
153
 
149
154
  source.unlink if source.is_a? Tempfile
150
155
 
151
156
  trigger(mode, output_file)
157
+ # end
152
158
  end
153
159
 
154
160
  # Try to output a resource and capture errors.
@@ -162,7 +168,7 @@ module Middleman
162
168
  if resource.binary?
163
169
  export_file!(output_file, resource.file_descriptor[:full_path])
164
170
  else
165
- response = @rack.get(URI.escape(resource.request_path))
171
+ response = @rack.get(::URI.escape(resource.request_path))
166
172
 
167
173
  # If we get a response, save it to a tempfile.
168
174
  if response.status == 200