nanoc 4.1.6 → 4.2.0b1

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 (70) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -0
  3. data/Gemfile.lock +2 -1
  4. data/NEWS.md +11 -4
  5. data/lib/nanoc/base/checksummer.rb +135 -46
  6. data/lib/nanoc/base/compilation/compiler.rb +18 -28
  7. data/lib/nanoc/base/compilation/dependency_tracker.rb +22 -32
  8. data/lib/nanoc/base/compilation/filter.rb +2 -4
  9. data/lib/nanoc/base/entities.rb +1 -0
  10. data/lib/nanoc/base/entities/content.rb +14 -3
  11. data/lib/nanoc/base/entities/document.rb +14 -6
  12. data/lib/nanoc/base/entities/item.rb +0 -31
  13. data/lib/nanoc/base/entities/item_rep.rb +1 -1
  14. data/lib/nanoc/base/entities/lazy_value.rb +36 -0
  15. data/lib/nanoc/base/entities/pattern.rb +3 -2
  16. data/lib/nanoc/base/entities/site.rb +2 -0
  17. data/lib/nanoc/base/memoization.rb +17 -10
  18. data/lib/nanoc/base/repos/compiled_content_cache.rb +1 -1
  19. data/lib/nanoc/base/repos/data_source.rb +10 -6
  20. data/lib/nanoc/base/services/executor.rb +22 -22
  21. data/lib/nanoc/base/services/item_rep_router.rb +4 -5
  22. data/lib/nanoc/base/views.rb +0 -1
  23. data/lib/nanoc/base/views/item_rep_view.rb +3 -9
  24. data/lib/nanoc/base/views/mixins/document_view_mixin.rb +4 -11
  25. data/lib/nanoc/base/views/view.rb +1 -0
  26. data/lib/nanoc/base/views/view_context.rb +5 -1
  27. data/lib/nanoc/cli/commands/compile.rb +0 -6
  28. data/lib/nanoc/data_sources.rb +5 -5
  29. data/lib/nanoc/data_sources/filesystem.rb +219 -90
  30. data/lib/nanoc/extra/checking/check.rb +1 -2
  31. data/lib/nanoc/extra/checking/checks.rb +2 -0
  32. data/lib/nanoc/extra/checking/checks/css.rb +6 -14
  33. data/lib/nanoc/extra/checking/checks/html.rb +6 -14
  34. data/lib/nanoc/extra/checking/checks/internal_links.rb +14 -3
  35. data/lib/nanoc/extra/checking/checks/w3c_validator.rb +28 -0
  36. data/lib/nanoc/extra/deployers/fog.rb +134 -78
  37. data/lib/nanoc/extra/link_collector.rb +14 -18
  38. data/lib/nanoc/filters/sass.rb +3 -3
  39. data/lib/nanoc/helpers.rb +1 -0
  40. data/lib/nanoc/helpers/capturing.rb +16 -58
  41. data/lib/nanoc/helpers/child_parent.rb +51 -0
  42. data/lib/nanoc/helpers/filtering.rb +0 -1
  43. data/lib/nanoc/helpers/html_escape.rb +5 -0
  44. data/lib/nanoc/helpers/link_to.rb +2 -0
  45. data/lib/nanoc/helpers/rendering.rb +3 -4
  46. data/lib/nanoc/rule_dsl/action_provider.rb +20 -4
  47. data/lib/nanoc/rule_dsl/recording_executor.rb +3 -1
  48. data/lib/nanoc/rule_dsl/rule_context.rb +0 -1
  49. data/lib/nanoc/rule_dsl/rule_memory_calculator.rb +4 -1
  50. data/lib/nanoc/spec.rb +217 -0
  51. data/lib/nanoc/version.rb +1 -1
  52. data/test/base/test_data_source.rb +4 -2
  53. data/test/base/test_dependency_tracker.rb +5 -11
  54. data/test/data_sources/test_filesystem.rb +605 -69
  55. data/test/extra/checking/checks/test_internal_links.rb +25 -0
  56. data/test/extra/deployers/test_fog.rb +0 -177
  57. data/test/filters/test_less.rb +9 -4
  58. data/test/helpers/test_capturing.rb +38 -212
  59. data/test/helpers/test_link_to.rb +0 -205
  60. data/test/helpers/test_xml_sitemap.rb +2 -1
  61. metadata +7 -12
  62. data/lib/nanoc/base/views/site_view.rb +0 -14
  63. data/lib/nanoc/data_sources/filesystem_unified.rb +0 -101
  64. data/test/data_sources/test_filesystem_unified.rb +0 -559
  65. data/test/helpers/test_breadcrumbs.rb +0 -60
  66. data/test/helpers/test_filtering.rb +0 -112
  67. data/test/helpers/test_html_escape.rb +0 -26
  68. data/test/helpers/test_rendering.rb +0 -147
  69. data/test/helpers/test_tagging.rb +0 -92
  70. data/test/helpers/test_text.rb +0 -18
