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.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/Appraisals +1 -1
  3. data/Gemfile.lock +22 -22
  4. data/NEWS.md +12 -0
  5. data/lib/nanoc/base/entities/document.rb +7 -0
  6. data/lib/nanoc/base/entities/identifiable_collection.rb +12 -9
  7. data/lib/nanoc/base/entities/item_rep.rb +24 -28
  8. data/lib/nanoc/base/entities/processing_actions/snapshot.rb +15 -11
  9. data/lib/nanoc/base/entities/rule_memory.rb +15 -5
  10. data/lib/nanoc/base/entities/site.rb +15 -10
  11. data/lib/nanoc/base/entities/snapshot_def.rb +8 -2
  12. data/lib/nanoc/base/repos.rb +3 -0
  13. data/lib/nanoc/base/repos/aggregate_data_source.rb +20 -0
  14. data/lib/nanoc/base/repos/in_mem_data_source.rb +13 -0
  15. data/lib/nanoc/base/repos/prefixed_data_source.rb +19 -0
  16. data/lib/nanoc/base/repos/site_loader.rb +8 -16
  17. data/lib/nanoc/base/repos/snapshot_repo.rb +10 -5
  18. data/lib/nanoc/base/services/action_provider.rb +12 -0
  19. data/lib/nanoc/base/services/compiler/phases/recalculate.rb +5 -2
  20. data/lib/nanoc/base/services/compiler/phases/write.rb +1 -3
  21. data/lib/nanoc/base/services/compiler/stages/preprocess.rb +6 -3
  22. data/lib/nanoc/base/services/executor.rb +2 -4
  23. data/lib/nanoc/base/services/filter.rb +7 -12
  24. data/lib/nanoc/base/services/item_rep_router.rb +40 -16
  25. data/lib/nanoc/base/services/item_rep_writer.rb +19 -3
  26. data/lib/nanoc/base/services/pruner.rb +1 -1
  27. data/lib/nanoc/base/views/item_rep_view.rb +12 -3
  28. data/lib/nanoc/base/views/mutable_identifiable_collection_view.rb +1 -1
  29. data/lib/nanoc/base/views/mutable_item_collection_view.rb +1 -1
  30. data/lib/nanoc/base/views/mutable_layout_collection_view.rb +1 -1
  31. data/lib/nanoc/checking/checks/html.rb +1 -1
  32. data/lib/nanoc/checking/checks/stale.rb +2 -1
  33. data/lib/nanoc/checking/checks/w3c_validator.rb +1 -0
  34. data/lib/nanoc/cli/commands/compile.rb +3 -2
  35. data/lib/nanoc/cli/commands/show-data.rb +4 -2
  36. data/lib/nanoc/data_sources/filesystem.rb +1 -1
  37. data/lib/nanoc/helpers/filtering.rb +1 -2
  38. data/lib/nanoc/helpers/rendering.rb +1 -2
  39. data/lib/nanoc/helpers/xml_sitemap.rb +2 -2
  40. data/lib/nanoc/rule_dsl/action_provider.rb +7 -0
  41. data/lib/nanoc/rule_dsl/rule_context.rb +4 -1
  42. data/lib/nanoc/rule_dsl/rule_memory_calculator.rb +33 -13
  43. data/lib/nanoc/spec.rb +5 -6
  44. data/lib/nanoc/version.rb +1 -1
  45. data/spec/nanoc/base/checksummer_spec.rb +19 -9
  46. data/spec/nanoc/base/compiler_spec.rb +4 -8
  47. data/spec/nanoc/base/entities/document_spec.rb +20 -0
  48. data/spec/nanoc/base/entities/identifiable_collection_spec.rb +12 -0
  49. data/spec/nanoc/base/entities/item_rep_spec.rb +1 -1
  50. data/spec/nanoc/base/entities/processing_actions/snapshot_spec.rb +19 -13
  51. data/spec/nanoc/base/entities/rule_memory_spec.rb +39 -3
  52. data/spec/nanoc/base/entities/site_spec.rb +15 -10
  53. data/spec/nanoc/base/filter_spec.rb +28 -1
  54. data/spec/nanoc/base/item_rep_writer_spec.rb +4 -2
  55. data/spec/nanoc/base/repos/outdatedness_store_spec.rb +1 -2
  56. data/spec/nanoc/base/repos/snapshot_repo_spec.rb +4 -4
  57. data/spec/nanoc/base/repos/store_spec.rb +5 -1
  58. data/spec/nanoc/base/services/compiler/stages/compile_reps_spec.rb +9 -10
  59. data/spec/nanoc/base/services/executor_spec.rb +2 -2
  60. data/spec/nanoc/base/services/item_rep_router_spec.rb +83 -39
  61. data/spec/nanoc/base/services/outdatedness_checker_spec.rb +1 -2
  62. data/spec/nanoc/base/services/outdatedness_rules_spec.rb +2 -3
  63. data/spec/nanoc/base/services/pruner_spec.rb +2 -2
  64. data/spec/nanoc/base/views/identifiable_collection_view_spec.rb +46 -28
  65. data/spec/nanoc/base/views/item_rep_view_spec.rb +72 -15
  66. data/spec/nanoc/base/views/item_view_spec.rb +20 -14
  67. data/spec/nanoc/base/views/mutable_identifiable_collection_view_spec.rb +10 -4
  68. data/spec/nanoc/base/views/mutable_item_collection_view_spec.rb +10 -5
  69. data/spec/nanoc/base/views/mutable_layout_collection_view_spec.rb +10 -5
  70. data/spec/nanoc/cli/commands/compile/file_action_printer_spec.rb +1 -1
  71. data/spec/nanoc/cli/commands/compile/timing_recorder_spec.rb +1 -1
  72. data/spec/nanoc/cli/commands/show_data_spec.rb +9 -7
  73. data/spec/nanoc/cli/commands/show_rules_spec.rb +16 -10
  74. data/spec/nanoc/regressions/gh_1037a_spec.rb +29 -0
  75. data/spec/nanoc/regressions/gh_1037b_spec.rb +18 -0
  76. data/spec/nanoc/regressions/gh_1082a_spec.rb +18 -0
  77. data/spec/nanoc/regressions/gh_1082b_spec.rb +20 -0
  78. data/spec/nanoc/regressions/gh_1082c_spec.rb +19 -0
  79. data/spec/nanoc/regressions/gh_1082d_spec.rb +17 -0
  80. data/spec/nanoc/regressions/gh_1093_spec.rb +49 -0
  81. data/spec/nanoc/regressions/gh_1097_spec.rb +21 -0
  82. data/spec/nanoc/regressions/gh_1100_spec.rb +20 -0
  83. data/spec/nanoc/regressions/gh_1102_spec.rb +26 -0
  84. data/spec/nanoc/regressions/gh_776_spec.rb +1 -5
  85. data/spec/nanoc/rule_dsl/recording_executor_spec.rb +14 -14
  86. data/spec/nanoc/rule_dsl/rule_context_spec.rb +22 -13
  87. data/spec/nanoc/rule_dsl/rule_memory_calculator_spec.rb +38 -54
  88. data/spec/spec_helper.rb +1 -1
  89. data/test/base/test_compiler.rb +3 -4
  90. data/test/base/test_item_array.rb +4 -15
  91. data/test/checking/checks/test_html.rb +4 -3
  92. data/test/cli/commands/test_compile.rb +2 -2
  93. data/test/filters/test_relativize_paths.rb +28 -28
  94. data/test/fixtures/vcr_cassettes/html_run_error.yml +25 -76
  95. data/test/helpers/test_xml_sitemap.rb +22 -19
  96. metadata +16 -2
