jekyll-minibundle 2.1.2 → 2.2.0

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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +96 -42
  3. data/LICENSE.txt +1 -1
  4. data/README.md +232 -52
  5. data/Rakefile +16 -0
  6. data/jekyll-minibundle.gemspec +7 -6
  7. data/lib/jekyll/minibundle/asset_bundle.rb +3 -3
  8. data/lib/jekyll/minibundle/asset_file_drop.rb +45 -0
  9. data/lib/jekyll/minibundle/asset_file_properties.rb +12 -8
  10. data/lib/jekyll/minibundle/asset_file_registry.rb +4 -4
  11. data/lib/jekyll/minibundle/asset_tag_markup.rb +21 -20
  12. data/lib/jekyll/minibundle/bundle_file.rb +6 -1
  13. data/lib/jekyll/minibundle/development_file.rb +2 -1
  14. data/lib/jekyll/minibundle/development_file_collection.rb +2 -2
  15. data/lib/jekyll/minibundle/environment.rb +13 -15
  16. data/lib/jekyll/minibundle/files.rb +16 -18
  17. data/lib/jekyll/minibundle/hashes.rb +10 -12
  18. data/lib/jekyll/minibundle/log.rb +5 -7
  19. data/lib/jekyll/minibundle/mini_bundle_block.rb +35 -12
  20. data/lib/jekyll/minibundle/mini_stamp_tag.rb +108 -16
  21. data/lib/jekyll/minibundle/stamp_file.rb +1 -0
  22. data/lib/jekyll/minibundle/variable_template.rb +145 -0
  23. data/lib/jekyll/minibundle/variable_template_registry.rb +19 -0
  24. data/lib/jekyll/minibundle/version.rb +1 -1
  25. data/test/fixture/site/_bin/with_count +1 -1
  26. data/test/integration/minibundle_development_mode_test.rb +146 -61
  27. data/test/integration/minibundle_production_mode_test.rb +271 -143
  28. data/test/integration/ministamp_development_mode_test.rb +66 -25
  29. data/test/integration/ministamp_production_mode_test.rb +129 -37
  30. data/test/integration/static_files_as_asset_sources_test.rb +10 -10
  31. data/test/support/assertions.rb +1 -1
  32. data/test/support/{static_file_api_config.rb → static_file_config.rb} +6 -3
  33. data/test/support/test_case.rb +7 -4
  34. data/test/unit/asset_bundle_test.rb +6 -6
  35. data/test/unit/asset_file_drop_test.rb +65 -0
  36. data/test/unit/asset_file_registry_test.rb +136 -98
  37. data/test/unit/asset_tag_markup_test.rb +11 -5
  38. data/test/unit/bundle_file_properties_test.rb +44 -23
  39. data/test/unit/bundle_file_writing_test.rb +50 -32
  40. data/test/unit/development_file_properties_test.rb +95 -0
  41. data/test/unit/development_file_writing_test.rb +15 -6
  42. data/test/unit/environment_test.rb +3 -3
  43. data/test/unit/files_test.rb +7 -7
  44. data/test/unit/hashes_test.rb +12 -12
  45. data/test/unit/jekyll_static_file_api_test.rb +91 -20
  46. data/test/unit/mini_bundle_block_test.rb +59 -9
  47. data/test/unit/mini_stamp_tag_test.rb +37 -6
  48. data/test/unit/stamp_file_properties_test.rb +47 -24
  49. data/test/unit/stamp_file_writing_test.rb +33 -24
  50. data/test/unit/variable_template_test.rb +121 -0
  51. metadata +27 -6
  52. data/test/unit/development_file_collection_properties_test.rb +0 -106
@@ -7,55 +7,55 @@ module Jekyll::Minibundle::Test
7
7
 
8
8
  def test_css_asset_bundle_has_stamp
9
9
  with_precompiled_site(:production) do
10
- assert_equal CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_css_path_from_index
10
+ assert_equal(CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_css_path_from_index)
11
11
  end
12
12
  end
13
13
 
14
14
  def test_js_asset_bundle_has_stamp
15
15
  with_precompiled_site(:production) do
16
- assert_equal JS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_js_path_from_index
16
+ assert_equal(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_js_path_from_index)
17
17
  end
18
18
  end
19
19
 
20
20
  def test_css_asset_bundle_has_configured_attributes
21
21
  with_precompiled_site(:production) do
22
22
  element = find_css_element_from_index
23
- assert_equal 'my-styles', element['id']
24
- assert_equal 'projection', element['media']
23
+ assert_equal('my-styles', element['id'])
24
+ assert_equal('projection', element['media'])
25
25
  end
26
26
  end
27
27
 
28
28
  def test_js_asset_bundle_has_configured_attributes
29
29
  with_precompiled_site(:production) do
30
30
  element = find_js_element_from_index
31
- assert_equal 'my-scripts', element['id']
32
- assert_equal '', element['async']
31
+ assert_equal('my-scripts', element['id'])
32
+ assert_equal('', element['async'])
33
33
  end
34
34
  end
35
35
 
36
36
  def test_copies_css_asset_bundle_to_destination_dir
37
37
  with_precompiled_site(:production) do
38
- assert File.exist?(destination_path(CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
38
+ assert(File.file?(destination_path(CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
39
39
  end
40
40
  end
41
41
 
42
42
  def test_copies_js_asset_bundle_to_destination_dir
43
43
  with_precompiled_site(:production) do
44
- assert File.exist?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
44
+ assert(File.file?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
45
45
  end
46
46
  end
47
47
 
48
48
  def test_concatenates_css_asset_bundle_in_configured_order
49
49
  with_precompiled_site(:production) do
50
50
  bundle = File.read(destination_path(CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
51
- assert_operator bundle.index('html { margin: 0; }'), :<, bundle.index('p { margin: 0; }')
51
+ assert_operator(bundle.index('html { margin: 0; }'), :<, bundle.index('p { margin: 0; }'))
52
52
  end
53
53
  end
54
54
 
55
55
  def test_concatenates_js_asset_bundle_in_configured_order
56
56
  with_precompiled_site(:production) do
57
57
  bundle = File.read(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
58
- assert_operator bundle.index('root.dependency = {};'), :<, bundle.index('root.app = {};')
58
+ assert_operator(bundle.index('root.dependency = {};'), :<, bundle.index('root.app = {};'))
59
59
  end
60
60
  end
61
61
 
@@ -70,7 +70,7 @@ module Jekyll::Minibundle::Test
70
70
  with_precompiled_site(:production) do
71
71
  source_contents_size = source_assets_size(CSS_BUNDLE_SOURCE_DIR, %w{reset common}, 'css')
72
72
  destination_contents_size = File.read(destination_path(CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH)).size
73
- assert_operator destination_contents_size, :<, source_contents_size
73
+ assert_operator(destination_contents_size, :<, source_contents_size)
74
74
  end
75
75
  end
76
76
 
@@ -78,7 +78,7 @@ module Jekyll::Minibundle::Test
78
78
  with_precompiled_site(:production) do
79
79
  source_contents_size = source_assets_size(JS_BUNDLE_SOURCE_DIR, %w{dependency app}, 'js')
80
80
  destination_contents_size = File.read(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)).size
81
- assert_operator destination_contents_size, :<, source_contents_size
81
+ assert_operator(destination_contents_size, :<, source_contents_size)
82
82
  end
83
83
  end
84
84
 
@@ -90,12 +90,12 @@ module Jekyll::Minibundle::Test
90
90
 
91
91
  generate_site(:production, clear_cache: false)
92
92
 
93
- refute File.exist?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
93
+ refute(File.file?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
94
94
 
95
95
  new_destination = 'assets/site-375a0b430b0c5555d0edd2205d26c04d.js'
96
96
 
97
- assert_equal new_destination, find_js_path_from_index
98
- assert File.exist?(destination_path(new_destination))
97
+ assert_equal(new_destination, find_js_path_from_index)
98
+ assert(File.file?(destination_path(new_destination)))
99
99
  end
100
100
  end
101
101
 
@@ -108,9 +108,9 @@ module Jekyll::Minibundle::Test
108
108
 
109
109
  generate_site(:production, clear_cache: false)
110
110
 
111
- assert_equal JS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_js_path_from_index
112
- assert File.exist?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
113
- assert_operator file_mtime_of(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)), :>, org_mtime
111
+ assert_equal(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_js_path_from_index)
112
+ assert(File.file?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
113
+ assert_operator(file_mtime_of(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)), :>, org_mtime)
114
114
  end
115
115
  end
116
116
 
@@ -139,7 +139,7 @@ module Jekyll::Minibundle::Test
139
139
 
140
140
  new_mtime = file_mtime_of(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
141
141
 
142
- assert_operator new_mtime, :>, org_mtime
142
+ assert_operator(new_mtime, :>, org_mtime)
143
143
  end
144
144
  end
145
145
 
@@ -147,7 +147,7 @@ module Jekyll::Minibundle::Test
147
147
  with_site_dir do
148
148
  generate_site(:production)
149
149
 
150
- assert File.exist?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
150
+ assert(File.file?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
151
151
 
152
152
  match_snippet = <<-END
153
153
  assets:
@@ -166,12 +166,12 @@ module Jekyll::Minibundle::Test
166
166
 
167
167
  generate_site(:production, clear_cache: false)
168
168
 
169
- refute File.exist?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
169
+ refute(File.file?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
170
170
 
171
171
  new_destination = 'assets/site-71042d0b7c86c04e015fde694dd9f409.js'
172
172
 
173
- assert_equal new_destination, find_js_path_from_index
174
- assert File.exist?(destination_path(new_destination))
173
+ assert_equal(new_destination, find_js_path_from_index)
174
+ assert(File.file?(destination_path(new_destination)))
175
175
  end
176
176
  end
177
177
 
@@ -181,7 +181,7 @@ module Jekyll::Minibundle::Test
181
181
 
182
182
  generate_site(:production)
183
183
 
184
- assert File.exist?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
184
+ assert(File.file?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
185
185
 
186
186
  match_snippet = <<-END
187
187
  assets:
@@ -202,8 +202,8 @@ module Jekyll::Minibundle::Test
202
202
 
203
203
  generate_site(:production, clear_cache: false)
204
204
 
205
- refute File.exist?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
206
- assert File.exist?(destination_path('assets/site-71042d0b7c86c04e015fde694dd9f409.js'))
205
+ refute(File.file?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
206
+ assert(File.file?(destination_path('assets/site-71042d0b7c86c04e015fde694dd9f409.js')))
207
207
  assert((find_tempfiles('*.js') & old_tempfiles).empty?)
208
208
  end
209
209
  end
@@ -212,7 +212,7 @@ module Jekyll::Minibundle::Test
212
212
  with_site_dir do
213
213
  generate_site(:production)
214
214
 
215
- assert File.exist?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
215
+ assert(File.file?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
216
216
 
217
217
  ensure_file_mtime_changes do
218
218
  change_destination_path_in_minibundle_block('assets/site', 'assets/site2')
@@ -220,12 +220,12 @@ module Jekyll::Minibundle::Test
220
220
 
221
221
  generate_site(:production, clear_cache: false)
222
222
 
223
- refute File.exist?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
223
+ refute(File.file?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
224
224
 
225
225
  new_destination = "assets/site2-#{JS_BUNDLE_FINGERPRINT}.js"
226
226
 
227
- assert_equal new_destination, find_js_path_from_index
228
- assert File.exist?(destination_path(new_destination))
227
+ assert_equal(new_destination, find_js_path_from_index)
228
+ assert(File.file?(destination_path(new_destination)))
229
229
  end
230
230
  end
231
231
 
@@ -235,7 +235,7 @@ module Jekyll::Minibundle::Test
235
235
 
236
236
  generate_site(:production)
237
237
 
238
- assert File.exist?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
238
+ assert(File.file?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
239
239
 
240
240
  old_tempfiles = find_tempfiles('*.js') - other_tempfiles
241
241
 
@@ -245,8 +245,8 @@ module Jekyll::Minibundle::Test
245
245
 
246
246
  generate_site(:production, clear_cache: false)
247
247
 
248
- refute File.exist?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
249
- assert File.exist?(destination_path("assets/site2-#{JS_BUNDLE_FINGERPRINT}.js"))
248
+ refute(File.file?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
249
+ assert(File.file?(destination_path("assets/site2-#{JS_BUNDLE_FINGERPRINT}.js")))
250
250
  assert((find_tempfiles('*.js') & old_tempfiles).empty?)
251
251
  end
252
252
  end
@@ -255,7 +255,7 @@ module Jekyll::Minibundle::Test
255
255
  with_site_dir do
256
256
  generate_site(:production)
257
257
 
258
- assert File.exist?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
258
+ assert(File.file?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
259
259
 
260
260
  ensure_file_mtime_changes do
261
261
  change_destination_path_in_minibundle_block('assets/site', 'assets/site2')
@@ -263,12 +263,12 @@ module Jekyll::Minibundle::Test
263
263
 
264
264
  generate_site(:production, clear_cache: false)
265
265
 
266
- refute File.exist?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
266
+ refute(File.file?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
267
267
 
268
268
  new_destination = "assets/site2-#{JS_BUNDLE_FINGERPRINT}.js"
269
269
 
270
- assert_equal new_destination, find_js_path_from_index
271
- assert File.exist?(destination_path(new_destination))
270
+ assert_equal(new_destination, find_js_path_from_index)
271
+ assert(File.file?(destination_path(new_destination)))
272
272
 
273
273
  ensure_file_mtime_changes do
274
274
  change_destination_path_in_minibundle_block('assets/site2', 'assets/site')
@@ -276,9 +276,9 @@ module Jekyll::Minibundle::Test
276
276
 
277
277
  generate_site(:production, clear_cache: false)
278
278
 
279
- refute File.exist?(destination_path(new_destination))
280
- assert_equal JS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_js_path_from_index
281
- assert File.exist?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
279
+ refute(File.file?(destination_path(new_destination)))
280
+ assert_equal(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_js_path_from_index)
281
+ assert(File.file?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
282
282
  end
283
283
  end
284
284
 
@@ -286,7 +286,7 @@ module Jekyll::Minibundle::Test
286
286
  with_site_dir do
287
287
  generate_site(:production)
288
288
 
289
- assert_equal 0, get_minifier_cmd_count
289
+ assert_equal(0, get_minifier_cmd_count)
290
290
  destination = destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)
291
291
  org_mtime = file_mtime_of(destination)
292
292
 
@@ -305,8 +305,8 @@ module Jekyll::Minibundle::Test
305
305
 
306
306
  generate_site(:production, clear_cache: false)
307
307
 
308
- assert_equal 1, get_minifier_cmd_count
309
- assert_operator file_mtime_of(destination), :>, org_mtime
308
+ assert_equal(1, get_minifier_cmd_count)
309
+ assert_operator(file_mtime_of(destination), :>, org_mtime)
310
310
  end
311
311
  end
312
312
 
@@ -319,11 +319,11 @@ module Jekyll::Minibundle::Test
319
319
  org_mtime_css = file_mtime_of(destination_css)
320
320
  org_mtime_js = file_mtime_of(destination_js)
321
321
 
322
- assert File.exist?(destination_css)
323
- assert File.exist?(destination_js)
322
+ assert(File.file?(destination_css))
323
+ assert(File.file?(destination_js))
324
324
 
325
- assert_equal CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_css_path_from_index
326
- assert_equal JS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_js_path_from_index
325
+ assert_equal(CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_css_path_from_index)
326
+ assert_equal(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_js_path_from_index)
327
327
 
328
328
  ensure_file_mtime_changes do
329
329
  find_and_gsub_in_file(
@@ -335,94 +335,120 @@ module Jekyll::Minibundle::Test
335
335
 
336
336
  generate_site(:production, clear_cache: false)
337
337
 
338
- assert File.exist?(destination_css)
339
- assert File.exist?(destination_js)
340
- assert_equal org_mtime_css, file_mtime_of(destination_css)
341
- assert_equal org_mtime_js, file_mtime_of(destination_js)
342
- assert_equal "/#{CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH}", find_css_path_from_index
343
- assert_equal "/#{JS_BUNDLE_DESTINATION_FINGERPRINT_PATH}", find_js_path_from_index
338
+ assert(File.file?(destination_css))
339
+ assert(File.file?(destination_js))
340
+ assert_equal(org_mtime_css, file_mtime_of(destination_css))
341
+ assert_equal(org_mtime_js, file_mtime_of(destination_js))
342
+ assert_equal("/#{CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH}", find_css_path_from_index)
343
+ assert_equal("/#{JS_BUNDLE_DESTINATION_FINGERPRINT_PATH}", find_js_path_from_index)
344
344
  end
345
345
  end
346
346
 
347
347
  def test_supports_baseurl
348
348
  with_site_dir do
349
- generate_site(:production)
350
-
351
- assert File.exist?(destination_path(CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
352
- assert File.exist?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
353
-
354
- assert_equal CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_css_path_from_index
355
- assert_equal JS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_js_path_from_index
356
-
357
- find_and_gsub_in_file(source_path('_layouts/default.html'), '{% minibundle css %}', "{% minibundle css %}\n baseurl: /css-root")
358
- find_and_gsub_in_file(source_path('_layouts/default.html'), '{% minibundle js %}', "{% minibundle js %}\n baseurl: /js-root")
359
-
360
- generate_site(:production, clear_cache: false)
361
-
362
- assert_equal "/css-root/#{CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH}", find_css_path_from_index
363
- assert_equal "/js-root/#{JS_BUNDLE_DESTINATION_FINGERPRINT_PATH}", find_js_path_from_index
364
- end
365
- end
349
+ merge_to_yaml_file(source_path('_config.yml'), 'baseurl' => '/root')
350
+
351
+ find_and_gsub_in_file(
352
+ source_path('_layouts/default.html'),
353
+ ' {% minibundle css %}',
354
+ <<-END
355
+ {% minibundle css %}
356
+ baseurl: '{{ site.baseurl }}/'
357
+ END
358
+ )
366
359
 
367
- def test_supports_baseurl_via_liquid_variable
368
- with_site_dir do
369
- merge_to_yaml_file(source_path('_config.yml'), 'baseurl' => '/')
370
- find_and_gsub_in_file(source_path('_layouts/default.html'), '{% minibundle css %}', "{% minibundle css %}\n baseurl: {{ site.baseurl }}")
371
- find_and_gsub_in_file(source_path('_layouts/default.html'), '{% minibundle js %}', "{% minibundle js %}\n baseurl: {{ site.baseurl }}")
360
+ find_and_gsub_in_file(
361
+ source_path('_layouts/default.html'),
362
+ ' {% minibundle js %}',
363
+ <<-END
364
+ {% minibundle js %}
365
+ baseurl: {{ site.baseurl }}/js
366
+ END
367
+ )
372
368
 
373
369
  generate_site(:production)
374
370
 
375
- assert File.exist?(destination_path(CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
376
- assert File.exist?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
371
+ assert(File.file?(destination_path(CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
372
+ assert(File.file?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
377
373
 
378
- assert_equal "/#{CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH}", find_css_path_from_index
379
- assert_equal "/#{JS_BUNDLE_DESTINATION_FINGERPRINT_PATH}", find_js_path_from_index
374
+ assert_equal("/root/#{CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH}", find_css_path_from_index)
375
+ assert_equal("/root/js/#{JS_BUNDLE_DESTINATION_FINGERPRINT_PATH}", find_js_path_from_index)
380
376
  end
381
377
  end
382
378
 
383
379
  def test_strips_dot_slash_from_dot_baseurl
384
380
  with_site_dir do
385
- find_and_gsub_in_file(source_path('_layouts/default.html'), '{% minibundle css %}', "{% minibundle css %}\n baseurl: .")
386
- find_and_gsub_in_file(source_path('_layouts/default.html'), '{% minibundle js %}', "{% minibundle js %}\n baseurl: .")
381
+ find_and_gsub_in_file(
382
+ source_path('_layouts/default.html'),
383
+ ' {% minibundle css %}',
384
+ <<-END
385
+ {% minibundle css %}
386
+ baseurl: .
387
+ END
388
+ )
389
+
390
+ find_and_gsub_in_file(
391
+ source_path('_layouts/default.html'),
392
+ ' {% minibundle js %}',
393
+ <<-END
394
+ {% minibundle js %}
395
+ baseurl: .
396
+ END
397
+ )
387
398
 
388
399
  generate_site(:production)
389
400
 
390
- assert File.exist?(destination_path(CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
391
- assert File.exist?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
401
+ assert(File.file?(destination_path(CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
402
+ assert(File.file?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
392
403
 
393
- assert_equal CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_css_path_from_index
394
- assert_equal JS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_js_path_from_index
404
+ assert_equal(CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_css_path_from_index)
405
+ assert_equal(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_js_path_from_index)
395
406
 
396
407
  generate_site(:production, clear_cache: false)
397
408
 
398
- assert File.exist?(destination_path(CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
399
- assert File.exist?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
409
+ assert(File.file?(destination_path(CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
410
+ assert(File.file?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
400
411
 
401
- assert_equal CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_css_path_from_index
402
- assert_equal JS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_js_path_from_index
412
+ assert_equal(CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_css_path_from_index)
413
+ assert_equal(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_js_path_from_index)
403
414
  end
404
415
  end
405
416
 
406
417
  def test_strips_dot_slash_from_dot_slash_baseurl
407
418
  with_site_dir do
408
- find_and_gsub_in_file(source_path('_layouts/default.html'), '{% minibundle css %}', "{% minibundle css %}\n baseurl: ./")
409
- find_and_gsub_in_file(source_path('_layouts/default.html'), '{% minibundle js %}', "{% minibundle js %}\n baseurl: ./")
419
+ find_and_gsub_in_file(
420
+ source_path('_layouts/default.html'),
421
+ ' {% minibundle css %}',
422
+ <<-END
423
+ {% minibundle css %}
424
+ baseurl: ./
425
+ END
426
+ )
427
+
428
+ find_and_gsub_in_file(
429
+ source_path('_layouts/default.html'),
430
+ ' {% minibundle js %}',
431
+ <<-END
432
+ {% minibundle js %}
433
+ baseurl: ./
434
+ END
435
+ )
410
436
 
411
437
  generate_site(:production)
412
438
 
413
- assert File.exist?(destination_path(CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
414
- assert File.exist?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
439
+ assert(File.file?(destination_path(CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
440
+ assert(File.file?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
415
441
 
416
- assert_equal CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_css_path_from_index
417
- assert_equal JS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_js_path_from_index
442
+ assert_equal(CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_css_path_from_index)
443
+ assert_equal(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_js_path_from_index)
418
444
 
419
445
  generate_site(:production, clear_cache: false)
420
446
 
421
- assert File.exist?(destination_path(CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
422
- assert File.exist?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
447
+ assert(File.file?(destination_path(CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
448
+ assert(File.file?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
423
449
 
424
- assert_equal CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_css_path_from_index
425
- assert_equal JS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_js_path_from_index
450
+ assert_equal(CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_css_path_from_index)
451
+ assert_equal(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_js_path_from_index)
426
452
  end
427
453
  end
428
454
 
@@ -432,19 +458,19 @@ module Jekyll::Minibundle::Test
432
458
 
433
459
  generate_site(:production)
434
460
 
435
- assert File.exist?(destination_path("site-#{CSS_BUNDLE_FINGERPRINT}.css"))
436
- assert File.exist?(destination_path("site-#{JS_BUNDLE_FINGERPRINT}.js"))
461
+ assert(File.file?(destination_path("site-#{CSS_BUNDLE_FINGERPRINT}.css")))
462
+ assert(File.file?(destination_path("site-#{JS_BUNDLE_FINGERPRINT}.js")))
437
463
 
438
- assert_equal "site-#{CSS_BUNDLE_FINGERPRINT}.css", find_css_path_from_index
439
- assert_equal "site-#{JS_BUNDLE_FINGERPRINT}.js", find_js_path_from_index
464
+ assert_equal("site-#{CSS_BUNDLE_FINGERPRINT}.css", find_css_path_from_index)
465
+ assert_equal("site-#{JS_BUNDLE_FINGERPRINT}.js", find_js_path_from_index)
440
466
 
441
467
  generate_site(:production, clear_cache: false)
442
468
 
443
- assert File.exist?(destination_path("site-#{CSS_BUNDLE_FINGERPRINT}.css"))
444
- assert File.exist?(destination_path("site-#{JS_BUNDLE_FINGERPRINT}.js"))
469
+ assert(File.file?(destination_path("site-#{CSS_BUNDLE_FINGERPRINT}.css")))
470
+ assert(File.file?(destination_path("site-#{JS_BUNDLE_FINGERPRINT}.js")))
445
471
 
446
- assert_equal "site-#{CSS_BUNDLE_FINGERPRINT}.css", find_css_path_from_index
447
- assert_equal "site-#{JS_BUNDLE_FINGERPRINT}.js", find_js_path_from_index
472
+ assert_equal("site-#{CSS_BUNDLE_FINGERPRINT}.css", find_css_path_from_index)
473
+ assert_equal("site-#{JS_BUNDLE_FINGERPRINT}.js", find_js_path_from_index)
448
474
  end
449
475
  end
450
476
 
@@ -454,19 +480,59 @@ module Jekyll::Minibundle::Test
454
480
 
455
481
  generate_site(:production)
456
482
 
457
- assert File.exist?(destination_path("site-#{CSS_BUNDLE_FINGERPRINT}.css"))
458
- assert File.exist?(destination_path("site-#{JS_BUNDLE_FINGERPRINT}.js"))
483
+ assert(File.file?(destination_path("site-#{CSS_BUNDLE_FINGERPRINT}.css")))
484
+ assert(File.file?(destination_path("site-#{JS_BUNDLE_FINGERPRINT}.js")))
459
485
 
460
- assert_equal "site-#{CSS_BUNDLE_FINGERPRINT}.css", find_css_path_from_index
461
- assert_equal "site-#{JS_BUNDLE_FINGERPRINT}.js", find_js_path_from_index
486
+ assert_equal("site-#{CSS_BUNDLE_FINGERPRINT}.css", find_css_path_from_index)
487
+ assert_equal("site-#{JS_BUNDLE_FINGERPRINT}.js", find_js_path_from_index)
462
488
 
463
489
  generate_site(:production, clear_cache: false)
464
490
 
465
- assert File.exist?(destination_path("site-#{CSS_BUNDLE_FINGERPRINT}.css"))
466
- assert File.exist?(destination_path("site-#{JS_BUNDLE_FINGERPRINT}.js"))
491
+ assert(File.file?(destination_path("site-#{CSS_BUNDLE_FINGERPRINT}.css")))
492
+ assert(File.file?(destination_path("site-#{JS_BUNDLE_FINGERPRINT}.js")))
493
+
494
+ assert_equal("site-#{CSS_BUNDLE_FINGERPRINT}.css", find_css_path_from_index)
495
+ assert_equal("site-#{JS_BUNDLE_FINGERPRINT}.js", find_js_path_from_index)
496
+ end
497
+ end
498
+
499
+ def test_supports_destination_baseurl
500
+ with_site_dir do
501
+ merge_to_yaml_file(source_path('_config.yml'), 'cdn_baseurl' => 'https://cdn.example.com/?file=')
502
+
503
+ find_and_gsub_in_file(
504
+ source_path('_layouts/default.html'),
505
+ ' {% minibundle css %}',
506
+ <<-END
507
+ {% minibundle css %}
508
+ baseurl: /ignored
509
+ destination_baseurl: {{ site.cdn_baseurl }}css/
510
+ END
511
+ )
512
+
513
+ find_and_gsub_in_file(
514
+ source_path('_layouts/default.html'),
515
+ / #{Regexp.escape('{% minibundle js %}')}.*#{Regexp.escape('{% endminibundle %}')}/m,
516
+ <<-END
517
+ {% minibundle js %}
518
+ source_dir: _assets/scripts
519
+ destination_path: static
520
+ baseurl: /ignored
521
+ destination_baseurl: '{{ site.cdn_baseurl }}'
522
+ assets:
523
+ - dependency
524
+ - app
525
+ {% endminibundle %}
526
+ END
527
+ )
528
+
529
+ generate_site(:production)
530
+
531
+ assert(File.file?(destination_path(CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
532
+ assert(File.file?(destination_path("static-#{JS_BUNDLE_FINGERPRINT}.js")))
467
533
 
468
- assert_equal "site-#{CSS_BUNDLE_FINGERPRINT}.css", find_css_path_from_index
469
- assert_equal "site-#{JS_BUNDLE_FINGERPRINT}.js", find_js_path_from_index
534
+ assert_equal("https://cdn.example.com/?file=css/site-#{CSS_BUNDLE_FINGERPRINT}.css", find_css_path_from_index)
535
+ assert_equal("https://cdn.example.com/?file=static-#{JS_BUNDLE_FINGERPRINT}.js", find_js_path_from_index)
470
536
  end
471
537
  end
472
538
 
@@ -474,23 +540,23 @@ module Jekyll::Minibundle::Test
474
540
  with_site_dir do
475
541
  generate_site(:production)
476
542
 
477
- assert_equal CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_css_path_from_index
478
- assert_equal JS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_js_path_from_index
543
+ assert_equal(CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_css_path_from_index)
544
+ assert_equal(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH, find_js_path_from_index)
479
545
 
480
546
  find_and_gsub_in_file(source_path('_layouts/default.html'), 'id: my-styles', 'id: my-styles2')
481
547
  find_and_gsub_in_file(source_path('_layouts/default.html'), 'id: my-scripts', 'id: my-scripts2')
482
548
 
483
549
  generate_site(:production, clear_cache: false)
484
550
 
485
- assert_equal 'my-styles2', find_css_element_from_index['id']
486
- assert_equal 'my-scripts2', find_js_element_from_index['id']
551
+ assert_equal('my-styles2', find_css_element_from_index['id'])
552
+ assert_equal('my-scripts2', find_js_element_from_index['id'])
487
553
  end
488
554
  end
489
555
 
490
556
  def test_bundles_assets_only_once_at_startup
491
557
  with_site_dir do
492
558
  generate_site(:production, minifier_cmd_js: minifier_cmd_to_remove_comments_and_count)
493
- assert_equal 1, get_minifier_cmd_count
559
+ assert_equal(1, get_minifier_cmd_count)
494
560
  end
495
561
  end
496
562
 
@@ -501,21 +567,21 @@ module Jekyll::Minibundle::Test
501
567
  expected_js_path = destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)
502
568
  org_mtime = file_mtime_of(expected_js_path)
503
569
 
504
- assert_equal 1, get_minifier_cmd_count
570
+ assert_equal(1, get_minifier_cmd_count)
505
571
 
506
572
  ensure_file_mtime_changes { File.write(source_path(CSS_BUNDLE_SOURCE_DIR, 'common.css'), 'h1 {}') }
507
573
 
508
574
  generate_site(:production, clear_cache: false, minifier_cmd_js: minifier_cmd_to_remove_comments_and_count)
509
575
 
510
- assert_equal org_mtime, file_mtime_of(expected_js_path)
511
- assert_equal 1, get_minifier_cmd_count
576
+ assert_equal(org_mtime, file_mtime_of(expected_js_path))
577
+ assert_equal(1, get_minifier_cmd_count)
512
578
 
513
579
  ensure_file_mtime_changes { FileUtils.touch('index.html') }
514
580
 
515
581
  generate_site(:production, clear_cache: false, minifier_cmd_js: minifier_cmd_to_remove_comments_and_count)
516
582
 
517
- assert_equal org_mtime, file_mtime_of(expected_js_path)
518
- assert_equal 1, get_minifier_cmd_count
583
+ assert_equal(org_mtime, file_mtime_of(expected_js_path))
584
+ assert_equal(1, get_minifier_cmd_count)
519
585
  end
520
586
  end
521
587
 
@@ -526,7 +592,7 @@ module Jekyll::Minibundle::Test
526
592
  expected_js_path = destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)
527
593
  org_mtime = file_mtime_of(expected_js_path)
528
594
 
529
- assert_equal 1, get_minifier_cmd_count
595
+ assert_equal(1, get_minifier_cmd_count)
530
596
 
531
597
  ensure_file_mtime_changes do
532
598
  find_and_gsub_in_file(source_path('_layouts/default.html'), 'id: my-scripts', 'id: my-scripts2')
@@ -534,8 +600,8 @@ module Jekyll::Minibundle::Test
534
600
 
535
601
  generate_site(:production, clear_cache: false, minifier_cmd_js: minifier_cmd_to_remove_comments_and_count)
536
602
 
537
- assert_equal org_mtime, file_mtime_of(expected_js_path)
538
- assert_equal 1, get_minifier_cmd_count
603
+ assert_equal(org_mtime, file_mtime_of(expected_js_path))
604
+ assert_equal(1, get_minifier_cmd_count)
539
605
  end
540
606
  end
541
607
 
@@ -546,16 +612,52 @@ module Jekyll::Minibundle::Test
546
612
  expected_js_path = destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)
547
613
  org_mtime = file_mtime_of(expected_js_path)
548
614
 
549
- assert_equal 1, get_minifier_cmd_count
615
+ assert_equal(1, get_minifier_cmd_count)
550
616
 
551
617
  ensure_file_mtime_changes do
552
- find_and_gsub_in_file(source_path('_layouts/default.html'), '{% minibundle js %}', "{% minibundle js %}\n baseurl: /js-root")
618
+ find_and_gsub_in_file(
619
+ source_path('_layouts/default.html'),
620
+ ' {% minibundle js %}',
621
+ <<-END
622
+ {% minibundle js %}
623
+ baseurl: /js-root
624
+ END
625
+ )
553
626
  end
554
627
 
555
628
  generate_site(:production, clear_cache: false, minifier_cmd_js: minifier_cmd_to_remove_comments_and_count)
556
629
 
557
- assert_equal org_mtime, file_mtime_of(expected_js_path)
558
- assert_equal 1, get_minifier_cmd_count
630
+ assert_equal(org_mtime, file_mtime_of(expected_js_path))
631
+ assert_equal(1, get_minifier_cmd_count)
632
+ assert_equal("/js-root/#{JS_BUNDLE_DESTINATION_FINGERPRINT_PATH}", find_js_path_from_index)
633
+ end
634
+ end
635
+
636
+ def test_does_not_rebundle_assets_when_changing_destination_baseurl
637
+ with_site_dir do
638
+ generate_site(:production, minifier_cmd_js: minifier_cmd_to_remove_comments_and_count)
639
+
640
+ expected_js_path = destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)
641
+ org_mtime = file_mtime_of(expected_js_path)
642
+
643
+ assert_equal(1, get_minifier_cmd_count)
644
+
645
+ ensure_file_mtime_changes do
646
+ find_and_gsub_in_file(
647
+ source_path('_layouts/default.html'),
648
+ ' {% minibundle js %}',
649
+ <<-END
650
+ {% minibundle js %}
651
+ destination_baseurl: /root/
652
+ END
653
+ )
654
+ end
655
+
656
+ generate_site(:production, clear_cache: false, minifier_cmd_js: minifier_cmd_to_remove_comments_and_count)
657
+
658
+ assert_equal(org_mtime, file_mtime_of(expected_js_path))
659
+ assert_equal(1, get_minifier_cmd_count)
660
+ assert_equal("/root/site-#{JS_BUNDLE_FINGERPRINT}.js", find_js_path_from_index)
559
661
  end
560
662
  end
561
663
 
@@ -568,9 +670,9 @@ module Jekyll::Minibundle::Test
568
670
 
569
671
  generate_site(:production, minifier_cmd_js: nil)
570
672
 
571
- assert_equal 0, get_minifier_cmd_count
572
- assert_equal 1, get_minifier_cmd_count('minifier_cmd_config_count')
573
- assert File.exist?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
673
+ assert_equal(0, get_minifier_cmd_count)
674
+ assert_equal(1, get_minifier_cmd_count('minifier_cmd_config_count'))
675
+ assert(File.file?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
574
676
  end
575
677
  end
576
678
 
@@ -583,9 +685,9 @@ module Jekyll::Minibundle::Test
583
685
 
584
686
  generate_site(:production, minifier_cmd_js: minifier_cmd_to_remove_comments_and_count('minifier_cmd_env_count'))
585
687
 
586
- assert_equal 0, get_minifier_cmd_count('minifier_cmd_config_count')
587
- assert_equal 1, get_minifier_cmd_count('minifier_cmd_env_count')
588
- assert File.exist?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
688
+ assert_equal(0, get_minifier_cmd_count('minifier_cmd_config_count'))
689
+ assert_equal(1, get_minifier_cmd_count('minifier_cmd_env_count'))
690
+ assert(File.file?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
589
691
  end
590
692
  end
591
693
 
@@ -615,11 +717,11 @@ title: Test
615
717
 
616
718
  generate_site(:production, minifier_cmd_js: minifier_cmd_to_remove_comments_and_count('minifier_cmd_global_count'))
617
719
 
618
- assert_equal 1, get_minifier_cmd_count('minifier_cmd_local_count')
619
- assert File.exist?(destination_path('assets/deps-71042d0b7c86c04e015fde694dd9f409.js'))
720
+ assert_equal(1, get_minifier_cmd_count('minifier_cmd_local_count'))
721
+ assert(File.file?(destination_path('assets/deps-71042d0b7c86c04e015fde694dd9f409.js')))
620
722
 
621
- assert_equal 1, get_minifier_cmd_count('minifier_cmd_global_count')
622
- assert File.exist?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
723
+ assert_equal(1, get_minifier_cmd_count('minifier_cmd_global_count'))
724
+ assert(File.file?(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
623
725
  end
624
726
  end
625
727
 
@@ -627,11 +729,37 @@ title: Test
627
729
  with_site_dir do
628
730
  with_umask(0o027) do
629
731
  generate_site(:production)
630
- assert_equal 0o640, file_permissions_of(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH))
732
+ assert_equal(0o640, file_permissions_of(destination_path(JS_BUNDLE_DESTINATION_FINGERPRINT_PATH)))
631
733
  end
632
734
  end
633
735
  end
634
736
 
737
+ def test_escapes_destination_path_url_and_attributes_in_generated_html_element
738
+ with_site_dir do
739
+ find_and_gsub_in_file(
740
+ source_path('_layouts/default.html'),
741
+ / #{Regexp.escape('{% minibundle js %}')}.*#{Regexp.escape('{% endminibundle %}')}/m,
742
+ <<-END
743
+ {% minibundle js %}
744
+ source_dir: _assets/scripts
745
+ destination_path: 'dst">'
746
+ assets:
747
+ - dependency
748
+ - app
749
+ attributes:
750
+ test: '"/><br>'
751
+ {% endminibundle %}
752
+ END
753
+ )
754
+
755
+ generate_site(:production)
756
+
757
+ assert(File.file?(destination_path(%{dst">-#{JS_BUNDLE_FINGERPRINT}.js})))
758
+ assert_equal(%{dst">-#{JS_BUNDLE_FINGERPRINT}.js}, find_js_path_from_index)
759
+ assert_equal('"/><br>', find_js_element_from_index['test'])
760
+ end
761
+ end
762
+
635
763
  private
636
764
 
637
765
  def find_css_element_from_index