nanoc 4.7.13 → 4.7.14

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.
@@ -139,12 +139,12 @@ describe Nanoc::Int::IdentifiableCollection do
139
139
  end
140
140
 
141
141
  describe Nanoc::Int::ItemCollection do
142
- let(:expected_reference) { :items }
142
+ let(:expected_reference) { 'items' }
143
143
  it_behaves_like 'a generic identifiable collection'
144
144
  end
145
145
 
146
146
  describe Nanoc::Int::LayoutCollection do
147
- let(:expected_reference) { :layouts }
147
+ let(:expected_reference) { 'layouts' }
148
148
  it_behaves_like 'a generic identifiable collection'
149
149
  end
150
150
  end
@@ -7,7 +7,7 @@ describe Nanoc::Int::Item do
7
7
  let(:item) { described_class.new('hi', {}, '/foo.md') }
8
8
 
9
9
  it 'has the proper reference' do
10
- expect(item.reference).to eql([:item, '/foo.md'])
10
+ expect(item.reference).to eql('item:/foo.md')
11
11
  end
12
12
  end
13
13
  end
@@ -7,7 +7,7 @@ describe Nanoc::Int::Layout do
7
7
  let(:layout) { described_class.new('hi', {}, '/foo.md') }
8
8
 
9
9
  it 'has the proper reference' do
10
- expect(layout.reference).to eql([:layout, '/foo.md'])
10
+ expect(layout.reference).to eql('layout:/foo.md')
11
11
  end
12
12
  end
13
13
  end
@@ -1,16 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  describe Nanoc::Int::Errors::DependencyCycle do
4
- subject(:error) { described_class.new(graph) }
4
+ subject(:error) { described_class.new(stack) }
5
5
 
6
- let(:graph) do
7
- Nanoc::Int::DirectedGraph.new([]).tap do |g|
8
- g.add_edge(rep_a, rep_b)
9
- g.add_edge(rep_b, rep_c)
10
- g.add_edge(rep_c, rep_d)
11
- g.add_edge(rep_d, rep_e)
12
- g.add_edge(rep_e, rep_b)
13
- end
6
+ let(:stack) do
7
+ [
8
+ rep_a,
9
+ rep_b,
10
+ rep_c,
11
+ rep_d,
12
+ rep_e,
13
+ rep_b,
14
+ ]
14
15
  end
15
16
 
16
17
  let(:rep_a) { Nanoc::Int::ItemRep.new(Nanoc::Int::Item.new('a', {}, '/a.md'), :default) }
@@ -23,10 +24,10 @@ describe Nanoc::Int::Errors::DependencyCycle do
23
24
  expected = <<~EOS
24
25
  The site cannot be compiled because there is a dependency cycle:
25
26
 
26
- (1) item /e.md, rep :default, uses compiled content of
27
- (2) item /d.md, rep :default, uses compiled content of
28
- (3) item /c.md, rep :default, uses compiled content of
29
- (4) item /b.md, rep :default, uses compiled content of (1)
27
+ (1) item /b.md, rep :default, uses compiled content of
28
+ (2) item /c.md, rep :default, uses compiled content of
29
+ (3) item /d.md, rep :default, uses compiled content of
30
+ (4) item /e.md, rep :default, uses compiled content of (1)
30
31
  EOS
31
32
 
32
33
  expect(error.message).to eql(expected)
@@ -111,6 +111,47 @@ describe Nanoc::Int::ItemRepSelector do
111
111
  end
112
112
  end
113
113
 