@@ -63,6 +63,31 @@ class Nanoc::Extra::Checking::Checks::InternalLinksTest < Nanoc::TestCase
63
63
  end
64
64
  end
65
65
 
66
+ def test_exclude_targets
67
+ with_site do |site|
68
+ # Create check
69
+ check = Nanoc::Extra::Checking::Checks::InternalLinks.create(site)
70
+ site.config.update({ checks: { internal_links: { exclude_targets: ['^/excluded\d+'] } } })
71
+
72
+ # Test
73
+ assert check.send(:valid?, '/excluded1', 'output/origin')
74
+ assert check.send(:valid?, '/excluded2', 'output/origin')
75
+ assert !check.send(:valid?, '/excluded_not', 'output/origin')
76
+ end
77
+ end
78
+
79
+ def test_exclude_origins
80
+ with_site do |site|
81
+ # Create check
82
+ check = Nanoc::Extra::Checking::Checks::InternalLinks.create(site)
83
+ site.config.update({ checks: { internal_links: { exclude_origins: ['^/excluded'] } } })
84
+
85
+ # Test
86
+ assert check.send(:valid?, '/foo', 'output/excluded')
87
+ assert !check.send(:valid?, '/foo', 'output/not_excluded')
88
+ end
89
+ end
90
+
66
91
  def test_unescape_url
67
92
  with_site do |site|
68
93
  FileUtils.mkdir_p('output/stuff')
@@ -1,181 +1,4 @@
1
1
  class Nanoc::Extra::Deployers::FogTest < Nanoc::TestCase
