jekyll-minibundle 1.4.1 → 1.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 53e069cbc2278b08d8cf93fc9598882f24a56b7f
4
- data.tar.gz: 3fa82515fa89f2d632c5428f29adb233663e5f8f
3
+ metadata.gz: cb4db2142f8fea9e137638a9f81fcf1673b0076c
4
+ data.tar.gz: 391293041abe19a1f143b28c6592fe2932bbac2e
5
5
  SHA512:
6
- metadata.gz: 158f82d5e10ea274b76d353b159fbed84b81d12c82cbd6339d3829056edda0adb473f7700336c24e18c765b0f632797e0227ce0e5ae488f01383989a4022f90c
7
- data.tar.gz: 8380c680bda3674dfd760c32aa6b5cbb69f7d9a88ca9b1825d97f20c7d03f1be9bb2bf2334e418fcf1ab01be5fd2188881c3b145d917f73d40a5017cc3f6276a
6
+ metadata.gz: a23acbd135fc4100e284bb059a98c18dc981deb0dd83e0a7ee9aaba52bab6b8188f2fb2121ace3970086292db53053518e3633ff4b73d0f63406f7017dd07395
7
+ data.tar.gz: 56506b2a3bafebeef270f7630a69ff8c7ba08ed87ee33f13d595487b05e5804843a429d7f1382600c718006b4e03683d8824671395aeb04f108c3ede05868c2e
data/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ # 1.4.2 / 2013-12-28
2
+
3
+ * Ensure touching asset source triggers destination write. This was an
4
+ unintentional edge case earlier. Now the behavior of touching the
5
+ asset source is consistent with when changing the contents of the
6
+ source.
7
+ * Separate tags produced by `minibundle` in development mode with
8
+ newlines
9
+ * Clarify tests, increase coverage
10
+
1
11
  # 1.4.1 / 2013-12-27
2
12
 
3
13
  * Add missing files to gem package
data/Rakefile CHANGED
@@ -30,8 +30,8 @@ namespace :gem do
30
30
  end
31
31
 
32
32
  desc 'Install the software as a gem'
33
- task :install => :build do
34
- sh %{gem install #{gem_name}-#{Jekyll::Minibundle::VERSION}}
33
+ task :install do
34
+ sh %{gem install #{gem_name}-#{Jekyll::Minibundle::VERSION}.gem}
35
35
  end
36
36
 
37
37
  desc 'Uninstall the gem'
@@ -21,52 +21,11 @@ minification tool (not even other gems).
21
21
  CHANGELOG.md
22
22
  LICENSE.txt
23
23
  README.md
24
- RELEASING.txt
25
24
  Rakefile
26
25
  jekyll-minibundle.gemspec
27
- lib/jekyll/minibundle.rb
28
- lib/jekyll/minibundle/asset_bundle.rb
29
- lib/jekyll/minibundle/asset_file_operations.rb
30
- lib/jekyll/minibundle/asset_file_paths.rb
31
- lib/jekyll/minibundle/asset_file_registry.rb
32
- lib/jekyll/minibundle/asset_stamp.rb
33
- lib/jekyll/minibundle/asset_tag_markup.rb
34
- lib/jekyll/minibundle/bundle_file.rb
35
- lib/jekyll/minibundle/development_file.rb
36
- lib/jekyll/minibundle/development_file_collection.rb
37
- lib/jekyll/minibundle/environment.rb
38
- lib/jekyll/minibundle/mini_bundle_block.rb
39
- lib/jekyll/minibundle/mini_stamp_tag.rb
40
- lib/jekyll/minibundle/stamp_file.rb
41
- lib/jekyll/minibundle/version.rb
42
- }
26
+ } + `git ls-files -- lib`.split("\n")
43
27
 
44
- s.test_files = %w{
45
- test/fixture/site/_assets/scripts/app.js
46
- test/fixture/site/_assets/scripts/dependency.js
47
- test/fixture/site/_assets/styles/common.css
48
- test/fixture/site/_assets/styles/reset.css
49
- test/fixture/site/_bin/remove_comments
50
- test/fixture/site/_bin/with_count
51
- test/fixture/site/_config.yml
52
- test/fixture/site/_layouts/default.html
53
- test/fixture/site/_plugins/minibundle.rb
54
- test/fixture/site/_tmp/site.css
55
- test/fixture/site/about.html
56
- test/fixture/site/assets/styles/reset.css
57
- test/fixture/site/index.html
58
- test/integration/minibundle_development_mode_test.rb
59
- test/integration/minibundle_production_mode_test.rb
60
- test/integration/ministamp_test.rb
61
- test/integration/static_files_as_asset_sources_test.rb
62
- test/support/fixture_config.rb
63
- test/support/test_case.rb
64
- test/unit/asset_bundle_test.rb
65
- test/unit/asset_file_registry_test.rb
66
- test/unit/asset_tag_markup_test.rb
67
- test/unit/bundle_file_test.rb
68
- test/unit/stamp_file_test.rb
69
- }
28
+ s.test_files = `git ls-files -- test`.split("\n")
70
29
 
