jekyll-minibundle 0.1.0 → 0.2.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.
data/History.md CHANGED
@@ -1,3 +1,9 @@
1
+ ### 0.2.0 / 2012-12-15
2
+
3
+ * Escape the values of custom attributes given in `minibundle` block
4
+ * Add semicolons between each JavaScript asset in bundling
5
+ * Show error in page output if asset bundling command failed
6
+
1
7
  ### 0.1.0 / 2012-12-07
2
8
 
3
9
  * Add `ministamp` tag and `minibundle` block for Jekyll
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2012 Tuomas Kareinen
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
data/Rakefile CHANGED
@@ -2,9 +2,19 @@ require 'rake/clean'
2
2
  require 'shellwords'
3
3
 
4
4
  require_relative 'lib/jekyll/minibundle/version'
5
- gem_name = 'jekyll-minibundle'
5
+
6
+ def get_minibundle_env(overrides = {})
7
+ bundle_cmd = File.expand_path(File.join(File.dirname(__FILE__), 'test/fixture/site/_bin/remove_comments'))
8
+ {
9
+ 'JEKYLL_MINIBUNDLE_CMD_JS' => bundle_cmd,
10
+ 'JEKYLL_MINIBUNDLE_CMD_CSS' => bundle_cmd,
11
+ 'RUBYLIB' => File.expand_path(File.join(File.dirname(__FILE__), 'lib'))
12
+ }.merge(overrides)
13
+ end
6
14
 
7
15
  namespace :gem do
16
+ gem_name = 'jekyll-minibundle'
17
+
8
18
  CLEAN.include "#{gem_name}-*.gem"
9
19
 
10
20
  desc 'Package the software as a gem'
@@ -25,19 +35,17 @@ end
25
35
 
26
36
  desc 'Run tests'
27
37
  task :test do
28
- test_dir = 'test'
29
- test_glob = 'integration/**/*_test.rb'
30
- includes = ['lib', test_dir].join(':')
31
- tests = Dir["#{test_dir}/#{test_glob}"].
38
+ tests = Dir['test/**/*_test.rb'].
32
39
  map { |file| %r{^test/(.+)\.rb$}.match(file)[1] }.
33
40
  shelljoin