@@ -21,9 +21,8 @@ describe Nanoc::Int::OutdatednessChecker do
21
21
  let(:site) do
22
22
  Nanoc::Int::Site.new(
23
23
  config: config,
24
- items: [],
25
- layouts: [],
26
24
  code_snippets: [],
25
+ data_source: Nanoc::Int::InMemDataSource.new([], []),
27
26
  )
28
27
  end
29
28
 
@@ -25,9 +25,8 @@ describe Nanoc::Int::OutdatednessRules do
25
25
  let(:site) do
26
26
  Nanoc::Int::Site.new(
27
27
  config: config,
28
- items: [],
29
- layouts: [],
30
28
  code_snippets: code_snippets,
29
+ data_source: Nanoc::Int::InMemDataSource.new([], []),
31
30
  )
32
31
  end
33
32
 
@@ -105,7 +104,7 @@ describe Nanoc::Int::OutdatednessRules do
105
104
  context 'path' do
106
105
  let(:path) { 'foo.txt' }
107
106
 
108
- before { item_rep.raw_paths = { last: path } }
107
+ before { item_rep.raw_paths = { last: [path] } }
109
108
 
110
109
  context 'not written' do
111
110
  it { is_expected.to be }
@@ -8,11 +8,11 @@ describe Nanoc::Pruner do
8
8
  let(:reps) do
9
9
  Nanoc::Int::ItemRepRepo.new.tap do |reps|
10
10
  reps << Nanoc::Int::ItemRep.new(item, :default).tap do |rep|
11
- rep.raw_paths = { last: 'output/asdf.html' }
11
+ rep.raw_paths = { last: ['output/asdf.html'] }
12
12
  end
13
13
 
14
14
  reps << Nanoc::Int::ItemRep.new(item, :text).tap do |rep|
15
- rep.raw_paths = { last: 'output/asdf.txt' }
15
+ rep.raw_paths = { last: ['output/asdf.txt'] }
16
16
  end
17
17
  end
18
18
  end
@@ -10,10 +10,13 @@ shared_examples 'an identifiable collection' do
10
10
 
11
11
  describe '#frozen?' do
12
12
  let(:wrapped) do
13
- Nanoc::Int::IdentifiableCollection.new(config).tap do |arr|
14
- arr << double(:identifiable, identifier: Nanoc::Identifier.new('/foo'))
15
- arr << double(:identifiable, identifier: Nanoc::Identifier.new('/bar'))
16
- end
13
+ Nanoc::Int::IdentifiableCollection.new(
14
+ config,
15
+ [
16
+ double(:identifiable, identifier: Nanoc::Identifier.new('/foo')),
17
+ double(:identifiable, identifier: Nanoc::Identifier.new('/bar')),
18
+ ],
19
+ )
17
20
  end
18
21
 
19
22
  subject { view.frozen? }
@@ -34,11 +37,14 @@ shared_examples 'an identifiable collection' do
34
37
 
35
38
  describe '#unwrap' do
36
39
  let(:wrapped) do
37
- Nanoc::Int::IdentifiableCollection.new(config).tap do |arr|
38
- arr << double(:identifiable, identifier: Nanoc::Identifier.new('/foo'))
39
- arr << double(:identifiable, identifier: Nanoc::Identifier.new('/bar'))
40
- arr << double(:identifiable, identifier: Nanoc::Identifier.new('/baz'))
41
- end
40
+ Nanoc::Int::IdentifiableCollection.new(
41
+ config,
42
+ [
43
+ double(:identifiable, identifier: Nanoc::Identifier.new('/foo')),
44
+ double(:identifiable, identifier: Nanoc::Identifier.new('/bar')),
45
+ double(:identifiable, identifier: Nanoc::Identifier.new('/baz')),
46
+ ],
47
+ )
42
48
  end
43
49
 
44
50
  subject { view.unwrap }
@@ -48,11 +54,14 @@ shared_examples 'an identifiable collection' do
48
54
 
49
55
  describe '#each' do
50
56
  let(:wrapped) do