114
+ describe 'cycle' do
115
+ context 'dependency on self' do
116
+ subject do
117
+ selector.each { |r| raise Nanoc::Int::Errors::UnmetDependency.new(r) }
118
+ end
119
+
120
+ example do
121
+ expect { subject }.to raise_error(Nanoc::Int::Errors::DependencyCycle, <<~EOS)
122
+ The site cannot be compiled because there is a dependency cycle:
123
+
124
+ (1) item /foo.md, rep :a, uses compiled content of (1)
125
+ EOS
126
+ end
127
+ end
128
+
129
+ context 'cycle with three dependencies' do
130
+ subject do
131
+ selector.each do |r|
132
+ case r
133
+ when reps_array[0]
134
+ raise Nanoc::Int::Errors::UnmetDependency.new(reps_array[1])
135
+ when reps_array[1]
136
+ raise Nanoc::Int::Errors::UnmetDependency.new(reps_array[2])
137
+ when reps_array[2]
138
+ raise Nanoc::Int::Errors::UnmetDependency.new(reps_array[0])
139
+ end
140
+ end
141
+ end
142
+
143
+ example do
144
+ expect { subject }.to raise_error(Nanoc::Int::Errors::DependencyCycle, <<~EOS)
145
+ The site cannot be compiled because there is a dependency cycle:
146
+
147
+ (1) item /foo.md, rep :a, uses compiled content of
148
+ (2) item /foo.md, rep :b, uses compiled content of
149
+ (3) item /foo.md, rep :c, uses compiled content of (1)
150
+ EOS
151
+ end
152
+ end
153
+ end
154
+
114
155
  describe 'yield order' do
115
156
  context 'linear dependencies' do
116
157
  let(:dependencies) do
@@ -3,108 +3,6 @@
3
3
  require 'helper'
4
4
 
5
5
  class Nanoc::Int::DirectedGraphTest < Nanoc::TestCase
6
- def test_direct_predecessors
7
- graph = Nanoc::Int::DirectedGraph.new([1, 2, 3])
8
- graph.add_edge(1, 2)
9
- graph.add_edge(2, 3)
10
-
11
- assert_equal [], graph.direct_predecessors_of(1)
12
- assert_equal [1], graph.direct_predecessors_of(2)
13
- assert_equal [2], graph.direct_predecessors_of(3)
14
- end
15
-
16
- def test_predecessors
17
- graph = Nanoc::Int::DirectedGraph.new([1, 2, 3])
18
- graph.add_edge(1, 2)
19
- graph.add_edge(2, 3)
20
-
21
- assert_equal [], graph.predecessors_of(1).sort
22
- assert_equal [1], graph.predecessors_of(2).sort
23
- assert_equal [1, 2], graph.predecessors_of(3).sort
24
- end
25
-
26
- def test_direct_successors
27
- graph = Nanoc::Int::DirectedGraph.new([1, 2, 3])
28
- graph.add_edge(1, 2)
29
- graph.add_edge(2, 3)
30
-
31
- assert_equal [2], graph.direct_successors_of(1)
32
- assert_equal [3], graph.direct_successors_of(2)
33
- assert_equal [], graph.direct_successors_of(3)
34
- end
35
-
36
- def test_successors
37
- graph = Nanoc::Int::DirectedGraph.new([1, 2, 3])
38
- graph.add_edge(1, 2)
39
- graph.add_edge(2, 3)
40
-
41
- assert_equal [2, 3], graph.successors_of(1).sort
42
- assert_equal [3], graph.successors_of(2).sort
43
- assert_equal [], graph.successors_of(3).sort
44
- end
45
-
46
- def test_edges
47
- graph = Nanoc::Int::DirectedGraph.new([1, 2, 3])
48
- graph.add_edge(1, 2)
49
- graph.add_edge(2, 3)
50
-
51
- assert_equal [[0, 1, nil], [1, 2, nil]], graph.edges.sort
52
- end
53
-
54
- def test_edges_with_new_vertices
55
- graph = Nanoc::Int::DirectedGraph.new([1])
56
- assert_equal [1], graph.vertices
57
- graph.add_edge(1, 2)
58
- assert_equal [1, 2], graph.vertices
59
- graph.add_edge(3, 2)
60
- assert_equal [1, 2, 3], graph.vertices
61
-
62
- assert_equal [[0, 1, nil], [2, 1, nil]], graph.edges.sort
63
- end
64
-
65
- def test_edge_with_props
66
- graph = Nanoc::Int::DirectedGraph.new([1, 2, 3])
67
- graph.add_edge(1, 2, props: { donkey: 14 })
68
- graph.add_edge(2, 3, props: { giraffe: 3 })
69
-
70
- assert_equal [[0, 1, { donkey: 14 }], [1, 2, { giraffe: 3 }]], graph.edges.sort
71
- end
72
-
73
- def test_props_for
74
- graph = Nanoc::Int::DirectedGraph.new([1, 2, 3, 4])
75
- graph.add_edge(1, 2, props: { donkey: 14 })
76
- graph.add_edge(2, 3, props: { giraffe: 3 })
77
- graph.add_edge(3, 4)
78
-
79
- assert_equal({ donkey: 14 }, graph.props_for(1, 2))
80
- assert_equal({ giraffe: 3 }, graph.props_for(2, 3))
81
- assert_equal(nil, graph.props_for(3, 4))
82
- end
83
-
84
- def test_props_for_with_deleted_edge
85
- graph = Nanoc::Int::DirectedGraph.new([1, 2])
86
- graph.add_edge(1, 2, props: { donkey: 14 })
87
- graph.delete_edge(1, 2)
88
-
89
- assert_equal(nil, graph.props_for(1, 2))
90
- end
91
-
92
- def test_props_for_with_deleted_edges_from
93
- graph = Nanoc::Int::DirectedGraph.new([1, 2])
94
- graph.add_edge(1, 2, props: { donkey: 14 })
95
- graph.delete_edges_from(1)
96
-
97
- assert_equal(nil, graph.props_for(1, 2))
98
- end
99
-
100
- def test_props_for_with_deleted_edges_to
101
- graph = Nanoc::Int::DirectedGraph.new([1, 2])
102
- graph.add_edge(1, 2, props: { donkey: 14 })
103
- graph.delete_edges_to(2)
104
-
105
- assert_equal(nil, graph.props_for(1, 2))
106
- end
107
-
108
6
  def test_add_edge
