jekyll-minibundle 1.5.1 → 1.6.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 (48) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -6
  3. data/README.md +34 -24
  4. data/Rakefile +19 -14
  5. data/jekyll-minibundle.gemspec +5 -4
  6. data/lib/jekyll/minibundle/asset_bundle.rb +24 -4
  7. data/lib/jekyll/minibundle/asset_file_operations.rb +0 -8
  8. data/lib/jekyll/minibundle/asset_file_properties.rb +26 -8
  9. data/lib/jekyll/minibundle/asset_file_registry.rb +57 -21
  10. data/lib/jekyll/minibundle/asset_tag_markup.rb +13 -4
  11. data/lib/jekyll/minibundle/bundle_file.rb +9 -6
  12. data/lib/jekyll/minibundle/compatibility.rb +11 -1
  13. data/lib/jekyll/minibundle/development_file.rb +6 -0
  14. data/lib/jekyll/minibundle/development_file_collection.rb +3 -16
  15. data/lib/jekyll/minibundle/environment.rb +5 -12
  16. data/lib/jekyll/minibundle/files.rb +18 -0
  17. data/lib/jekyll/minibundle/hashes.rb +20 -0
  18. data/lib/jekyll/minibundle/mini_bundle_block.rb +52 -12
  19. data/lib/jekyll/minibundle/mini_stamp_tag.rb +27 -8
  20. data/lib/jekyll/minibundle/stamp_file.rb +9 -6
  21. data/lib/jekyll/minibundle/version.rb +1 -1
  22. data/test/fixture/site/_bin/with_count +6 -5
  23. data/test/integration/known_caveats_test.rb +89 -0
  24. data/test/integration/minibundle_development_mode_test.rb +171 -26
  25. data/test/integration/minibundle_production_mode_test.rb +234 -42
  26. data/test/integration/ministamp_development_mode_test.rb +145 -0
  27. data/test/integration/{ministamp_test.rb → ministamp_production_mode_test.rb} +72 -23
  28. data/test/integration/static_files_as_asset_sources_test.rb +3 -0
  29. data/test/support/assertions.rb +24 -0
  30. data/test/support/fixture_config.rb +13 -10
  31. data/test/support/static_file_api_config.rb +9 -3
  32. data/test/support/test_case.rb +7 -6
  33. data/test/unit/asset_bundle_test.rb +16 -2
  34. data/test/unit/asset_file_registry_test.rb +117 -14
  35. data/test/unit/asset_tag_markup_test.rb +17 -5
  36. data/test/unit/bundle_file_properties_test.rb +32 -8
  37. data/test/unit/bundle_file_writing_test.rb +10 -11
  38. data/test/unit/development_file_collection_properties_test.rb +47 -15
  39. data/test/unit/environment_test.rb +0 -13
  40. data/test/unit/files_test.rb +46 -0
  41. data/test/unit/hashes_test.rb +41 -0
  42. data/test/unit/mini_bundle_block_test.rb +56 -1
  43. data/test/unit/mini_stamp_tag_test.rb +8 -8
  44. data/test/unit/stamp_file_properties_test.rb +32 -13
  45. data/test/unit/stamp_file_writing_test.rb +1 -5
  46. metadata +38 -16
  47. data/test/unit/development_file_collection_writing_test.rb +0 -43
  48. data/test/unit/jekyll_payload_test.rb +0 -64