51
- Nanoc::Int::IdentifiableCollection.new(config).tap do |arr|
52
- arr << double(:identifiable, identifier: Nanoc::Identifier.new('/foo'))
53
- arr << double(:identifiable, identifier: Nanoc::Identifier.new('/bar'))
54
- arr << double(:identifiable, identifier: Nanoc::Identifier.new('/baz'))
55
- end
57
+ Nanoc::Int::IdentifiableCollection.new(
58
+ config,
59
+ [
60
+ double(:identifiable, identifier: Nanoc::Identifier.new('/foo')),
61
+ double(:identifiable, identifier: Nanoc::Identifier.new('/bar')),
62
+ double(:identifiable, identifier: Nanoc::Identifier.new('/baz')),
63
+ ],
64
+ )
56
65
  end
57
66
 
58
67
  it 'returns self' do
@@ -66,11 +75,14 @@ shared_examples 'an identifiable collection' do
66
75
 
67
76
  describe '#size' do
68
77
  let(:wrapped) do
69
- Nanoc::Int::IdentifiableCollection.new(config).tap do |arr|
70
- arr << double(:identifiable, identifier: Nanoc::Identifier.new('/foo'))
71
- arr << double(:identifiable, identifier: Nanoc::Identifier.new('/bar'))
72
- arr << double(:identifiable, identifier: Nanoc::Identifier.new('/baz'))
73
- end
78
+ Nanoc::Int::IdentifiableCollection.new(
79
+ config,
80
+ [
81
+ double(:identifiable, identifier: Nanoc::Identifier.new('/foo')),
82
+ double(:identifiable, identifier: Nanoc::Identifier.new('/bar')),
83
+ double(:identifiable, identifier: Nanoc::Identifier.new('/baz')),
84
+ ],
85
+ )
74
86
  end
75
87
 
76
88
  subject { view.size }
@@ -88,10 +100,13 @@ shared_examples 'an identifiable collection' do
88
100
  end
89
101
 
90
102
  let(:wrapped) do
91
- Nanoc::Int::IdentifiableCollection.new(config).tap do |arr|
92
- arr << page_object
93
- arr << home_object
94
- end
103
+ Nanoc::Int::IdentifiableCollection.new(
104
+ config,
105
+ [
106
+ page_object,
107
+ home_object,
108
+ ],
109
+ )
95
110
  end
96
111
 
97
112
  subject { view[arg] }
@@ -154,11 +169,14 @@ shared_examples 'an identifiable collection' do
154
169
 
155
170
  describe '#find_all' do
156
171
  let(:wrapped) do
157
- Nanoc::Int::IdentifiableCollection.new(config).tap do |arr|
158
- arr << double(:identifiable, identifier: Nanoc::Identifier.new('/about.css'))
159
- arr << double(:identifiable, identifier: Nanoc::Identifier.new('/about.md'))
160
- arr << double(:identifiable, identifier: Nanoc::Identifier.new('/style.css'))
161
- end
172
+ Nanoc::Int::IdentifiableCollection.new(
173
+ config,
174
+ [
175
+ double(:identifiable, identifier: Nanoc::Identifier.new('/about.css')),
176
+ double(:identifiable, identifier: Nanoc::Identifier.new('/about.md')),
177
+ double(:identifiable, identifier: Nanoc::Identifier.new('/style.css')),
178
+ ],
179
+ )
162
180
  end
163
181
 
164
182
  subject { view.find_all(arg) }
@@ -146,7 +146,7 @@ describe Nanoc::ItemRepView do
146
146
  Nanoc::Int::ItemRep.new(item, :default).tap do |ir|
147
147
  ir.compiled = true
148
148
  ir.snapshot_defs = [
149
- Nanoc::Int::SnapshotDef.new(:last),
149
+ Nanoc::Int::SnapshotDef.new(:last, binary: false),
150
150
  ]
151
151
  end
152
152
  end