109
7
  graph = Nanoc::Int::DirectedGraph.new([1, 2, 3])
110
8
 
@@ -126,58 +24,6 @@ class Nanoc::Int::DirectedGraphTest < Nanoc::TestCase
126
24
  assert graph.vertices.include?(3)
127
25
  end
128
26
 
129
- def test_delete_edge
130
- graph = Nanoc::Int::DirectedGraph.new([1, 2, 3])
131
- graph.add_edge(1, 2)
132
-
133
- assert_equal [2], graph.successors_of(1)
134
- assert_equal [1], graph.predecessors_of(2)
135
-
136
- graph.delete_edge(1, 2)
137
-
138
- assert_equal [], graph.successors_of(1)
139
- assert_equal [], graph.predecessors_of(2)
140
- end
141
-
142
- def test_delete_edges_from
143
- graph = Nanoc::Int::DirectedGraph.new([1, 2, 3])
144
-
145
- graph.add_edge(1, 2)
146
- graph.add_edge(2, 1)
147
- graph.add_edge(2, 3)
148
- graph.add_edge(3, 2)
149
- graph.add_edge(1, 3)
150
- graph.add_edge(3, 1)
151
-
152
- assert_equal [2, 3], graph.direct_predecessors_of(1).sort
153
- assert_equal [2, 3], graph.direct_successors_of(1).sort
154
- assert_equal [1, 3], graph.direct_predecessors_of(2).sort
155
- assert_equal [1, 3], graph.direct_successors_of(2).sort
156
- assert_equal [1, 2], graph.direct_predecessors_of(3).sort
157
- assert_equal [1, 2], graph.direct_successors_of(3).sort
158
- assert_equal Set.new([]), graph.roots
159
-
160
- graph.delete_edges_from(1)
161
-
162
- assert_equal [2, 3], graph.direct_predecessors_of(1).sort
163
- assert_equal [], graph.direct_successors_of(1).sort
164
- assert_equal [3], graph.direct_predecessors_of(2).sort
165
- assert_equal [1, 3], graph.direct_successors_of(2).sort
166
- assert_equal [2], graph.direct_predecessors_of(3).sort
167
- assert_equal [1, 2], graph.direct_successors_of(3).sort
168
- assert_equal Set.new([]), graph.roots
169
-
170
- graph.delete_edges_from(2)
171
-
172
- assert_equal [3], graph.direct_predecessors_of(1).sort
173
- assert_equal [], graph.direct_successors_of(1).sort
174
- assert_equal [3], graph.direct_predecessors_of(2).sort
175
- assert_equal [], graph.direct_successors_of(2).sort
176
- assert_equal [], graph.direct_predecessors_of(3).sort
177
- assert_equal [1, 2], graph.direct_successors_of(3).sort
178
- assert_equal Set.new([3]), graph.roots
179
- end
180
-
181
27
  def test_delete_edges_to