@@ -0,0 +1,46 @@
1
+ require 'support/test_case'
2
+ require 'jekyll/minibundle/files'
3
+
4
+ module Jekyll::Minibundle::Test
5
+ class FilesTest < TestCase
6
+ def test_read_last_with_non_existing_file_raises_exception
7
+ assert_raises(Errno::ENOENT) { Files.read_last('no-such-file', 4) }
8
+ end
9
+
10
+ def test_read_last_with_empty_file_returns_empty
11
+ Tempfile.open('test') do |file|
12
+ file.close
13
+
14
+ assert_equal '', Files.read_last(file.path, 4)
15
+ end
16
+ end
17
+
18
+ def test_read_last_with_file_bigger_than_max_size_returns_last_bytes
19
+ Tempfile.open('test') do |file|
20
+ file.write("1\n2\n3\n4")
21
+ file.close
22
+
23
+ assert_equal "\n3\n4", Files.read_last(file.path, 4)
24
+ end
25
+ end
26
+
27
+ def test_read_last_with_file_smaller_than_max_size_returns_all_contents
28
+ Tempfile.open('test') do |file|
29
+ file.write("1\n2")
30
+ file.close
31
+
32
+ assert_equal "1\n2", Files.read_last(file.path, 100)
33
+ end
34
+ end
35
+
36
+ def test_read_last_with_max_size_zero_or_negative_returns_empty
37
+ Tempfile.open('test') do |file|
38
+ file.write("1\n2")
39
+ file.close
40
+
41
+ assert_equal '', Files.read_last(file.path, 0)
42
+ assert_equal '', Files.read_last(file.path, -1)
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,41 @@
1
+ require 'support/test_case'
2
+ require 'jekyll/minibundle/hashes'
3
+
4
+ module Jekyll::Minibundle::Test
5
+ class HashesTest < TestCase
6
+ def test_dig_returns_value_when_found
7
+ assert_equal 1, Hashes.dig({top: {middle: {leaf: 1}}}, :top, :middle, :leaf)
8
+ assert_equal 1, Hashes.dig({top: [{}, {leaf: 1}]}, :top, 1, :leaf)
9
+ assert_equal 1, Hashes.dig([{}, {middle: [{}, {leaf: 1}]}], 1, :middle, 1, :leaf)
10
+ end
11
+
12
+ def test_dig_returns_same_found_object
13
+ leaf_obj = {leaf: 1}
14
+ assert_same leaf_obj, Hashes.dig({top: {middle: leaf_obj}}, :top, :middle)
15
+ end
16
+
17
+ def test_dig_returns_nil_when_not_found
18
+ assert_nil Hashes.dig({}, :no_such)
19
+ assert_nil Hashes.dig([], 0)
20
+ assert_nil Hashes.dig({top: {}}, :top, :no_such_leaf)
21
+ assert_nil Hashes.dig({top: {leaf: 1}}, :top, :no_such_leaf)
22
+ assert_nil Hashes.dig({top: []}, :top, 0)
23
+ assert_nil Hashes.dig([{leaf: 1}], 0, :no_such)
24
+ end
25
+
26
+ def test_dig_returns_nil_for_nil
27
+ assert_nil Hashes.dig(nil, :no_such_key)
28
+ assert_nil Hashes.dig(nil, 0)
29
+ end
30
+
31
+ def test_pick_returns_hash_with_specified_keys
32
+ assert_equal({}, Hashes.pick(a: 1, 'b' => 2, 'c' => 3))
33
+ assert_equal({}, Hashes.pick({}))
34
+ assert_equal({a: 1, 'c' => 3}, Hashes.pick({a: 1, 'b' => 2, 'c' => 3}, :a, 'c'))
35
+ end
36
+
37
+ def test_pick_raises_exception_if_key_does_not_exist
38
+ assert_raises(KeyError) { Hashes.pick({}, :no_such) }
39
+ end
40
+ end
41
+ end
@@ -1,13 +1,68 @@
1
1
  require 'support/test_case'
2
+ require 'support/fixture_config'
2
3
  require 'jekyll/minibundle/mini_bundle_block'
3
4
 
4
5
  module Jekyll::Minibundle::Test
5
6
  class MiniBundleBlockTest < TestCase
7
+ include FixtureConfig
8
+
6
9
  def test_raise_exception_if_no_type_argument
7
10
  err = assert_raises(ArgumentError) do
8
- Liquid::Template.parse("{% minibundle %} {% endminibundle %}")
11
+ Liquid::Template.parse('{% minibundle %} {% endminibundle %}')
9
12
  end
10
13
  assert_equal "No asset type for minibundle block; pass value such as 'css' or 'js' as the argument", err.to_s
11
14
  end