2
- def test_run
3
- if_have 'fog' do
4
- # Create deployer
5
- fog = Nanoc::Extra::Deployers::Fog.new(
6
- 'output/',
7
- {
8
- bucket: 'mybucket',
9
- provider: 'local',
10
- local_root: 'mylocalcloud' })
11
-
12
- # Create site
13
- FileUtils.mkdir_p('output')
14
- File.open('output/meow', 'w') { |io| io.write 'I am a cat!' }
15
- File.open('output/bark', 'w') { |io| io.write 'I am a dog!' }
16
-
17
- # Create local cloud (but not bucket)
18
- FileUtils.mkdir_p('mylocalcloud')
19
-
20
- # Run
21
- fog.run
22
-
23
- # Check
24
- assert File.file?('mylocalcloud/mybucket/meow')
25
- assert File.file?('mylocalcloud/mybucket/bark')
26
- assert_equal 'I am a cat!', File.read('mylocalcloud/mybucket/meow')
27
- assert_equal 'I am a dog!', File.read('mylocalcloud/mybucket/bark')
28
- end
29
- end
30
-
31
- def test_run_with_dry_run
32
- if_have 'fog' do
33
- begin
34
- # Create deployer
35
- fog = Nanoc::Extra::Deployers::Fog.new(
36
- 'output/',
37
- {
38
- provider: 'aws',
39
- # FIXME: bucket is necessary for deployer but fog doesn't like it
40
- bucket_name: 'doesntmatter',
41
- aws_access_key_id: 'meh',
42
- aws_secret_access_key: 'dontcare',
43
- },
44
- dry_run: true,
45
- )
46
-
47
- # Create site
48
- FileUtils.mkdir_p('output')
49
- File.open('output/meow', 'w') { |io| io.write 'I am a cat!' }
50
- File.open('output/bark', 'w') { |io| io.write 'I am a dog!' }
51
-
52
- # Create local cloud (but not bucket)
53
- FileUtils.mkdir_p('mylocalcloud')
54
-
55
- # Run
56
- fog.run
57
- ensure
58
- # FIXME: ugly hack
59
- ::Fog.instance_eval { @mocking = false }
60
- end
61
- end
62
- end
63
-
64
- def test_run_cdn_with_dry_run
65
- if_have 'fog' do
66
- begin
67
- # Create deployer
68
- fog = Nanoc::Extra::Deployers::Fog.new(
69
- 'output/',
70
- {
71
- provider: 'aws',
72
- cdn_id: 'id-cdn',
73
- # FIXME: bucket is necessary for deployer but fog doesn't like it
74
- bucket_name: 'doesntmatter',
75
- aws_access_key_id: 'meh',
76
- aws_secret_access_key: 'dontcare',
77
- },
78
- dry_run: true,
79
- )
80
-
81
- # Create site
82
- FileUtils.mkdir_p('output')
83
- File.open('output/meow', 'w') { |io| io.write 'I am a cat!' }
84
- File.open('output/bark', 'w') { |io| io.write 'I am a dog!' }
85
-
86
- # Create local cloud (but not bucket)
87
- FileUtils.mkdir_p('mylocalcloud')
88
-
89
- # Run
90
- fog.run
91
- ensure
92
- # HACK: (
93
- ::Fog.instance_eval { @mocking = false }
94
- end
95
- end
96
- end
97
-
98
- def test_run_delete_stray
99
- if_have 'fog' do
100
- # Create deployer
101
- fog = Nanoc::Extra::Deployers::Fog.new(
102
- 'output/',
103
- {
104
- bucket: 'mybucket',
105
- provider: 'local',
106
- local_root: 'mylocalcloud',
107
- },
108
- )
109
-
110
- # Setup fake local cloud
111
- FileUtils.mkdir_p('mylocalcloud/mybucket')
112
- File.open('mylocalcloud/mybucket/etc', 'w') { |io| io.write('meh-etc') }
113
- File.open('mylocalcloud/mybucket/meow', 'w') { |io| io.write('meh-meow') }
114
- File.open('mylocalcloud/mybucket/bark', 'w') { |io| io.write('meh-bark') }
115
-
116
- # Create site
117
- FileUtils.mkdir_p('output')
118
- File.open('output/meow', 'w') { |io| io.write 'I am a cat!' }
119
- File.open('output/bark', 'w') { |io| io.write 'I am a dog!' }
120
-
121
- # Create local cloud (but not bucket)
122
- FileUtils.mkdir_p('mylocalcloud')
123
-
124
- # Run
125
- fog.run
126
-
127
- # Check
128
- refute File.file?('mylocalcloud/mybucket/etc')
129
- assert File.file?('mylocalcloud/mybucket/meow')
130
- assert File.file?('mylocalcloud/mybucket/bark')
131
- assert_equal 'I am a cat!', File.read('mylocalcloud/mybucket/meow')
132
- assert_equal 'I am a dog!', File.read('mylocalcloud/mybucket/bark')
133
- end
134
- end
135
-
136
- def test_upload
137
- if_have 'fog' do
138
- fog = Nanoc::Extra::Deployers::Fog.new(
139
- 'output/', provider: 'aws')
140
-
141
- key_old = '__old'
142
- key_same = '__same'
143
- key_new = '__new'
144
-
145
- File.write(key_same, 'hallo')
146
- File.write(key_new, 'hallo new')
147
-
148
- etags = {
149
- key_same => '598d4c200461b81522a3328565c25f7c',
150
- key_new => '598d4c200461b81522a3328565c25f7c',
151
- }
152
-
153
- keys_to_destroy = [key_old, key_same, key_new]
154
- keys_to_invalidate = []
155
-
156
- s3_files = mock
157
- s3_files.stubs(:create)
158
- s3_directory = mock
159
- s3_directory.stubs(:files).returns(s3_files)
160
-
161
- # key_same
162
- refute fog.send(:needs_upload?, key_same, key_same, etags)
163
- fog.send(
164
- :upload, key_same, key_same, etags, keys_to_destroy, keys_to_invalidate, s3_directory)
165
-
166
- assert_equal([key_old, key_new], keys_to_destroy)
167
- assert_equal([], keys_to_invalidate)
168
-
169
- # key_new
170
- assert fog.send(:needs_upload?, key_new, key_new, etags)
171
- fog.send(
172
- :upload, key_new, key_new, etags, keys_to_destroy, keys_to_invalidate, s3_directory)
173
-
174
- assert_equal([key_old], keys_to_destroy)
175
- assert_equal([key_new], keys_to_invalidate)
176
- end
177
- end
178
-
179
2
  def test_read_etags_with_local_provider
180
3
  if_have 'fog' do
181
4
  fog = Nanoc::Extra::Deployers::Fog.new(
@@ -1,8 +1,13 @@
1
1
  class Nanoc::Filters::LessTest < Nanoc::TestCase
2
+ def view_context
3
+ dependency_tracker = Nanoc::Int::DependencyTracker.new(nil)
4
+ Nanoc::ViewContext.new(reps: nil, items: nil, dependency_tracker: dependency_tracker, compiler: nil)
5
+ end
6
+
2
7
  def test_filter
3
8
  if_have 'less' do
4
9
  # Create item
5
- @item = Nanoc::ItemWithRepsView.new(Nanoc::Int::Item.new('blah', { content_filename: 'content/foo/bar.txt' }, '/foo/bar/'), nil)
10
+ @item = Nanoc::ItemWithRepsView.new(Nanoc::Int::Item.new('blah', { content_filename: 'content/foo/bar.txt' }, '/foo/bar/'), view_context)
6
11
 
7
12
  # Create filter
8
13
  filter = ::Nanoc::Filters::Less.new(item: @item, items: [@item])
@@ -20,7 +25,7 @@ class Nanoc::Filters::LessTest < Nanoc::TestCase
20
25
  File.open('content/foo/bar/imported_file.less', 'w') { |io| io.write('p { color: red; }') }
21
26
 
22
27
  # Create item
23
- @item = Nanoc::ItemWithRepsView.new(Nanoc::Int::Item.new('blah', { content_filename: 'content/foo/bar.txt' }, '/foo/bar/'), nil)
28
+ @item = Nanoc::ItemWithRepsView.new(Nanoc::Int::Item.new('blah', { content_filename: 'content/foo/bar.txt' }, '/foo/bar/'), view_context)
24
29
 
25
30
  # Create filter
26
31
  filter = ::Nanoc::Filters::Less.new(item: @item, items: [@item])
@@ -39,7 +44,7 @@ class Nanoc::Filters::LessTest < Nanoc::TestCase
39
44
 
40
45
  # Create item
41
46
  File.open('content/foo/bar.txt', 'w') { |io| io.write('meh') }
42
- @item = Nanoc::ItemWithRepsView.new(Nanoc::Int::Item.new('blah', { content_filename: 'content/foo/bar.txt' }, '/foo/bar/'), nil)
47
+ @item = Nanoc::ItemWithRepsView.new(Nanoc::Int::Item.new('blah', { content_filename: 'content/foo/bar.txt' }, '/foo/bar/'), view_context)
43
48
 
44
49
  # Create filter
45
50
  filter = ::Nanoc::Filters::Less.new(item: @item, items: [@item])
@@ -108,7 +113,7 @@ class Nanoc::Filters::LessTest < Nanoc::TestCase
108
113
  def test_compression
109
114
  if_have 'less' do
110
115
  # Create item
111
- @item = Nanoc::ItemWithRepsView.new(Nanoc::Int::Item.new('blah', { content_filename: 'content/foo/bar.txt' }, '/foo/bar/'), nil)
116
+ @item = Nanoc::ItemWithRepsView.new(Nanoc::Int::Item.new('blah', { content_filename: 'content/foo/bar.txt' }, '/foo/bar/'), view_context)
112
117
 
113
118
  # Create filter
114
119
  filter = ::Nanoc::Filters::Less.new(item: @item, items: [@item])
@@ -1,49 +1,49 @@
1
1
  class Nanoc::Helpers::CapturingTest < Nanoc::TestCase
2
2
  include Nanoc::Helpers::Capturing
3
3
 
4
- def test_content_for
5
- require 'erb'
6
-
7
- File.open('Rules', 'w') do |io|
8
- io.write "compile '*' do ; filter :erb ; end\n"
9
- io.write "route '*' do ; item.identifier + 'index.html' ; end\n"
4
+ def item_rep_repo_for(item)
5
+ Nanoc::Int::ItemRepRepo.new.tap do |repo|
6
+ repo << Nanoc::Int::ItemRep.new(item, :default)
10
7
  end
8
+ end
11
9
 
12
- # Build content to be evaluated
13
- content = "head <% content_for :sidebar do %>\n" \
14
- " <%= 1+2 %>\n" \
15
- '<% end %> foot'
16
-
17
- # Build site
18
- site = Nanoc::Int::SiteLoader.new.new_empty
19
- item = Nanoc::Int::Item.new('moo', {}, '/blah/')
20
- @site = Nanoc::SiteView.new(Nanoc::Int::SiteLoader.new.new_empty, nil)
21
- @item = Nanoc::ItemWithRepsView.new(item, nil)
22
-
23
- # Evaluate content
24
- result = ::ERB.new(content).result(binding)
25
-
26
- # Check
27
- assert_equal '3', content_for(@item, :sidebar).strip
28
- assert_match(/^head\s+foot$/, result)
10
+ def view_context_for(item)
11
+ Nanoc::ViewContext.new(
12
+ reps: item_rep_repo_for(item),
13
+ items: :__irrelevant__,
14
+ dependency_tracker: :__irrelevant__,
15
+ compiler: :__irrelevant__,
16
+ )
29
17
  end
30
18
 
31
- def test_capture
32
- require 'erb'
19
+ def test_dependencies
20
+ with_site do |_site|
21
+ # Prepare
22
+ File.open('lib/helpers.rb', 'w') do |io|
23
+ io.write 'include Nanoc::Helpers::Capturing'
24
+ end
25
+ File.open('content/includer.erb', 'w') do |io|
26
+ io.write '[<%= content_for(@items.find { |i| i.identifier == \'/includee/\' }, :blah) %>]'
27
+ end
28
+ File.open('Rules', 'w') do |io|
29
+ io.write "compile '*' do ; filter :erb ; end\n"
30
+ io.write "route '*' do ; item.identifier + 'index.html' ; end\n"
31
+ end
33
32
 
34
- # Build site
35
- @site = Nanoc::SiteView.new(Nanoc::Int::SiteLoader.new.new_empty, nil)
36
- @item = Nanoc::ItemWithRepsView.new(Nanoc::Int::Item.new('moo', {}, '/blah/'), nil)
33
+ # Compile once
34
+ File.open('content/includee.erb', 'w') do |io|
35
+ io.write '{<% content_for :blah do %>Old content<% end %>}'
36
+ end
37
+ Nanoc::CLI.run(%w(compile))
38
+ assert_equal '[Old content]', File.read('output/includer/index.html')
37
39
 
38
- # Capture
39
- _erbout = 'foo'
40
- captured_content = capture do
41
- _erbout << 'bar'
40
+ # Compile again
41
+ File.open('content/includee.erb', 'w') do |io|
42
+ io.write '{<% content_for :blah do %>New content<% end %>}'
43
+ end
44
+ Nanoc::CLI.run(%w(compile))
45
+ assert_equal '[New content]', File.read('output/includer/index.html')
42
46
  end
43
-
44
- # Check
45
- assert_equal 'foo', _erbout
46
- assert_equal 'bar', captured_content
47
47
  end
48
48
 
49
49
  def test_content_for_recursively
@@ -66,8 +66,8 @@ head
66
66
  foot
67
67
  EOS
68
68
 
69
- @site = Nanoc::SiteView.new(Nanoc::Int::SiteLoader.new.new_empty, nil)
70
- @item = Nanoc::ItemWithRepsView.new(Nanoc::Int::Item.new('content', {}, '/'), nil)
69
+ item = Nanoc::Int::Item.new('content', {}, '/')
70
+ @item = Nanoc::ItemWithRepsView.new(item, view_context_for(item))
71
71
 
72
72
  result = ::ERB.new(content).result(binding)
73
73
 
@@ -76,180 +76,6 @@ EOS
76
76
  assert_equal expected, actual
77
77
  end
78
78
 
79
- def test_different_sites
80
- require 'erb'
81
-
82
- File.open('Rules', 'w') do |io|
83
- io.write "compile '*' do ; filter :erb ; end\n"
84
- io.write "route '*' do ; item.identifier + 'index.html' ; end\n"
85
- end
86
-
87
- @site = Nanoc::SiteView.new(Nanoc::Int::SiteLoader.new.new_empty, nil)
88
- @item = Nanoc::ItemWithRepsView.new(Nanoc::Int::Item.new('content', {}, '/'), nil)
89
- content = '<% content_for :a do %>Content One<% end %>'
90
- ::ERB.new(content).result(binding)
91
-
92
- assert_equal 'Content One', content_for(@item, :a)
93
- assert_equal nil, content_for(@item, :b)
94
-
95
- @site = Nanoc::SiteView.new(Nanoc::Int::SiteLoader.new.new_empty, nil)
96
- @item = Nanoc::ItemWithRepsView.new(Nanoc::Int::Item.new('content', {}, '/'), nil)
97
- content = '<% content_for :b do %>Content Two<% end %>'
98
- ::ERB.new(content).result(binding)
99
-
100
- assert_equal nil, content_for(@item, :a)
101
- assert_equal 'Content Two', content_for(@item, :b)
102
- end
103
-
104
- def test_content_for_with_existing_symbol
105
- with_site do |_site|
106
- # Prepare
107
- File.open('lib/helpers.rb', 'w') do |io|
108
- io.write 'include Nanoc::Helpers::Capturing'
109
- end
110
- File.open('content/includer.erb', 'w') do |io|
111
- io.write '[<%= content_for(@items["/includee/"], :blah) %>]'
112
- end
113
- File.open('Rules', 'w') do |io|
114
- io.write "compile '*' do ; filter :erb ; end\n"
115
- io.write "route '*' do ; item.identifier + 'index.html' ; end\n"
116
- end
117
-
118
- File.open('content/includee.erb', 'w') do |io|
119
- io.write '{<% content_for :blah do %>First content<% end %><% content_for :blah do %>Second content<% end %>}'
120
- end
121
-
122
- # Using the same symbols twice now raises an error, to be changed to concatenating in a future version
123
- assert_raises do
124
- Nanoc::CLI.run(%w(compile))
125
- end
126
- end
127
- end
128
-
129
- def test_content_for_with_existing_symbol_with_error_option
130
- with_site do |_site|
131
- # Prepare
132
- File.open('lib/helpers.rb', 'w') do |io|
133
- io.write 'include Nanoc::Helpers::Capturing'
134
- end
135
- File.open('content/includer.erb', 'w') do |io|
136
- io.write '[<%= content_for(@items["/includee/"], :blah) %>]'
137
- end
138
- File.open('Rules', 'w') do |io|
139
- io.write "compile '*' do ; filter :erb ; end\n"
140
- io.write "route '*' do ; item.identifier + 'index.html' ; end\n"
141
- end
142
-
143
- File.open('content/includee.erb', 'w') do |io|
144
- io.write '{<% content_for :blah do %>First content<% end %><% content_for :blah, existing: :error do %>Second content<% end %>}'
145
- end
146
-
147
- assert_raises do
148
- Nanoc::CLI.run(%w(compile))
149
- end
150
- end
151
- end
152
-
153
- def test_content_for_with_existing_symbol_with_overwrite_option
154
- with_site do |_site|
155
- # Prepare
156
- File.open('lib/helpers.rb', 'w') do |io|
157
- io.write 'include Nanoc::Helpers::Capturing'
158
- end
159
- File.open('content/includer.erb', 'w') do |io|
160
- io.write '[<%= content_for(@items["/includee/"], :blah) %>]'
161
- end
162
- File.open('Rules', 'w') do |io|
163
- io.write "compile '*' do ; filter :erb ; end\n"
164
- io.write "route '*' do ; item.identifier + 'index.html' ; end\n"
165
- end
166
-
167
- File.open('content/includee.erb', 'w') do |io|
168
- io.write '{<% content_for :blah do %>First content<% end %><% content_for :blah, existing: :overwrite do %>Second content<% end %>}'
169
- end
170
-
171
- Nanoc::CLI.run(%w(compile))
172
- assert_equal '[Second content]', File.read('output/includer/index.html')
173
- end
174
- end
175
-
176
- def test_content_for_with_existing_symbol_with_append_option
177
- with_site do |_site|
178
- # Prepare
179
- File.open('lib/helpers.rb', 'w') do |io|
180
- io.write 'include Nanoc::Helpers::Capturing'
181
- end
182
- File.open('content/includer.erb', 'w') do |io|
183
- io.write '[<%= content_for(@items["/includee/"], :blah) %>]'
184
- end
185
- File.open('Rules', 'w') do |io|
186
- io.write "compile '*' do ; filter :erb ; end\n"
187
- io.write "route '*' do ; item.identifier + 'index.html' ; end\n"
188
- end
189
-
190
- File.open('content/includee.erb', 'w') do |io|
191
- io.write '{<% content_for :blah do %>First content<% end %><% content_for :blah, existing: :append do %>Second content<% end %>}'
192
- end
193
-
194
- Nanoc::CLI.run(%w(compile))
195
- assert_equal '[First contentSecond content]', File.read('output/includer/index.html')
196
- end
197
- end
198
-
199
- def test_content_for_with_existing_symbol_with_unrecognised_option
200
- with_site do |_site|
201
- # Prepare
202
- File.open('lib/helpers.rb', 'w') do |io|
203
- io.write 'include Nanoc::Helpers::Capturing'
204
- end
205
- File.open('content/includer.erb', 'w') do |io|
206
- io.write '[<%= content_for(@items["/includee/"], :blah) %>]'
207
- end
208
- File.open('Rules', 'w') do |io|
209
- io.write "compile '*' do ; filter :erb ; end\n"
210
- io.write "route '*' do ; item.identifier + 'index.html' ; end\n"
211
- end
212
-
213
- File.open('content/includee.erb', 'w') do |io|
214
- io.write '{<% content_for :blah, existing: :donkey do %>First content<% end %>}'
215
- end
216
-
217
- assert_raises(ArgumentError) do
218
- Nanoc::CLI.run(%w(compile))
219
- end
220
- end
221
- end
222
-
223
- def test_dependencies
224
- with_site do |_site|
225
- # Prepare
226
- File.open('lib/helpers.rb', 'w') do |io|
227
- io.write 'include Nanoc::Helpers::Capturing'
228
- end
229
- File.open('content/includer.erb', 'w') do |io|
230
- io.write '[<%= content_for(@items.find { |i| i.identifier == \'/includee/\' }, :blah) %>]'
231
- end
232
- File.open('Rules', 'w') do |io|
233
- io.write "compile '*' do ; filter :erb ; end\n"
234
- io.write "route '*' do ; item.identifier + 'index.html' ; end\n"
235
- end
236
-
237
- # Compile once
238
- File.open('content/includee.erb', 'w') do |io|
239
- io.write '{<% content_for :blah do %>Old content<% end %>}'
240
- end
241
- Nanoc::CLI.run(%w(compile))
242
- assert_equal '[Old content]', File.read('output/includer/index.html')
243
-
244
- # Compile again
245
- File.open('content/includee.erb', 'w') do |io|
246
- io.write '{<% content_for :blah do %>New content<% end %>}'
247
- end
248
- Nanoc::CLI.run(%w(compile))
249
- assert_equal '[New content]', File.read('output/includer/index.html')
250
- end
251
- end
252
-
253
79
  def test_dependency_without_item_variable
254
80
  with_site do |_site|
255
81
  # Prepare