182
28
  graph = Nanoc::Int::DirectedGraph.new([1, 2, 3])
183
29
 
@@ -194,7 +40,6 @@ class Nanoc::Int::DirectedGraphTest < Nanoc::TestCase
194
40
  assert_equal [1, 3], graph.direct_successors_of(2).sort
195
41
  assert_equal [1, 2], graph.direct_predecessors_of(3).sort
196
42
  assert_equal [1, 2], graph.direct_successors_of(3).sort
197
- assert_equal Set.new([]), graph.roots
198
43
 
199
44
  graph.delete_edges_to(1)
200
45
 
@@ -204,7 +49,6 @@ class Nanoc::Int::DirectedGraphTest < Nanoc::TestCase
204
49
  assert_equal [3], graph.direct_successors_of(2).sort
205
50
  assert_equal [1, 2], graph.direct_predecessors_of(3).sort
206
51
  assert_equal [2], graph.direct_successors_of(3).sort
207
- assert_equal Set.new([1]), graph.roots
208
52
 
209
53
  graph.delete_edges_to(2)
210
54
 
@@ -214,38 +58,6 @@ class Nanoc::Int::DirectedGraphTest < Nanoc::TestCase
214
58
  assert_equal [3], graph.direct_successors_of(2).sort
215
59
  assert_equal [1, 2], graph.direct_predecessors_of(3).sort
216
60
  assert_equal [], graph.direct_successors_of(3).sort
217
- assert_equal Set.new([1, 2]), graph.roots
218
- end
219
-
220
- def test_delete_vertex
221
- graph = Nanoc::Int::DirectedGraph.new([1, 2, 3])
222
-
223
- graph.add_edge(1, 2)
224
- graph.add_edge(2, 1)
225
- graph.add_edge(2, 3)
226
- graph.add_edge(3, 2)
227
- graph.add_edge(1, 3)
228
- graph.add_edge(3, 1)
229
-
230
- graph.delete_vertex(2)
231
-
232
- assert_equal [3], graph.direct_predecessors_of(1).sort
233
- assert_equal [3], graph.direct_successors_of(1).sort
234
- assert_equal [1], graph.direct_predecessors_of(3).sort
235
- assert_equal [1], graph.direct_successors_of(3).sort
236
- assert_equal Set.new([]), graph.roots
237
- end
238
-
239
- def test_delete_vertex_resulting_roots
240
- graph = Nanoc::Int::DirectedGraph.new([1, 2, 3])
241
- assert_equal Set.new([1, 2, 3]), graph.roots
242
-
243
- graph.add_edge(1, 2)
244
- graph.add_edge(2, 3)
245
- assert_equal Set.new([1]), graph.roots
246
-
247
- graph.delete_vertex(2)
248
- assert_equal Set.new([1, 3]), graph.roots
249
61
  end
