nanoc 4.6.1 → 4.6.2
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/Appraisals +1 -1
- data/Gemfile.lock +22 -22
- data/NEWS.md +12 -0
- data/lib/nanoc/base/entities/document.rb +7 -0
- data/lib/nanoc/base/entities/identifiable_collection.rb +12 -9
- data/lib/nanoc/base/entities/item_rep.rb +24 -28
- data/lib/nanoc/base/entities/processing_actions/snapshot.rb +15 -11
- data/lib/nanoc/base/entities/rule_memory.rb +15 -5
- data/lib/nanoc/base/entities/site.rb +15 -10
- data/lib/nanoc/base/entities/snapshot_def.rb +8 -2
- data/lib/nanoc/base/repos.rb +3 -0
- data/lib/nanoc/base/repos/aggregate_data_source.rb +20 -0
- data/lib/nanoc/base/repos/in_mem_data_source.rb +13 -0
- data/lib/nanoc/base/repos/prefixed_data_source.rb +19 -0
- data/lib/nanoc/base/repos/site_loader.rb +8 -16
- data/lib/nanoc/base/repos/snapshot_repo.rb +10 -5
- data/lib/nanoc/base/services/action_provider.rb +12 -0
- data/lib/nanoc/base/services/compiler/phases/recalculate.rb +5 -2
- data/lib/nanoc/base/services/compiler/phases/write.rb +1 -3
- data/lib/nanoc/base/services/compiler/stages/preprocess.rb +6 -3
- data/lib/nanoc/base/services/executor.rb +2 -4
- data/lib/nanoc/base/services/filter.rb +7 -12
- data/lib/nanoc/base/services/item_rep_router.rb +40 -16
- data/lib/nanoc/base/services/item_rep_writer.rb +19 -3
- data/lib/nanoc/base/services/pruner.rb +1 -1
- data/lib/nanoc/base/views/item_rep_view.rb +12 -3
- data/lib/nanoc/base/views/mutable_identifiable_collection_view.rb +1 -1
- data/lib/nanoc/base/views/mutable_item_collection_view.rb +1 -1
- data/lib/nanoc/base/views/mutable_layout_collection_view.rb +1 -1
- data/lib/nanoc/checking/checks/html.rb +1 -1
- data/lib/nanoc/checking/checks/stale.rb +2 -1
- data/lib/nanoc/checking/checks/w3c_validator.rb +1 -0
- data/lib/nanoc/cli/commands/compile.rb +3 -2
- data/lib/nanoc/cli/commands/show-data.rb +4 -2
- data/lib/nanoc/data_sources/filesystem.rb +1 -1
- data/lib/nanoc/helpers/filtering.rb +1 -2
- data/lib/nanoc/helpers/rendering.rb +1 -2
- data/lib/nanoc/helpers/xml_sitemap.rb +2 -2
- data/lib/nanoc/rule_dsl/action_provider.rb +7 -0
- data/lib/nanoc/rule_dsl/rule_context.rb +4 -1
- data/lib/nanoc/rule_dsl/rule_memory_calculator.rb +33 -13
- data/lib/nanoc/spec.rb +5 -6
- data/lib/nanoc/version.rb +1 -1
- data/spec/nanoc/base/checksummer_spec.rb +19 -9
- data/spec/nanoc/base/compiler_spec.rb +4 -8
- data/spec/nanoc/base/entities/document_spec.rb +20 -0
- data/spec/nanoc/base/entities/identifiable_collection_spec.rb +12 -0
- data/spec/nanoc/base/entities/item_rep_spec.rb +1 -1
- data/spec/nanoc/base/entities/processing_actions/snapshot_spec.rb +19 -13
- data/spec/nanoc/base/entities/rule_memory_spec.rb +39 -3
- data/spec/nanoc/base/entities/site_spec.rb +15 -10
- data/spec/nanoc/base/filter_spec.rb +28 -1
- data/spec/nanoc/base/item_rep_writer_spec.rb +4 -2
- data/spec/nanoc/base/repos/outdatedness_store_spec.rb +1 -2
- data/spec/nanoc/base/repos/snapshot_repo_spec.rb +4 -4
- data/spec/nanoc/base/repos/store_spec.rb +5 -1
- data/spec/nanoc/base/services/compiler/stages/compile_reps_spec.rb +9 -10
- data/spec/nanoc/base/services/executor_spec.rb +2 -2
- data/spec/nanoc/base/services/item_rep_router_spec.rb +83 -39
- data/spec/nanoc/base/services/outdatedness_checker_spec.rb +1 -2
- data/spec/nanoc/base/services/outdatedness_rules_spec.rb +2 -3
- data/spec/nanoc/base/services/pruner_spec.rb +2 -2
- data/spec/nanoc/base/views/identifiable_collection_view_spec.rb +46 -28
- data/spec/nanoc/base/views/item_rep_view_spec.rb +72 -15
- data/spec/nanoc/base/views/item_view_spec.rb +20 -14
- data/spec/nanoc/base/views/mutable_identifiable_collection_view_spec.rb +10 -4
- data/spec/nanoc/base/views/mutable_item_collection_view_spec.rb +10 -5
- data/spec/nanoc/base/views/mutable_layout_collection_view_spec.rb +10 -5
- data/spec/nanoc/cli/commands/compile/file_action_printer_spec.rb +1 -1
- data/spec/nanoc/cli/commands/compile/timing_recorder_spec.rb +1 -1
- data/spec/nanoc/cli/commands/show_data_spec.rb +9 -7
- data/spec/nanoc/cli/commands/show_rules_spec.rb +16 -10
- data/spec/nanoc/regressions/gh_1037a_spec.rb +29 -0
- data/spec/nanoc/regressions/gh_1037b_spec.rb +18 -0
- data/spec/nanoc/regressions/gh_1082a_spec.rb +18 -0
- data/spec/nanoc/regressions/gh_1082b_spec.rb +20 -0
- data/spec/nanoc/regressions/gh_1082c_spec.rb +19 -0
- data/spec/nanoc/regressions/gh_1082d_spec.rb +17 -0
- data/spec/nanoc/regressions/gh_1093_spec.rb +49 -0
- data/spec/nanoc/regressions/gh_1097_spec.rb +21 -0
- data/spec/nanoc/regressions/gh_1100_spec.rb +20 -0
- data/spec/nanoc/regressions/gh_1102_spec.rb +26 -0
- data/spec/nanoc/regressions/gh_776_spec.rb +1 -5
- data/spec/nanoc/rule_dsl/recording_executor_spec.rb +14 -14
- data/spec/nanoc/rule_dsl/rule_context_spec.rb +22 -13
- data/spec/nanoc/rule_dsl/rule_memory_calculator_spec.rb +38 -54
- data/spec/spec_helper.rb +1 -1
- data/test/base/test_compiler.rb +3 -4
- data/test/base/test_item_array.rb +4 -15
- data/test/checking/checks/test_html.rb +4 -3
- data/test/cli/commands/test_compile.rb +2 -2
- data/test/filters/test_relativize_paths.rb +28 -28
- data/test/fixtures/vcr_cassettes/html_run_error.yml +25 -76
- data/test/helpers/test_xml_sitemap.rb +22 -19
- metadata +16 -2
|
@@ -15,7 +15,7 @@ module Nanoc
|
|
|
15
15
|
#
|
|
16
16
|
# @return [self]
|
|
17
17
|
def create(content, attributes, identifier)
|
|
18
|
-
@objects
|
|
18
|
+
@objects = @objects.add(Nanoc::Int::Layout.new(content, attributes, identifier))
|
|
19
19
|
self
|
|
20
20
|
end
|
|
21
21
|
end
|
|
@@ -3,6 +3,7 @@ module ::Nanoc::Checking::Checks
|
|
|
3
3
|
class W3CValidator < ::Nanoc::Checking::Check
|
|
4
4
|
def run
|
|
5
5
|
require 'w3c_validators'
|
|
6
|
+
require 'resolv-replace'
|
|
6
7
|
|
|
7
8
|
Dir[@config[:output_dir] + '/**/*.' + extension].each do |filename|
|
|
8
9
|
results = validator_class.new.validate_file(filename)
|
|
@@ -355,8 +355,9 @@ module Nanoc::CLI::Commands
|
|
|
355
355
|
Nanoc::Int::NotificationCenter.remove(:compilation_suspended, self)
|
|
356
356
|
Nanoc::Int::NotificationCenter.remove(:rep_written, self)
|
|
357
357
|
|
|
358
|
-
@reps.
|
|
359
|
-
rep.raw_paths.
|
|
358
|
+
@reps.reject(&:compiled?).each do |rep|
|
|
359
|
+
raw_paths = rep.raw_paths.values.flatten.uniq
|
|
360
|
+
raw_paths.each do |raw_path|
|
|
360
361
|
log(:low, :skip, raw_path, nil)
|
|
361
362
|
end
|
|
362
363
|
end
|
|
@@ -115,8 +115,10 @@ module Nanoc::CLI::Commands
|
|
|
115
115
|
puts ' (not written)'
|
|
116
116
|
end
|
|
117
117
|
length = rep.raw_paths.keys.map { |s| s.to_s.length }.max
|
|
118
|
-
rep.raw_paths.each do |snapshot_name,
|
|
119
|
-
|
|
118
|
+
rep.raw_paths.each do |snapshot_name, raw_paths|
|
|
119
|
+
raw_paths.each do |raw_path|
|
|
120
|
+
puts format(" [ %-#{length}s ] %s", snapshot_name, raw_path)
|
|
121
|
+
end
|
|
120
122
|
end
|
|
121
123
|
end
|
|
122
124
|
end
|
|
@@ -254,7 +254,7 @@ module Nanoc::DataSources
|
|
|
254
254
|
by_basename.each_pair do |basename, filenames|
|
|
255
255
|
# Divide
|
|
256
256
|
meta_filenames = filenames.select { |fn| ext_of(fn) == '.yaml' }
|
|
257
|
-
content_filenames = filenames.
|
|
257
|
+
content_filenames = filenames.reject { |fn| ext_of(fn) == '.yaml' }
|
|
258
258
|
|
|
259
259
|
# Check number of files per type
|
|
260
260
|
unless [0, 1].include?(meta_filenames.size)
|
|
@@ -13,8 +13,7 @@ module Nanoc::Helpers
|
|
|
13
13
|
data = capture(&block)
|
|
14
14
|
|
|
15
15
|
# Find filter
|
|
16
|
-
klass = Nanoc::Filter.named(filter_name)
|
|
17
|
-
raise Nanoc::Int::Errors::UnknownFilter.new(filter_name) if klass.nil?
|
|
16
|
+
klass = Nanoc::Filter.named!(filter_name)
|
|
18
17
|
|
|
19
18
|
# Create filter
|
|
20
19
|
assigns = {
|
|
@@ -41,8 +41,7 @@ module Nanoc::Helpers
|
|
|
41
41
|
raise Nanoc::Int::Errors::CannotDetermineFilter.new(layout.identifier) if filter_name.nil?
|
|
42
42
|
|
|
43
43
|
# Get filter class
|
|
44
|
-
filter_class = Nanoc::Filter.named(filter_name)
|
|
45
|
-
raise Nanoc::Int::Errors::UnknownFilter.new(filter_name) if filter_class.nil?
|
|
44
|
+
filter_class = Nanoc::Filter.named!(filter_name)
|
|
46
45
|
|
|
47
46
|
# Create filter
|
|
48
47
|
filter = filter_class.new(assigns)
|
|
@@ -26,8 +26,8 @@ module Nanoc::Helpers
|
|
|
26
26
|
xml.urlset(xmlns: 'http://www.sitemaps.org/schemas/sitemap/0.9') do
|
|
27
27
|
# Add item
|
|
28
28
|
items.sort_by(&:identifier).each do |item|
|
|
29
|
-
reps = item.reps.
|
|
30
|
-
reps.
|
|
29
|
+
reps = item.reps.select(&:path)
|
|
30
|
+
reps.select! { |r| select_proc[r] } if select_proc
|
|
31
31
|
reps.sort_by { |r| r.name.to_s }.each do |rep|
|
|
32
32
|
xml.url do
|
|
33
33
|
xml.loc URI.escape(@config[:base_url] + rep.path)
|
|
@@ -40,12 +40,19 @@ module Nanoc::RuleDSL
|
|
|
40
40
|
@rule_memory_calculator.snapshots_defs_for(rep)
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
+
def need_preprocessing?
|
|
44
|
+
@rules_collection.preprocessors.any?
|
|
45
|
+
end
|
|
46
|
+
|
|
43
47
|
def preprocess(site)
|
|
44
48
|
ctx = new_preprocessor_context(site)
|
|
45
49
|
|
|
46
50
|
@rules_collection.preprocessors.each_value do |preprocessor|
|
|
47
51
|
ctx.instance_eval(&preprocessor)
|
|
48
52
|
end
|
|
53
|
+
|
|
54
|
+
site.data_source =
|
|
55
|
+
Nanoc::Int::InMemDataSource.new(ctx.items.unwrap, ctx.layouts.unwrap)
|
|
49
56
|
end
|
|
50
57
|
|
|
51
58
|
def postprocess(site, reps)
|
|
@@ -74,7 +74,10 @@ module Nanoc::RuleDSL
|
|
|
74
74
|
#
|
|
75
75
|
# @return [void]
|
|
76
76
|
def write(path)
|
|
77
|
-
|
|
77
|
+
@_write_snapshot_counter ||= 0
|
|
78
|
+
snapshot_name = "_#{@_write_snapshot_counter}".to_sym
|
|
79
|
+
@_write_snapshot_counter += 1
|
|
80
|
+
snapshot(snapshot_name, path: path)
|
|
78
81
|
end
|
|
79
82
|
end
|
|
80
83
|
end
|
|
@@ -55,9 +55,21 @@ module Nanoc::RuleDSL
|
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
def snapshots_defs_for(rep)
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
is_binary = rep.item.content.binary?
|
|
59
|
+
snapshot_defs = []
|
|
60
|
+
|
|
61
|
+
self[rep].each do |action|
|
|
62
|
+
case action
|
|
63
|
+
when Nanoc::Int::ProcessingActions::Snapshot
|
|
64
|
+
action.snapshot_names.each do |snapshot_name|
|
|
65
|
+
snapshot_defs << Nanoc::Int::SnapshotDef.new(snapshot_name, binary: is_binary)
|
|
66
|
+
end
|
|
67
|
+
when Nanoc::Int::ProcessingActions::Filter
|
|
68
|
+
is_binary = Nanoc::Filter.named!(action.filter_name).to_binary?
|
|
69
|
+
end
|
|
60
70
|
end
|
|
71
|
+
|
|
72
|
+
snapshot_defs
|
|
61
73
|
end
|
|
62
74
|
|
|
63
75
|
# @param [Nanoc::Int::ItemRep] rep The item representation to get the rule
|
|
@@ -81,14 +93,14 @@ module Nanoc::RuleDSL
|
|
|
81
93
|
if rule_memory.any_layouts?
|
|
82
94
|
executor.snapshot(:post)
|
|
83
95
|
end
|
|
84
|
-
unless rule_memory.snapshot_actions.any? { |sa| sa.
|
|
96
|
+
unless rule_memory.snapshot_actions.any? { |sa| sa.snapshot_names.include?(:last) }
|
|
85
97
|
executor.snapshot(:last)
|
|
86
98
|
end
|
|
87
|
-
unless rule_memory.snapshot_actions.any? { |sa| sa.
|
|
99
|
+
unless rule_memory.snapshot_actions.any? { |sa| sa.snapshot_names.include?(:pre) }
|
|
88
100
|
executor.snapshot(:pre)
|
|
89
101
|
end
|
|
90
102
|
|
|
91
|
-
|
|
103
|
+
copy_paths_from_routing_rules(rule_memory.compact_snapshots, rep: rep)
|
|
92
104
|
end
|
|
93
105
|
|
|
94
106
|
# @param [Nanoc::Int::Layout] layout
|
|
@@ -106,21 +118,29 @@ module Nanoc::RuleDSL
|
|
|
106
118
|
end
|
|
107
119
|
end
|
|
108
120
|
|
|
109
|
-
def
|
|
121
|
+
def copy_paths_from_routing_rules(mem, rep:)
|
|
110
122
|
mem.map do |action|
|
|
111
|
-
if action.is_a?(Nanoc::Int::ProcessingActions::Snapshot) && action.
|
|
112
|
-
|
|
113
|
-
if path_from_rules
|
|
114
|
-
action.copy(path: path_from_rules.to_s)
|
|
115
|
-
else
|
|
116
|
-
action
|
|
117
|
-
end
|
|
123
|
+
if action.is_a?(Nanoc::Int::ProcessingActions::Snapshot) && action.paths.empty?
|
|
124
|
+
copy_path_from_routing_rule(action, rep: rep)
|
|
118
125
|
else
|
|
119
126
|
action
|
|
120
127
|
end
|
|
121
128
|
end
|
|
122
129
|
end
|
|
123
130
|
|
|
131
|
+
def copy_path_from_routing_rule(action, rep:)
|
|
132
|
+
paths_from_rules =
|
|
133
|
+
action.snapshot_names.map do |snapshot_name|
|
|
134
|
+
basic_path_from_rules_for(rep, snapshot_name)
|
|
135
|
+
end.compact
|
|
136
|
+
|
|
137
|
+
if paths_from_rules.any?
|
|
138
|
+
action.update(paths: paths_from_rules.map(&:to_s))
|
|
139
|
+
else
|
|
140
|
+
action
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
124
144
|
# FIXME: ugly
|
|
125
145
|
def basic_path_from_rules_for(rep, snapshot_name)
|
|
126
146
|
routing_rules = @rules_collection.routing_rules_for(rep)
|
data/lib/nanoc/spec.rb
CHANGED
|
@@ -31,7 +31,7 @@ module Nanoc
|
|
|
31
31
|
# @return [Nanoc::ItemWithRepsView] A view for the newly created item
|
|
32
32
|
def create_item(content, attributes, identifier)
|
|
33
33
|
item = Nanoc::Int::Item.new(content, attributes, identifier)
|
|
34
|
-
@items
|
|
34
|
+
@items = @items.add(item)
|
|
35
35
|
Nanoc::ItemWithRepsView.new(item, view_context)
|
|
36
36
|
end
|
|
37
37
|
|
|
@@ -46,7 +46,7 @@ module Nanoc
|
|
|
46
46
|
# @return [Nanoc::ItemWithRepsView] A view for the newly created layout
|
|
47
47
|
def create_layout(content, attributes, identifier)
|
|
48
48
|
layout = Nanoc::Int::Layout.new(content, attributes, identifier)
|
|
49
|
-
@layouts
|
|
49
|
+
@layouts = @layouts.add(layout)
|
|
50
50
|
Nanoc::LayoutView.new(layout, view_context)
|
|
51
51
|
end
|
|
52
52
|
|
|
@@ -58,7 +58,7 @@ module Nanoc
|
|
|
58
58
|
# @param [Symbol] rep The rep name to create
|
|
59
59
|
def create_rep(item, path, rep = :default)
|
|
60
60
|
rep = Nanoc::Int::ItemRep.new(item.unwrap, rep)
|
|
61
|
-
rep.paths[:last] = path
|
|
61
|
+
rep.paths[:last] = [path]
|
|
62
62
|
@reps << rep
|
|
63
63
|
Nanoc::ItemRepView.new(rep, view_context)
|
|
64
64
|
end
|
|
@@ -146,7 +146,7 @@ module Nanoc
|
|
|
146
146
|
end
|
|
147
147
|
|
|
148
148
|
def snapshots_defs_for(_rep)
|
|
149
|
-
[Nanoc::Int::SnapshotDef.new(:last)]
|
|
149
|
+
[Nanoc::Int::SnapshotDef.new(:last, binary: false)]
|
|
150
150
|
end
|
|
151
151
|
end.new(self)
|
|
152
152
|
end
|
|
@@ -160,8 +160,7 @@ module Nanoc
|
|
|
160
160
|
site = Nanoc::Int::Site.new(
|
|
161
161
|
config: @config,
|
|
162
162
|
code_snippets: [],
|
|
163
|
-
|
|
164
|
-
layouts: @layouts,
|
|
163
|
+
data_source: Nanoc::Int::InMemDataSource.new(@items, @layouts),
|
|
165
164
|
)
|
|
166
165
|
site.compiler = new_compiler_for(site)
|
|
167
166
|
site
|
data/lib/nanoc/version.rb
CHANGED
|
@@ -279,10 +279,13 @@ describe Nanoc::Int::Checksummer do
|
|
|
279
279
|
let(:config) { Nanoc::Int::Configuration.new(hash: { 'foo' => 'bar' }) }
|
|
280
280
|
|
|
281
281
|
let(:wrapped) do
|
|
282
|
-
Nanoc::Int::IdentifiableCollection.new(
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
282
|
+
Nanoc::Int::IdentifiableCollection.new(
|
|
283
|
+
config,
|
|
284
|
+
[
|
|
285
|
+
Nanoc::Int::Item.new('foo', {}, '/foo.md'),
|
|
286
|
+
Nanoc::Int::Item.new('bar', {}, '/foo.md'),
|
|
287
|
+
],
|
|
288
|
+
)
|
|
286
289
|
end
|
|
287
290
|
|
|
288
291
|
it { is_expected.to eql('Nanoc::ItemCollectionWithRepsView<Nanoc::Int::IdentifiableCollection<Nanoc::Int::Item<content=Nanoc::Int::TextualContent<String<foo>>,attributes=Hash<>,identifier=Nanoc::Identifier<String</foo.md>>>,Nanoc::Int::Item<content=Nanoc::Int::TextualContent<String<bar>>,attributes=Hash<>,identifier=Nanoc::Identifier<String</foo.md>>>,>>') }
|
|
@@ -294,10 +297,13 @@ describe Nanoc::Int::Checksummer do
|
|
|
294
297
|
let(:config) { Nanoc::Int::Configuration.new(hash: { 'foo' => 'bar' }) }
|
|
295
298
|
|
|
296
299
|
let(:wrapped) do
|
|
297
|
-
Nanoc::Int::IdentifiableCollection.new(
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
300
|
+
Nanoc::Int::IdentifiableCollection.new(
|
|
301
|
+
config,
|
|
302
|
+
[
|
|
303
|
+
Nanoc::Int::Item.new('foo', {}, '/foo.md'),
|
|
304
|
+
Nanoc::Int::Item.new('bar', {}, '/foo.md'),
|
|
305
|
+
],
|
|
306
|
+
)
|
|
301
307
|
end
|
|
302
308
|
|
|
303
309
|
it { is_expected.to eql('Nanoc::ItemCollectionWithoutRepsView<Nanoc::Int::IdentifiableCollection<Nanoc::Int::Item<content=Nanoc::Int::TextualContent<String<foo>>,attributes=Hash<>,identifier=Nanoc::Identifier<String</foo.md>>>,Nanoc::Int::Item<content=Nanoc::Int::TextualContent<String<bar>>,attributes=Hash<>,identifier=Nanoc::Identifier<String</foo.md>>>,>>') }
|
|
@@ -310,7 +316,11 @@ describe Nanoc::Int::Checksummer do
|
|
|
310
316
|
let(:item) { Nanoc::Int::Item.new('stuff', {}, '/stuff.md') }
|
|
311
317
|
|
|
312
318
|
let(:site) do
|
|
313
|
-
Nanoc::Int::Site.new(
|
|
319
|
+
Nanoc::Int::Site.new(
|
|
320
|
+
config: config,
|
|
321
|
+
code_snippets: code_snippets,
|
|
322
|
+
data_source: Nanoc::Int::InMemDataSource.new(items, layouts),
|
|
323
|
+
)
|
|
314
324
|
end
|
|
315
325
|
|
|
316
326
|
let(:config) { Nanoc::Int::Configuration.new(hash: { 'foo' => 'bar' }) }
|
|
@@ -35,8 +35,7 @@ describe Nanoc::Int::Compiler do
|
|
|
35
35
|
Nanoc::Int::Site.new(
|
|
36
36
|
config: config,
|
|
37
37
|
code_snippets: code_snippets,
|
|
38
|
-
|
|
39
|
-
layouts: layouts,
|
|
38
|
+
data_source: Nanoc::Int::InMemDataSource.new(items, layouts),
|
|
40
39
|
)
|
|
41
40
|
end
|
|
42
41
|
|
|
@@ -45,17 +44,14 @@ describe Nanoc::Int::Compiler do
|
|
|
45
44
|
let(:code_snippets) { [] }
|
|
46
45
|
|
|
47
46
|
let(:items) do
|
|
48
|
-
Nanoc::Int::IdentifiableCollection.new(config
|
|
49
|
-
col << item
|
|
50
|
-
col << other_item
|
|
51
|
-
end
|
|
47
|
+
Nanoc::Int::IdentifiableCollection.new(config, [item, other_item])
|
|
52
48
|
end
|
|
53
49
|
|
|
54
50
|
let(:memory) do
|
|
55
51
|
actions =
|
|
56
52
|
[
|
|
57
53
|
Nanoc::Int::ProcessingActions::Filter.new(:erb, {}),
|
|
58
|
-
Nanoc::Int::ProcessingActions::Snapshot.new(:last,
|
|
54
|
+
Nanoc::Int::ProcessingActions::Snapshot.new([:last], []),
|
|
59
55
|
]
|
|
60
56
|
|
|
61
57
|
Nanoc::Int::RuleMemory.new(nil, actions: actions)
|
|
@@ -66,7 +62,7 @@ describe Nanoc::Int::Compiler do
|
|
|
66
62
|
reps << other_rep
|
|
67
63
|
|
|
68
64
|
reps.each do |rep|
|
|
69
|
-
rep.snapshot_defs << Nanoc::Int::SnapshotDef.new(:last)
|
|
65
|
+
rep.snapshot_defs << Nanoc::Int::SnapshotDef.new(:last, binary: false)
|
|
70
66
|
end
|
|
71
67
|
|
|
72
68
|
allow(outdatedness_checker).to receive(:outdated?).with(rep).and_return(true)
|
|
@@ -203,4 +203,24 @@ shared_examples 'a document' do
|
|
|
203
203
|
end
|
|
204
204
|
end
|
|
205
205
|
end
|
|
206
|
+
|
|
207
|
+
describe '#with_identifier_prefix' do
|
|
208
|
+
let(:document) { described_class.new('kontent', { at: 'ribut' }, '/donkey.md') }
|
|
209
|
+
|
|
210
|
+
subject { document.with_identifier_prefix('/animals') }
|
|
211
|
+
|
|
212
|
+
it 'does not mutate the original' do
|
|
213
|
+
document.freeze
|
|
214
|
+
subject
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
it 'returns a new document with a prefixed identifier' do
|
|
218
|
+
expect(subject.identifier).to eq('/animals/donkey.md')
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
it 'does not change other data' do
|
|
222
|
+
expect(subject.content).to be_some_textual_content('kontent')
|
|
223
|
+
expect(subject.attributes).to eq(at: 'ribut')
|
|
224
|
+
end
|
|
225
|
+
end
|
|
206
226
|
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
describe Nanoc::Int::IdentifiableCollection do
|
|
2
|
+
subject(:identifiable_collection) { described_class.new(config, objects) }
|
|
3
|
+
|
|
4
|
+
let(:config) { Nanoc::Int::Configuration.new }
|
|
5
|
+
let(:objects) { [] }
|
|
6
|
+
|
|
7
|
+
describe '#reject' do
|
|
8
|
+
subject { identifiable_collection.reject { |_| false } }
|
|
9
|
+
|
|
10
|
+
it { is_expected.to be_a(described_class) }
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -8,7 +8,7 @@ describe Nanoc::Int::ItemRep do
|
|
|
8
8
|
let(:snapshot_name) { raise 'override me' }
|
|
9
9
|
|
|
10
10
|
before do
|
|
11
|
-
rep.snapshot_defs = [Nanoc::Int::SnapshotDef.new(:donkey)]
|
|
11
|
+
rep.snapshot_defs = [Nanoc::Int::SnapshotDef.new(:donkey, binary: false)]
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
context 'snapshot does not exist' do
|
|
@@ -1,32 +1,38 @@
|
|
|
1
1
|
describe Nanoc::Int::ProcessingActions::Snapshot do
|
|
2
|
-
let(:action) { described_class.new(:before_layout, '/foo.md') }
|
|
2
|
+
let(:action) { described_class.new([:before_layout], ['/foo.md']) }
|
|
3
3
|
|
|
4
4
|
describe '#serialize' do
|
|
5
5
|
subject { action.serialize }
|
|
6
|
-
it { is_expected.to eql([:snapshot, :before_layout, true, '/foo.md']) }
|
|
6
|
+
it { is_expected.to eql([:snapshot, [:before_layout], true, ['/foo.md']]) }
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
describe '#to_s' do
|
|
10
10
|
subject { action.to_s }
|
|
11
|
-
it { is_expected.to eql('snapshot :before_layout,
|
|
11
|
+
it { is_expected.to eql('snapshot [:before_layout], paths: ["/foo.md"]') }
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
describe '#inspect' do
|
|
15
15
|
subject { action.inspect }
|
|
16
|
-
it { is_expected.to eql('<Nanoc::Int::ProcessingActions::Snapshot :before_layout, true, "/foo.md">') }
|
|
16
|
+
it { is_expected.to eql('<Nanoc::Int::ProcessingActions::Snapshot [:before_layout], true, ["/foo.md"]>') }
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
describe '#
|
|
20
|
-
context '
|
|
21
|
-
subject { action.
|
|
22
|
-
its(:
|
|
23
|
-
its(:
|
|
19
|
+
describe '#update' do
|
|
20
|
+
context 'with nothing' do
|
|
21
|
+
subject { action.update }
|
|
22
|
+
its(:snapshot_names) { is_expected.to eql([:before_layout]) }
|
|
23
|
+
its(:paths) { is_expected.to eql(['/foo.md']) }
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
context 'with
|
|
27
|
-
subject { action.
|
|
28
|
-
its(:
|
|
29
|
-
its(:
|
|
26
|
+
context 'with snapshot name' do
|
|
27
|
+
subject { action.update(snapshot_names: [:zebra]) }
|
|
28
|
+
its(:snapshot_names) { is_expected.to eql([:before_layout, :zebra]) }
|
|
29
|
+
its(:paths) { is_expected.to eql(['/foo.md']) }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
context 'with paths' do
|
|
33
|
+
subject { action.update(paths: ['/donkey.md', '/giraffe.md']) }
|
|
34
|
+
its(:snapshot_names) { is_expected.to eql([:before_layout]) }
|
|
35
|
+
its(:paths) { is_expected.to eql(['/foo.md', '/donkey.md', '/giraffe.md']) }
|
|
30
36
|
end
|
|
31
37
|
end
|
|
32
38
|
end
|