71
30
  s.add_development_dependency 'jekyll', '~> 1.4.2'
72
31
  s.add_development_dependency 'minitest', '~> 5.2.0'
@@ -26,8 +26,6 @@ module Jekyll::Minibundle
26
26
  @is_modified = true
27
27
  @_asset_stamp = nil
28
28
  asset_bundle.make_bundle
29
- else
30
- @is_modified = false
31
29
  end
32
30
 
33
31
  AssetTagMarkup.make_markup @type, asset_destination_path, @attributes
@@ -58,6 +56,7 @@ module Jekyll::Minibundle
58
56
  false
59
57
  else
60
58
  write_destination site_destination_dir
59
+ @is_modified = false
61
60
  true
62
61
  end
63
62
  end
@@ -28,7 +28,7 @@ module Jekyll::Minibundle
28
28
  def markup
29
29
  @files.
30
30
  map { |f| AssetTagMarkup.make_markup @type, f.asset_destination_path, @attributes }.
31
- join('')
31
+ join("\n")
32
32
  end
33
33
  end
34
34
  end
@@ -27,8 +27,6 @@ module Jekyll::Minibundle
27
27
  @stamped_at = mtime
28
28
  @is_modified = true
29
29
  @_asset_stamp = nil
30
- else
31
- @is_modified = false
32
30
  end
33
31
 
34
32
  asset_destination_path
@@ -39,6 +37,7 @@ module Jekyll::Minibundle
39
37
  false
40
38
  else
41
39
  write_destination site_destination_dir
40
+ @is_modified = false
42
41
  true
43
42
  end
44
43
  end
@@ -1,5 +1,5 @@
1
1
  module Jekyll
2
2
  module Minibundle
3
- VERSION = '1.4.1'
3
+ VERSION = '1.4.2'
4
4
  end
5
5
  end
@@ -20,7 +20,7 @@ module Jekyll::Minibundle::Test
20
20
  end
21
21
  end
22
22
 
23
- def test_css_assets_are_copied_to_destination_dir
23
+ def test_copies_css_assets_to_destination_dir
24
24
  with_precompiled_site :development do
25
25
  EXPECTED_CSS_ASSET_PATHS.each do |path|
26
26
  expect_file_exists_and_is_equal_to(destination_path(path), site_fixture_path(CSS_BUNDLE_SOURCE_DIR, File.basename(path)))
@@ -28,7 +28,7 @@ module Jekyll::Minibundle::Test
28
28
  end
29
29
  end
30
30
 
31
- def test_js_assets_are_copied_to_destination_dir
31
+ def test_copies_js_assets_to_destination_dir
32
32
  with_precompiled_site :development do
33
33
  EXPECTED_JS_ASSET_PATHS.each do |path|
34
34
  expect_file_exists_and_is_equal_to(destination_path(path), site_fixture_path(JS_BUNDLE_SOURCE_DIR, File.basename(path)))
@@ -36,33 +36,41 @@ module Jekyll::Minibundle::Test
36
36
  end
37
37
  end
38
38
 
39
- def test_changing_css_asset_copies_it_to_destination_dir
40
- with_site do
41
- generate_site :development
42
- destination = destination_path CSS_BUNDLE_DESTINATION_PATH, 'common.css'
43
- source = source_path CSS_BUNDLE_SOURCE_DIR, 'common.css'
44
- ensure_file_mtime_changes { File.write source, 'h1 {}' }
45
-
46
- refute_equal File.read(destination), File.read(source)
47
-
48
- generate_site :development, clear_cache: false
49
-
50
- assert_equal File.read(destination), File.read(source)
39
+ [
40
+ {desc: "changing", action: ->(source) { File.write source, 'h1 {}' }},
41
+ {desc: "touching", action: ->(source) { FileUtils.touch source }}
42
+ ].each do |spec|
43
+ define_method :"test_#{spec[:desc]}_css_asset_source_rewrites_destination" do
44
+ with_site do
45
+ generate_site :development
46
+ destination = destination_path CSS_BUNDLE_DESTINATION_PATH, 'common.css'
47
+ org_mtime = mtime_of destination
48
+ source = source_path CSS_BUNDLE_SOURCE_DIR, 'common.css'
49
+ ensure_file_mtime_changes { spec[:action].call(source) }
50
+ generate_site :development, clear_cache: false
51
+
52
+ assert_equal File.read(destination), File.read(source)
53
+ assert_operator mtime_of(destination), :>, org_mtime
54
+ end
51
55
  end
