nanoc 4.4.5 → 4.4.6
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 +6 -2
- data/Gemfile.lock +37 -18
- data/NEWS.md +6 -0
- data/Rakefile +8 -20
- data/lib/nanoc/base/entities/code_snippet.rb +0 -2
- data/lib/nanoc/base/entities/item_rep.rb +4 -22
- data/lib/nanoc/base/entities/processing_actions/snapshot.rb +9 -7
- data/lib/nanoc/base/entities/rule_memory.rb +15 -7
- data/lib/nanoc/base/entities/snapshot_def.rb +2 -8
- data/lib/nanoc/base/repos/store.rb +2 -28
- data/lib/nanoc/base/services/checksummer.rb +9 -10
- data/lib/nanoc/base/services/compiler.rb +14 -16
- data/lib/nanoc/base/services/executor.rb +2 -13
- data/lib/nanoc/base/views/mixins/with_reps_view_mixin.rb +1 -1
- data/lib/nanoc/checking/checks/external_links.rb +2 -1
- data/lib/nanoc/cli/commands/compile.rb +8 -14
- data/lib/nanoc/extra/parallel_collection.rb +57 -0
- data/lib/nanoc/extra.rb +1 -0
- data/lib/nanoc/filters/mustache.rb +1 -1
- data/lib/nanoc/rule_dsl/recording_executor.rb +6 -34
- data/lib/nanoc/rule_dsl/rule_memory_calculator.rb +42 -12
- data/lib/nanoc/spec.rb +1 -1
- data/lib/nanoc/version.rb +1 -1
- data/nanoc.gemspec +1 -2
- data/spec/contributors_spec.rb +18 -0
- data/spec/nanoc/base/checksummer_spec.rb +381 -0
- data/spec/nanoc/base/compiler_spec.rb +181 -0
- data/spec/nanoc/base/entities/configuration_spec.rb +49 -0
- data/spec/nanoc/base/entities/content_spec.rb +193 -0
- data/spec/nanoc/base/entities/document_spec.rb +206 -0
- data/spec/nanoc/base/entities/identifier_spec.rb +460 -0
- data/spec/nanoc/base/entities/item_rep_spec.rb +226 -0
- data/spec/nanoc/base/entities/item_spec.rb +3 -0
- data/spec/nanoc/base/entities/layout_spec.rb +3 -0
- data/spec/nanoc/base/entities/lazy_value_spec.rb +106 -0
- data/spec/nanoc/base/entities/outdatedness_status_spec.rb +113 -0
- data/spec/nanoc/base/entities/pattern_spec.rb +125 -0
- data/spec/nanoc/base/entities/processing_action_spec.rb +9 -0
- data/spec/nanoc/base/entities/processing_actions/filter_spec.rb +18 -0
- data/spec/nanoc/base/entities/processing_actions/layout_spec.rb +18 -0
- data/spec/nanoc/base/entities/processing_actions/snapshot_spec.rb +32 -0
- data/spec/nanoc/base/entities/props_spec.rb +195 -0
- data/spec/nanoc/base/entities/rule_memory_spec.rb +131 -0
- data/spec/nanoc/base/entities/site_spec.rb +73 -0
- data/spec/nanoc/base/feature_spec.rb +107 -0
- data/spec/nanoc/base/filter_spec.rb +99 -0
- data/spec/nanoc/base/item_rep_writer_spec.rb +131 -0
- data/spec/nanoc/base/plugin_registry_spec.rb +29 -0
- data/spec/nanoc/base/repos/checksum_store_spec.rb +133 -0
- data/spec/nanoc/base/repos/compiled_content_cache_spec.rb +55 -0
- data/spec/nanoc/base/repos/config_loader_spec.rb +243 -0
- data/spec/nanoc/base/repos/dependency_store_spec.rb +195 -0
- data/spec/nanoc/base/repos/site_loader_spec.rb +214 -0
- data/spec/nanoc/base/services/dependency_tracker_spec.rb +238 -0
- data/spec/nanoc/base/services/executor_spec.rb +495 -0
- data/spec/nanoc/base/services/item_rep_router_spec.rb +134 -0
- data/spec/nanoc/base/services/item_rep_selector_spec.rb +169 -0
- data/spec/nanoc/base/services/outdatedness_checker_spec.rb +370 -0
- data/spec/nanoc/base/services/outdatedness_rules_spec.rb +432 -0
- data/spec/nanoc/base/services/pruner_spec.rb +105 -0
- data/spec/nanoc/base/services/temp_filename_factory_spec.rb +87 -0
- data/spec/nanoc/base/views/config_view_spec.rb +96 -0
- data/spec/nanoc/base/views/document_view_spec.rb +332 -0
- data/spec/nanoc/base/views/identifiable_collection_view_spec.rb +190 -0
- data/spec/nanoc/base/views/item_collection_with_reps_view_spec.rb +18 -0
- data/spec/nanoc/base/views/item_collection_without_reps_view_spec.rb +18 -0
- data/spec/nanoc/base/views/item_rep_collection_view_spec.rb +143 -0
- data/spec/nanoc/base/views/item_rep_view_spec.rb +265 -0
- data/spec/nanoc/base/views/item_view_spec.rb +341 -0
- data/spec/nanoc/base/views/layout_collection_view_spec.rb +18 -0
- data/spec/nanoc/base/views/layout_view_spec.rb +14 -0
- data/spec/nanoc/base/views/mutable_config_view_spec.rb +16 -0
- data/spec/nanoc/base/views/mutable_document_view_spec.rb +92 -0
- data/spec/nanoc/base/views/mutable_identifiable_collection_view_spec.rb +36 -0
- data/spec/nanoc/base/views/mutable_item_collection_view_spec.rb +49 -0
- data/spec/nanoc/base/views/mutable_item_view_spec.rb +22 -0
- data/spec/nanoc/base/views/mutable_layout_collection_view_spec.rb +49 -0
- data/spec/nanoc/base/views/mutable_layout_view_spec.rb +13 -0
- data/spec/nanoc/base/views/post_compile_item_rep_collection_view_spec.rb +4 -0
- data/spec/nanoc/base/views/post_compile_item_rep_view_spec.rb +137 -0
- data/spec/nanoc/base/views/post_compile_item_view_spec.rb +56 -0
- data/spec/nanoc/cli/commands/compile/file_action_printer_spec.rb +76 -0
- data/spec/nanoc/cli/commands/compile/timing_recorder_spec.rb +66 -0
- data/spec/nanoc/cli/commands/compile_spec.rb +64 -0
- data/spec/nanoc/cli/commands/deploy_spec.rb +327 -0
- data/spec/nanoc/cli/commands/shell_spec.rb +54 -0
- data/spec/nanoc/cli/commands/show_data_spec.rb +126 -0
- data/spec/nanoc/cli/commands/show_rules_spec.rb +112 -0
- data/spec/nanoc/cli/commands/view_spec.rb +58 -0
- data/spec/nanoc/data_sources/filesystem_spec.rb +56 -0
- data/spec/nanoc/deploying/fog_spec.rb +193 -0
- data/spec/nanoc/extra/parallel_collection_spec.rb +108 -0
- data/spec/nanoc/filters/colorize_syntax/rouge_spec.rb +195 -0
- data/spec/nanoc/filters/less_spec.rb +120 -0
- data/spec/nanoc/helpers/blogging_spec.rb +216 -0
- data/spec/nanoc/helpers/breadcrumbs_spec.rb +133 -0
- data/spec/nanoc/helpers/capturing_spec.rb +181 -0
- data/spec/nanoc/helpers/child_parent_spec.rb +105 -0
- data/spec/nanoc/helpers/filtering_spec.rb +72 -0
- data/spec/nanoc/helpers/html_escape_spec.rb +35 -0
- data/spec/nanoc/helpers/link_to_spec.rb +275 -0
- data/spec/nanoc/helpers/rendering_spec.rb +141 -0
- data/spec/nanoc/helpers/tagging_spec.rb +104 -0
- data/spec/nanoc/helpers/text_spec.rb +58 -0
- data/spec/nanoc/integration/outdatedness_integration_spec.rb +208 -0
- data/spec/nanoc/regressions/gh_1015_spec.rb +17 -0
- data/spec/nanoc/regressions/gh_1031_spec.rb +54 -0
- data/spec/nanoc/regressions/gh_1035_spec.rb +33 -0
- data/spec/nanoc/regressions/gh_1040_spec.rb +22 -0
- data/spec/nanoc/regressions/gh_761_spec.rb +23 -0
- data/spec/nanoc/regressions/gh_767_spec.rb +19 -0
- data/spec/nanoc/regressions/gh_769_spec.rb +30 -0
- data/spec/nanoc/regressions/gh_776_spec.rb +43 -0
- data/spec/nanoc/regressions/gh_787_spec.rb +19 -0
- data/spec/nanoc/regressions/gh_795_spec.rb +19 -0
- data/spec/nanoc/regressions/gh_804_spec.rb +26 -0
- data/spec/nanoc/regressions/gh_807_spec.rb +17 -0
- data/spec/nanoc/regressions/gh_809_spec.rb +17 -0
- data/spec/nanoc/regressions/gh_813_spec.rb +22 -0
- data/spec/nanoc/regressions/gh_815_spec.rb +18 -0
- data/spec/nanoc/regressions/gh_828_spec.rb +23 -0
- data/spec/nanoc/regressions/gh_833_spec.rb +14 -0
- data/spec/nanoc/regressions/gh_841_spec.rb +15 -0
- data/spec/nanoc/regressions/gh_867_spec.rb +15 -0
- data/spec/nanoc/regressions/gh_882_spec.rb +29 -0
- data/spec/nanoc/regressions/gh_885_spec.rb +30 -0
- data/spec/nanoc/regressions/gh_891_spec.rb +26 -0
- data/spec/nanoc/regressions/gh_913_spec.rb +24 -0
- data/spec/nanoc/regressions/gh_928_spec.rb +5 -0
- data/spec/nanoc/regressions/gh_937_spec.rb +25 -0
- data/spec/nanoc/regressions/gh_942_spec.rb +21 -0
- data/spec/nanoc/regressions/gh_947_spec.rb +21 -0
- data/spec/nanoc/regressions/gh_948_spec.rb +16 -0
- data/spec/nanoc/regressions/gh_951_spec.rb +19 -0
- data/spec/nanoc/regressions/gh_954_spec.rb +33 -0
- data/spec/nanoc/regressions/gh_970a_spec.rb +17 -0
- data/spec/nanoc/regressions/gh_970b_spec.rb +50 -0
- data/spec/nanoc/regressions/gh_974_spec.rb +17 -0
- data/spec/nanoc/regressions/gh_981_spec.rb +21 -0
- data/spec/nanoc/rule_dsl/recording_executor_spec.rb +142 -0
- data/spec/nanoc/rule_dsl/rule_context_spec.rb +177 -0
- data/spec/nanoc/rule_dsl/rule_memory_calculator_spec.rb +233 -0
- data/spec/nanoc/rule_dsl/rules_collection_spec.rb +299 -0
- data/spec/regression_filenames_spec.rb +16 -0
- data/spec/spec_helper.rb +173 -0
- data/test/base/core_ext/array_spec.rb +2 -0
- data/test/base/core_ext/hash_spec.rb +2 -0
- data/test/base/core_ext/string_spec.rb +2 -0
- data/test/base/test_code_snippet.rb +2 -0
- data/test/base/test_compiler.rb +2 -0
- data/test/base/test_context.rb +4 -2
- data/test/base/test_data_source.rb +2 -0
- data/test/base/test_dependency_tracker.rb +2 -0
- data/test/base/test_directed_graph.rb +2 -0
- data/test/base/test_filter.rb +7 -5
- data/test/base/test_item.rb +2 -0
- data/test/base/test_item_array.rb +3 -1
- data/test/base/test_layout.rb +2 -0
- data/test/base/test_memoization.rb +2 -0
- data/test/base/test_notification_center.rb +2 -0
- data/test/base/test_outdatedness_checker.rb +2 -0
- data/test/base/test_plugin.rb +2 -0
- data/test/base/test_site.rb +2 -0
- data/test/base/test_store.rb +2 -0
- data/test/checking/checks/test_css.rb +2 -0
- data/test/checking/checks/test_external_links.rb +4 -2
- data/test/checking/checks/test_html.rb +2 -0
- data/test/checking/checks/test_internal_links.rb +5 -3
- data/test/checking/checks/test_mixed_content.rb +2 -0
- data/test/checking/checks/test_stale.rb +2 -0
- data/test/checking/test_check.rb +2 -0
- data/test/checking/test_dsl.rb +2 -0
- data/test/checking/test_runner.rb +2 -0
- data/test/cli/commands/test_check.rb +2 -0
- data/test/cli/commands/test_compile.rb +2 -0
- data/test/cli/commands/test_create_site.rb +2 -0
- data/test/cli/commands/test_help.rb +2 -0
- data/test/cli/commands/test_info.rb +2 -0
- data/test/cli/commands/test_prune.rb +2 -0
- data/test/cli/test_cleaning_stream.rb +2 -0
- data/test/cli/test_cli.rb +11 -9
- data/test/cli/test_error_handler.rb +2 -0
- data/test/cli/test_logger.rb +2 -0
- data/test/data_sources/test_filesystem.rb +8 -6
- data/test/data_sources/test_filesystem_tools.rb +2 -0
- data/test/deploying/test_fog.rb +2 -0
- data/test/deploying/test_rsync.rb +4 -2
- data/test/extra/core_ext/test_pathname.rb +2 -0
- data/test/extra/core_ext/test_time.rb +2 -0
- data/test/extra/test_link_collector.rb +2 -0
- data/test/extra/test_piper.rb +2 -0
- data/test/filters/colorize_syntax/test_coderay.rb +2 -0
- data/test/filters/colorize_syntax/test_common.rb +2 -0
- data/test/filters/colorize_syntax/test_pygmentize.rb +2 -0
- data/test/filters/colorize_syntax/test_pygments.rb +2 -0
- data/test/filters/colorize_syntax/test_simon.rb +2 -0
- data/test/filters/test_asciidoc.rb +2 -0
- data/test/filters/test_bluecloth.rb +2 -0
- data/test/filters/test_coffeescript.rb +2 -0
- data/test/filters/test_erb.rb +7 -5
- data/test/filters/test_erubis.rb +6 -4
- data/test/filters/test_haml.rb +7 -5
- data/test/filters/test_handlebars.rb +2 -0
- data/test/filters/test_kramdown.rb +2 -0
- data/test/filters/test_markaby.rb +2 -0
- data/test/filters/test_maruku.rb +2 -0
- data/test/filters/test_mustache.rb +4 -2
- data/test/filters/test_pandoc.rb +2 -0
- data/test/filters/test_rainpress.rb +2 -0
- data/test/filters/test_rdiscount.rb +2 -0
- data/test/filters/test_rdoc.rb +2 -0
- data/test/filters/test_redcarpet.rb +2 -0
- data/test/filters/test_redcloth.rb +2 -0
- data/test/filters/test_relativize_paths.rb +2 -0
- data/test/filters/test_rubypants.rb +2 -0
- data/test/filters/test_sass.rb +4 -2
- data/test/filters/test_slim.rb +4 -2
- data/test/filters/test_typogruby.rb +2 -0
- data/test/filters/test_uglify_js.rb +2 -0
- data/test/filters/test_xsl.rb +2 -0
- data/test/filters/test_yui_compressor.rb +5 -3
- data/test/helpers/test_blogging.rb +2 -0
- data/test/helpers/test_capturing.rb +2 -0
- data/test/helpers/test_link_to.rb +2 -0
- data/test/helpers/test_xml_sitemap.rb +2 -0
- data/test/rule_dsl/test_action_provider.rb +2 -0
- data/test/rule_dsl/test_compiler_dsl.rb +6 -4
- data/test/rule_dsl/test_rule.rb +2 -0
- data/test/rule_dsl/test_rules_collection.rb +2 -0
- data/test/test_gem.rb +2 -0
- metadata +124 -17
- data/test/base/test_item_rep.rb +0 -156
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: '0186a136e28013d7133ebf66fa6d1e7065992a40'
|
|
4
|
+
data.tar.gz: 9198ef4aa5d624328b6bc3a5dc20238c4d4a4e53
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b4f5f734e8a28c0cb7f01fa35119bbd7b2ffe7cae4a1d832fd70d3fa1fb7657a7f000ed9557213c8f849117033d4222bb7681fe4bc3bc3977dc9f441a59658af
|
|
7
|
+
data.tar.gz: b193bcfdf436fa88af0ae448019037bba79a5ab75a643280a3b5ce031e92e3e7ebbeab8e135f0d77111244d15fcff0bbf112662f027a60cb5544ed048a809f30
|
data/Gemfile
CHANGED
|
@@ -8,14 +8,17 @@ group :devel do
|
|
|
8
8
|
gem 'fuubar'
|
|
9
9
|
gem 'guard-rake'
|
|
10
10
|
gem 'json', '~> 2.0'
|
|
11
|
+
gem 'm', '~> 1.5'
|
|
11
12
|
gem 'minitest', '~> 5.0'
|
|
12
13
|
gem 'mocha'
|
|
13
14
|
gem 'pry'
|
|
15
|
+
gem 'rainbow', '~> 2.1'
|
|
14
16
|
gem 'rake'
|
|
15
17
|
gem 'rdoc', '~> 5.0'
|
|
16
|
-
gem 'rspec-mocks'
|
|
17
18
|
gem 'rspec'
|
|
18
|
-
gem '
|
|
19
|
+
gem 'rspec-its', '~> 1.2'
|
|
20
|
+
gem 'rspec-mocks'
|
|
21
|
+
gem 'rubocop', github: 'bbatsov/rubocop'
|
|
19
22
|
gem 'simplecov', require: false
|
|
20
23
|
gem 'timecop'
|
|
21
24
|
gem 'vcr'
|
|
@@ -55,6 +58,7 @@ group :plugins do
|
|
|
55
58
|
gem 'rubypants'
|
|
56
59
|
gem 'sass'
|
|
57
60
|
gem 'slim'
|
|
61
|
+
gem 'therubyracer', github: 'cowboyd/therubyracer'
|
|
58
62
|
gem 'typogruby'
|
|
59
63
|
gem 'uglifier'
|
|
60
64
|
gem 'w3c_validators'
|
data/Gemfile.lock
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
GIT
|
|
2
|
+
remote: git://github.com/bbatsov/rubocop.git
|
|
3
|
+
revision: 186b16e10514eaf304990d614184b980abc0ad2b
|
|
4
|
+
specs:
|
|
5
|
+
rubocop (0.46.0)
|
|
6
|
+
parser (>= 2.3.3.1, < 3.0)
|
|
7
|
+
powerpack (~> 0.1)
|
|
8
|
+
rainbow (>= 1.99.1, < 3.0)
|
|
9
|
+
ruby-progressbar (~> 1.7)
|
|
10
|
+
unicode-display_width (~> 1.0, >= 1.0.1)
|
|
11
|
+
|
|
12
|
+
GIT
|
|
13
|
+
remote: git://github.com/cowboyd/therubyracer.git
|
|
14
|
+
revision: 2f1127bed45f03b91f3c92469be26399d3c1bcd8
|
|
15
|
+
specs:
|
|
16
|
+
therubyracer (0.12.2)
|
|
17
|
+
libv8 (~> 3.16.14.15)
|
|
18
|
+
ref
|
|
19
|
+
|
|
1
20
|
GIT
|
|
2
21
|
remote: git://github.com/tmm1/pygments.rb.git
|
|
3
22
|
revision: a988d127d3270d21685d2ac2e586060bf43709f3
|
|
@@ -8,10 +27,9 @@ GIT
|
|
|
8
27
|
PATH
|
|
9
28
|
remote: .
|
|
10
29
|
specs:
|
|
11
|
-
nanoc (4.4.
|
|
30
|
+
nanoc (4.4.6)
|
|
12
31
|
cri (~> 2.3)
|
|
13
32
|
hamster (~> 3.0)
|
|
14
|
-
parallel (~> 1.9)
|
|
15
33
|
ref (~> 2.0)
|
|
16
34
|
|
|
17
35
|
GEM
|
|
@@ -50,7 +68,7 @@ GEM
|
|
|
50
68
|
sass (>= 3.3.0, < 3.5)
|
|
51
69
|
compass-import-once (1.0.5)
|
|
52
70
|
sass (>= 3.2, < 3.5)
|
|
53
|
-
concurrent-ruby (1.0.
|
|
71
|
+
concurrent-ruby (1.0.4)
|
|
54
72
|
contracts (0.14.0)
|
|
55
73
|
coveralls (0.8.17)
|
|
56
74
|
json (>= 1.8, < 3)
|
|
@@ -219,7 +237,7 @@ GEM
|
|
|
219
237
|
handlebars-source (~> 4.0.5)
|
|
220
238
|
therubyracer (~> 0.12.1)
|
|
221
239
|
handlebars-source (4.0.6)
|
|
222
|
-
hashdiff (0.3.
|
|
240
|
+
hashdiff (0.3.2)
|
|
223
241
|
inflecto (0.0.2)
|
|
224
242
|
ipaddress (0.8.3)
|
|
225
243
|
json (2.0.2)
|
|
@@ -232,6 +250,9 @@ GEM
|
|
|
232
250
|
rb-inotify (~> 0.9, >= 0.9.7)
|
|
233
251
|
ruby_dep (~> 1.2)
|
|
234
252
|
lumberjack (1.0.10)
|
|
253
|
+
m (1.5.0)
|
|
254
|
+
method_source (>= 0.6.7)
|
|
255
|
+
rake (>= 0.9.2.2)
|
|
235
256
|
markaby (0.8.0)
|
|
236
257
|
builder
|
|
237
258
|
maruku (0.7.2)
|
|
@@ -247,7 +268,7 @@ GEM
|
|
|
247
268
|
multi_json (1.12.1)
|
|
248
269
|
mustache (1.0.3)
|
|
249
270
|
nenv (0.3.0)
|
|
250
|
-
nokogiri (1.
|
|
271
|
+
nokogiri (1.7.0)
|
|
251
272
|
mini_portile2 (~> 2.1.0)
|
|
252
273
|
notiffany (0.1.1)
|
|
253
274
|
nenv (~> 0.1)
|
|
@@ -263,7 +284,7 @@ GEM
|
|
|
263
284
|
slop (~> 3.4)
|
|
264
285
|
public_suffix (2.0.4)
|
|
265
286
|
rack (2.0.1)
|
|
266
|
-
rainbow (2.
|
|
287
|
+
rainbow (2.2.0)
|
|
267
288
|
rainpress (1.0)
|
|
268
289
|
rake (12.0.0)
|
|
269
290
|
rb-fsevent (0.9.8)
|
|
@@ -276,7 +297,7 @@ GEM
|
|
|
276
297
|
trollop (~> 2.1)
|
|
277
298
|
rdiscount (2.2.0.1)
|
|
278
299
|
rdoc (5.0.0)
|
|
279
|
-
redcarpet (3.
|
|
300
|
+
redcarpet (3.4.0)
|
|
280
301
|
ref (2.0.0)
|
|
281
302
|
rouge (2.0.7)
|
|
282
303
|
rspec (3.5.0)
|
|
@@ -288,16 +309,13 @@ GEM
|
|
|
288
309
|
rspec-expectations (3.5.0)
|
|
289
310
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
290
311
|
rspec-support (~> 3.5.0)
|
|
312
|
+
rspec-its (1.2.0)
|
|
313
|
+
rspec-core (>= 3.0.0)
|
|
314
|
+
rspec-expectations (>= 3.0.0)
|
|
291
315
|
rspec-mocks (3.5.0)
|
|
292
316
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
293
317
|
rspec-support (~> 3.5.0)
|
|
294
318
|
rspec-support (3.5.0)
|
|
295
|
-
rubocop (0.46.0)
|
|
296
|
-
parser (>= 2.3.1.1, < 3.0)
|
|
297
|
-
powerpack (~> 0.1)
|
|
298
|
-
rainbow (>= 1.99.1, < 3.0)
|
|
299
|
-
ruby-progressbar (~> 1.7)
|
|
300
|
-
unicode-display_width (~> 1.0, >= 1.0.1)
|
|
301
319
|
ruby-progressbar (1.8.1)
|
|
302
320
|
ruby_dep (1.5.0)
|
|
303
321
|
rubypants (0.6.0)
|
|
@@ -316,9 +334,6 @@ GEM
|
|
|
316
334
|
temple (0.7.7)
|
|
317
335
|
term-ansicolor (1.4.0)
|
|
318
336
|
tins (~> 1.0)
|
|
319
|
-
therubyracer (0.12.2)
|
|
320
|
-
libv8 (~> 3.16.14.0)
|
|
321
|
-
ref
|
|
322
337
|
thor (0.19.4)
|
|
323
338
|
tilt (2.0.5)
|
|
324
339
|
timecop (0.8.1)
|
|
@@ -369,6 +384,7 @@ DEPENDENCIES
|
|
|
369
384
|
kramdown
|
|
370
385
|
less (~> 2.0)
|
|
371
386
|
listen
|
|
387
|
+
m (~> 1.5)
|
|
372
388
|
markaby
|
|
373
389
|
maruku
|
|
374
390
|
mime-types
|
|
@@ -382,6 +398,7 @@ DEPENDENCIES
|
|
|
382
398
|
pry
|
|
383
399
|
pygments.rb!
|
|
384
400
|
rack
|
|
401
|
+
rainbow (~> 2.1)
|
|
385
402
|
rainpress
|
|
386
403
|
rake
|
|
387
404
|
rdiscount (~> 2.2)
|
|
@@ -389,12 +406,14 @@ DEPENDENCIES
|
|
|
389
406
|
redcarpet
|
|
390
407
|
rouge
|
|
391
408
|
rspec
|
|
409
|
+
rspec-its (~> 1.2)
|
|
392
410
|
rspec-mocks
|
|
393
|
-
rubocop
|
|
411
|
+
rubocop!
|
|
394
412
|
rubypants
|
|
395
413
|
sass
|
|
396
414
|
simplecov
|
|
397
415
|
slim
|
|
416
|
+
therubyracer!
|
|
398
417
|
timecop
|
|
399
418
|
typogruby
|
|
400
419
|
uglifier
|
|
@@ -406,4 +425,4 @@ DEPENDENCIES
|
|
|
406
425
|
yuicompressor
|
|
407
426
|
|
|
408
427
|
BUNDLED WITH
|
|
409
|
-
1.13.
|
|
428
|
+
1.13.7
|
data/NEWS.md
CHANGED
data/Rakefile
CHANGED
|
@@ -3,30 +3,18 @@ require 'rspec/core/rake_task'
|
|
|
3
3
|
require 'rake/testtask'
|
|
4
4
|
require 'coveralls/rake/task'
|
|
5
5
|
|
|
6
|
-
RuboCop::RakeTask.new(:rubocop)
|
|
7
|
-
task.options = %w(--display-cop-names --format simple)
|
|
8
|
-
task.patterns = ['bin/nanoc', 'lib/**/*.rb', 'spec/**/*.rb', 'test/**/*.rb']
|
|
9
|
-
end
|
|
6
|
+
RuboCop::RakeTask.new(:rubocop)
|
|
10
7
|
|
|
11
8
|
Coveralls::RakeTask.new
|
|
12
9
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
SUBDIRS.each do |dir|
|
|
17
|
-
Rake::TestTask.new(dir == '*' ? 'all' : dir) do |t|
|
|
18
|
-
t.test_files = Dir["test/#{dir}/**/*_spec.rb"] + Dir["test/#{dir}/**/test_*.rb"]
|
|
19
|
-
t.libs = ['./lib', '.']
|
|
20
|
-
t.ruby_opts = ['-r./test/helper']
|
|
21
|
-
end
|
|
22
|
-
end
|
|
10
|
+
Rake::TestTask.new(:test_all) do |t|
|
|
11
|
+
t.test_files = Dir['test/**/*_spec.rb'] + Dir['test/**/test_*.rb']
|
|
12
|
+
t.libs << 'test'
|
|
23
13
|
end
|
|
24
14
|
|
|
25
|
-
RSpec::Core::RakeTask.new(:spec)
|
|
26
|
-
t.verbose = false
|
|
27
|
-
end
|
|
15
|
+
RSpec::Core::RakeTask.new(:spec)
|
|
28
16
|
|
|
29
|
-
|
|
30
|
-
task
|
|
17
|
+
task test: [:spec, :test_all, :rubocop]
|
|
18
|
+
task test_ci: [:test, :'coveralls:push']
|
|
31
19
|
|
|
32
|
-
task default:
|
|
20
|
+
task default: :test
|
|
@@ -66,24 +66,16 @@ module Nanoc::Int
|
|
|
66
66
|
def compiled_content(snapshot: nil)
|
|
67
67
|
# Get name of last pre-layout snapshot
|
|
68
68
|
snapshot_name = snapshot || (@snapshot_contents[:pre] ? :pre : :last)
|
|
69
|
-
is_movable = [:pre, :post, :last].include?(snapshot_name)
|
|
70
69
|
|
|
71
70
|
# Check existance of snapshot
|
|
72
71
|
snapshot_def = snapshot_defs.reverse.find { |sd| sd.name == snapshot_name }
|
|
73
|
-
|
|
74
|
-
if !is_movable && !is_final
|
|
72
|
+
unless snapshot_def
|
|
75
73
|
raise Nanoc::Int::Errors::NoSuchSnapshot.new(self, snapshot_name)
|
|
76
74
|
end
|
|
77
75
|
|
|
78
76
|
# Verify snapshot is usable
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
when :post, :last
|
|
82
|
-
true
|
|
83
|
-
when :pre
|
|
84
|
-
!is_final
|
|
85
|
-
end
|
|
86
|
-
is_usable_snapshot = @snapshot_contents[snapshot_name] && (compiled? || !is_still_moving)
|
|
77
|
+
stopped_moving = snapshot_name != :last || compiled?
|
|
78
|
+
is_usable_snapshot = @snapshot_contents[snapshot_name] && stopped_moving
|
|
87
79
|
unless is_usable_snapshot
|
|
88
80
|
Fiber.yield(Nanoc::Int::Errors::UnmetDependency.new(self))
|
|
89
81
|
return compiled_content(snapshot: snapshot)
|
|
@@ -98,16 +90,6 @@ module Nanoc::Int
|
|
|
98
90
|
snapshot_content.string
|
|
99
91
|
end
|
|
100
92
|
|
|
101
|
-
contract Symbol => C::Bool
|
|
102
|
-
# Checks whether content exists at a given snapshot.
|
|
103
|
-
#
|
|
104
|
-
# @return [Boolean] True if content exists for the snapshot with the
|
|
105
|
-
# given name, false otherwise
|
|
106
|
-
def snapshot?(snapshot_name)
|
|
107
|
-
!@snapshot_contents[snapshot_name].nil?
|
|
108
|
-
end
|
|
109
|
-
alias has_snapshot? snapshot?
|
|
110
|
-
|
|
111
93
|
contract C::KeywordArgs[snapshot: C::Optional[Symbol]] => C::Maybe[String]
|
|
112
94
|
# Returns the item rep’s raw path. It includes the path to the output
|
|
113
95
|
# directory and the full filename.
|
|
@@ -144,7 +126,7 @@ module Nanoc::Int
|
|
|
144
126
|
end
|
|
145
127
|
|
|
146
128
|
def inspect
|
|
147
|
-
"<#{self.class} name=\"#{name}\"
|
|
129
|
+
"<#{self.class} name=\"#{name}\" raw_path=\"#{raw_path}\" item.identifier=\"#{item.identifier}\">"
|
|
148
130
|
end
|
|
149
131
|
end
|
|
150
132
|
end
|
|
@@ -1,26 +1,28 @@
|
|
|
1
1
|
module Nanoc::Int::ProcessingActions
|
|
2
2
|
class Snapshot < Nanoc::Int::ProcessingAction
|
|
3
3
|
# snapshot :before_layout
|
|
4
|
-
# snapshot :before_layout, final: true
|
|
5
4
|
# snapshot :before_layout, path: '/about.md'
|
|
6
5
|
|
|
7
6
|
attr_reader :snapshot_name
|
|
8
|
-
attr_reader :final
|
|
9
7
|
attr_reader :path
|
|
10
|
-
alias final? final
|
|
11
8
|
|
|
12
|
-
def initialize(snapshot_name,
|
|
9
|
+
def initialize(snapshot_name, path)
|
|
13
10
|
@snapshot_name = snapshot_name
|
|
14
|
-
@final = final
|
|
15
11
|
@path = path
|
|
16
12
|
end
|
|
17
13
|
|
|
18
14
|
def serialize
|
|
19
|
-
[:snapshot, @snapshot_name,
|
|
15
|
+
[:snapshot, @snapshot_name, true, @path]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
NONE = Object.new
|
|
19
|
+
|
|
20
|
+
def copy(path: NONE)
|
|
21
|
+
self.class.new(@snapshot_name, path.equal?(NONE) ? @path : path)
|
|
20
22
|
end
|
|
21
23
|
|
|
22
24
|
def to_s
|
|
23
|
-
"snapshot #{@snapshot_name.inspect},
|
|
25
|
+
"snapshot #{@snapshot_name.inspect}, path: #{@path.inspect}"
|
|
24
26
|
end
|
|
25
27
|
end
|
|
26
28
|
end
|
|
@@ -3,9 +3,9 @@ module Nanoc::Int
|
|
|
3
3
|
include Nanoc::Int::ContractsSupport
|
|
4
4
|
include Enumerable
|
|
5
5
|
|
|
6
|
-
def initialize(item_rep)
|
|
6
|
+
def initialize(item_rep, actions: [])
|
|
7
7
|
@item_rep = item_rep
|
|
8
|
-
@actions =
|
|
8
|
+
@actions = actions
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
contract C::None => Numeric
|
|
@@ -30,10 +30,10 @@ module Nanoc::Int
|
|
|
30
30
|
self
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
-
contract Symbol, C::
|
|
34
|
-
def add_snapshot(snapshot_name,
|
|
35
|
-
will_add_snapshot(snapshot_name)
|
|
36
|
-
@actions << Nanoc::Int::ProcessingActions::Snapshot.new(snapshot_name,
|
|
33
|
+
contract Symbol, C::Maybe[String] => self
|
|
34
|
+
def add_snapshot(snapshot_name, path)
|
|
35
|
+
will_add_snapshot(snapshot_name)
|
|
36
|
+
@actions << Nanoc::Int::ProcessingActions::Snapshot.new(snapshot_name, path)
|
|
37
37
|
self
|
|
38
38
|
end
|
|
39
39
|
|
|
@@ -56,7 +56,7 @@ module Nanoc::Int
|
|
|
56
56
|
|
|
57
57
|
# TODO: Add contract
|
|
58
58
|
def serialize
|
|
59
|
-
map(&:serialize)
|
|
59
|
+
to_a.map(&:serialize)
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
contract C::Func[Nanoc::Int::ProcessingAction => C::Any] => self
|
|
@@ -65,6 +65,14 @@ module Nanoc::Int
|
|
|
65
65
|
self
|
|
66
66
|
end
|
|
67
67
|
|
|
68
|
+
contract C::Func[Nanoc::Int::ProcessingAction => C::Any] => self
|
|
69
|
+
def map
|
|
70
|
+
self.class.new(
|
|
71
|
+
@item_rep,
|
|
72
|
+
actions: @actions.map { |a| yield(a) },
|
|
73
|
+
)
|
|
74
|
+
end
|
|
75
|
+
|
|
68
76
|
private
|
|
69
77
|
|
|
70
78
|
def will_add_snapshot(name)
|
|
@@ -5,15 +5,9 @@ module Nanoc
|
|
|
5
5
|
|
|
6
6
|
attr_reader :name
|
|
7
7
|
|
|
8
|
-
contract Symbol
|
|
9
|
-
def initialize(name
|
|
8
|
+
contract Symbol => C::Any
|
|
9
|
+
def initialize(name)
|
|
10
10
|
@name = name
|
|
11
|
-
@is_final = is_final
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
contract C::None => C::Bool
|
|
15
|
-
def final?
|
|
16
|
-
@is_final
|
|
17
11
|
end
|
|
18
12
|
end
|
|
19
13
|
end
|
|
@@ -66,21 +66,11 @@ module Nanoc::Int
|
|
|
66
66
|
#
|
|
67
67
|
# @return [void]
|
|
68
68
|
def load
|
|
69
|
-
|
|
70
|
-
unless File.file?(filename)
|
|
71
|
-
no_data_found
|
|
72
|
-
return
|
|
73
|
-
end
|
|
69
|
+
return unless File.file?(filename)
|
|
74
70
|
|
|
75
71
|
begin
|
|
76
72
|
pstore.transaction do
|
|
77
|
-
|
|
78
|
-
if pstore[:version] != version
|
|
79
|
-
version_mismatch_detected
|
|
80
|
-
return
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
# Load
|
|
73
|
+
return if pstore[:version] != version
|
|
84
74
|
self.data = pstore[:data]
|
|
85
75
|
end
|
|
86
76
|
rescue
|
|
@@ -102,22 +92,6 @@ module Nanoc::Int
|
|
|
102
92
|
end
|
|
103
93
|
end
|
|
104
94
|
|
|
105
|
-
# @group Callback methods
|
|
106
|
-
|
|
107
|
-
# Callback method that is called when no data file was found. By default,
|
|
108
|
-
# this implementation does nothing, but it should probably be overridden
|
|
109
|
-
# by the subclass.
|
|
110
|
-
#
|
|
111
|
-
# @return [void]
|
|
112
|
-
def no_data_found; end
|
|
113
|
-
|
|
114
|
-
# Callback method that is called when a version mismatch is detected. By
|
|
115
|
-
# default, this implementation does nothing, but it should probably be
|
|
116
|
-
# overridden by the subclass.
|
|
117
|
-
#
|
|
118
|
-
# @return [void]
|
|
119
|
-
def version_mismatch_detected; end
|
|
120
|
-
|
|
121
95
|
private
|
|
122
96
|
|
|
123
97
|
def pstore
|
|
@@ -104,7 +104,13 @@ module Nanoc::Int
|
|
|
104
104
|
end
|
|
105
105
|
end
|
|
106
106
|
|
|
107
|
-
class
|
|
107
|
+
class UpdateBehavior
|
|
108
|
+
def self.update(_obj, _digest)
|
|
109
|
+
raise NotImpementedError
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
class RuleContextUpdateBehavior < UpdateBehavior
|
|
108
114
|
def self.update(obj, digest)
|
|
109
115
|
digest.update('item=')
|
|
110
116
|
yield(obj.item)
|
|
@@ -119,7 +125,7 @@ module Nanoc::Int
|
|
|
119
125
|
end
|
|
120
126
|
end
|
|
121
127
|
|
|
122
|
-
class ContextUpdateBehavior
|
|
128
|
+
class ContextUpdateBehavior < UpdateBehavior
|
|
123
129
|
def self.update(obj, digest)
|
|
124
130
|
obj.instance_variables.each do |var|
|
|
125
131
|
digest.update(var.to_s)
|
|
@@ -130,12 +136,6 @@ module Nanoc::Int
|
|
|
130
136
|
end
|
|
131
137
|
end
|
|
132
138
|
|
|
133
|
-
class UpdateBehavior
|
|
134
|
-
def self.update(_obj, _digest)
|
|
135
|
-
raise NotImpementedError
|
|
136
|
-
end
|
|
137
|
-
end
|
|
138
|
-
|
|
139
139
|
class RawUpdateBehavior < UpdateBehavior
|
|
140
140
|
def self.update(obj, digest)
|
|
141
141
|
digest.update(obj.to_s)
|
|
@@ -167,8 +167,7 @@ module Nanoc::Int
|
|
|
167
167
|
end
|
|
168
168
|
|
|
169
169
|
class NoUpdateBehavior < UpdateBehavior
|
|
170
|
-
def self.update(_obj, _digest)
|
|
171
|
-
end
|
|
170
|
+
def self.update(_obj, _digest); end
|
|
172
171
|
end
|
|
173
172
|
|
|
174
173
|
class UnwrapUpdateBehavior < UpdateBehavior
|
|
@@ -75,7 +75,7 @@ module Nanoc::Int
|
|
|
75
75
|
|
|
76
76
|
# Provides functionality for (re)calculating the content of an item rep, without caching or
|
|
77
77
|
# outdatedness checking.
|
|
78
|
-
class
|
|
78
|
+
class RecalculatePhase
|
|
79
79
|
include Nanoc::Int::ContractsSupport
|
|
80
80
|
|
|
81
81
|
def initialize(action_provider:, dependency_store:, compilation_context:)
|
|
@@ -98,7 +98,7 @@ module Nanoc::Int
|
|
|
98
98
|
when Nanoc::Int::ProcessingActions::Layout
|
|
99
99
|
executor.layout(action.layout_identifier, action.params)
|
|
100
100
|
when Nanoc::Int::ProcessingActions::Snapshot
|
|
101
|
-
executor.snapshot(action.snapshot_name
|
|
101
|
+
executor.snapshot(action.snapshot_name)
|
|
102
102
|
else
|
|
103
103
|
raise Nanoc::Int::Errors::InternalInconsistency, "unknown action #{action.inspect}"
|
|
104
104
|
end
|
|
@@ -109,8 +109,8 @@ module Nanoc::Int
|
|
|
109
109
|
end
|
|
110
110
|
|
|
111
111
|
# Provides functionality for (re)calculating the content of an item rep, with caching or
|
|
112
|
-
# outdatedness checking. Delegates to
|
|
113
|
-
class
|
|
112
|
+
# outdatedness checking. Delegates to RecalculatePhase if outdated or no cache available.
|
|
113
|
+
class CachePhase
|
|
114
114
|
include Nanoc::Int::ContractsSupport
|
|
115
115
|
|
|
116
116
|
def initialize(compiled_content_cache:, wrapped:)
|
|
@@ -138,7 +138,7 @@ module Nanoc::Int
|
|
|
138
138
|
end
|
|
139
139
|
|
|
140
140
|
# Provides functionality for suspending and resuming item rep compilation (using fibers).
|
|
141
|
-
class
|
|
141
|
+
class ResumePhase
|
|
142
142
|
include Nanoc::Int::ContractsSupport
|
|
143
143
|
|
|
144
144
|
def initialize(wrapped:)
|
|
@@ -182,7 +182,7 @@ module Nanoc::Int
|
|
|
182
182
|
end
|
|
183
183
|
end
|
|
184
184
|
|
|
185
|
-
class
|
|
185
|
+
class WritePhase
|
|
186
186
|
include Nanoc::Int::ContractsSupport
|
|
187
187
|
|
|
188
188
|
def initialize(wrapped:)
|
|
@@ -194,9 +194,7 @@ module Nanoc::Int
|
|
|
194
194
|
@wrapped.run(rep, is_outdated: is_outdated)
|
|
195
195
|
|
|
196
196
|
rep.snapshot_defs.each do |sdef|
|
|
197
|
-
|
|
198
|
-
ItemRepWriter.new.write(rep, sdef.name)
|
|
199
|
-
end
|
|
197
|
+
ItemRepWriter.new.write(rep, sdef.name)
|
|
200
198
|
end
|
|
201
199
|
end
|
|
202
200
|
end
|
|
@@ -344,23 +342,23 @@ module Nanoc::Int
|
|
|
344
342
|
|
|
345
343
|
def item_rep_compiler
|
|
346
344
|
@_item_rep_compiler ||= begin
|
|
347
|
-
|
|
345
|
+
recalculate_phase = RecalculatePhase.new(
|
|
348
346
|
action_provider: action_provider,
|
|
349
347
|
dependency_store: @dependency_store,
|
|
350
348
|
compilation_context: compilation_context,
|
|
351
349
|
)
|
|
352
350
|
|
|
353
|
-
|
|
351
|
+
cache_phase = CachePhase.new(
|
|
354
352
|
compiled_content_cache: compiled_content_cache,
|
|
355
|
-
wrapped:
|
|
353
|
+
wrapped: recalculate_phase,
|
|
356
354
|
)
|
|
357
355
|
|
|
358
|
-
|
|
359
|
-
wrapped:
|
|
356
|
+
resume_phase = ResumePhase.new(
|
|
357
|
+
wrapped: cache_phase,
|
|
360
358
|
)
|
|
361
359
|
|
|
362
|
-
|
|
363
|
-
wrapped:
|
|
360
|
+
WritePhase.new(
|
|
361
|
+
wrapped: resume_phase,
|
|
364
362
|
)
|
|
365
363
|
end
|
|
366
364
|
end
|
|
@@ -35,9 +35,6 @@ module Nanoc
|
|
|
35
35
|
if filter.class.to_binary? && !File.file?(filter.output_filename)
|
|
36
36
|
raise OutputNotWrittenError.new(filter_name, filter.output_filename)
|
|
37
37
|
end
|
|
38
|
-
|
|
39
|
-
# Create snapshot
|
|
40
|
-
snapshot(@rep.snapshot_contents[:post] ? :post : :pre, final: false) unless @rep.binary?
|
|
41
38
|
ensure
|
|
42
39
|
Nanoc::Int::NotificationCenter.post(:filtering_ended, @rep, filter_name)
|
|
43
40
|
end
|
|
@@ -55,17 +52,12 @@ module Nanoc
|
|
|
55
52
|
# Check whether item can be laid out
|
|
56
53
|
raise Nanoc::Int::Errors::CannotLayoutBinaryItem.new(@rep) if @rep.binary?
|
|
57
54
|
|
|
58
|
-
# Create "pre" snapshot
|
|
59
|
-
if @rep.snapshot_contents[:post].nil?
|
|
60
|
-
snapshot(:pre, final: true)
|
|
61
|
-
end
|
|
62
|
-
|
|
63
55
|
# Create filter
|
|
64
56
|
klass = Nanoc::Filter.named(filter_name)
|
|
65
57
|
raise Nanoc::Int::Errors::UnknownFilter.new(filter_name) if klass.nil?
|
|
66
58
|
view_context = @compilation_context.create_view_context(@dependency_tracker)
|
|
67
59
|
layout_view = Nanoc::LayoutView.new(layout, view_context)
|
|
68
|
-
filter = klass.new(assigns_for(@rep).merge(
|
|
60
|
+
filter = klass.new(assigns_for(@rep).merge(layout: layout_view))
|
|
69
61
|
|
|
70
62
|
# Visit
|
|
71
63
|
@dependency_tracker.bounce(layout, raw_content: true)
|
|
@@ -78,15 +70,12 @@ module Nanoc
|
|
|
78
70
|
arg = content.binary? ? content.filename : content.string
|
|
79
71
|
res = filter.setup_and_run(arg, filter_args)
|
|
80
72
|
@rep.snapshot_contents[:last] = Nanoc::Int::TextualContent.new(res).tap(&:freeze)
|
|
81
|
-
|
|
82
|
-
# Create "post" snapshot
|
|
83
|
-
snapshot(:post, final: false)
|
|
84
73
|
ensure
|
|
85
74
|
Nanoc::Int::NotificationCenter.post(:filtering_ended, @rep, filter_name)
|
|
86
75
|
end
|
|
87
76
|
end
|
|
88
77
|
|
|
89
|
-
def snapshot(snapshot_name
|
|
78
|
+
def snapshot(snapshot_name)
|
|
90
79
|
@rep.snapshot_contents[snapshot_name] = @rep.snapshot_contents[:last]
|
|
91
80
|
end
|
|
92
81
|
|
|
@@ -12,7 +12,7 @@ module Nanoc
|
|
|
12
12
|
# any).
|
|
13
13
|
#
|
|
14
14
|
# @return [String] The content of the given rep at the given snapshot.
|
|
15
|
-
def compiled_content(rep: :default, snapshot:
|
|
15
|
+
def compiled_content(rep: :default, snapshot: nil)
|
|
16
16
|
reps.fetch(rep).compiled_content(snapshot: snapshot)
|
|
17
17
|
end
|
|
18
18
|
|
|
@@ -43,7 +43,8 @@ module ::Nanoc::Checking::Checks
|
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
def select_invalid(hrefs)
|
|
46
|
-
|
|
46
|
+
col = Nanoc::Extra::ParallelCollection.new(hrefs, parallelism: 10)
|
|
47
|
+
col.map { |href| validate(href) }.compact
|
|
47
48
|
end
|
|
48
49
|
|
|
49
50
|
def validate(href)
|