15
+
16
+ [
17
+ {
18
+ description: 'nil_baseurl_results_in_asset_url_without_baseurl',
19
+ baseurl_config: 'baseurl:',
20
+ expected_asset_url: CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH
21
+ },
22
+ {
23
+ description: 'empty_baseurl_results_in_asset_url_without_baseurl',
24
+ baseurl_config: "baseurl: ''",
25
+ expected_asset_url: CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH
26
+ },
27
+ {
28
+ description: 'slash_baseurl_results_in_asset_url_with_baseurl',
29
+ baseurl_config: 'baseurl: /',
30
+ expected_asset_url: "/#{CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH}"
31
+ },
32
+ {
33
+ description: 'slash_root_baseurl_results_in_asset_url_with_baseurl',
34
+ baseurl_config: 'baseurl: /root',
35
+ expected_asset_url: "/root/#{CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH}"
36
+ },
37
+ {
38
+ description: 'slash_root_slash_baseurl_results_in_asset_url_with_baseurl',
39
+ baseurl_config: 'baseurl: /root/',
40
+ expected_asset_url: "/root/#{CSS_BUNDLE_DESTINATION_FINGERPRINT_PATH}"
41
+ }
42
+ ].each do |spec|
43
+ define_method :"test_normalizing_baseurl_with_#{spec.fetch(:description)}" do
44
+ AssetFileRegistry.clear
45
+
46
+ template = Liquid::Template.parse(<<-END)
47
+ {% minibundle css %}
48
+ source_dir: _assets/styles
49
+ destination_path: assets/site
50
+ #{spec.fetch(:baseurl_config)}
51
+ assets:
52
+ - reset
53
+ - common
54
+ minifier_cmd: #{minifier_cmd_to_remove_comments}
55
+ {% endminibundle %}
56
+ END
57
+
58
+ actual_output = nil
59
+ capture_io do
60
+ actual_output = template.render({}, registers: {site: new_fake_site(site_fixture_path)})
61
+ end
62
+ expected_output = %{<link rel="stylesheet" href="#{spec.fetch(:expected_asset_url)}">\n}
63
+
64
+ assert_equal expected_output, actual_output
65
+ end
66
+ end
12
67
  end
13
68
  end
@@ -8,24 +8,24 @@ module Jekyll::Minibundle::Test
8
8
 
9
9
  def test_raise_exception_if_no_asset_source_argument
10
10
  err = assert_raises(ArgumentError) do
11
- Liquid::Template.parse("{% ministamp %}")
11
+ Liquid::Template.parse('{% ministamp %}')
12
12
  end
13
- assert_equal "No asset source for ministamp tag; pass value such as '/_assets/site.css' as the first argument", err.to_s
13
+ assert_equal "No asset source for ministamp tag; pass value such as '_assets/site.css' as the first argument", err.to_s
14
14
  end
15
15
 
16
16
  def test_raise_exception_if_no_asset_destination_argument
17
17
  err = assert_raises(ArgumentError) do
18
- Liquid::Template.parse("{% ministamp /_assets/site.css %}")
18
+ Liquid::Template.parse('{% ministamp /_assets/site.css %}')
19
19
  end
20
- assert_equal "No asset destination for ministamp tag; pass value such as '/assets/site.css' as the second argument", err.to_s
20
+ assert_equal "No asset destination for ministamp tag; pass value such as 'assets/site.css' as the second argument", err.to_s
21
21
  end
22
22
 
23
23
  def test_ignore_rest_arguments
24
24
  AssetFileRegistry.clear
25
- template = Liquid::Template.parse("{% ministamp #{STAMP_SOURCE_PATH} #{STAMP_DESTINATION_PATH} rest %}")
26
- context = {}
27
- options = {registers: {site: new_fake_site(site_fixture_path)}}
28
- assert_equal STAMP_DESTINATION_FINGERPRINT_PATH, template.render(context, options)
25
+ output = Liquid::Template
26
+ .parse("{% ministamp #{STAMP_SOURCE_PATH} #{STAMP_DESTINATION_PATH} rest %}")
27
+ .render({}, registers: {site: new_fake_site(site_fixture_path)})
28
+ assert_equal STAMP_DESTINATION_FINGERPRINT_PATH, output
29
29
  end
30
30
  end
31
31
  end
@@ -10,34 +10,53 @@ module Jekyll::Minibundle::Test
10
10
 
11
11
  def setup
12
12
  @results ||= with_fake_site do |site|
13
- file = StampFile.new(site, STAMP_SOURCE_PATH, STAMP_DESTINATION_PATH, &stamp_basenamer)
13
+ file = StampFile.new(site, STAMP_SOURCE_PATH, STAMP_DESTINATION_PATH)
14
14
  get_send_results(file, STATIC_FILE_API_PROPERTIES)
15
15
  end
16
16
  end
17
17
 
18
- def test_to_liquid
19
- hash = @results.fetch(:to_liquid)
20
- assert_equal "/#{STAMP_SOURCE_PATH}", hash['path']
21
- refute_empty hash['modified_time']
22
- assert_equal '.css', hash['extname']
18
+ def test_defaults
19
+ assert_equal({}, @results.fetch(:defaults))
20
+ end
21
+
22
+ def test_destination_rel_dir
23
+ assert_equal 'assets', @results.fetch(:destination_rel_dir)
23
24
  end
