nanoc 4.1.1 → 4.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +16 -20
- data/LICENSE +1 -1
- data/NEWS.md +11 -0
- data/lib/nanoc.rb +1 -1
- data/lib/nanoc/base/compilation/compiler.rb +6 -5
- data/lib/nanoc/base/compilation/filter.rb +1 -1
- data/lib/nanoc/base/compilation/outdatedness_checker.rb +10 -2
- data/lib/nanoc/base/core_ext/array.rb +1 -1
- data/lib/nanoc/base/core_ext/hash.rb +1 -1
- data/lib/nanoc/base/entities/configuration.rb +5 -4
- data/lib/nanoc/base/entities/document.rb +1 -1
- data/lib/nanoc/base/entities/identifiable_collection.rb +2 -1
- data/lib/nanoc/base/entities/identifier.rb +1 -1
- data/lib/nanoc/base/entities/item_rep.rb +5 -5
- data/lib/nanoc/base/entities/rule_memory_action.rb +1 -1
- data/lib/nanoc/base/entities/rule_memory_actions/snapshot.rb +1 -1
- data/lib/nanoc/base/entities/site.rb +4 -3
- data/lib/nanoc/base/repos/site_loader.rb +5 -5
- data/lib/nanoc/base/services/executor.rb +6 -5
- data/lib/nanoc/base/services/item_rep_writer.rb +1 -1
- data/lib/nanoc/base/views/config_view.rb +1 -1
- data/lib/nanoc/base/views/item_rep_view.rb +1 -1
- data/lib/nanoc/base/views/item_without_reps_view.rb +1 -1
- data/lib/nanoc/base/views/mixins/document_view_mixin.rb +7 -9
- data/lib/nanoc/base/views/view.rb +14 -0
- data/lib/nanoc/cli.rb +2 -2
- data/lib/nanoc/cli/ansi_string_colorizer.rb +1 -1
- data/lib/nanoc/cli/cleaning_stream.rb +1 -1
- data/lib/nanoc/cli/command_runner.rb +7 -14
- data/lib/nanoc/cli/commands/check.rb +1 -1
- data/lib/nanoc/cli/commands/create-site.rb +5 -5
- data/lib/nanoc/cli/commands/shell.rb +1 -1
- data/lib/nanoc/cli/commands/show-plugins.rb +2 -2
- data/lib/nanoc/cli/commands/show-rules.rb +1 -1
- data/lib/nanoc/cli/commands/view.rb +1 -1
- data/lib/nanoc/cli/error_handler.rb +3 -11
- data/lib/nanoc/cli/logger.rb +2 -2
- data/lib/nanoc/data_sources/filesystem_unified.rb +6 -5
- data/lib/nanoc/extra/checking/checks/external_links.rb +7 -6
- data/lib/nanoc/extra/checking/checks/internal_links.rb +7 -6
- data/lib/nanoc/extra/checking/checks/mixed_content.rb +1 -1
- data/lib/nanoc/extra/checking/runner.rb +8 -7
- data/lib/nanoc/extra/deployer.rb +1 -1
- data/lib/nanoc/extra/deployers/fog.rb +2 -2
- data/lib/nanoc/extra/deployers/rsync.rb +1 -1
- data/lib/nanoc/extra/jruby_nokogiri_warner.rb +1 -1
- data/lib/nanoc/extra/link_collector.rb +1 -1
- data/lib/nanoc/filters/colorize_syntax.rb +3 -3
- data/lib/nanoc/filters/less.rb +1 -1
- data/lib/nanoc/filters/redcarpet.rb +6 -5
- data/lib/nanoc/filters/relativize_paths.rb +2 -2
- data/lib/nanoc/filters/sass/sass_filesystem_importer.rb +1 -1
- data/lib/nanoc/helpers/capturing.rb +1 -1
- data/lib/nanoc/helpers/html_escape.rb +3 -2
- data/lib/nanoc/helpers/link_to.rb +7 -6
- data/lib/nanoc/rule_dsl/compiler_dsl.rb +1 -1
- data/lib/nanoc/version.rb +1 -1
- data/nanoc.gemspec +3 -3
- data/tasks/test.rake +1 -1
- data/test/cli/test_cli.rb +2 -2
- data/test/extra/checking/checks/test_mixed_content.rb +7 -7
- data/test/filters/test_colorize_syntax.rb +2 -2
- data/test/filters/test_redcarpet.rb +6 -5
- data/test/filters/test_redcloth.rb +1 -1
- data/test/filters/test_xsl.rb +6 -6
- metadata +2 -2
data/lib/nanoc/extra/deployer.rb
CHANGED
@@ -18,7 +18,7 @@ module Nanoc::Extra
|
|
18
18
|
# @return [Boolean] true if the deployer should only show what would be
|
19
19
|
# deployed instead of doing the actual deployment
|
20
20
|
attr_reader :dry_run
|
21
|
-
|
21
|
+
alias dry_run? dry_run
|
22
22
|
|
23
23
|
# @param [String] source_path The path to the directory that contains the
|
24
24
|
# files to upload. It should not have a trailing slash.
|
@@ -37,7 +37,7 @@ module Nanoc::Extra::Deployers
|
|
37
37
|
error 'The path requires no trailing slash' if path && path[-1, 1] == '/'
|
38
38
|
|
39
39
|
# Mock if necessary
|
40
|
-
if
|
40
|
+
if dry_run?
|
41
41
|
puts 'Dry run - simulation'
|
42
42
|
::Fog.mock!
|
43
43
|
end
|
@@ -95,7 +95,7 @@ module Nanoc::Extra::Deployers
|
|
95
95
|
keys_to_invalidate.concat(keys_to_destroy)
|
96
96
|
cdn = ::Fog::CDN.new(config)
|
97
97
|
# fog cannot mock CDN requests
|
98
|
-
unless
|
98
|
+
unless dry_run?
|
99
99
|
distribution = cdn.get_distribution(cdn_id)
|
100
100
|
# usual limit per invalidation: 1000 objects
|
101
101
|
keys_to_invalidate.each_slice(1000) do |paths|
|
@@ -246,7 +246,7 @@ module Nanoc::Filters
|
|
246
246
|
wrap: '-W',
|
247
247
|
include_style: '-I',
|
248
248
|
line_numbers: '-l',
|
249
|
-
}
|
249
|
+
}.freeze
|
250
250
|
|
251
251
|
# Runs the content through [Highlight](http://www.andre-simon.de/doku/highlight/en/highlight.html).
|
252
252
|
#
|
@@ -347,7 +347,7 @@ module Nanoc::Filters
|
|
347
347
|
|
348
348
|
protected
|
349
349
|
|
350
|
-
KNOWN_COLORIZERS = [:coderay, :dummy, :pygmentize, :pygmentsrb, :simon_highlight, :rouge]
|
350
|
+
KNOWN_COLORIZERS = [:coderay, :dummy, :pygmentize, :pygmentsrb, :simon_highlight, :rouge].freeze
|
351
351
|
|
352
352
|
# Removes the first blank lines and any whitespace at the end.
|
353
353
|
def strip(s)
|
@@ -367,7 +367,7 @@ module Nanoc::Filters
|
|
367
367
|
colorizer = @colorizers[language.to_sym]
|
368
368
|
if KNOWN_COLORIZERS.include?(colorizer)
|
369
369
|
sym = (colorizer.to_s + '_postprocess').to_sym
|
370
|
-
if
|
370
|
+
if respond_to?(sym)
|
371
371
|
send(sym, language, element)
|
372
372
|
end
|
373
373
|
else
|
data/lib/nanoc/filters/less.rb
CHANGED
@@ -15,7 +15,7 @@ module Nanoc::Filters
|
|
15
15
|
imports.concat(content.scan(/^@import\s+(["'])([^\1]+?)\1;/))
|
16
16
|
imports.concat(content.scan(/^@import\s+url\((["']?)([^)]+?)\1\);/))
|
17
17
|
imported_filenames = imports.map do |i|
|
18
|
-
i[1]
|
18
|
+
i[1] =~ /\.(less|css)$/ ? i[1] : i[1] + '.less'
|
19
19
|
end
|
20
20
|
|
21
21
|
# Convert to items
|
@@ -62,11 +62,12 @@ module Nanoc::Filters
|
|
62
62
|
end
|
63
63
|
|
64
64
|
# Create renderer
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
65
|
+
renderer =
|
66
|
+
if renderer_class == ::Redcarpet::Render::HTML_TOC
|
67
|
+
renderer_class.new
|
68
|
+
else
|
69
|
+
renderer_class.new(renderer_options)
|
70
|
+
end
|
70
71
|
|
71
72
|
# Render
|
72
73
|
if with_toc
|
@@ -4,7 +4,7 @@ module Nanoc::Filters
|
|
4
4
|
require 'nanoc/helpers/link_to'
|
5
5
|
include Nanoc::Helpers::LinkTo
|
6
6
|
|
7
|
-
SELECTORS = ['*/@href', '*/@src', 'object/@data', 'param[@name="movie"]/@content', 'comment()']
|
7
|
+
SELECTORS = ['*/@href', '*/@src', 'object/@data', 'param[@name="movie"]/@content', 'comment()'].freeze
|
8
8
|
|
9
9
|
# Relativizes all paths in the given content, which can be HTML, XHTML, XML
|
10
10
|
# or CSS. This filter is quite useful if a site needs to be hosted in a
|
@@ -89,7 +89,7 @@ module Nanoc::Filters
|
|
89
89
|
doc.xpath(selector, namespaces).each do |node|
|
90
90
|
if node.name == 'comment'
|
91
91
|
nokogiri_process_comment(node, doc, selectors, namespaces, klass, type)
|
92
|
-
elsif
|
92
|
+
elsif path_is_relativizable?(node.content)
|
93
93
|
node.content = relative_path_to(node.content)
|
94
94
|
end
|
95
95
|
end
|
@@ -34,7 +34,8 @@ module Nanoc::Helpers
|
|
34
34
|
buffer = eval('_erbout', block.binding)
|
35
35
|
buffer << escaped_data
|
36
36
|
elsif string
|
37
|
-
string
|
37
|
+
string
|
38
|
+
.gsub('&', '&')
|
38
39
|
.gsub('<', '<')
|
39
40
|
.gsub('>', '>')
|
40
41
|
.gsub('"', '"')
|
@@ -44,6 +45,6 @@ module Nanoc::Helpers
|
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
47
|
-
|
48
|
+
alias h html_escape
|
48
49
|
end
|
49
50
|
end
|
@@ -123,7 +123,7 @@ module Nanoc::Helpers
|
|
123
123
|
end
|
124
124
|
|
125
125
|
# Handle Windows network (UNC) paths
|
126
|
-
if path.start_with?('//'
|
126
|
+
if path.start_with?('//', '\\\\')
|
127
127
|
return path
|
128
128
|
end
|
129
129
|
|
@@ -136,11 +136,12 @@ module Nanoc::Helpers
|
|
136
136
|
|
137
137
|
# Calculate the relative path (method depends on whether destination is
|
138
138
|
# a directory or not).
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
139
|
+
relative_path =
|
140
|
+
if src_path.to_s[-1, 1] != '/'
|
141
|
+
dst_path.relative_path_from(src_path.dirname).to_s
|
142
|
+
else
|
143
|
+
dst_path.relative_path_from(src_path).to_s
|
144
|
+
end
|
144
145
|
|
145
146
|
# Add trailing slash if necessary
|
146
147
|
if dst_path.to_s[-1, 1] == '/'
|
@@ -232,7 +232,7 @@ module Nanoc::RuleDSL
|
|
232
232
|
# include_rules 'rules/assets'
|
233
233
|
# include_rules 'rules/content'
|
234
234
|
def include_rules(name)
|
235
|
-
filename = [
|
235
|
+
filename = [name.to_s, "#{name}.rb", "./#{name}", "./#{name}.rb"].find { |f| File.file?(f) }
|
236
236
|
raise Nanoc::Int::Errors::NoRulesFileFound.new if filename.nil?
|
237
237
|
|
238
238
|
Nanoc::RuleDSL::RulesLoader.new(@config, @rules_collection).parse(filename)
|
data/lib/nanoc/version.rb
CHANGED
data/nanoc.gemspec
CHANGED
@@ -13,9 +13,9 @@ Gem::Specification.new do |s|
|
|
13
13
|
|
14
14
|
s.files =
|
15
15
|
Dir['[A-Z]*'] +
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
Dir['doc/yardoc_{templates,handlers}/**/*'] +
|
17
|
+
Dir['{bin,lib,tasks,test}/**/*'] +
|
18
|
+
['nanoc.gemspec']
|
19
19
|
s.executables = ['nanoc']
|
20
20
|
s.require_paths = ['lib']
|
21
21
|
|
data/tasks/test.rake
CHANGED
data/test/cli/test_cli.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
class Nanoc::CLITest < Nanoc::TestCase
|
2
|
-
COMMAND_CODE = <<EOS
|
2
|
+
COMMAND_CODE = <<EOS.freeze
|
3
3
|
usage '_test [options]'
|
4
4
|
summary 'meh'
|
5
5
|
description 'longer meh'
|
@@ -9,7 +9,7 @@ run do |opts, args, cmd|
|
|
9
9
|
end
|
10
10
|
EOS
|
11
11
|
|
12
|
-
SUBCOMMAND_CODE = <<EOS
|
12
|
+
SUBCOMMAND_CODE = <<EOS.freeze
|
13
13
|
usage '_sub [options]'
|
14
14
|
summary 'meh sub'
|
15
15
|
description 'longer meh sub'
|
@@ -25,7 +25,7 @@ class Nanoc::Extra::Checking::Checks::MixedContentTest < Nanoc::TestCase
|
|
25
25
|
check = Nanoc::Extra::Checking::Checks::MixedContent.create(site)
|
26
26
|
check.run
|
27
27
|
|
28
|
-
|
28
|
+
assert_empty check.issues
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -43,7 +43,7 @@ class Nanoc::Extra::Checking::Checks::MixedContentTest < Nanoc::TestCase
|
|
43
43
|
check = Nanoc::Extra::Checking::Checks::MixedContent.create(site)
|
44
44
|
check.run
|
45
45
|
|
46
|
-
|
46
|
+
assert_empty check.issues
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
@@ -61,7 +61,7 @@ class Nanoc::Extra::Checking::Checks::MixedContentTest < Nanoc::TestCase
|
|
61
61
|
check = Nanoc::Extra::Checking::Checks::MixedContent.create(site)
|
62
62
|
check.run
|
63
63
|
|
64
|
-
|
64
|
+
assert_empty check.issues
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
@@ -79,7 +79,7 @@ class Nanoc::Extra::Checking::Checks::MixedContentTest < Nanoc::TestCase
|
|
79
79
|
check = Nanoc::Extra::Checking::Checks::MixedContent.create(site)
|
80
80
|
check.run
|
81
81
|
|
82
|
-
|
82
|
+
assert_empty check.issues
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
@@ -97,7 +97,7 @@ class Nanoc::Extra::Checking::Checks::MixedContentTest < Nanoc::TestCase
|
|
97
97
|
check = Nanoc::Extra::Checking::Checks::MixedContent.create(site)
|
98
98
|
check.run
|
99
99
|
|
100
|
-
|
100
|
+
assert_empty check.issues
|
101
101
|
end
|
102
102
|
end
|
103
103
|
|
@@ -115,7 +115,7 @@ class Nanoc::Extra::Checking::Checks::MixedContentTest < Nanoc::TestCase
|
|
115
115
|
check = Nanoc::Extra::Checking::Checks::MixedContent.create(site)
|
116
116
|
check.run
|
117
117
|
|
118
|
-
|
118
|
+
assert_empty check.issues
|
119
119
|
end
|
120
120
|
end
|
121
121
|
|
@@ -180,7 +180,7 @@ class Nanoc::Extra::Checking::Checks::MixedContentTest < Nanoc::TestCase
|
|
180
180
|
check = Nanoc::Extra::Checking::Checks::MixedContent.create(site)
|
181
181
|
check.run
|
182
182
|
|
183
|
-
|
183
|
+
assert_empty check.issues
|
184
184
|
end
|
185
185
|
end
|
186
186
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class Nanoc::Filters::ColorizeSyntaxTest < Nanoc::TestCase
|
2
|
-
CODERAY_PRE = '<div class="CodeRay"><div class="code">'
|
3
|
-
CODERAY_POST = '</div></div>'
|
2
|
+
CODERAY_PRE = '<div class="CodeRay"><div class="code">'.freeze
|
3
|
+
CODERAY_POST = '</div></div>'.freeze
|
4
4
|
|
5
5
|
def test_coderay_simple
|
6
6
|
if_have 'coderay', 'nokogiri' do
|
@@ -56,11 +56,12 @@ class Nanoc::Filters::RedcarpetTest < Nanoc::TestCase
|
|
56
56
|
# Run filter
|
57
57
|
input = "![Alt](/path/to/img 'Title')"
|
58
58
|
output_expected = %r{<img src="/path/to/img" alt="Alt" title="Title"/>}
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
59
|
+
output_actual =
|
60
|
+
if ::Redcarpet::VERSION > '2'
|
61
|
+
filter.setup_and_run(input, renderer_options: { xhtml: true })
|
62
|
+
else
|
63
|
+
filter.setup_and_run(input, options: [:xhtml])
|
64
|
+
end
|
64
65
|
assert_match(output_expected, output_actual)
|
65
66
|
end
|
66
67
|
end
|
@@ -17,7 +17,7 @@ class Nanoc::Filters::RedClothTest < Nanoc::TestCase
|
|
17
17
|
|
18
18
|
# Run filter without options
|
19
19
|
result = filter.setup_and_run('I am a member of SPECTRE.')
|
20
|
-
assert_equal(
|
20
|
+
assert_equal('<p>I am a member of <span class="caps">SPECTRE</span>.</p>', result)
|
21
21
|
|
22
22
|
# Run filter with options
|
23
23
|
result = filter.setup_and_run('I am a member of SPECTRE.', no_span_caps: true)
|
data/test/filters/test_xsl.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'tempfile'
|
2
2
|
|
3
3
|
class Nanoc::Filters::XSLTest < Nanoc::TestCase
|
4
|
-
SAMPLE_XSL = <<-EOS
|
4
|
+
SAMPLE_XSL = <<-EOS.freeze
|
5
5
|
<?xml version="1.0" encoding="utf-8"?>
|
6
6
|
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
7
7
|
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
|
@@ -18,7 +18,7 @@ class Nanoc::Filters::XSLTest < Nanoc::TestCase
|
|
18
18
|
</xsl:stylesheet>
|
19
19
|
EOS
|
20
20
|
|
21
|
-
SAMPLE_XML_IN = <<-EOS
|
21
|
+
SAMPLE_XML_IN = <<-EOS.freeze
|
22
22
|
<?xml version="1.0" encoding="utf-8"?>
|
23
23
|
<report>
|
24
24
|
<title>My Report</title>
|
@@ -27,7 +27,7 @@ EOS
|
|
27
27
|
|
28
28
|
SAMPLE_XML_OUT = %r{\A<\?xml version="1.0" encoding="utf-8"\?>\s*<html>\s*<head>\s*<title>My Report</title>\s*</head>\s*<body>\s*<h1>My Report</h1>\s*</body>\s*</html>\s*\Z}m
|
29
29
|
|
30
|
-
SAMPLE_XSL_WITH_PARAMS = <<-EOS
|
30
|
+
SAMPLE_XSL_WITH_PARAMS = <<-EOS.freeze
|
31
31
|
<?xml version="1.0" encoding="utf-8"?>
|
32
32
|
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
33
33
|
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
|
@@ -45,7 +45,7 @@ EOS
|
|
45
45
|
</xsl:stylesheet>
|
46
46
|
EOS
|
47
47
|
|
48
|
-
SAMPLE_XML_IN_WITH_PARAMS = <<-EOS
|
48
|
+
SAMPLE_XML_IN_WITH_PARAMS = <<-EOS.freeze
|
49
49
|
<?xml version="1.0" encoding="utf-8"?>
|
50
50
|
<report>
|
51
51
|
<title>My Report</title>
|
@@ -54,7 +54,7 @@ EOS
|
|
54
54
|
|
55
55
|
SAMPLE_XML_OUT_WITH_PARAMS = %r{\A<\?xml version="1.0" encoding="utf-8"\?>\s*<html>\s*<head>\s*<title>My Report</title>\s*</head>\s*<body>\s*<h1>bar</h1>\s*</body>\s*</html>\s*\Z}m
|
56
56
|
|
57
|
-
SAMPLE_XSL_WITH_OMIT_XML_DECL = <<-EOS
|
57
|
+
SAMPLE_XSL_WITH_OMIT_XML_DECL = <<-EOS.freeze
|
58
58
|
<?xml version="1.0" encoding="utf-8"?>
|
59
59
|
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
60
60
|
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"
|
@@ -72,7 +72,7 @@ EOS
|
|
72
72
|
</xsl:stylesheet>
|
73
73
|
EOS
|
74
74
|
|
75
|
-
SAMPLE_XML_IN_WITH_OMIT_XML_DECL = <<-EOS
|
75
|
+
SAMPLE_XML_IN_WITH_OMIT_XML_DECL = <<-EOS.freeze
|
76
76
|
<?xml version="1.0" encoding="utf-8"?>
|
77
77
|
<report>
|
78
78
|
<title>My Report</title>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nanoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.1.
|
4
|
+
version: 4.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Denis Defreyne
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cri
|