nanoc 3.7.3 → 3.7.4
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 +4 -4
- data/Gemfile.lock +71 -46
- data/NEWS.md +14 -0
- data/lib/nanoc.rb +1 -1
- data/lib/nanoc/base/checksummer.rb +1 -1
- data/lib/nanoc/base/compilation/checksum_store.rb +1 -1
- data/lib/nanoc/base/compilation/compiled_content_cache.rb +1 -1
- data/lib/nanoc/base/compilation/compiler.rb +11 -10
- data/lib/nanoc/base/compilation/compiler_dsl.rb +4 -4
- data/lib/nanoc/base/compilation/dependency_tracker.rb +7 -7
- data/lib/nanoc/base/compilation/filter.rb +1 -1
- data/lib/nanoc/base/compilation/item_rep_proxy.rb +6 -5
- data/lib/nanoc/base/compilation/item_rep_recorder_proxy.rb +8 -7
- data/lib/nanoc/base/compilation/outdatedness_checker.rb +6 -6
- data/lib/nanoc/base/compilation/rule.rb +1 -1
- data/lib/nanoc/base/compilation/rule_memory_store.rb +1 -1
- data/lib/nanoc/base/compilation/rules_collection.rb +5 -5
- data/lib/nanoc/base/context.rb +1 -1
- data/lib/nanoc/base/core_ext/array.rb +1 -1
- data/lib/nanoc/base/core_ext/date.rb +1 -1
- data/lib/nanoc/base/core_ext/hash.rb +1 -1
- data/lib/nanoc/base/directed_graph.rb +3 -3
- data/lib/nanoc/base/memoization.rb +1 -1
- data/lib/nanoc/base/notification_center.rb +1 -1
- data/lib/nanoc/base/ordered_hash.rb +1 -1
- data/lib/nanoc/base/plugin_registry.rb +3 -3
- data/lib/nanoc/base/result_data/item_rep.rb +13 -11
- data/lib/nanoc/base/source_data/code_snippet.rb +2 -2
- data/lib/nanoc/base/source_data/data_source.rb +3 -3
- data/lib/nanoc/base/source_data/item.rb +8 -8
- data/lib/nanoc/base/source_data/item_array.rb +1 -1
- data/lib/nanoc/base/source_data/layout.rb +1 -1
- data/lib/nanoc/base/source_data/site.rb +27 -18
- data/lib/nanoc/base/store.rb +3 -3
- data/lib/nanoc/base/temp_filename_factory.rb +2 -2
- data/lib/nanoc/cli.rb +6 -6
- data/lib/nanoc/cli/cleaning_stream.rb +1 -1
- data/lib/nanoc/cli/command_runner.rb +4 -3
- data/lib/nanoc/cli/commands/autocompile.rb +3 -3
- data/lib/nanoc/cli/commands/check.rb +3 -3
- data/lib/nanoc/cli/commands/compile.rb +23 -23
- data/lib/nanoc/cli/commands/create-item.rb +5 -5
- data/lib/nanoc/cli/commands/create-layout.rb +14 -14
- data/lib/nanoc/cli/commands/create-site.rb +6 -6
- data/lib/nanoc/cli/commands/deploy.rb +8 -8
- data/lib/nanoc/cli/commands/nanoc.rb +3 -3
- data/lib/nanoc/cli/commands/prune.rb +3 -3
- data/lib/nanoc/cli/commands/shell.rb +4 -4
- data/lib/nanoc/cli/commands/show-data.rb +5 -5
- data/lib/nanoc/cli/commands/show-plugins.rb +5 -5
- data/lib/nanoc/cli/commands/show-rules.rb +4 -4
- data/lib/nanoc/cli/commands/sync.rb +1 -1
- data/lib/nanoc/cli/commands/update.rb +13 -13
- data/lib/nanoc/cli/commands/validate-css.rb +3 -3
- data/lib/nanoc/cli/commands/validate-html.rb +3 -3
- data/lib/nanoc/cli/commands/validate-links.rb +6 -6
- data/lib/nanoc/cli/commands/view.rb +4 -4
- data/lib/nanoc/cli/commands/watch.rb +11 -11
- data/lib/nanoc/cli/error_handler.rb +10 -10
- data/lib/nanoc/cli/logger.rb +1 -1
- data/lib/nanoc/cli/stream_cleaners/abstract.rb +1 -1
- data/lib/nanoc/data_sources/deprecated/last_fm.rb +5 -5
- data/lib/nanoc/data_sources/deprecated/twitter.rb +1 -1
- data/lib/nanoc/data_sources/filesystem.rb +16 -16
- data/lib/nanoc/data_sources/filesystem_unified.rb +1 -1
- data/lib/nanoc/data_sources/filesystem_verbose.rb +1 -1
- data/lib/nanoc/data_sources/static.rb +1 -1
- data/lib/nanoc/extra/auto_compiler.rb +2 -2
- data/lib/nanoc/extra/checking/check.rb +11 -1
- data/lib/nanoc/extra/checking/checks/external_links.rb +15 -7
- data/lib/nanoc/extra/checking/checks/internal_links.rb +3 -3
- data/lib/nanoc/extra/checking/checks/stale.rb +6 -6
- data/lib/nanoc/extra/checking/runner.rb +10 -9
- data/lib/nanoc/extra/chick.rb +2 -2
- data/lib/nanoc/extra/core_ext/enumerable.rb +1 -1
- data/lib/nanoc/extra/deployers/fog.rb +2 -2
- data/lib/nanoc/extra/deployers/rsync.rb +3 -3
- data/lib/nanoc/extra/file_proxy.rb +3 -3
- data/lib/nanoc/extra/jruby_nokogiri_warner.rb +1 -1
- data/lib/nanoc/extra/link_collector.rb +3 -3
- data/lib/nanoc/extra/piper.rb +2 -2
- data/lib/nanoc/extra/pruner.rb +4 -3
- data/lib/nanoc/extra/validators/links.rb +2 -2
- data/lib/nanoc/extra/validators/w3c.rb +1 -1
- data/lib/nanoc/extra/vcs.rb +5 -5
- data/lib/nanoc/extra/vcses/dummy.rb +1 -1
- data/lib/nanoc/filters/asciidoc.rb +1 -1
- data/lib/nanoc/filters/bluecloth.rb +1 -1
- data/lib/nanoc/filters/coffeescript.rb +1 -1
- data/lib/nanoc/filters/colorize_syntax.rb +19 -21
- data/lib/nanoc/filters/erubis.rb +1 -1
- data/lib/nanoc/filters/handlebars.rb +1 -1
- data/lib/nanoc/filters/less.rb +2 -2
- data/lib/nanoc/filters/markaby.rb +1 -1
- data/lib/nanoc/filters/mustache.rb +1 -1
- data/lib/nanoc/filters/rdoc.rb +1 -1
- data/lib/nanoc/filters/relativize_paths.rb +5 -5
- data/lib/nanoc/filters/rubypants.rb +1 -1
- data/lib/nanoc/filters/sass/sass_filesystem_importer.rb +1 -1
- data/lib/nanoc/filters/typogruby.rb +1 -1
- data/lib/nanoc/filters/xsl.rb +1 -1
- data/lib/nanoc/helpers/blogging.rb +12 -12
- data/lib/nanoc/helpers/capturing.rb +3 -3
- data/lib/nanoc/helpers/html_escape.rb +6 -6
- data/lib/nanoc/helpers/tagging.rb +1 -1
- data/lib/nanoc/helpers/xml_sitemap.rb +4 -4
- data/lib/nanoc/tasks/clean.rake +1 -1
- data/lib/nanoc/tasks/clean.rb +1 -1
- data/lib/nanoc/tasks/deploy/rsync.rake +2 -2
- data/lib/nanoc/version.rb +1 -1
- data/tasks/rubocop.rake +1 -0
- data/test/base/core_ext/array_spec.rb +7 -7
- data/test/base/core_ext/hash_spec.rb +1 -1
- data/test/base/test_checksum_store.rb +1 -1
- data/test/base/test_compiler.rb +14 -14
- data/test/base/test_compiler_dsl.rb +13 -13
- data/test/base/test_context.rb +2 -2
- data/test/base/test_dependency_tracker.rb +42 -42
- data/test/base/test_directed_graph.rb +102 -102
- data/test/base/test_item.rb +21 -21
- data/test/base/test_item_array.rb +19 -19
- data/test/base/test_item_rep.rb +50 -50
- data/test/base/test_layout.rb +6 -6
- data/test/base/test_outdatedness_checker.rb +2 -2
- data/test/base/test_rule_context.rb +2 -2
- data/test/base/test_site.rb +5 -5
- data/test/cli/commands/test_compile.rb +7 -7
- data/test/cli/commands/test_create_site.rb +2 -2
- data/test/cli/commands/test_deploy.rb +10 -10
- data/test/cli/commands/test_prune.rb +2 -2
- data/test/cli/commands/test_sync.rb +1 -1
- data/test/cli/commands/test_watch.rb +7 -7
- data/test/cli/test_cleaning_stream.rb +4 -4
- data/test/cli/test_cli.rb +3 -3
- data/test/cli/test_error_handler.rb +3 -3
- data/test/data_sources/test_filesystem.rb +19 -19
- data/test/data_sources/test_filesystem_unified.rb +30 -30
- data/test/data_sources/test_filesystem_verbose.rb +3 -3
- data/test/data_sources/test_static.rb +9 -9
- data/test/extra/checking/checks/test_stale.rb +8 -8
- data/test/extra/checking/test_check.rb +11 -1
- data/test/extra/checking/test_dsl.rb +1 -1
- data/test/extra/core_ext/test_enumerable.rb +2 -2
- data/test/extra/deployers/test_fog.rb +10 -10
- data/test/extra/deployers/test_rsync.rb +2 -2
- data/test/extra/test_auto_compiler.rb +28 -28
- data/test/extra/test_filesystem_tools.rb +3 -3
- data/test/extra/test_link_collector.rb +39 -20
- data/test/extra/validators/test_w3c.rb +5 -5
- data/test/filters/test_asciidoc.rb +2 -2
- data/test/filters/test_bluecloth.rb +1 -1
- data/test/filters/test_coffeescript.rb +1 -1
- data/test/filters/test_colorize_syntax.rb +20 -13
- data/test/filters/test_erb.rb +1 -1
- data/test/filters/test_kramdown.rb +1 -1
- data/test/filters/test_less.rb +10 -10
- data/test/filters/test_markaby.rb +2 -2
- data/test/filters/test_maruku.rb +2 -2
- data/test/filters/test_pandoc.rb +3 -3
- data/test/filters/test_rainpress.rb +4 -4
- data/test/filters/test_rdiscount.rb +2 -2
- data/test/filters/test_rdoc.rb +1 -1
- data/test/filters/test_redcarpet.rb +5 -5
- data/test/filters/test_redcloth.rb +5 -5
- data/test/filters/test_relativize_paths.rb +33 -31
- data/test/filters/test_rubypants.rb +2 -2
- data/test/filters/test_sass.rb +8 -8
- data/test/filters/test_slim.rb +3 -3
- data/test/filters/test_uglify_js.rb +1 -1
- data/test/filters/test_yui_compressor.rb +3 -3
- data/test/gem_loader.rb +1 -1
- data/test/helper.rb +14 -16
- data/test/helpers/test_blogging.rb +28 -28
- data/test/helpers/test_breadcrumbs.rb +12 -12
- data/test/helpers/test_capturing.rb +7 -7
- data/test/helpers/test_filtering.rb +16 -16
- data/test/helpers/test_link_to.rb +3 -3
- data/test/helpers/test_rendering.rb +1 -1
- data/test/helpers/test_tagging.rb +11 -11
- data/test/helpers/test_xml_sitemap.rb +18 -18
- data/test/tasks/test_clean.rb +8 -8
- metadata +2 -2
data/lib/nanoc/cli/logger.rb
CHANGED
|
@@ -14,7 +14,7 @@ module Nanoc::CLI::StreamCleaners
|
|
|
14
14
|
# @param [String] s The string to clean
|
|
15
15
|
#
|
|
16
16
|
# @return [String] The cleaned string
|
|
17
|
-
def clean(
|
|
17
|
+
def clean(_s)
|
|
18
18
|
raise NotImplementedError, 'Subclasses of Nanoc::CLI::StreamCleaners::Abstract must implement #clean'
|
|
19
19
|
end
|
|
20
20
|
|
|
@@ -21,9 +21,9 @@ module Nanoc::DataSources
|
|
|
21
21
|
# Get data
|
|
22
22
|
@http_client ||= Nanoc::Extra::CHiCk::Client.new
|
|
23
23
|
_status, _headers, data = *@http_client.get(
|
|
24
|
-
'http://ws.audioscrobbler.com/2.0/'
|
|
25
|
-
'?method=user.getRecentTracks'
|
|
26
|
-
'&format=json'
|
|
24
|
+
'http://ws.audioscrobbler.com/2.0/' \
|
|
25
|
+
'?method=user.getRecentTracks' \
|
|
26
|
+
'&format=json' \
|
|
27
27
|
'&user=' + URI.escape(config[:username]) +
|
|
28
28
|
'&api_key=' + URI.escape(config[:api_key])
|
|
29
29
|
)
|
|
@@ -36,8 +36,8 @@ module Nanoc::DataSources
|
|
|
36
36
|
raw_items.enum_with_index.map do |raw_item, i|
|
|
37
37
|
# Get artist data
|
|
38
38
|
_artist_status, _artist_headers, artist_data = *@http_client.get(
|
|
39
|
-
'http://ws.audioscrobbler.com/2.0/'
|
|
40
|
-
'?method=artist.getInfo'
|
|
39
|
+
'http://ws.audioscrobbler.com/2.0/' \
|
|
40
|
+
'?method=artist.getInfo' \
|
|
41
41
|
'&format=json' +
|
|
42
42
|
(
|
|
43
43
|
if raw_item['artist']['mbid'].empty?
|
|
@@ -34,7 +34,7 @@ module Nanoc::DataSources
|
|
|
34
34
|
# See {Nanoc::DataSource#setup}.
|
|
35
35
|
def setup
|
|
36
36
|
# Create directories
|
|
37
|
-
[
|
|
37
|
+
[content_dir_name, layouts_dir_name].each do |dir|
|
|
38
38
|
FileUtils.mkdir_p(dir)
|
|
39
39
|
vcs.add(dir)
|
|
40
40
|
end
|
|
@@ -60,12 +60,12 @@ module Nanoc::DataSources
|
|
|
60
60
|
create_object(layouts_dir_name, content, attributes, identifier, params)
|
|
61
61
|
end
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
protected
|
|
64
64
|
|
|
65
65
|
# Creates a new object (item or layout) on disk in dir_name according to
|
|
66
66
|
# the given identifier. The file will have its attributes taken from the
|
|
67
67
|
# attributes hash argument and its content from the content argument.
|
|
68
|
-
def create_object(
|
|
68
|
+
def create_object(_dir_name, _content, _attributes, _identifier, _params = {})
|
|
69
69
|
raise NotImplementedError.new(
|
|
70
70
|
"#{self.class} does not implement ##{name}"
|
|
71
71
|
)
|
|
@@ -89,7 +89,7 @@ module Nanoc::DataSources
|
|
|
89
89
|
content_filename = filename_for(base_filename, content_ext)
|
|
90
90
|
|
|
91
91
|
# Read content and metadata
|
|
92
|
-
is_binary =
|
|
92
|
+
is_binary = content_filename && !@site.config[:text_extensions].include?(File.extname(content_filename)[1..-1])
|
|
93
93
|
if is_binary && klass == Nanoc::Item
|
|
94
94
|
meta = (meta_filename && YAML.load_file(meta_filename)) || {}
|
|
95
95
|
content_or_filename = content_filename
|
|
@@ -153,9 +153,9 @@ module Nanoc::DataSources
|
|
|
153
153
|
# 'content/qux' => [ nil, 'html' ]
|
|
154
154
|
# }
|
|
155
155
|
def all_split_files_in(dir_name)
|
|
156
|
-
grouped_filenames = all_files_in(dir_name)
|
|
157
|
-
reject { |fn| fn =~ /(~|\.orig|\.rej|\.bak)$/ }
|
|
158
|
-
group_by { |fn| basename_of(fn) }
|
|
156
|
+
grouped_filenames = all_files_in(dir_name)
|
|
157
|
+
.reject { |fn| fn =~ /(~|\.orig|\.rej|\.bak)$/ }
|
|
158
|
+
.group_by { |fn| basename_of(fn) }
|
|
159
159
|
|
|
160
160
|
grouped_filenames.each_pair do |key, filenames|
|
|
161
161
|
# Divide
|
|
@@ -163,10 +163,10 @@ module Nanoc::DataSources
|
|
|
163
163
|
content_filenames = filenames.select { |fn| ext_of(fn) != '.yaml' }
|
|
164
164
|
|
|
165
165
|
# Check number of files per type
|
|
166
|
-
|
|
166
|
+
unless [0, 1].include?(meta_filenames.size)
|
|
167
167
|
raise "Found #{meta_filenames.size} meta files for #{key}; expected 0 or 1"
|
|
168
168
|
end
|
|
169
|
-
|
|
169
|
+
unless [0, 1].include?(content_filenames.size)
|
|
170
170
|
raise "Found #{content_filenames.size} content files for #{key}; expected 0 or 1"
|
|
171
171
|
end
|
|
172
172
|
|
|
@@ -193,7 +193,7 @@ module Nanoc::DataSources
|
|
|
193
193
|
# data sources may prefer to implement this differently (for example,
|
|
194
194
|
# {Nanoc::DataSources::FilesystemVerbose} doubles the last part of the
|
|
195
195
|
# basename before concatenating it with a period and the extension).
|
|
196
|
-
def filename_for(
|
|
196
|
+
def filename_for(_base_filename, _ext)
|
|
197
197
|
raise NotImplementedError.new(
|
|
198
198
|
"#{self.class} does not implement #filename_for"
|
|
199
199
|
)
|
|
@@ -201,7 +201,7 @@ module Nanoc::DataSources
|
|
|
201
201
|
|
|
202
202
|
# Returns the identifier that corresponds with the given filename, which
|
|
203
203
|
# can be the content filename or the meta filename.
|
|
204
|
-
def identifier_for_filename(
|
|
204
|
+
def identifier_for_filename(_filename)
|
|
205
205
|
raise NotImplementedError.new(
|
|
206
206
|
"#{self.class} does not implement #identifier_for_filename"
|
|
207
207
|
)
|
|
@@ -235,7 +235,7 @@ module Nanoc::DataSources
|
|
|
235
235
|
# Parses the file named `filename` and returns an array with its first
|
|
236
236
|
# element a hash with the file's metadata, and with its second element the
|
|
237
237
|
# file content itself.
|
|
238
|
-
def parse(content_filename, meta_filename,
|
|
238
|
+
def parse(content_filename, meta_filename, _kind)
|
|
239
239
|
# Read content and metadata from separate files
|
|
240
240
|
if meta_filename
|
|
241
241
|
content = content_filename ? read(content_filename) : ''
|
|
@@ -245,7 +245,7 @@ module Nanoc::DataSources
|
|
|
245
245
|
rescue Exception => e
|
|
246
246
|
raise "Could not parse YAML for #{meta_filename}: #{e.message}"
|
|
247
247
|
end
|
|
248
|
-
return [
|
|
248
|
+
return [meta, content]
|
|
249
249
|
end
|
|
250
250
|
|
|
251
251
|
# Read data
|
|
@@ -253,7 +253,7 @@ module Nanoc::DataSources
|
|
|
253
253
|
|
|
254
254
|
# Check presence of metadata section
|
|
255
255
|
if data !~ /\A-{3,5}\s*$/
|
|
256
|
-
return [
|
|
256
|
+
return [{}, data]
|
|
257
257
|
end
|
|
258
258
|
|
|
259
259
|
# Split data
|
|
@@ -273,7 +273,7 @@ module Nanoc::DataSources
|
|
|
273
273
|
content = pieces[4]
|
|
274
274
|
|
|
275
275
|
# Done
|
|
276
|
-
[
|
|
276
|
+
[meta, content]
|
|
277
277
|
end
|
|
278
278
|
|
|
279
279
|
# Reads the content of the file with the given name and returns a string
|
|
@@ -303,7 +303,7 @@ module Nanoc::DataSources
|
|
|
303
303
|
raise_encoding_error(filename, original_encoding)
|
|
304
304
|
end
|
|
305
305
|
|
|
306
|
-
|
|
306
|
+
unless data.valid_encoding?
|
|
307
307
|
raise_encoding_error(filename, original_encoding)
|
|
308
308
|
end
|
|
309
309
|
end
|
|
@@ -51,7 +51,7 @@ module Nanoc::Extra
|
|
|
51
51
|
if path =~ /\/$/
|
|
52
52
|
possible_paths = site.config[:index_filenames].map { |f| path + f }
|
|
53
53
|
else
|
|
54
|
-
possible_paths = [
|
|
54
|
+
possible_paths = [path]
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
# Find matching file
|
|
@@ -79,7 +79,7 @@ module Nanoc::Extra
|
|
|
79
79
|
raise e
|
|
80
80
|
end
|
|
81
81
|
|
|
82
|
-
|
|
82
|
+
private
|
|
83
83
|
|
|
84
84
|
def build_site
|
|
85
85
|
@site = Nanoc::Site.new(@site_path)
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
module Nanoc::Extra::Checking
|
|
4
4
|
|
|
5
|
+
class OutputDirNotFoundError < Nanoc::Errors::Generic
|
|
6
|
+
def initialize(directory_path)
|
|
7
|
+
super("Unable to run check against output directory at “#{directory_path}”: directory does not exist.")
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
5
11
|
class Check
|
|
6
12
|
|
|
7
13
|
extend Nanoc::PluginRegistry::PluginMethods
|
|
@@ -25,7 +31,11 @@ module Nanoc::Extra::Checking
|
|
|
25
31
|
end
|
|
26
32
|
|
|
27
33
|
def output_filenames
|
|
28
|
-
|
|
34
|
+
output_dir = @site.config[:output_dir]
|
|
35
|
+
unless File.exist?(output_dir)
|
|
36
|
+
raise Nanoc::Extra::Checking::OutputDirNotFoundError.new(output_dir)
|
|
37
|
+
end
|
|
38
|
+
Dir[output_dir + '/**/*'].select { |f| File.file?(f) }
|
|
29
39
|
end
|
|
30
40
|
|
|
31
41
|
end
|
|
@@ -71,11 +71,12 @@ module ::Nanoc::Extra::Checking::Checks
|
|
|
71
71
|
loop do
|
|
72
72
|
href = enum.next
|
|
73
73
|
break if href.nil?
|
|
74
|
+
|
|
74
75
|
res = validate(href)
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
76
|
+
next unless res
|
|
77
|
+
|
|
78
|
+
mutex.synchronize do
|
|
79
|
+
invalid << res
|
|
79
80
|
end
|
|
80
81
|
end
|
|
81
82
|
end
|
|
@@ -99,16 +100,19 @@ module ::Nanoc::Extra::Checking::Checks
|
|
|
99
100
|
|
|
100
101
|
# Get status
|
|
101
102
|
res = nil
|
|
103
|
+
last_err = nil
|
|
104
|
+
timeouts = [3, 5, 10, 30, 60]
|
|
102
105
|
5.times do |i|
|
|
103
106
|
begin
|
|
104
|
-
Timeout.timeout(
|
|
107
|
+
Timeout.timeout(timeouts[i]) do
|
|
105
108
|
res = request_url_once(url)
|
|
106
109
|
if res.code == '405'
|
|
107
110
|
res = request_url_once(url, Net::HTTP::Get)
|
|
108
111
|
end
|
|
109
112
|
end
|
|
110
113
|
rescue => e
|
|
111
|
-
|
|
114
|
+
last_err = e
|
|
115
|
+
next # can not allow
|
|
112
116
|
end
|
|
113
117
|
|
|
114
118
|
if res.code =~ /^3..$/
|
|
@@ -133,7 +137,11 @@ module ::Nanoc::Extra::Checking::Checks
|
|
|
133
137
|
return Result.new(href, res.code)
|
|
134
138
|
end
|
|
135
139
|
end
|
|
136
|
-
|
|
140
|
+
if last_err
|
|
141
|
+
return Result.new(href, last_err.message)
|
|
142
|
+
else
|
|
143
|
+
raise 'should not have gotten here'
|
|
144
|
+
end
|
|
137
145
|
end
|
|
138
146
|
|
|
139
147
|
def path_for_url(url)
|
|
@@ -19,16 +19,16 @@ module Nanoc::Extra::Checking::Checks
|
|
|
19
19
|
hrefs_with_filenames = ::Nanoc::Extra::LinkCollector.new(filenames, :internal).filenames_per_href
|
|
20
20
|
hrefs_with_filenames.each_pair do |href, fns|
|
|
21
21
|
fns.each do |filename|
|
|
22
|
-
|
|
22
|
+
next if valid?(href, filename)
|
|
23
|
+
|
|
23
24
|
add_issue(
|
|
24
25
|
"broken reference to #{href}",
|
|
25
26
|
:subject => filename)
|
|
26
|
-
end
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
protected
|
|
32
32
|
|
|
33
33
|
def valid?(href, origin)
|
|
34
34
|
# Skip hrefs that point to self
|
|
@@ -11,15 +11,15 @@ module Nanoc::Extra::Checking::Checks
|
|
|
11
11
|
|
|
12
12
|
output_filenames.each do |f|
|
|
13
13
|
next if pruner.filename_excluded?(f)
|
|
14
|
-
if
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
next if item_rep_paths.include?(f)
|
|
15
|
+
|
|
16
|
+
add_issue(
|
|
17
|
+
'file without matching item',
|
|
18
|
+
:subject => f)
|
|
19
19
|
end
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
protected
|
|
23
23
|
|
|
24
24
|
def pruner
|
|
25
25
|
exclude_config = @site.config.fetch(:prune, {}).fetch(:exclude, [])
|
|
@@ -20,9 +20,10 @@ module Nanoc::Extra::Checking
|
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
# @return [Boolean] true if a Checks file exists, false otherwise
|
|
23
|
-
def
|
|
23
|
+
def dsl_present?
|
|
24
24
|
checks_filename && File.file?(checks_filename)
|
|
25
25
|
end
|
|
26
|
+
alias_method :has_dsl?, :dsl_present?
|
|
26
27
|
|
|
27
28
|
# Lists all available checks on stdout.
|
|
28
29
|
#
|
|
@@ -65,12 +66,12 @@ module Nanoc::Extra::Checking
|
|
|
65
66
|
run_check_classes(check_classes_named(check_class_names))
|
|
66
67
|
end
|
|
67
68
|
|
|
68
|
-
|
|
69
|
+
protected
|
|
69
70
|
|
|
70
71
|
def load_dsl_if_available
|
|
71
72
|
@dsl_loaded ||= false
|
|
72
|
-
|
|
73
|
-
if self.
|
|
73
|
+
unless @dsl_loaded
|
|
74
|
+
if self.dsl_present?
|
|
74
75
|
@dsl = Nanoc::Extra::Checking::DSL.from_file(checks_filename)
|
|
75
76
|
else
|
|
76
77
|
@dsl = nil
|
|
@@ -138,11 +139,11 @@ module Nanoc::Extra::Checking
|
|
|
138
139
|
issues.group_by { |i| i.subject }.to_a.sort_by { |p| p.first }.each do |pair|
|
|
139
140
|
subject = pair.first
|
|
140
141
|
issues = pair.last
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
142
|
+
next if issues.empty?
|
|
143
|
+
|
|
144
|
+
puts " #{subject}:"
|
|
145
|
+
issues.each do |i|
|
|
146
|
+
puts " [ #{'ERROR'.red} ] #{i.check_class.identifier} - #{i.description}"
|
|
146
147
|
end
|
|
147
148
|
end
|
|
148
149
|
end
|
data/lib/nanoc/extra/chick.rb
CHANGED
|
@@ -55,7 +55,7 @@ module Nanoc::Extra
|
|
|
55
55
|
body_parts.each { |part| body << part }
|
|
56
56
|
|
|
57
57
|
# Done
|
|
58
|
-
[
|
|
58
|
+
[status, headers, body]
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
end
|
|
@@ -115,7 +115,7 @@ module Nanoc::Extra
|
|
|
115
115
|
return [
|
|
116
116
|
response.code.to_i,
|
|
117
117
|
response.to_hash.reduce({}) { |m, (k, v)| m.merge(k => v[0]) },
|
|
118
|
-
[
|
|
118
|
+
[response.body]
|
|
119
119
|
]
|
|
120
120
|
end
|
|
121
121
|
end
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Enumerable
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
unless Enumerable.instance_methods.include?('group_by')
|
|
6
6
|
|
|
7
7
|
# Returns a hash, which keys are evaluated result from the block, and
|
|
8
8
|
# values are arrays of elements in enum corresponding to the key. This
|
|
@@ -62,7 +62,7 @@ module Nanoc::Extra::Deployers
|
|
|
62
62
|
while truncated
|
|
63
63
|
set = directory.files.all(:marker => files.last.key)
|
|
64
64
|
truncated = set.is_truncated
|
|
65
|
-
files
|
|
65
|
+
files += set
|
|
66
66
|
end
|
|
67
67
|
keys_to_destroy = files.all.map { |file| file.key }
|
|
68
68
|
|
|
@@ -89,7 +89,7 @@ module Nanoc::Extra::Deployers
|
|
|
89
89
|
puts 'Done!'
|
|
90
90
|
end
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
private
|
|
93
93
|
|
|
94
94
|
# Prints the given message on stderr and exits.
|
|
95
95
|
def error(msg)
|
|
@@ -51,13 +51,13 @@ module Nanoc::Extra::Deployers
|
|
|
51
51
|
# Run
|
|
52
52
|
if dry_run
|
|
53
53
|
warn 'Performing a dry-run; no actions will actually be performed'
|
|
54
|
-
run_shell_cmd([
|
|
54
|
+
run_shell_cmd(['echo', 'rsync', options, src, dst].flatten)
|
|
55
55
|
else
|
|
56
|
-
run_shell_cmd([
|
|
56
|
+
run_shell_cmd(['rsync', options, src, dst].flatten)
|
|
57
57
|
end
|
|
58
58
|
end
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
private
|
|
61
61
|
|
|
62
62
|
def run_shell_cmd(cmd)
|
|
63
63
|
piper = Nanoc::Extra::Piper.new(:stdout => $stdout, :stderr => $stderr)
|