52
56
  end
53
57
 
54
- def test_changing_js_asset_copies_it_to_destination_dir
55
- with_site do
56
- generate_site :development
57
- destination = destination_path JS_BUNDLE_DESTINATION_PATH, 'app.js'
58
- source = source_path JS_BUNDLE_SOURCE_DIR, 'app.js'
59
- ensure_file_mtime_changes { File.write source, '(function() {})()' }
60
-
61
- refute_equal File.read(destination), File.read(source)
62
-
63
- generate_site :development, clear_cache: false
64
-
65
- assert_equal File.read(destination), File.read(source)
58
+ [
59
+ {desc: "changing", action: ->(source) { File.write source, '(function() {})()' }},
60
+ {desc: "touching", action: ->(source) { FileUtils.touch source }}
61
+ ].each do |spec|
62
+ define_method :"test_#{spec[:desc]}_js_asset_source_rewrites_destination" do
63
+ with_site do
64
+ generate_site :development
65
+ destination = destination_path JS_BUNDLE_DESTINATION_PATH, 'app.js'
66
+ org_mtime = mtime_of destination
67
+ source = source_path JS_BUNDLE_SOURCE_DIR, 'app.js'
68
+ ensure_file_mtime_changes { spec[:action].call(source) }
69
+ generate_site :development, clear_cache: false
70
+
71
+ assert_equal File.read(destination), File.read(source)
72
+ assert_operator mtime_of(destination), :>, org_mtime
73
+ end
66
74
  end
67
75
  end
68
76
 
@@ -87,7 +95,7 @@ module Jekyll::Minibundle::Test
87
95
  end
88
96
  end
89
97
 
90
- def test_do_not_require_bundling_cmds
98
+ def test_does_not_require_bundling_commands
91
99
  with_site do
92
100
  with_env 'JEKYLL_MINIBUNDLE_CMD_CSS' => nil, 'JEKYLL_MINIBUNDLE_CMD_JS' => nil do
93
101
  generate_site :development
@@ -96,7 +104,7 @@ module Jekyll::Minibundle::Test
96
104
  end
97
105
  end
98
106
 
99
- def test_do_not_copy_source_when_other_files_change
107
+ def test_does_not_rewrite_destination_when_nonsource_files_change
100
108
  with_site do
101
109
  generate_site :development
102
110
  expected_js_path = destination_path JS_BUNDLE_DESTINATION_PATH, 'app.js'
@@ -32,40 +32,40 @@ module Jekyll::Minibundle::Test
32
32
  end
33
33
  end
34
34
 
35
- def test_css_asset_bundle_is_copied_to_destination_dir
35
+ def test_copies_css_asset_bundle_to_destination_dir
36
36
  with_precompiled_site :production do
37
37
  assert File.exists?(destination_path(EXPECTED_CSS_BUNDLE_PATH))
38
38
  end
39
39
  end
40
40
 
41
- def test_js_asset_bundle_is_copied_to_destination_dir
41
+ def test_copies_js_asset_bundle_to_destination_dir
42
42
  with_precompiled_site :production do
43
43
  assert File.exists?(destination_path(EXPECTED_JS_BUNDLE_PATH))
44
44
  end
45
45
  end
46
46
 
47
- def test_css_asset_bundle_is_concatenated_in_configured_order
47
+ def test_concatenates_css_asset_bundle_in_configured_order
48
48
  with_precompiled_site :production do
49
49
  bundle = File.read(destination_path(EXPECTED_CSS_BUNDLE_PATH))
50
50
  assert_operator bundle.index('html { margin: 0; }'), :<, bundle.index('p { margin: 0; }')
51
51
  end
52
52
  end
53
53
 
54
- def test_js_asset_bundle_is_concatenated_in_configured_order
54
+ def test_concatenates_js_asset_bundle_in_configured_order
55
55
  with_precompiled_site :production do