250
62
 
251
63
  def test_should_return_empty_array_for_nonexistant_vertices
@@ -257,74 +69,6 @@ class Nanoc::Int::DirectedGraphTest < Nanoc::TestCase
257
69
  assert_equal [], graph.successors_of(4)
258
70
  end
259
71
 
260
- def test_roots_after_init
261
- graph = Nanoc::Int::DirectedGraph.new([1, 2, 3])
262
-
263
- assert_equal Set.new([1, 2, 3]), graph.roots
264
- end
265
-
266
- def test_roots_after_adding_edge
267
- graph = Nanoc::Int::DirectedGraph.new([1, 2, 3])
268
- graph.add_edge(1, 2)
269
- assert_equal Set.new([1, 3]), graph.roots
270
-
271
- graph = Nanoc::Int::DirectedGraph.new([1, 2, 3])
272
- graph.add_edge(1, 3)
273
- assert_equal Set.new([1, 2]), graph.roots
274
-
275
- graph = Nanoc::Int::DirectedGraph.new([1, 2, 3])
276
- graph.add_edge(2, 1)
277
- assert_equal Set.new([2, 3]), graph.roots
278
-
279
- graph = Nanoc::Int::DirectedGraph.new([1, 2, 3])
280
- graph.add_edge(1, 2)
281
- graph.add_edge(2, 3)
282
- assert_equal Set.new([1]), graph.roots
283
-
284
- graph = Nanoc::Int::DirectedGraph.new([1, 2, 3])
285
- graph.add_edge(1, 2)
286
- graph.add_edge(2, 3)
287
- graph.add_edge(3, 1)
288
- assert_equal Set.new([]), graph.roots
289
- end
290
-
291
- def test_roots_after_removing_edge
292
- graph = Nanoc::Int::DirectedGraph.new([1, 2, 3])
293
- graph.add_edge(1, 2)
294
- graph.delete_edge(1, 2)
295
- assert_equal Set.new([1, 2, 3]), graph.roots
296
-
297
- graph = Nanoc::Int::DirectedGraph.new([1, 2, 3])
298
- graph.add_edge(1, 3)
299
- assert_equal Set.new([1, 2]), graph.roots
300
- graph.delete_edge(1, 2) # no such edge
301
- assert_equal Set.new([1, 2]), graph.roots
302
-
303
- graph = Nanoc::Int::DirectedGraph.new([1, 2, 3])
304
- graph.add_edge(2, 1)
305
- graph.delete_edge(2, 1)
306
- assert_equal Set.new([1, 2, 3]), graph.roots
307
-
308
- graph = Nanoc::Int::DirectedGraph.new([1, 2, 3])
309
- graph.add_edge(1, 2)
310
- graph.add_edge(2, 3)
311
- graph.delete_edge(1, 2)
312
- assert_equal Set.new([1, 2]), graph.roots
313
- graph.delete_edge(2, 3)
314
- assert_equal Set.new([1, 2, 3]), graph.roots
315
-
316
- graph = Nanoc::Int::DirectedGraph.new([1, 2, 3])
317
- graph.add_edge(1, 2)
318
- graph.add_edge(2, 3)
319
- graph.add_edge(3, 1)
320
- graph.delete_edge(1, 2)
321
- assert_equal Set.new([2]), graph.roots
322
- graph.delete_edge(2, 3)
323
- assert_equal Set.new([2, 3]), graph.roots
324
- graph.delete_edge(3, 1)
325
- assert_equal Set.new([1, 2, 3]), graph.roots
326
- end
327
-
328
72
  def test_example
329
73
  YARD.parse(LIB_DIR + '/nanoc/base/entities/directed_graph.rb')
330
74
  assert_examples_correct 'Nanoc::Int::DirectedGraph'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nanoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.7.13
4
+ version: 4.7.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Denis Defreyne
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-02 00:00:00.000000000 Z
11
+ date: 2017-07-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cri