jekyll-minibundle 2.1.2 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
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