@@ -213,7 +213,7 @@ describe Nanoc::ItemRepView do
213
213
  Nanoc::Int::ItemRep.new(item, :default).tap do |ir|
214
214
  ir.compiled = true
215
215
  ir.snapshot_defs = [
216
- Nanoc::Int::SnapshotDef.new(:last),
216
+ Nanoc::Int::SnapshotDef.new(:last, binary: false),
217
217
  ]
218
218
  end
219
219
  end
@@ -255,7 +255,7 @@ describe Nanoc::ItemRepView do
255
255
  let(:rep) do
256
256
  Nanoc::Int::ItemRep.new(item, :default).tap do |ir|
257
257
  ir.paths = {
258
- last: '/about/',
258
+ last: ['/about/'],
259
259
  }
260
260
  end
261
261
  end
@@ -283,14 +283,14 @@ describe Nanoc::ItemRepView do
283
283
  end
284
284
 
285
285
  describe '#raw_path' do
286
- subject { view.raw_path }
286
+ subject { Fiber.new { view.raw_path }.resume }
287
287
 
288
288
  let(:view) { described_class.new(rep, view_context) }
289
289
 
290
290
  let(:rep) do
291
291
  Nanoc::Int::ItemRep.new(item, :default).tap do |ir|
292
292
  ir.raw_paths = {
293
- last: 'output/about/index.html',
293
+ last: ['output/about/index.html'],
294
294
  }
295
295
  end
296
296
  end
@@ -299,22 +299,79 @@ describe Nanoc::ItemRepView do
299
299
  Nanoc::Int::Item.new('content', {}, '/asdf.md')
300
300
  end
301
301
 
302
- it 'creates a dependency' do
303
- expect { subject }.to change { dependency_store.objects_causing_outdatedness_of(base_item) }.from([]).to([item])
302
+ context 'rep is not compiled' do
303
+ it 'creates a dependency' do
304
+ expect { subject }.to change { dependency_store.objects_causing_outdatedness_of(base_item) }.from([]).to([item])
305
+ end
306
+
307
+ it 'creates a dependency with the right props' do
308
+ subject
309
+ dep = dependency_store.dependencies_causing_outdatedness_of(base_item)[0]
310
+
311
+ expect(dep.props.compiled_content?).to eq(true)
312
+
313
+ expect(dep.props.raw_content?).to eq(false)
314
+ expect(dep.props.attributes?).to eq(false)
315
+ expect(dep.props.path?).to eq(false)
316
+ end
317
+
318
+ it { should be_a(Nanoc::Int::Errors::UnmetDependency) }
304
319
  end
305
320
 
306
- it 'creates a dependency with the right props' do
307
- subject
308
- dep = dependency_store.dependencies_causing_outdatedness_of(base_item)[0]
321
+ context 'rep is compiled' do
322
+ before { rep.compiled = true }
309
323
 
310
- expect(dep.props.path?).to eq(true)
324
+ it 'creates a dependency' do
325
+ expect { subject }.to change { dependency_store.objects_causing_outdatedness_of(base_item) }.from([]).to([item])
326
+ end
311
327
 
312
- expect(dep.props.raw_content?).to eq(false)
313
- expect(dep.props.attributes?).to eq(false)
314
- expect(dep.props.compiled_content?).to eq(false)
328
+ it 'creates a dependency with the right props' do
329
+ subject
330
+ dep = dependency_store.dependencies_causing_outdatedness_of(base_item)[0]
331
+
332
+ expect(dep.props.compiled_content?).to eq(true)
333
+
334
+ expect(dep.props.raw_content?).to eq(false)
335
+ expect(dep.props.attributes?).to eq(false)
336
+ expect(dep.props.path?).to eq(false)
337
+ end
338
+
339
+ it { should eq('output/about/index.html') }
315
340
  end