24
25
 
25
26
  def test_extname
26
27
  assert_equal '.css', @results.fetch(:extname)
27
28
  end
28
29
 
29
- def test_destination_rel_dir
30
- assert_equal 'assets', @results.fetch(:destination_rel_dir)
30
+ def test_modified_time
31
+ assert_instance_of Time, @results.fetch(:modified_time)
31
32
  end
32
33
 
33
- def test_write?
34
- assert @results.fetch(:write?)
34
+ def test_mtime
35
+ mtime = @results.fetch(:modified_time)
36
+ assert_equal mtime.to_i, @results.fetch(:mtime)
35
37
  end
36
38
 
37
- private
39
+ def test_placeholders
40
+ assert_equal({}, @results.fetch(:placeholders))
41
+ end
38
42
 
39
- def stamp_basenamer
40
- ->(base, ext, stamper) { "#{base}-#{stamper.call}#{ext}" }
43
+ def test_relative_path
44
+ assert_equal "/#{STAMP_SOURCE_PATH}", @results.fetch(:relative_path)
45
+ end
46
+
47
+ def test_to_liquid
48
+ hash = @results.fetch(:to_liquid)
49
+ assert_equal "/#{STAMP_SOURCE_PATH}", hash['path']
50
+ assert_instance_of Time, hash['modified_time']
51
+ assert_equal '.css', hash['extname']
52
+ end
53
+
54
+ def test_type
55
+ assert_nil @results.fetch(:type)
56
+ end
57
+
58
+ def test_write?
59
+ assert @results.fetch(:write?)
41
60
  end
42
61
  end
43
62
  end
@@ -77,11 +77,7 @@ module Jekyll::Minibundle::Test
77
77
  private
78
78
 
79
79
  def new_stamp_file(site)
80
- StampFile.new(site, STAMP_SOURCE_PATH, STAMP_DESTINATION_PATH, &stamp_basenamer)
81
- end
82
-
83
- def stamp_basenamer
84
- ->(base, ext, stamper) { "#{base}-#{stamper.call}#{ext}" }
80
+ StampFile.new(site, STAMP_SOURCE_PATH, STAMP_DESTINATION_PATH)
85
81
  end
86
82
  end
87
83
  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.5.1
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tuomas Kareinen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-29 00:00:00.000000000 Z
11
+ date: 2016-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.1'
19
+ version: '3.1'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.1'
26
+ version: '3.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: minitest
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '5.3'
33
+ version: '5.8'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '5.3'
40
+ version: '5.8'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: nokogiri
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +58,28 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '10.3'
61
+ version: '11.1'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '10.3'
68
+ version: '11.1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.38.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.38.0
69
83
  description: |
70
84
  A straightforward asset bundling plugin for Jekyll, utilizing external
71
85
  minification tool of your choice. It provides asset concatenation for
@@ -94,6 +108,8 @@ files:
94
108
  - lib/jekyll/minibundle/development_file.rb
95
109
  - lib/jekyll/minibundle/development_file_collection.rb
96
110
  - lib/jekyll/minibundle/environment.rb
111
+ - lib/jekyll/minibundle/files.rb
112
+ - lib/jekyll/minibundle/hashes.rb
97
113
  - lib/jekyll/minibundle/mini_bundle_block.rb
98
114
  - lib/jekyll/minibundle/mini_stamp_tag.rb
99
115
  - lib/jekyll/minibundle/stamp_file.rb
@@ -110,10 +126,13 @@ files:
110
126
  - test/fixture/site/about.html
111
127
  - test/fixture/site/assets/site.css
112
128
  - test/fixture/site/index.html
129
+ - test/integration/known_caveats_test.rb
113
130
  - test/integration/minibundle_development_mode_test.rb
114
131
  - test/integration/minibundle_production_mode_test.rb
115
- - test/integration/ministamp_test.rb
132
+ - test/integration/ministamp_development_mode_test.rb
133
+ - test/integration/ministamp_production_mode_test.rb
116
134
  - test/integration/static_files_as_asset_sources_test.rb
135
+ - test/support/assertions.rb
117
136
  - test/support/fixture_config.rb
118
137
  - test/support/static_file_api_config.rb
119
138
  - test/support/test_case.rb
