jekyll-minibundle 2.1.0 → 2.1.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +91 -61
- data/jekyll-minibundle.gemspec +6 -5
- data/lib/jekyll/minibundle/asset_file_operations.rb +1 -0
- data/lib/jekyll/minibundle/asset_file_properties.rb +9 -3
- data/lib/jekyll/minibundle/bundle_file.rb +17 -15
- data/lib/jekyll/minibundle/development_file.rb +3 -3
- data/lib/jekyll/minibundle/stamp_file.rb +11 -10
- data/lib/jekyll/minibundle/version.rb +1 -1
- data/test/integration/minibundle_development_mode_test.rb +13 -13
- data/test/integration/minibundle_production_mode_test.rb +32 -21
- data/test/integration/ministamp_development_mode_test.rb +9 -9
- data/test/integration/ministamp_production_mode_test.rb +7 -7
- data/test/support/static_file_api_config.rb +1 -0
- data/test/support/test_case.rb +22 -6
- data/test/unit/bundle_file_properties_test.rb +22 -15
- data/test/unit/bundle_file_writing_test.rb +7 -7
- data/test/unit/development_file_collection_properties_test.rb +39 -30
- data/test/unit/jekyll_static_file_api_test.rb +71 -0
- data/test/unit/stamp_file_properties_test.rb +22 -15
- data/test/unit/stamp_file_writing_test.rb +5 -5
- metadata +24 -10
data/test/support/test_case.rb
CHANGED
@@ -40,10 +40,14 @@ module Jekyll::Minibundle::Test
|
|
40
40
|
IO.write(file, YAML.load_file(file).merge(hash).to_yaml)
|
41
41
|
end
|
42
42
|
|
43
|
-
def
|
43
|
+
def file_mtime_of(path)
|
44
44
|
File.stat(path).mtime
|
45
45
|
end
|
46
46
|
|
47
|
+
def file_permissions_of(path)
|
48
|
+
File.stat(path).mode & 0o777
|
49
|
+
end
|
50
|
+
|
47
51
|
def with_env(env)
|
48
52
|
org_env = {}
|
49
53
|
env.each do |k, v|
|
@@ -55,12 +59,24 @@ module Jekyll::Minibundle::Test
|
|
55
59
|
org_env.each { |k, v| ENV[k] = v }
|
56
60
|
end
|
57
61
|
|
58
|
-
def
|
62
|
+
def with_umask(cmask)
|
63
|
+
org_cmask = File.umask
|
64
|
+
File.umask(cmask)
|
65
|
+
yield
|
66
|
+
ensure
|
67
|
+
File.umask(org_cmask)
|
68
|
+
end
|
69
|
+
|
70
|
+
def with_tmp_dir(&block)
|
59
71
|
Dir.mktmpdir('jekyll-minibundle-test-site-') do |dir|
|
60
|
-
Dir.chdir(dir)
|
61
|
-
|
62
|
-
|
63
|
-
|
72
|
+
Dir.chdir(dir, &block)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def with_site_dir(&block)
|
77
|
+
with_tmp_dir do |dir|
|
78
|
+
_copy_fixture_site_dir(dir)
|
79
|
+
block.call(dir)
|
64
80
|
end
|
65
81
|
end
|
66
82
|
|
@@ -9,54 +9,61 @@ module Jekyll::Minibundle::Test
|
|
9
9
|
include StaticFileAPIConfig
|
10
10
|
|
11
11
|
def setup
|
12
|
-
|
12
|
+
@@results ||= with_fake_site do |site|
|
13
13
|
file = BundleFile.new(site, bundle_config(minifier_cmd_to_remove_comments))
|
14
|
+
capture_io { file.destination_path_for_markup }
|
14
15
|
get_send_results(file, STATIC_FILE_API_PROPERTIES)
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
18
19
|
def test_defaults
|
19
|
-
assert_equal({},
|
20
|
+
assert_equal({}, @@results.fetch(:defaults))
|
20
21
|
end
|
21
22
|
|
22
23
|
def test_destination_rel_dir
|
23
|
-
assert_equal 'assets',
|
24
|
+
assert_equal 'assets', @@results.fetch(:destination_rel_dir)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_name
|
28
|
+
assert_equal "site-#{JS_BUNDLE_FINGERPRINT}.js", @@results.fetch(:name)
|
24
29
|
end
|
25
30
|
|
26
31
|
def test_extname
|
27
|
-
assert_equal '.js',
|
32
|
+
assert_equal '.js', @@results.fetch(:extname)
|
28
33
|
end
|
29
34
|
|
30
35
|
def test_modified_time
|
31
|
-
assert_instance_of Time,
|
36
|
+
assert_instance_of Time, @@results.fetch(:modified_time)
|
32
37
|
end
|
33
38
|
|
34
39
|
def test_mtime
|
35
|
-
mtime =
|
36
|
-
assert_equal mtime.to_i,
|
40
|
+
mtime = @@results.fetch(:modified_time)
|
41
|
+
assert_equal mtime.to_i, @@results.fetch(:mtime)
|
37
42
|
end
|
38
43
|
|
39
44
|
def test_placeholders
|
40
|
-
assert_equal({},
|
45
|
+
assert_equal({}, @@results.fetch(:placeholders))
|
41
46
|
end
|
42
47
|
|
43
48
|
def test_relative_path
|
44
|
-
assert_match(%r{/jekyll-minibundle-.+\.js\z},
|
49
|
+
assert_match(%r{/jekyll-minibundle-.+\.js\z}, @@results.fetch(:relative_path))
|
45
50
|
end
|
46
51
|
|
47
52
|
def test_to_liquid
|
48
|
-
hash =
|
49
|
-
|
50
|
-
|
51
|
-
assert_equal '.js', hash
|
53
|
+
hash = @@results.fetch(:to_liquid)
|
54
|
+
assert_equal "site-#{JS_BUNDLE_FINGERPRINT}", hash.fetch('basename')
|
55
|
+
assert_equal "site-#{JS_BUNDLE_FINGERPRINT}.js", hash.fetch('name')
|
56
|
+
assert_equal '.js', hash.fetch('extname')
|
57
|
+
assert_instance_of Time, hash.fetch('modified_time')
|
58
|
+
assert_match(%r{/jekyll-minibundle-.+\.js\z}, hash.fetch('path'))
|
52
59
|
end
|
53
60
|
|
54
61
|
def test_type
|
55
|
-
assert_nil
|
62
|
+
assert_nil @@results.fetch(:type)
|
56
63
|
end
|
57
64
|
|
58
65
|
def test_write?
|
59
|
-
assert
|
66
|
+
assert @@results.fetch(:write?)
|
60
67
|
end
|
61
68
|
|
62
69
|
private
|
@@ -6,7 +6,7 @@ module Jekyll::Minibundle::Test
|
|
6
6
|
class BundleFileWritingTest < TestCase
|
7
7
|
include FixtureConfig
|
8
8
|
|
9
|
-
def
|
9
|
+
def test_calling_destination_path_for_markup_determines_fingerprint_and_destination_write
|
10
10
|
with_fake_site do |site|
|
11
11
|
bundle_file = BundleFile.new(site, bundle_config(minifier_cmd_to_remove_comments_and_count))
|
12
12
|
source = source_path(JS_BUNDLE_SOURCE_DIR, 'app.js')
|
@@ -16,7 +16,7 @@ module Jekyll::Minibundle::Test
|
|
16
16
|
|
17
17
|
assert bundle_file.write('_site')
|
18
18
|
|
19
|
-
org_mtime =
|
19
|
+
org_mtime = file_mtime_of(old_destination)
|
20
20
|
|
21
21
|
assert_equal 1, get_minifier_cmd_count
|
22
22
|
|
@@ -26,7 +26,7 @@ module Jekyll::Minibundle::Test
|
|
26
26
|
# preserve fingerprint and content seen in last markup phase
|
27
27
|
refute bundle_file.write('_site')
|
28
28
|
assert_equal org_markup_path, last_markup_path
|
29
|
-
assert_equal org_mtime,
|
29
|
+
assert_equal org_mtime, file_mtime_of(old_destination)
|
30
30
|
assert_equal 1, get_minifier_cmd_count
|
31
31
|
|
32
32
|
capture_io { last_markup_path = bundle_file.destination_path_for_markup }
|
@@ -37,12 +37,12 @@ module Jekyll::Minibundle::Test
|
|
37
37
|
|
38
38
|
# see updated fingerprint in the next round
|
39
39
|
refute_equal org_markup_path, last_markup_path
|
40
|
-
assert_operator
|
40
|
+
assert_operator file_mtime_of(new_destination), :>, org_mtime
|
41
41
|
assert_equal 2, get_minifier_cmd_count
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
def
|
45
|
+
def test_many_consecutive_destination_path_for_markup_calls_trigger_one_destination_write
|
46
46
|
with_fake_site do |site|
|
47
47
|
bundle_file = BundleFile.new(site, bundle_config(minifier_cmd_to_remove_comments_and_count))
|
48
48
|
source = source_path(JS_BUNDLE_SOURCE_DIR, 'app.js')
|
@@ -53,7 +53,7 @@ module Jekyll::Minibundle::Test
|
|
53
53
|
|
54
54
|
assert bundle_file.write('_site')
|
55
55
|
|
56
|
-
org_mtime =
|
56
|
+
org_mtime = file_mtime_of(destination)
|
57
57
|
|
58
58
|
assert_equal 1, get_minifier_cmd_count
|
59
59
|
|
@@ -63,7 +63,7 @@ module Jekyll::Minibundle::Test
|
|
63
63
|
|
64
64
|
assert bundle_file.write('_site')
|
65
65
|
assert_equal org_markup_path, last_markup_path
|
66
|
-
assert_operator
|
66
|
+
assert_operator file_mtime_of(destination), :>, org_mtime
|
67
67
|
assert_equal 2, get_minifier_cmd_count
|
68
68
|
end
|
69
69
|
end
|
@@ -9,7 +9,7 @@ module Jekyll::Minibundle::Test
|
|
9
9
|
include StaticFileAPIConfig
|
10
10
|
|
11
11
|
def setup
|
12
|
-
|
12
|
+
@@results ||= with_fake_site do |site|
|
13
13
|
files = DevelopmentFileCollection.new(site, bundle_config).instance_variable_get('@files')
|
14
14
|
{
|
15
15
|
dependency: get_send_results(files[0], STATIC_FILE_API_PROPERTIES),
|
@@ -19,63 +19,72 @@ module Jekyll::Minibundle::Test
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def test_defaults
|
22
|
-
assert_equal({},
|
23
|
-
assert_equal({},
|
22
|
+
assert_equal({}, @@results.fetch(:dependency).fetch(:defaults))
|
23
|
+
assert_equal({}, @@results.fetch(:app).fetch(:defaults))
|
24
24
|
end
|
25
25
|
|
26
26
|
def test_destination_rel_dir
|
27
|
-
assert_equal 'assets/site',
|
28
|
-
assert_equal 'assets/site',
|
27
|
+
assert_equal 'assets/site', @@results.fetch(:dependency).fetch(:destination_rel_dir)
|
28
|
+
assert_equal 'assets/site', @@results.fetch(:app).fetch(:destination_rel_dir)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_name
|
32
|
+
assert_equal 'dependency.js', @@results.fetch(:dependency).fetch(:name)
|
33
|
+
assert_equal 'app.js', @@results.fetch(:app).fetch(:name)
|
29
34
|
end
|
30
35
|
|
31
36
|
def test_extname
|
32
|
-
assert_equal '.js',
|
33
|
-
assert_equal '.js',
|
37
|
+
assert_equal '.js', @@results.fetch(:dependency).fetch(:extname)
|
38
|
+
assert_equal '.js', @@results.fetch(:app).fetch(:extname)
|
34
39
|
end
|
35
40
|
|
36
41
|
def test_modified_time
|
37
|
-
assert_instance_of Time,
|
38
|
-
assert_instance_of Time,
|
42
|
+
assert_instance_of Time, @@results.fetch(:dependency).fetch(:modified_time)
|
43
|
+
assert_instance_of Time, @@results.fetch(:app).fetch(:modified_time)
|
39
44
|
end
|
40
45
|
|
41
46
|
def test_mtime
|
42
|
-
dep_mtime =
|
43
|
-
assert_equal dep_mtime.to_i,
|
47
|
+
dep_mtime = @@results.fetch(:dependency).fetch(:modified_time)
|
48
|
+
assert_equal dep_mtime.to_i, @@results.fetch(:dependency).fetch(:mtime)
|
44
49
|
|
45
|
-
app_mtime =
|
46
|
-
assert_equal app_mtime.to_i,
|
50
|
+
app_mtime = @@results.fetch(:app).fetch(:modified_time)
|
51
|
+
assert_equal app_mtime.to_i, @@results.fetch(:app).fetch(:mtime)
|
47
52
|
end
|
48
53
|
|
49
54
|
def test_placeholders
|
50
|
-
assert_equal({},
|
51
|
-
assert_equal({},
|
55
|
+
assert_equal({}, @@results.fetch(:dependency).fetch(:placeholders))
|
56
|
+
assert_equal({}, @@results.fetch(:app).fetch(:placeholders))
|
52
57
|
end
|
53
58
|
|
54
59
|
def test_relative_path
|
55
|
-
assert_equal "/#{JS_BUNDLE_SOURCE_DIR}/dependency.js",
|
56
|
-
assert_equal "/#{JS_BUNDLE_SOURCE_DIR}/app.js",
|
60
|
+
assert_equal "/#{JS_BUNDLE_SOURCE_DIR}/dependency.js", @@results.fetch(:dependency).fetch(:relative_path)
|
61
|
+
assert_equal "/#{JS_BUNDLE_SOURCE_DIR}/app.js", @@results.fetch(:app).fetch(:relative_path)
|
57
62
|
end
|
58
63
|
|
59
64
|
def test_to_liquid
|
60
|
-
hash =
|
61
|
-
assert_equal
|
62
|
-
|
63
|
-
assert_equal '.js', hash
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
assert_equal '
|
65
|
+
hash = @@results.fetch(:dependency).fetch(:to_liquid)
|
66
|
+
assert_equal 'dependency', hash.fetch('basename')
|
67
|
+
assert_equal 'dependency.js', hash.fetch('name')
|
68
|
+
assert_equal '.js', hash.fetch('extname')
|
69
|
+
assert_instance_of Time, hash.fetch('modified_time')
|
70
|
+
assert_equal "/#{JS_BUNDLE_SOURCE_DIR}/dependency.js", hash.fetch('path')
|
71
|
+
|
72
|
+
hash = @@results.fetch(:app).fetch(:to_liquid)
|
73
|
+
assert_equal 'app', hash.fetch('basename')
|
74
|
+
assert_equal 'app.js', hash.fetch('name')
|
75
|
+
assert_equal '.js', hash.fetch('extname')
|
76
|
+
assert_instance_of Time, hash.fetch('modified_time')
|
77
|
+
assert_equal "/#{JS_BUNDLE_SOURCE_DIR}/app.js", hash.fetch('path')
|
69
78
|
end
|
70
79
|
|
71
80
|
def test_type
|
72
|
-
assert_nil
|
73
|
-
assert_nil
|
81
|
+
assert_nil @@results.fetch(:dependency).fetch(:type)
|
82
|
+
assert_nil @@results.fetch(:app).fetch(:type)
|
74
83
|
end
|
75
84
|
|
76
85
|
def test_write?
|
77
|
-
assert
|
78
|
-
assert
|
86
|
+
assert @@results.fetch(:dependency).fetch(:write?)
|
87
|
+
assert @@results.fetch(:app).fetch(:write?)
|
79
88
|
end
|
80
89
|
|
81
90
|
private
|
@@ -17,10 +17,81 @@ module Jekyll::Minibundle::Test
|
|
17
17
|
assert_empty missing_api_methods(StampFile)
|
18
18
|
end
|
19
19
|
|
20
|
+
def test_development_file_has_same_to_liquid_hash_keys_as_static_file
|
21
|
+
with_empty_site do |site|
|
22
|
+
FileUtils.touch('static.txt')
|
23
|
+
FileUtils.touch('dev.js')
|
24
|
+
|
25
|
+
expected_keys = make_static_file(site, 'static.txt').to_liquid.keys.sort
|
26
|
+
actual_keys = make_development_file(site, 'dev.js').to_liquid.keys.sort
|
27
|
+
|
28
|
+
assert_equal expected_keys, actual_keys
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_bundle_file_has_same_to_liquid_hash_keys_as_static_file
|
33
|
+
with_empty_site do |site|
|
34
|
+
FileUtils.touch('static.txt')
|
35
|
+
FileUtils.touch('dependency.js')
|
36
|
+
FileUtils.touch('app.js')
|
37
|
+
|
38
|
+
expected_keys = make_static_file(site, 'static.txt').to_liquid.keys.sort
|
39
|
+
actual_keys = make_bundle_file(site, %w{dependency app}).to_liquid.keys.sort
|
40
|
+
|
41
|
+
assert_equal expected_keys, actual_keys
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_stamp_file_has_same_to_liquid_hash_keys_as_static_file
|
46
|
+
with_empty_site do |site|
|
47
|
+
FileUtils.touch('static.txt')
|
48
|
+
FileUtils.touch('stamp.js')
|
49
|
+
|
50
|
+
expected_keys = make_static_file(site, 'static.txt').to_liquid.keys.sort
|
51
|
+
actual_keys = make_stamp_file(site, 'stamp.js').to_liquid.keys.sort
|
52
|
+
|
53
|
+
assert_equal expected_keys, actual_keys
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
20
57
|
private
|
21
58
|
|
22
59
|
def missing_api_methods(clazz)
|
23
60
|
Jekyll::StaticFile.public_instance_methods - clazz.public_instance_methods
|
24
61
|
end
|
62
|
+
|
63
|
+
def with_empty_site(&block)
|
64
|
+
with_tmp_dir do |dir|
|
65
|
+
block.call(new_fake_site(dir))
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def make_static_file(site, filename)
|
70
|
+
::Jekyll::StaticFile.new(
|
71
|
+
site,
|
72
|
+
nil,
|
73
|
+
nil,
|
74
|
+
filename
|
75
|
+
)
|
76
|
+
end
|
77
|
+
|
78
|
+
def make_development_file(site, filename)
|
79
|
+
DevelopmentFile.new(site, filename, filename)
|
80
|
+
end
|
81
|
+
|
82
|
+
def make_bundle_file(site, assets)
|
83
|
+
BundleFile.new(
|
84
|
+
site,
|
85
|
+
'type' => :js,
|
86
|
+
'source_dir' => '',
|
87
|
+
'assets' => assets,
|
88
|
+
'destination_path' => 'bundle.js',
|
89
|
+
'minifier_cmd' => 'false'
|
90
|
+
)
|
91
|
+
end
|
92
|
+
|
93
|
+
def make_stamp_file(site, filename)
|
94
|
+
StampFile.new(site, filename, filename)
|
95
|
+
end
|
25
96
|
end
|
26
97
|
end
|
@@ -9,54 +9,61 @@ module Jekyll::Minibundle::Test
|
|
9
9
|
include StaticFileAPIConfig
|
10
10
|
|
11
11
|
def setup
|
12
|
-
|
12
|
+
@@results ||= with_fake_site do |site|
|
13
13
|
file = StampFile.new(site, STAMP_SOURCE_PATH, STAMP_DESTINATION_PATH)
|
14
|
+
file.destination_path_for_markup
|
14
15
|
get_send_results(file, STATIC_FILE_API_PROPERTIES)
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
18
19
|
def test_defaults
|
19
|
-
assert_equal({},
|
20
|
+
assert_equal({}, @@results.fetch(:defaults))
|
20
21
|
end
|
21
22
|
|
22
23
|
def test_destination_rel_dir
|
23
|
-
assert_equal 'assets',
|
24
|
+
assert_equal 'assets', @@results.fetch(:destination_rel_dir)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_name
|
28
|
+
assert_equal "screen-#{STAMP_FINGERPRINT}.css", @@results.fetch(:name)
|
24
29
|
end
|
25
30
|
|
26
31
|
def test_extname
|
27
|
-
assert_equal '.css',
|
32
|
+
assert_equal '.css', @@results.fetch(:extname)
|
28
33
|
end
|
29
34
|
|
30
35
|
def test_modified_time
|
31
|
-
assert_instance_of Time,
|
36
|
+
assert_instance_of Time, @@results.fetch(:modified_time)
|
32
37
|
end
|
33
38
|
|
34
39
|
def test_mtime
|
35
|
-
mtime =
|
36
|
-
assert_equal mtime.to_i,
|
40
|
+
mtime = @@results.fetch(:modified_time)
|
41
|
+
assert_equal mtime.to_i, @@results.fetch(:mtime)
|
37
42
|
end
|
38
43
|
|
39
44
|
def test_placeholders
|
40
|
-
assert_equal({},
|
45
|
+
assert_equal({}, @@results.fetch(:placeholders))
|
41
46
|
end
|
42
47
|
|
43
48
|
def test_relative_path
|
44
|
-
assert_equal "/#{STAMP_SOURCE_PATH}",
|
49
|
+
assert_equal "/#{STAMP_SOURCE_PATH}", @@results.fetch(:relative_path)
|
45
50
|
end
|
46
51
|
|
47
52
|
def test_to_liquid
|
48
|
-
hash =
|
49
|
-
assert_equal "
|
50
|
-
|
51
|
-
assert_equal '.css', hash
|
53
|
+
hash = @@results.fetch(:to_liquid)
|
54
|
+
assert_equal "screen-#{STAMP_FINGERPRINT}", hash.fetch('basename')
|
55
|
+
assert_equal "screen-#{STAMP_FINGERPRINT}.css", hash.fetch('name')
|
56
|
+
assert_equal '.css', hash.fetch('extname')
|
57
|
+
assert_instance_of Time, hash.fetch('modified_time')
|
58
|
+
assert_equal "/#{STAMP_SOURCE_PATH}", hash.fetch('path')
|
52
59
|
end
|
53
60
|
|
54
61
|
def test_type
|
55
|
-
assert_nil
|
62
|
+
assert_nil @@results.fetch(:type)
|
56
63
|
end
|
57
64
|
|
58
65
|
def test_write?
|
59
|
-
assert
|
66
|
+
assert @@results.fetch(:write?)
|
60
67
|
end
|
61
68
|
end
|
62
69
|
end
|