341
+ end
342
+
343
+ describe '#binary?' do
344
+ let(:item_rep) { Nanoc::Int::ItemRep.new(item, :jacques) }
345
+ let(:item) { Nanoc::Int::Item.new('asdf', {}, '/foo/') }
346
+ let(:view) { described_class.new(item_rep, view_context) }
347
+
348
+ subject { view.binary? }
316
349
 
317
- it { should eq('output/about/index.html') }
350
+ context 'no :last snapshot' do
351
+ before do
352
+ item_rep.snapshot_defs = []
353
+ end
354
+
355
+ it 'raises' do
356
+ expect { subject }.to raise_error(Nanoc::Int::Errors::NoSuchSnapshot)
357
+ end
358
+ end
359
+
360
+ context ':last snapshot is textual' do
361
+ before do
362
+ item_rep.snapshot_defs = [Nanoc::Int::SnapshotDef.new(:last, binary: false)]
363
+ end
364
+
365
+ it { is_expected.not_to be }
366
+ end
367
+
368
+ context ':last snapshot is binary' do
369
+ before do
370
+ item_rep.snapshot_defs = [Nanoc::Int::SnapshotDef.new(:last, binary: true)]
371
+ end
372
+
373
+ it { is_expected.to be }
374
+ end
318
375
  end
319
376
 
320
377
  describe '#item' do
@@ -34,10 +34,13 @@ describe Nanoc::ItemWithRepsView do
34
34
  let(:view) { described_class.new(item, view_context) }
35
35
 
36
36
  let(:items) do
37
- Nanoc::Int::IdentifiableCollection.new({}).tap do |arr|
38
- arr << item
39
- arr << parent_item if parent_item
40
- end
37
+ Nanoc::Int::IdentifiableCollection.new(
38
+ {},
39
+ [
40
+ item,
41
+ parent_item,
42
+ ].compact,
43
+ )
41
44
  end
42
45
 
43
46
  subject { view.parent }
@@ -130,10 +133,13 @@ describe Nanoc::ItemWithRepsView do
130
133
  let(:view) { described_class.new(item, view_context) }
131
134
 
132
135
  let(:items) do
133
- Nanoc::Int::IdentifiableCollection.new({}).tap do |arr|
134
- arr << item
135
- children.each { |child| arr << child }
136
- end
136
+ Nanoc::Int::IdentifiableCollection.new(
137
+ {},
138
+ [
139
+ item,
140
+ *children,
141
+ ],
142
+ )
137
143
  end
138
144
 
139
145
  subject { view.children }
@@ -208,10 +214,10 @@ describe Nanoc::ItemWithRepsView do
208
214
  Nanoc::Int::ItemRep.new(item, :default).tap do |ir|
209
215
  ir.compiled = true
210
216
  ir.snapshot_defs = [
211
- Nanoc::Int::SnapshotDef.new(:last),
212
- Nanoc::Int::SnapshotDef.new(:pre),
213
- Nanoc::Int::SnapshotDef.new(:post),
214
- Nanoc::Int::SnapshotDef.new(:specific),
217
+ Nanoc::Int::SnapshotDef.new(:last, binary: false),
218
+ Nanoc::Int::SnapshotDef.new(:pre, binary: false),
219
+ Nanoc::Int::SnapshotDef.new(:post, binary: false),
220
+ Nanoc::Int::SnapshotDef.new(:specific, binary: false),
215
221
  ]
216
222
  end
217
223
  end
@@ -286,8 +292,8 @@ describe Nanoc::ItemWithRepsView do
286
292
  let(:rep) do
287
293
  Nanoc::Int::ItemRep.new(item, :default).tap do |ir|
288
294
  ir.paths = {
289
- last: '/about/',
290
- specific: '/about.txt',
295
+ last: ['/about/'],
296
+ specific: ['/about.txt'],
291
297
  }
292
298
  end
293
299
  end
@@ -9,14 +9,20 @@ shared_examples 'a mutable identifiable collection' do
9
9
 
10
10
  describe '#delete_if' do