@@ -123,9 +142,9 @@ files:
123
142
  - test/unit/bundle_file_properties_test.rb
124
143
  - test/unit/bundle_file_writing_test.rb
125
144
  - test/unit/development_file_collection_properties_test.rb
126
- - test/unit/development_file_collection_writing_test.rb
127
145
  - test/unit/environment_test.rb
128
- - test/unit/jekyll_payload_test.rb
146
+ - test/unit/files_test.rb
147
+ - test/unit/hashes_test.rb
129
148
  - test/unit/jekyll_static_file_api_test.rb
130
149
  - test/unit/mini_bundle_block_test.rb
131
150
  - test/unit/mini_stamp_tag_test.rb
@@ -148,7 +167,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
148
167
  requirements:
149
168
  - - ">="
150
169
  - !ruby/object:Gem::Version
151
- version: 1.9.3
170
+ version: 2.0.0
152
171
  required_rubygems_version: !ruby/object:Gem::Requirement
153
172
  requirements:
154
173
  - - ">="
@@ -156,7 +175,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
156
175
  version: '0'
157
176
  requirements: []
158
177
  rubyforge_project:
159
- rubygems_version: 2.4.5
178
+ rubygems_version: 2.6.2
160
179
  signing_key:
161
180
  specification_version: 4
162
181
  summary: A minimalistic asset bundling plugin for Jekyll
@@ -173,10 +192,13 @@ test_files:
173
192
  - test/fixture/site/about.html
174
193
  - test/fixture/site/assets/site.css
175
194
  - test/fixture/site/index.html
195
+ - test/integration/known_caveats_test.rb
176
196
  - test/integration/minibundle_development_mode_test.rb
177
197
  - test/integration/minibundle_production_mode_test.rb
178
- - test/integration/ministamp_test.rb
198
+ - test/integration/ministamp_development_mode_test.rb
199
+ - test/integration/ministamp_production_mode_test.rb
179
200
  - test/integration/static_files_as_asset_sources_test.rb
201
+ - test/support/assertions.rb
180
202
  - test/support/fixture_config.rb
181
203
  - test/support/static_file_api_config.rb
182
204
  - test/support/test_case.rb
@@ -186,9 +208,9 @@ test_files:
186
208
  - test/unit/bundle_file_properties_test.rb
187
209
  - test/unit/bundle_file_writing_test.rb
188
210
  - test/unit/development_file_collection_properties_test.rb
189
- - test/unit/development_file_collection_writing_test.rb
190
211
  - test/unit/environment_test.rb
191
- - test/unit/jekyll_payload_test.rb
212
+ - test/unit/files_test.rb
213
+ - test/unit/hashes_test.rb
192
214
  - test/unit/jekyll_static_file_api_test.rb
193
215
  - test/unit/mini_bundle_block_test.rb
194
216
  - test/unit/mini_stamp_tag_test.rb
@@ -1,43 +0,0 @@
1
- require 'support/test_case'
2
- require 'support/fixture_config'
3
- require 'jekyll/minibundle/development_file'
4
-
5
- module Jekyll::Minibundle::Test
6
- class DevelopmentFileCollectionWritingTest < TestCase
7
- include FixtureConfig
8
-
9
- def test_calling_write_before_destination_path_for_markup_writes_destination
10
- with_fake_site do |site|
11
- dev_files = DevelopmentFileCollection.new(site, bundle_config)
12
-
13
- assert first_file_of(dev_files).write('_site')
14
-
15
- destination_file = destination_path(JS_BUNDLE_DESTINATION_PATH, 'dependency.js')
16
-
17
- assert File.exist?(destination_file)
18
-
19
- org_mtime = mtime_of(destination_file)
20
- dev_files.destination_path_for_markup
21
-
22
- refute first_file_of(dev_files).write('_site')
23
- assert_equal org_mtime, mtime_of(destination_file)
24
- end
25
- end
26
-
27
- private
28
-
29
- def bundle_config
30
- {
31
- 'type' => :js,
32
- 'source_dir' => JS_BUNDLE_SOURCE_DIR,
33
- 'assets' => %w{dependency app},
34
- 'destination_path' => JS_BUNDLE_DESTINATION_PATH,
35
- 'attributes' => {}
36
- }
37
- end
38
-
39
- def first_file_of(dev_files)
40
- dev_files.instance_variable_get(:@files).first
41
- end
42
- end
43
- end