34
- test_cmd = %{bundle exec ruby -I#{includes} -e 'ARGV.each { |f| require f }' #{tests}}
35
- bundle_cmd = File.expand_path(File.join(File.dirname(__FILE__), test_dir, 'fixture/site/_bin/remove_comments'))
36
- env = {
37
- 'JEKYLL_MINIBUNDLE_CMD_JS' => bundle_cmd,
38
- 'JEKYLL_MINIBUNDLE_CMD_CSS' => bundle_cmd
39
- }
40
- sh(env, test_cmd)
41
+ test_cmd = %{bundle exec ruby -e 'ARGV.each { |f| require f }' #{tests}}
42
+ sh(get_minibundle_env('RUBYLIB' => 'lib:test'), test_cmd)
43
+ end
44
+
45
+ desc 'Generate fixture site for debugging'
46
+ task :debug do
47
+ Dir.chdir 'test/fixture/site'
48
+ sh(get_minibundle_env, 'jekyll')
41
49
  end
42
50
 
43
51
  CLEAN.include 'test/fixture/site/_site'
data/Readme.md CHANGED
@@ -4,12 +4,14 @@ A minimalistic plugin for bundling assets to
4
4
  [Jekyll](https://github.com/mojombo/jekyll)'s site generation
5
5
  directory.
6
6
 
7
- In addition to the plugin, you need your asset bundling tool of choice
8
- only. The plugin needs no other configuration than setting an
9
- environment variable.
7
+ In addition to the plugin itself, you only need your asset bundling
8
+ tool of choice. The plugin needs no other configuration than setting
9
+ an environment variable. There are no gem dependencies.
10
10
 
11
11
  Tested with Ruby MRI 1.9.3. Ruby 1.8 is *not* supported.
12
12
 
13
+ [![Build Status](https://secure.travis-ci.org/tkareine/jekyll-minibundle.png)](http://travis-ci.org/tkareine/jekyll-minibundle)
14
+
13
15
  # Features
14
16
 
15
17
  There are two features: asset stamping with MD5 digest over the
@@ -94,7 +96,7 @@ You can pass custom attributes to the generated markup with
94
96
 
95
97
  Output:
96
98
 
97
- <script type="text/javascript" src="assets/site-8e764372a0dbd296033cb2a416f064b5.js" id="my-scripts"></script>
99
+ <script src="assets/site-8e764372a0dbd296033cb2a416f064b5.js" type="text/javascript" id="my-scripts"></script>
98
100
 
99
101
  For bundling CSS assets, you use `css` as the argument to `minibundle` block:
100
102
 
@@ -117,22 +119,4 @@ See the contents of `test/fixture/site` directory.
117
119
 
118
120
  # License
119
121
 
120
- Copyright (c) 2012 Tuomas Kareinen
121
-
122
- Permission is hereby granted, free of charge, to any person obtaining a copy
123
- of this software and associated documentation files (the "Software"), to deal
124
- in the Software without restriction, including without limitation the rights
125
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
126
- copies of the Software, and to permit persons to whom the Software is
127
- furnished to do so, subject to the following conditions:
128
-
129
- The above copyright notice and this permission notice shall be included in
130
- all copies or substantial portions of the Software.
131
-
132
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
133
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
134
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
135
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
136
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
137
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
138
- THE SOFTWARE.
122
+ MIT. See `License.txt`.
@@ -18,6 +18,7 @@ module Jekyll::Minibundle
18
18
  @assets.each do |asset|
19
19
  puts " #{asset}"
20
20
  IO.foreach(asset) { |line| wr.write line }
21
+ wr.puts ';' if @type == :js
21
22
  end
22
23
  end
23
24
  self
@@ -40,7 +41,8 @@ module Jekyll::Minibundle
40
41
  end
41
42
  yield wr
42
43
  wr.close
43
- Process.waitpid2 pid
44
+ _, status = Process.waitpid2 pid
45
+ raise "Bundling #{@type} assets failed with exit status #{status.exitstatus}, command: #{cmd}" if status.exitstatus != 0
44
46
  ensure
45
47
  wr.close unless wr.closed?
46
48
  end
@@ -7,8 +7,8 @@ module Jekyll::Minibundle
7
7
  site.static_files << self unless static_file_exists
8
8
  end
9
9
 
10
- def write_destination(gensite_dir)
11
- destination_path = destination gensite_dir
10
+ def write_destination(site_destination_dir)
11
+ destination_path = destination site_destination_dir
12
12
  FileUtils.mkdir_p File.dirname(destination_path)
13
13
  FileUtils.cp path, destination_path
14
14
  end
@@ -10,10 +10,10 @@ module Jekyll::Minibundle
10
10
 
11
11
  def initialize(config)
12
12
  @type = config['type']
13
- @site_dir = config['site_dir']
14
- source_dir = File.join @site_dir, config['source_dir']
15
- @destination_path = config['destination_path']
16
- @assets = config['assets'].map { |asset_path| File.join source_dir, "#{asset_path}.#{@type}" }
13
+ @site_source_dir = config['site_dir']
14
+ asset_source_dir = File.join @site_source_dir, config['source_dir']
15
+ @assets = config['assets'].map { |asset_path| File.join asset_source_dir, "#{asset_path}.#{@type}" }
16
+ @asset_destination_path = config['destination_path']
17
17
  @attributes = config['attributes']
18
18
  update_mtime
19
19
  end
@@ -23,11 +23,11 @@ module Jekyll::Minibundle
23
23
  end
24
24
 
25
25
  def asset_path
26
- "#{@destination_path}-#{asset_stamp}.#{@type}"
26
+ "#{@asset_destination_path}-#{asset_stamp}.#{@type}"
27
27
  end
28
28
 
29
- def destination(destination_base_dir)
30
- File.join destination_base_dir, asset_path
29
+ def destination(site_destination_dir)
30
+ File.join site_destination_dir, asset_path
31
31
  end
32
32
 
33
33
  def mtime
@@ -38,14 +38,14 @@ module Jekyll::Minibundle
38
38
  @@mtimes[path] != mtime
39
39
  end
40
40
 
41
- def write(gensite_dir)
41
+ def write(site_destination_dir)
42
42
  rebundle_assets if modified?
43
- destination_path = destination gensite_dir
43
+ destination_path = destination site_destination_dir
44
44
 
45
45
  return false if File.exist?(destination_path) and !modified?
46
46
 
47
47
  update_mtime
48
- write_destination gensite_dir
48
+ write_destination site_destination_dir
49
49
 
50
50
  true
51
51
  end
@@ -61,7 +61,7 @@ module Jekyll::Minibundle
61
61
  end
62
62
 
63
63
  def asset_bundle
64
- @asset_bundle ||= AssetBundle.new(@type, @assets, @site_dir).make_bundle
64
+ @asset_bundle ||= AssetBundle.new(@type, @assets, @site_source_dir).make_bundle
65
65
  end
66
66
 
67
67
  def rebundle_assets
@@ -1,3 +1,5 @@
1
+ require 'cgi'
2
+
1
3
  module Jekyll::Minibundle
2
4
  module BundleMarkup
3
5
  def self.make_markup(type, path, attributes)
@@ -12,7 +14,11 @@ module Jekyll::Minibundle
12
14
  end
13
15
 
14
16
  def self.make_attributes(attributes)
15
- attributes.map { |name, value| %{ #{name}="#{value}"} }.join('')
17
+ attributes.map { |name, value| make_attribute(name, value) }.join('')
18
+ end
19
+
20
+ def self.make_attribute(name, value)
21
+ %{ #{name}="#{CGI.escape_html(value)}"}
16
22
  end
17
23
  end
18
24
  end
@@ -4,12 +4,12 @@ module Jekyll::Minibundle
4
4
  class MiniStampTag < Liquid::Tag
5
5
  def initialize(tag_name, text, _tokens)
6
6
  super
7
- @source, @destination = text.split(/\s+/, 3)[0, 2]
7
+ @asset_source, @asset_destination = text.split(/\s+/, 3)[0, 2]
8
8
  end
9
9
 
10
10
  def render(context)
11
11
  site = context.registers[:site]
12
- file = StampFile.new File.join(site.source, @source), @destination
12
+ file = StampFile.new File.join(site.source, @asset_source), @asset_destination
13
13
  file.static_file! site
14
14
  file.asset_path
15
15
  end
@@ -7,25 +7,24 @@ module Jekyll::Minibundle
7
7
 
8
8
  @@mtimes = Hash.new
9
9
 
10
- def initialize(source_path, destination_path)
11
- @source_path = source_path
12
- @destination_dir = File.dirname destination_path
13
- @destination_extension = File.extname destination_path
14
- base = File.basename destination_path
15
- @destination_base_prefix = base[0 .. -(@destination_extension.size + 1)]
10
+ def initialize(asset_source_path, asset_destination_path)
11
+ @asset_source_path = asset_source_path
12
+ @asset_destination_dir = File.dirname asset_destination_path
13
+ @asset_destination_extension = File.extname asset_destination_path
14
+ @asset_destination_base_prefix = File.basename(asset_destination_path)[0 .. -(@asset_destination_extension.size + 1)]
16
15
  update_mtime
17
16
  end
18
17
 
19
18
  def path
20
- @source_path
19
+ @asset_source_path
21
20
  end
22
21
 
23
22
  def asset_path
24
- File.join @destination_dir, destination_basename
23
+ File.join @asset_destination_dir, asset_destination_basename
25
24
  end
26
25
 
27
- def destination(gensite_dir)
28
- File.join gensite_dir, @destination_dir, destination_basename
26
+ def destination(site_destination_dir)
27
+ File.join site_destination_dir, @asset_destination_dir, asset_destination_basename
29
28
  end
30
29
 
31
30
  def mtime
@@ -36,22 +35,22 @@ module Jekyll::Minibundle
36
35
  @@mtimes[path] != mtime
37
36
  end
38
37
 
39
- def write(gensite_dir)
38
+ def write(site_destination_dir)
40
39
  clear_asset_stamp if modified?
41
- destination_path = destination gensite_dir
40
+ destination_path = destination site_destination_dir
42
41
 
43
42
  return false if File.exist?(destination_path) and !modified?
44
43
 
45
44
  update_mtime
46
- write_destination gensite_dir
45
+ write_destination site_destination_dir
47
46
 
48
47
  true
49
48
  end
50
49
 
51
50
  private
52
51
 
53
- def destination_basename
54
- "#{@destination_base_prefix}-#{asset_stamp}#{@destination_extension}"
52
+ def asset_destination_basename
53
+ "#{@asset_destination_base_prefix}-#{asset_stamp}#{@asset_destination_extension}"
55
54
  end
56
55
 
57
56
  def asset_stamp
@@ -1,5 +1,5 @@
1
1
  module Jekyll
2
2
  module Minibundle
3
- VERSION = '0.1.0'
3
+ VERSION = '0.2.0'
4
4
  end
5
5
  end
@@ -2,4 +2,4 @@
2
2
  (function(root, dependency) {
3
3
  if (!dependency) throw new Error("missing dependency");
4
4
  root.app = {};
5
- })(window, window.dependency);
5
+ })(window, window.dependency)
@@ -1,4 +1,4 @@
1
1
  /* comment to be removed in bundling */
2
2
  (function(root) {
3
3
  root.dependency = {};
4
- })(window);
4
+ })(window)
@@ -3,7 +3,7 @@ require 'support/test_case'
3
3
  module Jekyll::Minibundle::Test
4
4
  class MiniBundleTest < TestCase
5
5
  EXPECTED_CSS_ASSET_PATH = 'assets/site-b2e0ecc1c100effc2c7353caad20c327.css'
6
- EXPECTED_JS_ASSET_PATH = 'assets/site-f78e0c4497343c33e9282df5d684540e.js'
6
+ EXPECTED_JS_ASSET_PATH = 'assets/site-4782a1f67803038d4f8351051e67deb8.js'
7
7
 
8
8
  def test_css_asset_bundle_has_configured_attributes
9
9
  element = find_html_element_from_index(%{head link[href="#{EXPECTED_CSS_ASSET_PATH}"]}).first
@@ -27,44 +27,49 @@ module Jekyll::Minibundle::Test
27
27
  end
28
28
 
29
29
  def test_css_asset_bundle_is_copied_to_destination_dir
30
- assert File.exists?(gensite_path(EXPECTED_CSS_ASSET_PATH))
30
+ assert File.exists?(destination_path(EXPECTED_CSS_ASSET_PATH))
31
31
  end
32
32
 
33
33
  def test_js_asset_bundle_is_copied_to_destination_dir
34
- assert File.exists?(gensite_path(EXPECTED_JS_ASSET_PATH))
34
+ assert File.exists?(destination_path(EXPECTED_JS_ASSET_PATH))
35
35
  end
36
36
 
37
37
  def test_css_asset_bundle_is_concatenated_in_configured_order
38
- bundle = File.read(gensite_path(EXPECTED_CSS_ASSET_PATH))
38
+ bundle = File.read(destination_path(EXPECTED_CSS_ASSET_PATH))
39
39
  assert bundle.index('html { margin: 0; }') < bundle.index('p { margin: 0; }')
40
40
  end
41
41
 
42
42
  def test_js_asset_bundle_is_concatenated_in_configured_order
43
- bundle = File.read(gensite_path(EXPECTED_JS_ASSET_PATH))
43
+ bundle = File.read(destination_path(EXPECTED_JS_ASSET_PATH))
44
44
  assert bundle.index('root.dependency = {};') < bundle.index('root.app = {};')
45
45
  end
46
46
 
47
+ def test_js_asset_bundle_has_inserted_semicolons_between_assets
48
+ bundle = File.read(destination_path(EXPECTED_JS_ASSET_PATH))
49
+ assert_match(%r|}\)\(window\)\n;\n\(function|, bundle)
50
+ end
51
+
47
52
  def test_css_asset_bundle_is_minified
48
53
  source_contents_size = source_assets_size('_assets/styles', %w{reset common}, 'css')
49
- destination_contents_size = File.read(gensite_path(EXPECTED_CSS_ASSET_PATH)).size
54
+ destination_contents_size = File.read(destination_path(EXPECTED_CSS_ASSET_PATH)).size
50
55
  assert destination_contents_size < source_contents_size
51
56
  end
52
57
 
53
58
  def test_js_asset_bundle_is_minified
54
59
  source_contents_size = source_assets_size('_assets/scripts', %w{dependency app}, 'js')
55
- destination_contents_size = File.read(gensite_path(EXPECTED_JS_ASSET_PATH)).size
60
+ destination_contents_size = File.read(destination_path(EXPECTED_JS_ASSET_PATH)).size
56
61
  assert destination_contents_size < source_contents_size
57
62
  end
58
63
 
59
64
  private
60
65
 
61
66
  def find_html_element_from_index(css)
62
- find_html_element(read_from_gensite('index.html'), css)
67
+ find_html_element(read_from_destination('index.html'), css)
63
68
  end
64
69
 
65
- def source_assets_size(fixture_subdir, assets, type)
70
+ def source_assets_size(source_subdir, assets, type)
66
71
  assets.
67
- map { |f| File.read fixture_path(fixture_subdir, "#{f}.#{type}") }.
72
+ map { |f| File.read source_path(source_subdir, "#{f}.#{type}") }.
68
73
  join('').
69
74
  size
70
75
  end
@@ -5,17 +5,17 @@ module Jekyll::Minibundle::Test
5
5
  EXPECTED_ASSET_PATH = 'assets/screen-390be921ee0eff063817bb5ef2954300.css'
6
6
 
7
7
  def test_asset_path_has_stamp
8
- actual = find_html_element(read_from_gensite('index.html'), 'head link').first['href']
8
+ actual = find_html_element(read_from_destination('index.html'), 'head link').first['href']
9
9
  assert_equal EXPECTED_ASSET_PATH, actual
10
10
  end
11
11
 
12
12
  def test_asset_file_is_copied_to_destination_dir
13
- assert File.exists?(gensite_path(EXPECTED_ASSET_PATH))
13
+ assert File.exists?(destination_path(EXPECTED_ASSET_PATH))
14
14
  end
15
15
 
16
16
  def test_asset_file_is_equal_to_source_file
17
- source_contents = File.read fixture_path('_tmp/site.css')
18
- destination_contents = File.read gensite_path(EXPECTED_ASSET_PATH)
17
+ source_contents = File.read source_path('_tmp/site.css')
18
+ destination_contents = File.read destination_path(EXPECTED_ASSET_PATH)
19
19
  assert_equal source_contents, destination_contents
20
20
  end
21
21
  end
@@ -7,45 +7,59 @@ require 'jekyll/minibundle'
7
7
 
8
8
  module Jekyll::Minibundle::Test
9
9
  class TestCase < ::MiniTest::Unit::TestCase
10
- FIXTURE_DIR = File.expand_path(File.join(File.dirname(__FILE__), '../fixture/site'))
10
+ include ::Jekyll::Minibundle
11
11
 
12
- def fixture_path(*args)
13
- File.join(FIXTURE_DIR, *args)
12
+ FIXTURE_DIR = File.expand_path(File.join(File.dirname(__FILE__), '../fixture'))
13
+ SOURCE_DIR = File.join(FIXTURE_DIR, 'site')
14
+
15
+ def source_path(*args)
16
+ File.join(SOURCE_DIR, *args)
14
17
  end
15
18
 
16
- def gensite_path(*args)
17
- File.join(_gensite_dir, *args)
19
+ def destination_path(*args)
20
+ File.join(_destination_dir, *args)
18
21
  end
19
22
 
20
- def read_from_gensite(*args)
21
- File.read gensite_path(*args)
23
+ def read_from_destination(*args)
24
+ File.read destination_path(*args)
22
25
  end
23
26
 
24
27
  def find_html_element(file, css)
25
28
  Nokogiri::HTML(file).css(css)
26
29
  end
27
30
 
31
+ def with_env(env)
32
+ org_env = {}
33
+ env.each do |k, v|
34
+ org_env[k] = ENV[k]
35
+ ENV[k] = v
36
+ end
37
+ yield
38
+ ensure
39
+ org_env.each { |k, v| ENV[k] = v }
40
+ end
41
+
28
42
  private
29
43
 
30
- def _gensite_dir(&block)
31
- @@_gensite_dir ||= begin
44
+ def _destination_dir(&block)
45
+ @@_destination_dir ||= begin
32
46
  dir = Dir.mktmpdir('jekyll-minibundle-test-')
33
47
  at_exit do
34
48
  FileUtils.rm_rf dir
35
- puts "Cleaned generated site for tests: #{dir}"
49
+ puts "\nCleaned generated site for tests: #{dir}"
36
50
  end
37
51
  Dir.chdir(dir) { _generate_site dir }
38
- puts "Generated site for tests: #{dir}"
52
+ puts "\nGenerated site for tests: #{dir}"
39
53
  dir
40
54
  end
41
55
  end
42
56
 
43
57
  def _generate_site(destination)
44
58
  options = {
45
- 'source' => fixture_path,
59
+ 'source' => source_path,
46
60
  'destination' => destination
47
61
  }
48
- Jekyll::Site.new(Jekyll.configuration(options)).process
62
+ capture_io { Jekyll::Site.new(Jekyll.configuration(options)).process }
49
63
  end
50
64
  end
51
65
  end
@@ -0,0 +1,35 @@
1
+ require 'support/test_case'
2
+ require 'jekyll/minibundle/asset_bundle'
3
+
4
+ module Jekyll::Minibundle::Test
5
+ class AssetBundleTest < TestCase
6
+ def test_raise_exception_if_bundle_command_fails
7
+ capture_io do
8
+ with_env('JEKYLL_MINIBUNDLE_CMD_JS' => 'false') do
9
+ err = assert_raises(RuntimeError) { make_bundle }
10
+ assert_equal 'Bundling js assets failed with exit status 1, command: false', err.to_s
11
+ end
12
+ end
13
+ end
14
+
15
+ def test_raise_exception_if_bundle_command_not_found
16
+ with_env('JEKYLL_MINIBUNDLE_CMD_JS' => 'no-such-jekyll-minibundle-cmd') do
17
+ assert_raises(Errno::ENOENT) { make_bundle }
18
+ end
19
+ end
20
+
21
+ def test_raise_exception_if_bundle_command_not_configured
22
+ with_env('JEKYLL_MINIBUNDLE_CMD_JS' => nil) do
23
+ err = assert_raises(RuntimeError) { make_bundle }
24
+ assert_equal 'You need to set bundling command in $JEKYLL_MINIBUNDLE_CMD_JS', err.to_s
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def make_bundle
31
+ bundle = AssetBundle.new :js, [source_path('_assets/scripts/dependency.js')], source_path
32
+ bundle.make_bundle
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,13 @@
1
+ require 'support/test_case'
2
+ require 'jekyll/minibundle/bundle_markup'
3
+
4
+ module Jekyll::Minibundle::Test
5
+ class BundleMarkupTest < TestCase
6
+ def test_escape_attribute_value
7
+ attributes = { media: 'screen, projection', extra: '">attack<br' }
8
+ actual = BundleMarkup.make_markup :css, 'http://localhost', attributes
9
+ expected = %{<link rel="stylesheet" href="http://localhost" media="screen, projection" extra="&quot;&gt;attack&lt;br">}
10
+ assert_equal expected, actual
11
+ end
12
+ end
13
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-minibundle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-07 00:00:00.000000000 Z
12
+ date: 2012-12-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: jekyll
@@ -59,12 +59,27 @@ dependencies:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: 1.5.5
62
- description: ! 'Provides ''minibundle'' block for bundling multiple assets, ''ministamp''
63
-
64
- tag for stamping a single asset.
62
+ - !ruby/object:Gem::Dependency
63
+ name: rake
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 10.0.2
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 10.0.2
78
+ description: ! 'A minimalistic asset bundling plugin for Jekyll, requiring only your
65
79
 
80
+ bundling tool of choice (no other dependencies, not even other gems).
66
81
 
67
- No other dependencies than the asset bundler of your choice.
82
+ Provides asset bundling and filename stamping with MD5 digest.
68
83
 
69
84
  '
70
85
  email: tkareine@gmail.com
@@ -73,6 +88,7 @@ extensions: []
73
88
  extra_rdoc_files: []
74
89
  files:
75
90
  - History.md
91
+ - License.txt
76
92
  - Rakefile
77
93
  - Readme.md
78
94
  - lib/jekyll/minibundle.rb
@@ -95,6 +111,8 @@ files:
95
111
  - test/fixture/site/index.html
96
112
  - test/integration/minibundle_test.rb
97
113
  - test/integration/ministamp_test.rb
114
+ - test/unit/asset_bundle_test.rb
115
+ - test/unit/bundle_markup_test.rb
98
116
  - test/support/test_case.rb
99
117
  homepage: https://github.com/tkareine/jekyll-minibundle
100
118
  licenses:
@@ -125,7 +143,7 @@ rubyforge_project:
125
143
  rubygems_version: 1.8.24
126
144
  signing_key:
127
145
  specification_version: 3
128
- summary: Straightforward asset bundling plugin for Jekyll
146
+ summary: A minimalistic asset bundling plugin for Jekyll
129
147
  test_files:
130
148
  - test/fixture/site/_assets/scripts/app.js
131
149
  - test/fixture/site/_assets/scripts/dependency.js
@@ -137,5 +155,7 @@ test_files:
137
155
  - test/fixture/site/index.html
138
156
  - test/integration/minibundle_test.rb
139
157
  - test/integration/ministamp_test.rb
158
+ - test/unit/asset_bundle_test.rb
159
+ - test/unit/bundle_markup_test.rb
140
160
  - test/support/test_case.rb
141
161
  has_rdoc: