jekyll-minibundle 2.2.0 → 3.0.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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +162 -63
- data/README.md +62 -57
- data/Rakefile +27 -14
- data/jekyll-minibundle.gemspec +15 -13
- data/lib/jekyll/minibundle.rb +2 -0
- data/lib/jekyll/minibundle/asset_bundle.rb +16 -10
- data/lib/jekyll/minibundle/asset_file_drop.rb +5 -2
- data/lib/jekyll/minibundle/asset_file_properties.rb +2 -0
- data/lib/jekyll/minibundle/asset_file_registry.rb +9 -7
- data/lib/jekyll/minibundle/asset_stamp.rb +2 -0
- data/lib/jekyll/minibundle/asset_tag_markup.rb +6 -4
- data/lib/jekyll/minibundle/bundle_file.rb +8 -0
- data/lib/jekyll/minibundle/development_file.rb +4 -0
- data/lib/jekyll/minibundle/development_file_collection.rb +2 -0
- data/lib/jekyll/minibundle/environment.rb +5 -1
- data/lib/jekyll/minibundle/exceptions.rb +2 -0
- data/lib/jekyll/minibundle/files.rb +2 -0
- data/lib/jekyll/minibundle/hashes.rb +3 -0
- data/lib/jekyll/minibundle/log.rb +3 -1
- data/lib/jekyll/minibundle/mini_bundle_block.rb +8 -1
- data/lib/jekyll/minibundle/mini_stamp_tag.rb +3 -1
- data/lib/jekyll/minibundle/stamp_file.rb +4 -0
- data/lib/jekyll/minibundle/variable_template.rb +15 -12
- data/lib/jekyll/minibundle/variable_template_registry.rb +2 -0
- data/lib/jekyll/minibundle/version.rb +3 -1
- data/test/fixture/site/_bin/remove_comments +1 -0
- data/test/fixture/site/_bin/with_count +1 -0
- data/test/fixture/site/_config.yml +2 -1
- data/test/integration/minibundle_development_mode_test.rb +115 -29
- data/test/integration/minibundle_production_mode_test.rb +157 -69
- data/test/integration/ministamp_development_mode_test.rb +4 -2
- data/test/integration/ministamp_production_mode_test.rb +6 -4
- data/test/integration/static_files_as_asset_sources_test.rb +6 -4
- data/test/support/assertions.rb +2 -0
- data/test/support/fixture_config.rb +14 -12
- data/test/support/static_file_config.rb +18 -16
- data/test/support/test_case.rb +5 -3
- data/test/unit/asset_bundle_test.rb +14 -12
- data/test/unit/asset_file_drop_test.rb +4 -3
- data/test/unit/asset_file_registry_test.rb +16 -19
- data/test/unit/asset_tag_markup_test.rb +8 -6
- data/test/unit/bundle_file_properties_test.rb +6 -4
- data/test/unit/bundle_file_writing_test.rb +6 -4
- data/test/unit/development_file_properties_test.rb +5 -3
- data/test/unit/development_file_writing_test.rb +4 -2
- data/test/unit/environment_test.rb +6 -4
- data/test/unit/files_test.rb +3 -1
- data/test/unit/hashes_test.rb +3 -1
- data/test/unit/jekyll_static_file_api_test.rb +13 -9
- data/test/unit/mini_bundle_block_test.rb +42 -35
- data/test/unit/mini_stamp_tag_test.rb +4 -2
- data/test/unit/stamp_file_properties_test.rb +5 -3
- data/test/unit/stamp_file_writing_test.rb +4 -2
- data/test/unit/variable_template_test.rb +8 -8
- metadata +13 -14
data/Rakefile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'fileutils'
|
2
4
|
require 'rake/clean'
|
3
5
|
require 'shellwords'
|
@@ -20,7 +22,11 @@ def run_jekyll_in_fixture_site(command)
|
|
20
22
|
sh env, jekyll_cmd
|
21
23
|
end
|
22
24
|
|
23
|
-
desc
|
25
|
+
desc <<~TEXT
|
26
|
+
Run benchmarks. Supported options from environment variables:
|
27
|
+
|
28
|
+
BM=<benchmark_suite_path>
|
29
|
+
TEXT
|
24
30
|
task :benchmark do
|
25
31
|
run_single_bm = ENV.key?('BM')
|
26
32
|
|
@@ -57,33 +63,40 @@ namespace :gem do
|
|
57
63
|
end
|
58
64
|
end
|
59
65
|
|
60
|
-
desc
|
61
|
-
|
62
|
-
run_single_test = ENV.key?('TEST')
|
66
|
+
desc <<~TEXT
|
67
|
+
Run tests. Supported options from environment variables:
|
63
68
|
|
69
|
+
TEST=<test_suite_path>
|
70
|
+
NAME=<test_name_pattern>
|
71
|
+
DEBUG=1 Require Pry, PP, enable warnings
|
72
|
+
SEED=n Set the random seed
|
73
|
+
TEST_OPTS='-v' Enable other minitest options
|
74
|
+
TEXT
|
75
|
+
task :test do
|
64
76
|
run_selected_or_all =
|
65
|
-
if
|
66
|
-
|
67
|
-
|
68
|
-
"#{
|
77
|
+
if ENV.key?('TEST')
|
78
|
+
test_file = ENV['TEST']
|
79
|
+
minitest_opts = "#{ENV.key?('NAME') ? "-n #{ENV['NAME']} " : ''}#{ENV.fetch('TEST_OPTS', '')}"
|
80
|
+
"#{test_file} #{minitest_opts}"
|
69
81
|
else
|
82
|
+
eval = "-e 'ARGV.each { |f| require \"#{Dir.pwd}/test/\#{f}\" }'"
|
70
83
|
requirable_files =
|
71
84
|
Dir['test/{unit,integration}/*_test.rb']
|
72
85
|
.map { |file| %r{^test/(.+)\.rb$}.match(file)[1] }
|
73
86
|
.shelljoin
|
74
|
-
eval = "-e 'ARGV.each { |f| require f }'"
|
75
87
|
"#{eval} #{requirable_files}"
|
76
88
|
end
|
77
89
|
|
78
|
-
|
90
|
+
ruby_opts = "-I lib#{ENV['DEBUG'] ? ' -w -rpp -rpry' : ''}"
|
79
91
|
|
80
|
-
|
92
|
+
puts "Jekyll version: #{Gem::Specification.find_by_name('jekyll').version}"
|
93
|
+
sh "ruby #{ruby_opts} #{run_selected_or_all}"
|
81
94
|
end
|
82
95
|
|
83
96
|
namespace :fixture do
|
84
|
-
|
97
|
+
CLOBBER.include 'test/fixture/site/_site', 'test/fixture/site/.jekyll-cache'
|
85
98
|
|
86
|
-
desc 'Generate fixture site'
|
99
|
+
desc 'Generate fixture site (tests use it, this task allows manual inspection)'
|
87
100
|
task :build do
|
88
101
|
run_jekyll_in_fixture_site('build')
|
89
102
|
end
|
@@ -96,4 +109,4 @@ end
|
|
96
109
|
|
97
110
|
RuboCop::RakeTask.new
|
98
111
|
|
99
|
-
task default: [
|
112
|
+
task default: %i[rubocop test]
|
data/jekyll-minibundle.gemspec
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'lib/jekyll/minibundle/version'
|
2
4
|
|
3
5
|
Gem::Specification.new do |s|
|
@@ -9,33 +11,33 @@ Gem::Specification.new do |s|
|
|
9
11
|
s.homepage = 'https://github.com/tkareine/jekyll-minibundle'
|
10
12
|
s.license = 'MIT'
|
11
13
|
|
12
|
-
s.description =
|
13
|
-
A straightforward asset bundling plugin for Jekyll, utilizing external
|
14
|
-
minification tool of your choice. It provides asset concatenation for
|
15
|
-
bundling and asset fingerprinting with MD5 digest for cache busting.
|
16
|
-
There are no other runtime dependencies besides the minification tool
|
17
|
-
(not even other gems).
|
18
|
-
|
14
|
+
s.description = <<~TEXT
|
15
|
+
A straightforward asset bundling plugin for Jekyll, utilizing external
|
16
|
+
minification tool of your choice. It provides asset concatenation for
|
17
|
+
bundling and asset fingerprinting with MD5 digest for cache busting.
|
18
|
+
There are no other runtime dependencies besides the minification tool
|
19
|
+
(not even other gems).
|
20
|
+
TEXT
|
19
21
|
|
20
|
-
s.files = %w
|
22
|
+
s.files = %w[
|
21
23
|
CHANGELOG.md
|
22
24
|
LICENSE.txt
|
23
25
|
README.md
|
24
26
|
Rakefile
|
25
27
|
jekyll-minibundle.gemspec
|
26
|
-
|
28
|
+
] + `git ls-files -- lib`.split("\n")
|
27
29
|
|
28
30
|
s.test_files = `git ls-files -- test`.split("\n")
|
29
31
|
|
30
32
|
s.add_development_dependency 'benchmark-ips', '~> 2.7'
|
31
|
-
s.add_development_dependency 'jekyll', '
|
33
|
+
s.add_development_dependency 'jekyll', '>= 3.0'
|
32
34
|
s.add_development_dependency 'minitest', '~> 5.8'
|
33
35
|
s.add_development_dependency 'nokogiri', '~> 1.6'
|
34
36
|
s.add_development_dependency 'pry', '~> 0.10'
|
35
|
-
s.add_development_dependency 'rake', '~>
|
36
|
-
s.add_development_dependency 'rubocop', '~> 0.
|
37
|
+
s.add_development_dependency 'rake', '~> 13.0'
|
38
|
+
s.add_development_dependency 'rubocop', '~> 0.90.0'
|
37
39
|
|
38
|
-
s.required_ruby_version = '>= 2.
|
40
|
+
s.required_ruby_version = '>= 2.4.0'
|
39
41
|
|
40
42
|
s.rdoc_options << '--line-numbers' << '--title' << s.name << '--exclude' << 'test'
|
41
43
|
end
|
data/lib/jekyll/minibundle.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'tempfile'
|
2
4
|
require 'jekyll/minibundle/exceptions'
|
3
5
|
require 'jekyll/minibundle/files'
|
@@ -5,7 +7,7 @@ require 'jekyll/minibundle/log'
|
|
5
7
|
|
6
8
|
module Jekyll::Minibundle
|
7
9
|
class AssetBundle
|
8
|
-
TEMPFILE_PREFIX = 'jekyll-minibundle-'
|
10
|
+
TEMPFILE_PREFIX = 'jekyll-minibundle-'
|
9
11
|
|
10
12
|
def initialize(config)
|
11
13
|
@type = config.fetch(:type)
|
@@ -15,12 +17,12 @@ module Jekyll::Minibundle
|
|
15
17
|
@minifier_cmd = config.fetch(:minifier_cmd)
|
16
18
|
|
17
19
|
unless @minifier_cmd
|
18
|
-
raise
|
19
|
-
Missing minification command for bundling #{bundle_destination_path.inspect}. Specify it in
|
20
|
-
1) minibundle.minifier_commands.#{@type} setting in _config.yml,
|
21
|
-
2) $JEKYLL_MINIBUNDLE_CMD_#{@type.to_s.upcase} environment variable, or
|
22
|
-
3) minifier_cmd setting inside minibundle block.
|
23
|
-
|
20
|
+
raise <<~MESSAGE
|
21
|
+
Missing minification command for bundling #{bundle_destination_path.inspect}. Specify it in
|
22
|
+
1) minibundle.minifier_commands.#{@type} setting in _config.yml,
|
23
|
+
2) $JEKYLL_MINIBUNDLE_CMD_#{@type.to_s.upcase} environment variable, or
|
24
|
+
3) minifier_cmd setting inside minibundle block.
|
25
|
+
MESSAGE
|
24
26
|
end
|
25
27
|
|
26
28
|
@tempfile = Tempfile.new([TEMPFILE_PREFIX, ".#{@type}"])
|
@@ -33,25 +35,29 @@ Missing minification command for bundling #{bundle_destination_path.inspect}. Sp
|
|
33
35
|
|
34
36
|
def path
|
35
37
|
raise IllegalStateError, 'Cannot get path of closed AssetBundle' unless @tempfile
|
38
|
+
|
36
39
|
@tempfile.path
|
37
40
|
end
|
38
41
|
|
39
42
|
def make_bundle
|
40
43
|
raise IllegalStateError, 'Cannot make bundle with closed AssetBundle' unless @tempfile
|
44
|
+
|
41
45
|
exit_status = spawn_minifier(@minifier_cmd) do |input|
|
42
46
|
$stdout.puts # place newline after "(Re)generating..." log messages
|
43
47
|
Log.info("Bundling #{bundle_destination_path}:")
|
44
48
|
@asset_paths.each do |asset|
|
45
|
-
Log.info(
|
49
|
+
Log.info(" #{relative_path_from(asset, @site_dir)}")
|
46
50
|
IO.foreach(asset) { |line| input.write(line) }
|
47
51
|
input.puts(';') if @type == :js
|
48
52
|
end
|
49
53
|
end
|
54
|
+
|
50
55
|
if exit_status != 0
|
51
56
|
msg = "Bundling #{bundle_destination_path.inspect} failed with exit status #{exit_status}, command: #{@minifier_cmd.inspect}"
|
52
57
|
log_minifier_error(msg)
|
53
58
|
raise msg
|
54
59
|
end
|
60
|
+
|
55
61
|
self
|
56
62
|
end
|
57
63
|
|
@@ -72,7 +78,7 @@ Missing minification command for bundling #{bundle_destination_path.inspect}. Sp
|
|
72
78
|
wr.close
|
73
79
|
_, status = Process.waitpid2(pid)
|
74
80
|
status.exitstatus
|
75
|
-
rescue => e
|
81
|
+
rescue StandardError => e
|
76
82
|
raise "Bundling #{bundle_destination_path.inspect} failed: #{e}"
|
77
83
|
ensure
|
78
84
|
[rd, wr].each { |io| io.close unless io.closed? }
|
@@ -86,7 +92,7 @@ Missing minification command for bundling #{bundle_destination_path.inspect}. Sp
|
|
86
92
|
Log.error("#{message}, last #{last_bytes.size} bytes of minifier output:")
|
87
93
|
|
88
94
|
last_bytes
|
89
|
-
.gsub(/[^[:print:]\t\n]/) { |ch|
|
95
|
+
.gsub(/[^[:print:]\t\n]/) { |ch| "\\x#{ch.unpack1('H2')}" }
|
90
96
|
.split("\n")
|
91
97
|
.each { |line| Log.error(line) }
|
92
98
|
end
|
@@ -1,19 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'forwardable'
|
2
4
|
|
3
5
|
module Jekyll::Minibundle
|
4
6
|
class AssetFileDrop < ::Liquid::Drop
|
5
7
|
extend Forwardable
|
6
8
|
|
7
|
-
KEYS = %w
|
9
|
+
KEYS = %w[
|
8
10
|
name
|
9
11
|
extname
|
10
12
|
basename
|
11
13
|
modified_time
|
12
14
|
path
|
13
15
|
collection
|
14
|
-
|
16
|
+
].freeze
|
15
17
|
|
16
18
|
def initialize(file)
|
19
|
+
super()
|
17
20
|
@file = file
|
18
21
|
end
|
19
22
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'jekyll/minibundle/bundle_file'
|
2
4
|
require 'jekyll/minibundle/development_file'
|
3
5
|
require 'jekyll/minibundle/development_file_collection'
|
@@ -13,7 +15,7 @@ module Jekyll::Minibundle
|
|
13
15
|
|
14
16
|
def clear_unused
|
15
17
|
@_files
|
16
|
-
.
|
18
|
+
.reject { |_, cached| cached.fetch(:is_used) }
|
17
19
|
.each do |asset_destination_path, cached|
|
18
20
|
cached.fetch(:file).cleanup
|
19
21
|
@_files.delete(asset_destination_path)
|
@@ -66,9 +68,9 @@ module Jekyll::Minibundle
|
|
66
68
|
end
|
67
69
|
|
68
70
|
if cached_is_used
|
69
|
-
raise
|
70
|
-
Two or more minibundle blocks with the same destination path #{asset_destination_path.inspect}, but having different asset configuration: #{bundle_config.inspect} vs. #{cached_config.inspect}
|
71
|
-
|
71
|
+
raise <<~MESSAGE
|
72
|
+
Two or more minibundle blocks with the same destination path #{asset_destination_path.inspect}, but having different asset configuration: #{bundle_config.inspect} vs. #{cached_config.inspect}
|
73
|
+
MESSAGE
|
72
74
|
end
|
73
75
|
|
74
76
|
cached_file.cleanup
|
@@ -107,9 +109,9 @@ Two or more minibundle blocks with the same destination path #{asset_destination
|
|
107
109
|
end
|
108
110
|
|
109
111
|
if cached_is_used
|
110
|
-
raise
|
111
|
-
Two or more ministamp tags with the same destination path #{asset_destination_path.inspect}, but different asset source paths: #{asset_source_path.inspect} vs. #{cached_config.inspect}
|
112
|
-
|
112
|
+
raise <<~MESSAGE
|
113
|
+
Two or more ministamp tags with the same destination path #{asset_destination_path.inspect}, but different asset source paths: #{asset_source_path.inspect} vs. #{cached_config.inspect}
|
114
|
+
MESSAGE
|
113
115
|
end
|
114
116
|
|
115
117
|
cached_file.cleanup
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'cgi/util'
|
2
4
|
|
3
5
|
module Jekyll::Minibundle
|
@@ -8,9 +10,9 @@ module Jekyll::Minibundle
|
|
8
10
|
|
9
11
|
case type
|
10
12
|
when :js
|
11
|
-
%
|
13
|
+
%(<script type="text/javascript" src="#{url_str}"#{attributes_str}></script>)
|
12
14
|
when :css
|
13
|
-
%
|
15
|
+
%(<link rel="stylesheet" href="#{url_str}"#{attributes_str}>)
|
14
16
|
else
|
15
17
|
raise ArgumentError, "Unknown type for generating bundle markup: #{type}, #{url}"
|
16
18
|
end
|
@@ -22,9 +24,9 @@ module Jekyll::Minibundle
|
|
22
24
|
|
23
25
|
def self.make_attribute(name, value)
|
24
26
|
if value.nil?
|
25
|
-
%
|
27
|
+
%( #{name})
|
26
28
|
else
|
27
|
-
%
|
29
|
+
%( #{name}="#{CGI.escape_html(value.to_s)}")
|
28
30
|
end
|
29
31
|
end
|
30
32
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'jekyll/minibundle/files'
|
2
4
|
require 'jekyll/minibundle/asset_bundle'
|
3
5
|
require 'jekyll/minibundle/asset_file_properties'
|
@@ -14,12 +16,17 @@ module Jekyll::Minibundle
|
|
14
16
|
@site = site
|
15
17
|
@type = config.fetch('type')
|
16
18
|
asset_source_dir = File.join(@site.source, config.fetch('source_dir'))
|
19
|
+
|
17
20
|
raise ArgumentError, "Bundle source directory does not exist: #{asset_source_dir}" unless File.directory?(asset_source_dir)
|
21
|
+
|
18
22
|
@asset_paths = config.fetch('assets').map do |asset_path|
|
19
23
|
path = File.join(asset_source_dir, "#{asset_path}.#{@type}")
|
24
|
+
|
20
25
|
raise ArgumentError, "Bundle asset source file does not exist: #{path}" unless File.file?(path)
|
26
|
+
|
21
27
|
path
|
22
28
|
end
|
29
|
+
|
23
30
|
@destination_path = config.fetch('destination_path')
|
24
31
|
@asset_destination_dir = File.dirname(@destination_path)
|
25
32
|
@asset_destination_filename_prefix = File.basename(@destination_path)
|
@@ -31,6 +38,7 @@ module Jekyll::Minibundle
|
|
31
38
|
|
32
39
|
def cleanup
|
33
40
|
return unless @_asset_bundle
|
41
|
+
|
34
42
|
@_asset_bundle.close
|
35
43
|
@_asset_bundle = nil
|
36
44
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'jekyll/minibundle/files'
|
2
4
|
require 'jekyll/minibundle/asset_file_properties'
|
3
5
|
|
@@ -13,7 +15,9 @@ module Jekyll::Minibundle
|
|
13
15
|
def initialize(site, asset_source_path, asset_destination_path)
|
14
16
|
@site = site
|
15
17
|
@asset_source_path = File.join(@site.source, asset_source_path)
|
18
|
+
|
16
19
|
raise ArgumentError, "Development source file does not exist: #{@asset_source_path}" unless File.file?(@asset_source_path)
|
20
|
+
|
17
21
|
@asset_destination_dir = File.dirname(asset_destination_path)
|
18
22
|
@asset_destination_filename = File.basename(asset_destination_path)
|
19
23
|
@stamped_at = nil
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'jekyll/minibundle/hashes'
|
2
4
|
|
3
5
|
module Jekyll::Minibundle
|
@@ -8,15 +10,17 @@ module Jekyll::Minibundle
|
|
8
10
|
end
|
9
11
|
|
10
12
|
def self.development?(site)
|
11
|
-
mode = ENV['JEKYLL_MINIBUNDLE_MODE'] || Environment.find_site_config(site, %w
|
13
|
+
mode = ENV['JEKYLL_MINIBUNDLE_MODE'] || Environment.find_site_config(site, %w[minibundle mode], String)
|
12
14
|
mode == 'development'
|
13
15
|
end
|
14
16
|
|
15
17
|
def self.find_site_config(site, keys, type)
|
16
18
|
value = Hashes.dig(site.config, *keys)
|
19
|
+
|
17
20
|
if value && !value.is_a?(type)
|
18
21
|
raise "Invalid site configuration for key #{keys.join('.')}; expecting type #{type}"
|
19
22
|
end
|
23
|
+
|
20
24
|
value
|
21
25
|
end
|
22
26
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'pathname'
|
2
4
|
require 'jekyll/minibundle/hashes'
|
3
5
|
require 'jekyll/minibundle/files'
|
@@ -9,7 +11,9 @@ module Jekyll::Minibundle
|
|
9
11
|
class MiniBundleBlock < Liquid::Block
|
10
12
|
def initialize(tag_name, type, _tokens)
|
11
13
|
super
|
14
|
+
|
12
15
|
@type = type.strip.downcase.to_sym
|
16
|
+
|
13
17
|
raise ArgumentError, "Missing asset type for minibundle block; pass value such as 'css' or 'js' as the argument" if @type.empty?
|
14
18
|
end
|
15
19
|
|
@@ -56,14 +60,17 @@ module Jekyll::Minibundle
|
|
56
60
|
|
57
61
|
def parse_contents(contents)
|
58
62
|
raise ArgumentError, 'Missing configuration for minibundle block; pass configuration in YAML syntax' if contents =~ /\A\s+\z/
|
63
|
+
|
59
64
|
structure = parse_structure(contents)
|
65
|
+
|
60
66
|
raise ArgumentError, "Unsupported minibundle block contents type (#{structure.class}), only Hash is supported: #{contents}" unless structure.is_a?(Hash)
|
67
|
+
|
61
68
|
structure
|
62
69
|
end
|
63
70
|
|
64
71
|
def parse_structure(contents)
|
65
72
|
::SafeYAML.load(contents)
|
66
|
-
rescue => e
|
73
|
+
rescue StandardError => e
|
67
74
|
raise ArgumentError, "Failed parsing minibundle block contents syntax as YAML: #{contents.strip.inspect}. Cause: #{e}"
|
68
75
|
end
|
69
76
|
|