11
11
  let(:wrapped) do
12
- Nanoc::Int::IdentifiableCollection.new(config).tap do |coll|
13
- coll << double(:identifiable, identifier: Nanoc::Identifier.new('/asdf/'))
14
- end
12
+ Nanoc::Int::IdentifiableCollection.new(
13
+ config,
14
+ [double(:identifiable, identifier: Nanoc::Identifier.new('/asdf/'))],
15
+ )
15
16
  end
16
17
 
17
18
  it 'deletes matching' do
18
19
  view.delete_if { |i| i.identifier == '/asdf/' }
19
- expect(wrapped).to be_empty
20
+ expect(view.unwrap).to be_empty
21
+ end
22
+
23
+ it 'does not mutate' do
24
+ view.delete_if { |i| i.identifier == '/asdf/' }
25
+ expect(wrapped).not_to be_empty
20
26
  end
21
27
 
22
28
  it 'deletes no non-matching' do
@@ -13,9 +13,7 @@ describe Nanoc::MutableItemCollectionView do
13
13
  end
14
14
 
15
15
  let(:wrapped) do
16
- Nanoc::Int::IdentifiableCollection.new(config).tap do |coll|
17
- coll << item
18
- end
16
+ Nanoc::Int::IdentifiableCollection.new(config, [item])
19
17
  end
20
18
 
21
19
  let(:view) { described_class.new(wrapped, nil) }
@@ -23,8 +21,15 @@ describe Nanoc::MutableItemCollectionView do
23
21
  it 'creates an object' do
24
22
  view.create('new content', { title: 'New Page' }, '/new/')
25
23
 
26
- expect(wrapped.size).to eq(2)
27
- expect(wrapped['/new/'].content.string).to eq('new content')
24
+ expect(view.unwrap.size).to eq(2)
25
+ expect(view.unwrap['/new/'].content.string).to eq('new content')
26
+ end
27
+
28
+ it 'does not update wrapped' do
29
+ view.create('new content', { title: 'New Page' }, '/new/')
30
+
31
+ expect(wrapped.size).to eq(1)
32
+ expect(wrapped['/new']).to be_nil
28
33
  end
29
34
 
30
35
  it 'returns self' do
@@ -13,9 +13,7 @@ describe Nanoc::MutableLayoutCollectionView do
13
13
  end
14
14
 
15
15
  let(:wrapped) do
16
- Nanoc::Int::IdentifiableCollection.new(config).tap do |coll|
17
- coll << layout
18
- end
16
+ Nanoc::Int::IdentifiableCollection.new(config, [layout])
19
17
  end
20
18
 
21
19
  let(:view) { described_class.new(wrapped, nil) }
@@ -23,8 +21,15 @@ describe Nanoc::MutableLayoutCollectionView do
23
21
  it 'creates an object' do
24
22
  view.create('new content', { title: 'New Page' }, '/new/')
25
23
 
26
- expect(wrapped.size).to eq(2)
27
- expect(wrapped['/new/'].content.string).to eq('new content')
24
+ expect(view.unwrap.size).to eq(2)
25
+ expect(view.unwrap['/new/'].content.string).to eq('new content')
26
+ end
27
+
28
+ it 'does not update wrapped' do
29
+ view.create('new content', { title: 'New Page' }, '/new/')
30
+
31
+ expect(wrapped.size).to eq(1)
32
+ expect(wrapped['/new']).to be_nil
28
33
  end
29
34
 
30
35
  it 'returns self' do
@@ -14,7 +14,7 @@ describe Nanoc::CLI::Commands::Compile::FileActionPrinter, stdio: true do
14
14
 
15
15
  let(:rep) do
16
16
  Nanoc::Int::ItemRep.new(item, :default).tap do |rep|
17
- rep.raw_paths = { default: '/hi.html' }
17
+ rep.raw_paths = { default: ['/hi.html'] }
18
18
  end
19
19
  end
20
20