jekyll-minibundle 1.5.1 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 78d5b4816f385803fa9430a93c45b4400bdc412b
4
- data.tar.gz: 840c54ba92488bf1f8116789267bd3a4890a0ce0
3
+ metadata.gz: b7dc5bf67a5d4a713810a998484b2bca9ecc1cc3
4
+ data.tar.gz: 4f2fc0b94c6e29a573666627609e50dccdc123ab
5
5
  SHA512:
6
- metadata.gz: 768d946a42f110c20029d45bf50a6c5174d665adfac5dff7f56b6eef81538f2d7044f6222d2efc31bafdc1083c3f8fb0639959e8c9dc50be999f950b45832b35
7
- data.tar.gz: 506cc7dd2bc7405b431ebb09815aab616bf786407d46d5b19b93aa510c999a552481d1ed6a6a1711817ae6e618e1252549ac8311c0b32cf751892347c65a45f0
6
+ metadata.gz: e7571e9ec0a7a0c7914afbaf93b3442747b50b36b5645ac67d6745ecb777a49d17c66c40f6d7af2fc87e265fcf888b53d17a9dd3f9c80c390e2b048b458d8dc3
7
+ data.tar.gz: 0bfeacb9e08ea16d1e4815af0b3dfa7c061ffd7138fa883a2619817b9588d30fefe3b72c0b843db84282e2c9c429714e138f65239e579326636c1a715c21ab35
data/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ # 1.6.0 / 2016-03-26
2
+
3
+ * Log the last 2000 bytes of minifier's STDOUT output if the minifier
4
+ command fails. Pull Request #6 by Martin Nordholts (@Enselic).
5
+ * Allow prepending base URL for the destination path of `minibundle`
6
+ block
7
+ * Drop Ruby MRI 1.9 support because Jekyll 3 does not support it
8
+ * Fix issues in asset reloading in Jekyll's watch (auto-regeneration)
9
+ mode, doing bundling and asset fingerprinting again
10
+
1
11
  # 1.5.1 / 2015-01-29
2
12
 
3
13
  * Improve future compatibility with Jekyll. Minibundle has classes
@@ -8,7 +18,7 @@
8
18
  # 1.5.0 / 2014-07-27
9
19
 
10
20
  * Support minifier command specification in `_config.yml` and inside
11
- `minibundle` block (#4, @phillipadsmith)
21
+ `minibundle` block. Issue #4 by Phillip Smith (@phillipadsmith).
12
22
  * Support enabling development mode from `_config.yml`
13
23
  * Add argument validation to `minibundle` block and `ministamp` tag
14
24
  * Document how to load the gem with Jekyll's `gems` config setting
@@ -25,8 +35,8 @@
25
35
  * Clean log messages: show relative paths when bundling assets
26
36
  * Add missing implementations of `relative_path` and `to_liquid`
27
37
  methods from Jekyll's StaticFile API (introduced in Jekyll v1.5.0),
28
- allowing Minibundle to behave better with other Jekyll plugins (#3,
29
- @mmistakes)
38
+ allowing Minibundle to behave better with other Jekyll
39
+ plugins. Issue #3 by Michael Rose (@mmistakes).
30
40
  * Fix Ruby deprecation warnings (use `File.exist?` instead of
31
41
  `File.exists?`)
32
42
 
@@ -65,14 +75,15 @@
65
75
  * Fix bug causing exception to be thrown when `ministamp` or
66
76
  `minibundle` is called twice with same asset source argument. Allow
67
77
  handling asset source files that are already static files in Jekyll
68
- (remove the restriction introduced in 1.3.0). (#2, @agrigg)
78
+ (remove the restriction introduced in 1.3.0). Issue #2 by Austin
79
+ Grigg (@agrigg).
69
80
 
70
81
  # 1.3.0 / 2013-12-25
71
82
 
72
83
  * Disallow handling asset source files that are already static files
73
84
  in Jekyll. Otherwise, we would potentially get to inconsistencies in
74
85
  Jekyll's watch mode. See "Jekyll static file restriction" in
75
- README.md. (#2, @agrigg)
86
+ README.md. Issue #2 by Austin Grigg (@agrigg).
76
87
  * Upgrade development dependencies
77
88
 
78
89
  # 1.2.0 / 2013-09-29
@@ -85,7 +96,8 @@
85
96
 
86
97
  * `ministamp` tag omits fingerprint in development mode
87
98
  * Clarify documentation
88
- * Comply with (Gemnasium) conventions for changelogs (#1, @tmatilai)
99
+ * Comply with (Gemnasium) conventions for changelogs. Pull Request #1
100
+ by Teemu Matilainen (@tmatilai).
89
101
  * Bug fix: do not bundle assets when nonrelated files change
90
102
  * Bug fix: do not bundle assets twice upon startup
91
103
 
data/README.md CHANGED
@@ -8,12 +8,12 @@ for cache busting.
8
8
  There are no runtime dependencies, except for the minification tool
9
9
  used for bundling (fingerprinting has no dependencies).
10
10
 
11
- Tested with Ruby MRI 1.9.3 and 2.x. Ruby 1.8 is *not* supported.
11
+ Tested with Ruby MRI 2.x. Ruby 1.9 and 1.8 are *not* supported.
12
12
 
13
13
  The plugin works with Jekyll's watch (auto-regeneration) mode.
14
14
 
15
- [![Gem Version](https://badge.fury.io/rb/jekyll-minibundle.svg)](http://badge.fury.io/rb/jekyll-minibundle)
16
- [![Build Status](https://secure.travis-ci.org/tkareine/jekyll-minibundle.svg)](http://travis-ci.org/tkareine/jekyll-minibundle)
15
+ [![Gem version](https://badge.fury.io/rb/jekyll-minibundle.svg)][MinibundleGem]
16
+ [![Build status](https://secure.travis-ci.org/tkareine/jekyll-minibundle.svg)][MinibundleBuild]
17
17
 
18
18
  # Features
19
19
 
@@ -29,11 +29,11 @@ feeding asset file contents to it in desired order via standard input,
29
29
  and reads the result from standard output.
30
30
 
31
31
  Why is this good? A fingerprint in asset's path is the
32
- [recommended way][GoogleCachingBestPractices] to handle caching of
33
- static resources, because you can allow caching the asset
34
- forever. Calculating MD5 digest over the contents of the asset is fast
35
- and the resulting digest is reasonably unique to be generated
36
- automatically.
32
+ [recommended way][GoogleWebFundamentalsHttpCaching] to handle caching
33
+ of static resources, because you can allow browsers and intermediate
34
+ proxies to cache the asset for a very long time. Calculating MD5
35
+ digest over the contents of the asset is fast and the resulting digest
36
+ is reasonably unique to be generated automatically.
37
37
 
38
38
  Asset bundling is good for reducing the number of requests to the
39
39
  backend upon page load. The minification of stylesheets and JavaScript
@@ -42,8 +42,7 @@ network.
42
42
 
43
43
  # Usage
44
44
 
45
- The plugin ships as a
46
- [RubyGem](https://rubygems.org/gems/jekyll-minibundle). To install:
45
+ The plugin ships as a [RubyGem][MinibundleGem]. To install:
47
46
 
48
47
  ``` bash
49
48
  $ gem install jekyll-minibundle
@@ -76,13 +75,14 @@ If you just want to have a fingerprint in your asset's path, use
76
75
  `ministamp` tag:
77
76
 
78
77
  ``` html
79
- <link href="{% ministamp _assets/site.css assets/site.css %}" rel="stylesheet" media="screen, projection">
78
+ <link href="{{ site.baseurl }}{% ministamp _assets/site.css assets/site.css %}" rel="stylesheet" media="screen, projection">
80
79
  ```
81
80
 
82
- Output, containing the MD5 digest of the file in the filename:
81
+ Output, when `site.baseurl` is `/`, containing the MD5 digest of the
82
+ file in the filename:
83
83
 
84
84
  ``` html
85
- <link href="assets/site-390be921ee0eff063817bb5ef2954300.css" rel="stylesheet" media="screen, projection">
85
+ <link href="/assets/site-390be921ee0eff063817bb5ef2954300.css" rel="stylesheet" media="screen, projection">
86
86
  ```
87
87
 
88
88
  Jekyll's output directory will have the asset file at that path.
@@ -94,7 +94,7 @@ to take inputs from `_assets/styles/*.scss` and to produce output to
94
94
  fingerprint to Jekyll's output directory:
95
95
 
96
96
  ``` html
97
- <link href="{% ministamp _tmp/site.css assets/site.css %}" rel="stylesheet">
97
+ <link href="{{ site.baseurl }}{% ministamp _tmp/site.css assets/site.css %}" rel="stylesheet">
98
98
  ```
99
99
 
100
100
  ## Asset bundling
@@ -115,6 +115,7 @@ a set of JavaScript sources:
115
115
  {% minibundle js %}
116
116
  source_dir: _assets/scripts
117
117
  destination_path: assets/site
118
+ baseurl: {{ site.baseurl }}
118
119
  assets:
119
120
  - dependency
120
121
  - app
@@ -126,15 +127,17 @@ attributes:
126
127
  Then, specify the command for launching your favorite minifier in `_config.yml`:
127
128
 
128
129
  ``` yaml
130
+ baseurl: /
131
+
129
132
  minibundle:
130
133
  minifier_commands:
131
- js: ./node_modules/.bin/uglifyjs -
134
+ js: node_modules/.bin/uglifyjs --
132
135
  ```
133
136
 
134
137
  Output in the content file:
135
138
 
136
139
  ``` html
137
- <script src="assets/site-8e764372a0dbd296033cb2a416f064b5.js" type="text/javascript" id="my-scripts"></script>
140
+ <script src="/assets/site-8e764372a0dbd296033cb2a416f064b5.js" type="text/javascript" id="my-scripts"></script>
138
141
  ```
139
142
 
140
143
  You can pass custom attributes, like `id="my-scripts"` above, to the
@@ -147,6 +150,7 @@ For bundling CSS assets, you use `css` as the argument to the
147
150
  {% minibundle css %}
148
151
  source_dir: _assets/styles
149
152
  destination_path: assets/site
153
+ baseurl: {{ site.baseurl }}
150
154
  assets:
151
155
  - reset
152
156
  - common
@@ -161,7 +165,7 @@ And then specify the minifier command in `_config.yml`:
161
165
  minibundle:
162
166
  minifier_commands:
163
167
  css: _bin/remove_whitespace
164
- js: ./node_modules/.bin/uglifyjs -
168
+ js: node_modules/.bin/uglifyjs --
165
169
  ```
166
170
 
167
171
  ### Minifier command specification
@@ -174,14 +178,14 @@ You can specify minifier commands in three places:
174
178
  minibundle:
175
179
  minifier_commands:
176
180
  css: _bin/remove_whitespace
177
- js: ./node_modules/.bin/uglifyjs -
181
+ js: node_modules/.bin/uglifyjs --
178
182
  ```
179
183
 
180
184
  2. as environment variables:
181
185
 
182
186
  ``` bash
183
187
  export JEKYLL_MINIBUNDLE_CMD_CSS=_bin/remove_whitespace
184
- export JEKYLL_MINIBUNDLE_CMD_JS="./node_modules/.bin/uglifyjs -"
188
+ export JEKYLL_MINIBUNDLE_CMD_JS="node_modules/.bin/uglifyjs --"
185
189
  ```
186
190
 
187
191
  3. inside the minibundle block with `minifier_cmd` setting, allowing
@@ -191,7 +195,7 @@ You can specify minifier commands in three places:
191
195
  {% minibundle js %}
192
196
  source_dir: _assets/scripts
193
197
  destination_path: assets/site
194
- minifier_cmd: ./node_modules/.bin/uglifyjs -
198
+ minifier_cmd: node_modules/.bin/uglifyjs --
195
199
  assets:
196
200
  - dependency
197
201
  - app
@@ -217,7 +221,7 @@ asset source to `ministamp` tag:
217
221
 
218
222
  ``` html
219
223
  <!-- BAD: unless assets dir is excluded, both src.css and dest.css will be copied to output directory -->
220
- <link href="{% ministamp assets/src.css assets/dest.css %}" rel="stylesheet" media="screen, projection">
224
+ <link href="{{ site.baseurl }}{% ministamp assets/src.css assets/dest.css %}" rel="stylesheet" media="screen, projection">
221
225
  ```
222
226
 
223
227
  By default, Jekyll includes this file to the output directory. As a
@@ -266,13 +270,19 @@ wins.
266
270
 
267
271
  See the contents of `test/fixture/site` directory.
268
272
 
273
+ # Known caveats
274
+
275
+ See `test/integration/known_caveats_test.rb`.
276
+
269
277
  # License
270
278
 
271
279
  MIT. See `LICENSE.txt`.
272
280
 
273
281
  [Compass]: http://compass-style.org/
274
282
  [GemBundler]: http://bundler.io/
275
- [GoogleCachingBestPractices]: https://developers.google.com/speed/docs/best-practices/caching
276
- [Jekyll]: http://jekyllrb.com/
277
- [JekyllConf]: http://jekyllrb.com/docs/configuration/
283
+ [GoogleWebFundamentalsHttpCaching]: https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching#invalidating-and-updating-cached-responses
284
+ [MinibundleGem]: https://rubygems.org/gems/jekyll-minibundle
285
+ [MinibundleBuild]: https://travis-ci.org/tkareine/jekyll-minibundle
286
+ [Jekyll]: https://jekyllrb.com/
287
+ [JekyllConf]: https://jekyllrb.com/docs/configuration/
278
288
  [UglifyJS2]: https://github.com/mishoo/UglifyJS2
data/Rakefile CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'fileutils'
2
2
  require 'rake/clean'
3
3
  require 'shellwords'
4
+ require 'rubocop/rake_task'
4
5
 
5
6
  require_relative 'lib/jekyll/minibundle/version'
6
7
 
@@ -25,7 +26,7 @@ namespace :gem do
25
26
  CLEAN.include "#{gem_name}-*.gem"
26
27
 
27
28
  desc 'Package the software as a gem'
28
- task :build => :test do
29
+ task build: :default do
29
30
  sh "gem build #{gem_name}.gemspec"
30
31
  end
31
32
 
@@ -35,7 +36,7 @@ namespace :gem do
35
36
  end
36
37
 
37
38
  desc 'Uninstall the gem'
38
- task :uninstall => :clean do
39
+ task uninstall: :clean do
39
40
  sh "gem uninstall #{gem_name}"
40
41
  end
41
42
  end
@@ -44,17 +45,19 @@ desc 'Run tests; TEST=<test_suite_path>, NAME=<test_name_pattern>, DEBUG=1 to re
44
45
  task :test do
45
46
  run_single_test = ENV.key?('TEST')
46
47
 
47
- run_selected_or_all = if run_single_test
48
- rb_file = ENV['TEST']
49
- name_opt = ENV.key?('NAME') ? " -n #{ENV['NAME']}" : ''
50
- "#{rb_file}#{name_opt}"
51
- else
52
- requirable_files = Dir['test/{unit,integration}/*_test.rb'].
53
- map { |file| %r{^test/(.+)\.rb$}.match(file)[1] }.
54
- shelljoin
55
- eval = "-e 'ARGV.each { |f| require f }'"
56
- "#{eval} #{requirable_files}"
57
- end
48
+ run_selected_or_all =
49
+ if run_single_test
50
+ rb_file = ENV['TEST']
51
+ name_opt = ENV.key?('NAME') ? " -n #{ENV['NAME']}" : ''
52
+ "#{rb_file}#{name_opt}"
53
+ else
54
+ requirable_files =
55
+ Dir['test/{unit,integration}/*_test.rb']
56
+ .map { |file| %r{^test/(.+)\.rb$}.match(file)[1] }
57
+ .shelljoin
58
+ eval = "-e 'ARGV.each { |f| require f }'"
59
+ "#{eval} #{requirable_files}"
60
+ end
58
61
 
59
62
  extra_opts = ENV['DEBUG'] ? '-w -rpp -rpry ' : ''
60
63
 
@@ -75,4 +78,6 @@ namespace :fixture do
75
78
  end
76
79
  end
77
80
 
78
- task :default => :test
81
+ RuboCop::RakeTask.new
82
+
83
+ task default: [:test, :rubocop]
@@ -27,12 +27,13 @@ minification tool (not even other gems).
27
27
 
28
28
  s.test_files = `git ls-files -- test`.split("\n")
29
29
 
30
- s.add_development_dependency 'jekyll', '~> 2.1'
31
- s.add_development_dependency 'minitest', '~> 5.3'
30
+ s.add_development_dependency 'jekyll', '~> 3.1'
31
+ s.add_development_dependency 'minitest', '~> 5.8'
32
32
  s.add_development_dependency 'nokogiri', '~> 1.6'
33
- s.add_development_dependency 'rake', '~> 10.3'
33
+ s.add_development_dependency 'rake', '~> 11.1'
34
+ s.add_development_dependency 'rubocop', '~> 0.38.0'
34
35
 
35
- s.required_ruby_version = '>= 1.9.3'
36
+ s.required_ruby_version = '>= 2.0.0'
36
37
 
37
38
  s.rdoc_options << '--line-numbers' << '--title' << s.name << '--exclude' << 'test'
38
39
  end
@@ -1,5 +1,6 @@
1
1
  require 'tempfile'
2
2
  require 'jekyll/minibundle/compatibility'
3
+ require 'jekyll/minibundle/files'
3
4
 
4
5
  module Jekyll::Minibundle
5
6
  class AssetBundle
@@ -10,7 +11,7 @@ module Jekyll::Minibundle
10
11
  @minifier_cmd = config.fetch(:minifier_cmd)
11
12
 
12
13
  unless @minifier_cmd
13
- fail <<-END
14
+ raise <<-END
14
15
  Missing minification command for bundling #{@type} assets. Specify it in
15
16
  1) minibundle.minifier_commands.#{@type} setting in _config.yml,
16
17
  2) $JEKYLL_MINIBUNDLE_CMD_#{@type.to_s.upcase} environment variable, or
@@ -18,7 +19,7 @@ Missing minification command for bundling #{@type} assets. Specify it in
18
19
  END
19
20
  end
20
21
 
21
- @temp_file = Tempfile.new(["jekyll-minibundle-", ".#{@type}"])
22
+ @temp_file = Tempfile.new(['jekyll-minibundle-', ".#{@type}"])
22
23
  at_exit { @temp_file.close! }
23
24
  end
24
25
 
@@ -36,14 +37,18 @@ Missing minification command for bundling #{@type} assets. Specify it in
36
37
  input.puts(';') if @type == :js
37
38
  end
38
39
  end
39
- fail "Bundling #{@type} assets failed with exit status #{exit_status}, command: #{@minifier_cmd}" if exit_status != 0
40
+ if exit_status != 0
41
+ msg = "Bundling #{@type} assets failed with exit status #{exit_status}, command: '#{@minifier_cmd}'"
42
+ log_minifier_error(msg)
43
+ raise msg
44
+ end
40
45
  self
41
46
  end
42
47
 
43
48
  private
44
49
 
45
50
  def relative_path_from(path, base)
46
- path.sub(/\A#{base}\//, '')
51
+ path.sub(%r{\A#{base}/}, '')
47
52
  end
48
53
 
49
54
  def spawn_minifier(cmd)
@@ -57,8 +62,23 @@ Missing minification command for bundling #{@type} assets. Specify it in
57
62
  wr.close
58
63
  _, status = Process.waitpid2(pid)
59
64
  status.exitstatus
65
+ rescue => e
66
+ raise "Bundling #{@type} assets failed: #{e}"
60
67
  ensure
61
68
  [rd, wr].each { |io| io.close unless io.closed? }
62
69
  end
70
+
71
+ def log_minifier_error(message)
72
+ last_bytes = Files.read_last(@temp_file.path, 2000)
73
+
74
+ return if last_bytes.empty?
75
+
76
+ Compatibility.log_error("#{message}, last #{last_bytes.size} bytes of minifier output:")
77
+
78
+ last_bytes
79
+ .gsub(/[^[:print:]\t\n]/) { |ch| '\x' + ch.unpack('H2').first }
80
+ .split("\n")
81
+ .each { |line| Compatibility.log_error(line) }
82
+ end
63
83
  end
64
84
  end
@@ -2,14 +2,6 @@ require 'fileutils'
2
2
 
3
3
  module Jekyll::Minibundle
4
4
  module AssetFileOperations
5
- def add_as_static_file_to(site)
6
- # NOTE: Rely on explicit site parameter (not on self's @site) so
7
- # that we can utilize asset registry clearing for tests.
8
- unless site.static_files.include? self
9
- site.static_files << self
10
- end
11
- end
12
-
13
5
  def write_destination(site_destination_dir)
14
6
  destination_path = destination(site_destination_dir)
15
7
  FileUtils.mkdir_p(File.dirname(destination_path))
@@ -1,5 +1,11 @@
1
1
  module Jekyll::Minibundle
2
2
  module AssetFileProperties
3
+ def asset_destination_path
4
+ File.join(asset_destination_dir, asset_destination_basename)
5
+ end
6
+
7
+ # Conformance to remaining Jekyll StaticFile public API methods
8
+
3
9
  def path
4
10
  asset_source_path
5
11
  end
@@ -8,20 +14,20 @@ module Jekyll::Minibundle
8
14
  path.sub(/\A#{@site.source}/, '')
9
15
  end
10
16
 
11
- def asset_destination_path
12
- File.join(asset_destination_dir, asset_destination_basename)
13
- end
14
-
15
17
  def destination(site_destination_dir)
16
18
  File.join(site_destination_dir, asset_destination_path)
17
19
  end
18
20
 
19
- def extname
20
- File.extname(relative_path)
21
+ def url
22
+ asset_destination_path
23
+ end
24
+
25
+ def modified_time
26
+ File.stat(path).mtime
21
27
  end
22
28
 
23
29
  def mtime
24
- File.stat(path).mtime.to_i
30
+ modified_time.to_i
25
31
  end
26
32
 
27
33
  def modified?
@@ -35,7 +41,7 @@ module Jekyll::Minibundle
35
41
  def to_liquid
36
42
  {
37
43
  'path' => relative_path,
38
- 'modified_time' => mtime.to_s,
44
+ 'modified_time' => modified_time,
39
45
  'extname' => extname
40
46
  }
41
47
  end
@@ -43,5 +49,17 @@ module Jekyll::Minibundle
43
49
  def write?
44
50
  true
45
51
  end
52
+
53
+ def type
54
+ nil # no collection present
55
+ end
56
+
57
+ def defaults
58
+ {}
59
+ end
60
+
61
+ def placeholders
62
+ {}
63
+ end
46
64
  end
47
65
  end