56
56
  bundle = File.read(destination_path(EXPECTED_JS_BUNDLE_PATH))
57
57
  assert_operator bundle.index('root.dependency = {};'), :<, bundle.index('root.app = {};')
58
58
  end
59
59
  end
60
60
 
61
- def test_js_asset_bundle_has_inserted_semicolons_between_assets
61
+ def test_inserts_semicolons_between_js_assets
62
62
  with_precompiled_site :production do
63
63
  bundle = File.read(destination_path(EXPECTED_JS_BUNDLE_PATH))
64
64
  assert_match(%r|}\)\(window\)\n;\n\(function|, bundle)
65
65
  end
66
66
  end
67
67
 
68
- def test_css_asset_bundle_is_minified
68
+ def test_minifies_css_asset_bundle
69
69
  with_precompiled_site :production do
70
70
  source_contents_size = source_assets_size(CSS_BUNDLE_SOURCE_DIR, %w{reset common}, 'css')
71
71
  destination_contents_size = File.read(destination_path(EXPECTED_CSS_BUNDLE_PATH)).size
@@ -73,7 +73,7 @@ module Jekyll::Minibundle::Test
73
73
  end
74
74
  end
75
75
 
76
- def test_js_asset_bundle_is_minified
76
+ def test_minifies_js_asset_bundle
77
77
  with_precompiled_site :production do
78
78
  source_contents_size = source_assets_size(JS_BUNDLE_SOURCE_DIR, %w{dependency app}, 'js')
79
79
  destination_contents_size = File.read(destination_path(EXPECTED_JS_BUNDLE_PATH)).size
@@ -81,39 +81,65 @@ module Jekyll::Minibundle::Test
81
81
  end
82
82
  end
83
83
 
84
- def test_changing_css_assets_changes_bundle
84
+ def test_changing_css_asset_source_rewrites_destination
85
85
  with_site do
86
86
  generate_site :production
87
-
88
- assert File.exists?(destination_path(EXPECTED_CSS_BUNDLE_PATH))
89
-
87
+ org_mtime = mtime_of destination_path(EXPECTED_CSS_BUNDLE_PATH)
90
88
  ensure_file_mtime_changes { File.write source_path(CSS_BUNDLE_SOURCE_DIR, 'common.css'), 'h1 {}' }
91
89
  generate_site :production, clear_cache: false
92
90
 
93
91
  refute File.exists?(destination_path(EXPECTED_CSS_BUNDLE_PATH))
94
92
 
95
- expected_new_path = 'assets/site-9fd3995d6f0fce425db81c3691dfe93f.css'
93
+ new_destination = 'assets/site-9fd3995d6f0fce425db81c3691dfe93f.css'
96
94
 
97
- assert_equal expected_new_path, find_css_path_from_index
98
- assert File.exists?(destination_path(expected_new_path))
95
+ assert_equal new_destination, find_css_path_from_index
96
+ assert File.exists?(destination_path(new_destination))
97
+ assert_operator mtime_of(destination_path(new_destination)), :>, org_mtime
99
98
  end
100
99
  end
101
100
 
102
- def test_changing_js_assets_changes_bundle
101
+ def test_changing_js_asset_source_rewrites_destination
103
102
  with_site do
104
103
  generate_site :production
105
-
106
- assert File.exists?(destination_path(EXPECTED_JS_BUNDLE_PATH))
107
-
104
+ org_mtime = mtime_of destination_path(EXPECTED_JS_BUNDLE_PATH)
108
105
  ensure_file_mtime_changes { File.write source_path(JS_BUNDLE_SOURCE_DIR, 'app.js'), '(function() {})()' }
109
106
  generate_site :production, clear_cache: false
110
107
 
111
108
  refute File.exists?(destination_path(EXPECTED_JS_BUNDLE_PATH))
112
109
 
113
- expected_new_path = 'assets/site-375a0b430b0c5555d0edd2205d26c04d.js'
110
+ new_destination = 'assets/site-375a0b430b0c5555d0edd2205d26c04d.js'
111
+
112
+ assert_equal new_destination, find_js_path_from_index
113
+ assert File.exists?(destination_path(new_destination))
114
+ assert_operator mtime_of(destination_path(new_destination)), :>, org_mtime
115
+ end
116
+ end
117
+
118
+ def test_touching_css_asset_source_rewrites_destination
119
+ with_site do
120
+ generate_site :production
121
+ destination = EXPECTED_CSS_BUNDLE_PATH
122
+ org_mtime = mtime_of destination_path(destination)
123
+ ensure_file_mtime_changes { FileUtils.touch source_path(CSS_BUNDLE_SOURCE_DIR, 'common.css') }
124
+ generate_site :production, clear_cache: false
125
+
126
+ assert_equal destination, find_css_path_from_index
127
+ assert File.exists?(destination_path(destination))
128
+ assert_operator mtime_of(destination_path(destination)), :>, org_mtime
129
+ end
130
+ end
131
+
132
+ def test_touching_js_asset_source_rewrites_destination
133
+ with_site do
134
+ generate_site :production
135
+ destination = EXPECTED_JS_BUNDLE_PATH
136
+ org_mtime = mtime_of destination_path(destination)
137
+ ensure_file_mtime_changes { FileUtils.touch source_path(JS_BUNDLE_SOURCE_DIR, 'app.js') }
138
+ generate_site :production, clear_cache: false
114
139
 
115
- assert_equal expected_new_path, find_js_path_from_index
116
- assert File.exists?(destination_path(expected_new_path))
140
+ assert_equal destination, find_js_path_from_index
141
+ assert File.exists?(destination_path(destination))
142
+ assert_operator mtime_of(destination_path(destination)), :>, org_mtime
117
143
  end
118
144
  end
119
145
 
@@ -138,7 +164,7 @@ module Jekyll::Minibundle::Test
138
164
  end
139
165
  end
140
166
 
141
- def test_bundles_assets_only_once_upon_startup
167
+ def test_bundles_assets_only_once_at_startup
142
168
  with_site do
143
169
  with_env 'JEKYLL_MINIBUNDLE_CMD_JS' => cmd_to_remove_comments_and_count do
144
170
  generate_site :production
@@ -147,7 +173,7 @@ module Jekyll::Minibundle::Test
147
173
  end
148
174
  end
149
175
 
150
- def test_do_not_bundle_assets_when_nonsource_files_change
176
+ def test_does_not_rebundle_assets_when_nonsource_files_change
151
177
  with_site do
152
178
  with_env 'JEKYLL_MINIBUNDLE_CMD_JS' => cmd_to_remove_comments_and_count do
153
179
  generate_site :production
@@ -8,22 +8,18 @@ module Jekyll::Minibundle::Test
8
8
  def test_asset_destination_path_has_no_stamp_in_development_mode
9
9
  with_precompiled_site :development do
10
10
  assert_equal STAMP_DESTINATION_PATH, find_css_path_from_index
11
+ assert File.exists?(destination_path(STAMP_DESTINATION_PATH))
11
12
  end
12
13
  end
13
14
 
14
15
  def test_asset_destination_path_has_stamp_in_production_mode
15
16
  with_precompiled_site :production do
16
17
  assert_equal STAMP_DESTINATION_FINGERPRINT_PATH, find_css_path_from_index
17
- end
18
- end
19
-
20
- def test_asset_file_is_copied_to_destination_dir
21
- with_precompiled_site :production do
22
18
  assert File.exists?(destination_path(STAMP_DESTINATION_FINGERPRINT_PATH))
23
19
  end
24
20
  end
25
21
 
26
- def test_asset_file_is_equal_to_source_file
22
+ def test_contents_of_asset_destination_are_equal_to_source
27
23
  with_precompiled_site :production do
28
24
  source_contents = File.read site_fixture_path(STAMP_SOURCE_PATH)
29
25
  destination_contents = File.read destination_path(STAMP_DESTINATION_FINGERPRINT_PATH)
@@ -31,21 +27,34 @@ module Jekyll::Minibundle::Test
31
27
  end
32
28
  end
33
29
 
34
- def test_change_asset_file
30
+ def test_changing_asset_source_rewrites_destination
35
31
  with_site do
36
32
  generate_site :production
37
-
38
- assert File.exists?(destination_path(STAMP_DESTINATION_FINGERPRINT_PATH))
39
-
33
+ org_mtime = mtime_of destination_path(STAMP_DESTINATION_FINGERPRINT_PATH)
40
34
  ensure_file_mtime_changes { File.write source_path(STAMP_SOURCE_PATH), 'h1 {}' }
41
35
  generate_site :production, clear_cache: false
42
36
 
43
37
  refute File.exists?(destination_path(STAMP_DESTINATION_FINGERPRINT_PATH))
44
38
 
45
- expected_new_path = 'assets/screen-0f5dbd1e527a2bee267e85007b08d2a5.css'
39
+ new_destination = 'assets/screen-0f5dbd1e527a2bee267e85007b08d2a5.css'
40
+
41
+ assert_equal new_destination, find_css_path_from_index
42
+ assert File.exists?(destination_path(new_destination))
43
+ assert_operator mtime_of(destination_path(new_destination)), :>, org_mtime
44
+ end
45
+ end
46
+
47
+ def test_touching_asset_source_rewrites_destination
48
+ with_site do
49
+ generate_site :production
50
+ destination = STAMP_DESTINATION_FINGERPRINT_PATH
51
+ org_mtime = mtime_of destination_path(destination)
52
+ ensure_file_mtime_changes { FileUtils.touch source_path(STAMP_SOURCE_PATH) }
53
+ generate_site :production, clear_cache: false
46
54
 
47
- assert_equal expected_new_path, find_css_path_from_index
48
- assert File.exists?(destination_path(expected_new_path))
55
+ assert_equal destination, find_css_path_from_index
56
+ assert File.exists?(destination_path(destination))
57
+ assert_operator mtime_of(destination_path(destination)), :>, org_mtime
49
58
  end
50
59
  end
51
60
 
@@ -65,7 +74,7 @@ module Jekyll::Minibundle::Test
65
74
  end
66
75
  end
67
76
 
68
- def test_do_not_copy_source_when_other_files_change
77
+ def test_does_not_rewrite_destination_when_nonsource_files_change
69
78
  with_site do
70
79
  generate_site :production
71
80
  expected_path = destination_path STAMP_DESTINATION_FINGERPRINT_PATH
@@ -1,7 +1,22 @@
1
1
  require 'support/test_case'
2
+ require 'support/fixture_config'
2
3
 
3
4
  module Jekyll::Minibundle::Test
4
5
  class StaticFilesAsAssetSourcesTest < TestCase
6
+ include FixtureConfig
7
+
8
+ def test_asset_and_static_files_with_same_destination_paths_can_coexist
9
+ with_precompiled_site :production do
10
+ actual = Dir[destination_path('assets/site*.*')].sort
11
+ expected = [
12
+ destination_path('assets/site.css'),
13
+ destination_path(EXPECTED_CSS_BUNDLE_PATH),
14
+ destination_path(EXPECTED_JS_BUNDLE_PATH)
15
+ ].sort
16
+ assert_equal expected, actual
17
+ end
18
+ end
19
+
5
20
  [:development, :production].each do |env|
6
21
  define_method :"test_ministamp_allows_using_static_file_as_asset_source_in_#{env}_mode" do
7
22
  with_site do
@@ -43,7 +58,7 @@ module Jekyll::Minibundle::Test
43
58
  find_and_gsub_in_file(source_path('_layouts/default.html'), 'source_dir: _assets/scripts', 'source_dir: assets')
44
59
  generate_site :production
45
60
 
46
- asset_files = Dir[destination_path('assets') + '/site-*.js']
61
+ asset_files = Dir[destination_path('assets/site-*.js')]
47
62
 
48
63
  assert_equal 1, asset_files.size
49
64
  assert_equal dep_contents, File.read(destination_path('assets/dependency.js'))
@@ -1,25 +1,22 @@
1
1
  require 'support/test_case'
2
- require 'support/fixture_config'
3
2
  require 'jekyll/minibundle/asset_file_registry'
4
3
 
5
4
  module Jekyll::Minibundle::Test
6
5
  class AssetFileRegistryTest < TestCase
7
- include FixtureConfig
8
-
9
6
  def setup
10
7
  AssetFileRegistry.clear
11
8
  end
12
9
 
13
- def test_returns_same_instance_for_same_stamp_file_config
14
- first = AssetFileRegistry.stamp_file STAMP_SOURCE_PATH, STAMP_DESTINATION_PATH
15
- second = AssetFileRegistry.stamp_file STAMP_SOURCE_PATH, STAMP_DESTINATION_PATH
10
+ def test_returns_same_stamp_file_instance_for_same_destination_path
11
+ first = AssetFileRegistry.stamp_file '_assets/src1.css', 'assets/dest.css'
12
+ second = AssetFileRegistry.stamp_file '_assets/src2.css', 'assets/dest.css'
16
13
  assert_same first, second
17
14
  assert_equal 1, asset_file_registry_size
18
15
  end
19
16
 
20
- def test_returns_same_instance_for_same_bundle_file_config
21
- first = AssetFileRegistry.bundle_file bundle_config
22
- second = AssetFileRegistry.bundle_file bundle_config
17
+ def test_returns_same_bundle_file_instance_for_same_destination_path_and_type
18
+ first = AssetFileRegistry.bundle_file bundle_config.merge({'assets' => %w{a1 a2}})
19
+ second = AssetFileRegistry.bundle_file bundle_config.merge({'assets' => %w{b1 b2}})
23
20
  assert_same first, second
24
21
  assert_equal 1, asset_file_registry_size
25
22
  end
@@ -36,9 +33,9 @@ module Jekyll::Minibundle::Test
36
33
  {
37
34
  'type' => :css,
38
35
  'site_dir' => '.',
39
- 'source_dir' => JS_BUNDLE_SOURCE_DIR,
36
+ 'source_dir' => '_assets/styles',
40
37
  'assets' => %w{dependency app},
41
- 'destination_path' => JS_BUNDLE_DESTINATION_PATH,
38
+ 'destination_path' => 'assets/site',
42
39
  'attributes' => {}
43
40
  }
44
41
  end
@@ -3,7 +3,7 @@ require 'jekyll/minibundle/asset_tag_markup'
3
3
 
4
4
  module Jekyll::Minibundle::Test
5
5
  class AssetTagMarkupTest < TestCase
6
- def test_escape_attribute_value
6
+ def test_escapes_attribute_values
7
7
  attributes = { media: 'screen, projection', extra: '">attack<br' }
8
8
  actual = AssetTagMarkup.make_markup :css, 'http://localhost', attributes
9
9
  expected = %{<link rel="stylesheet" href="http://localhost" media="screen, projection" extra="&quot;&gt;attack&lt;br">}
@@ -6,17 +6,10 @@ module Jekyll::Minibundle::Test
6
6
  class BundleFileTest < TestCase
7
7
  include FixtureConfig
8
8
 
9
- def test_consistent_fingerprint_in_file_and_markup
9
+ def test_calling_markup_determines_fingerprint_and_destination_write
10
10
  with_site do
11
11
  with_env 'JEKYLL_MINIBUNDLE_CMD_JS' => cmd_to_remove_comments_and_count do
12
- bundle_file = BundleFile.new({
13
- 'type' => :js,
14
- 'site_dir' => '.',
15
- 'source_dir' => JS_BUNDLE_SOURCE_DIR,
16
- 'assets' => %w{dependency app},
17
- 'destination_path' => JS_BUNDLE_DESTINATION_PATH,
18
- 'attributes' => {}
19
- })
12
+ bundle_file = BundleFile.new bundle_config
20
13
  source = source_path JS_BUNDLE_SOURCE_DIR, 'app.js'
21
14
  old_destination = destination_path EXPECTED_JS_BUNDLE_PATH
22
15
  org_markup, last_markup = nil
@@ -53,5 +46,51 @@ module Jekyll::Minibundle::Test
53
46
  end
54
47
  end
55
48
  end
49
+
50
+ def test_many_consecutive_markup_calls_trigger_one_destination_write
51
+ with_site do
52
+ with_env 'JEKYLL_MINIBUNDLE_CMD_JS' => cmd_to_remove_comments_and_count do
53
+ bundle_file = BundleFile.new bundle_config
54
+ source = source_path JS_BUNDLE_SOURCE_DIR, 'app.js'
55
+ destination = destination_path EXPECTED_JS_BUNDLE_PATH
56
+ org_markup, last_markup = nil
57
+
58
+ capture_io do
59
+ org_markup = bundle_file.markup
60
+ bundle_file.markup
61
+ bundle_file.write '_site'
62
+ end
63
+
64
+ org_mtime = mtime_of destination
65
+
66
+ assert_equal 1, get_cmd_count
67
+
68
+ ensure_file_mtime_changes { FileUtils.touch source }
69
+
70
+ capture_io do
71
+ last_markup = bundle_file.markup
72
+ bundle_file.markup
73
+ bundle_file.write '_site'
74
+ end
75
+
76
+ assert_equal org_markup, last_markup
77
+ assert_operator mtime_of(destination), :>, org_mtime
78
+ assert_equal 2, get_cmd_count
79
+ end
80
+ end
81
+ end
82
+
83
+ private
84
+
85
+ def bundle_config
86
+ {
87
+ 'type' => :js,
88
+ 'site_dir' => '.',
89
+ 'source_dir' => JS_BUNDLE_SOURCE_DIR,
90
+ 'assets' => %w{dependency app},
91
+ 'destination_path' => JS_BUNDLE_DESTINATION_PATH,
92
+ 'attributes' => {}
93
+ }
94
+ end
56
95
  end
57
96
  end
@@ -6,10 +6,9 @@ module Jekyll::Minibundle::Test
6
6
  class StampFileTest < TestCase
7
7
  include FixtureConfig
8
8
 
9
- def test_consistent_fingerprint_in_file_and_markup
9
+ def test_calling_markup_determines_fingerprint_and_destination_write
10
10
  with_site do
11
- basenamer = ->(base, ext, stamper) { "#{base}-#{stamper.call}#{ext}" }
12
- stamp_file = StampFile.new(STAMP_SOURCE_PATH, STAMP_DESTINATION_PATH, &basenamer)
11
+ stamp_file = StampFile.new(STAMP_SOURCE_PATH, STAMP_DESTINATION_PATH, &stamp_basenamer)
13
12
 
14
13
  source = source_path STAMP_SOURCE_PATH
15
14
  old_destination = destination_path STAMP_DESTINATION_FINGERPRINT_PATH
@@ -38,5 +37,35 @@ module Jekyll::Minibundle::Test
38
37
  assert_equal File.read(source), File.read(new_destination)
39
38
  end
40
39
  end
40
+
41
+ def test_many_consecutive_markup_calls_trigger_one_destination_write
42
+ with_site do
43
+ stamp_file = StampFile.new(STAMP_SOURCE_PATH, STAMP_DESTINATION_PATH, &stamp_basenamer)
44
+
45
+ source = source_path STAMP_SOURCE_PATH
46
+ destination = destination_path STAMP_DESTINATION_FINGERPRINT_PATH
47
+
48
+ org_markup = stamp_file.markup
49
+ stamp_file.markup
50
+ stamp_file.write '_site'
51
+ org_mtime = mtime_of destination
52
+
53
+ ensure_file_mtime_changes { FileUtils.touch source }
54
+
55
+ last_markup = stamp_file.markup
56
+ stamp_file.markup
57
+ stamp_file.write '_site'
58
+
59
+ assert_equal org_markup, last_markup
60
+ assert_operator mtime_of(destination), :>, org_mtime
61
+ assert_equal File.read(source), File.read(destination)
62
+ end
63
+ end
64
+
65
+ private
66
+
67
+ def stamp_basenamer
68
+ ->(base, ext, stamper) { "#{base}-#{stamper.call}#{ext}" }
69
+ end
41
70
  end
42
71
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-minibundle
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 1.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tuomas Kareinen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-27 00:00:00.000000000 Z
11
+ date: 2013-12-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -80,7 +80,6 @@ files:
80
80
  - CHANGELOG.md
81
81
  - LICENSE.txt
82
82
  - README.md
83
- - RELEASING.txt
84
83
  - Rakefile
85
84
  - jekyll-minibundle.gemspec
86
85
  - lib/jekyll/minibundle.rb
@@ -109,7 +108,7 @@ files:
109
108
  - test/fixture/site/_plugins/minibundle.rb
110
109
  - test/fixture/site/_tmp/site.css
111
110
  - test/fixture/site/about.html
112
- - test/fixture/site/assets/styles/reset.css
111
+ - test/fixture/site/assets/site.css
113
112
  - test/fixture/site/index.html
114
113
  - test/integration/minibundle_development_mode_test.rb
115
114
  - test/integration/minibundle_production_mode_test.rb
@@ -163,7 +162,7 @@ test_files:
163
162
  - test/fixture/site/_plugins/minibundle.rb
164
163
  - test/fixture/site/_tmp/site.css
165
164
  - test/fixture/site/about.html
166
- - test/fixture/site/assets/styles/reset.css
165
+ - test/fixture/site/assets/site.css
167
166
  - test/fixture/site/index.html
168
167
  - test/integration/minibundle_development_mode_test.rb
169
168
  - test/integration/minibundle_production_mode_test.rb
data/RELEASING.txt DELETED
@@ -1,11 +0,0 @@
1
- In order to release, do
2
-
3
- $EDITOR lib/jekyll/minibundle/version.rb # update version number
4
- $EDITOR CHANGELOG.md # describe a summary of changes since last release
5
- git diff # review the changes
6
- bundle exec rake gem:build # check that tests pass
7
- git add -p
8
- git commit -m 'Release <version>'
9
- git tag <version>
10
- git push --tags origin master
11
- gem push jekyll-minibundle-<version>.gem