nanoc3 3.2.4 → 3.3.0

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 (211) hide show
  1. metadata +14 -313
  2. data/.gemtest +0 -0
  3. data/ChangeLog +0 -3
  4. data/Gemfile +0 -29
  5. data/LICENSE +0 -19
  6. data/NEWS.md +0 -449
  7. data/README.md +0 -108
  8. data/Rakefile +0 -14
  9. data/bin/nanoc3 +0 -12
  10. data/doc/yardoc_templates/default/layout/html/footer.erb +0 -10
  11. data/lib/nanoc3.rb +0 -28
  12. data/lib/nanoc3/base.rb +0 -49
  13. data/lib/nanoc3/base/compilation/checksum_store.rb +0 -57
  14. data/lib/nanoc3/base/compilation/compiled_content_cache.rb +0 -62
  15. data/lib/nanoc3/base/compilation/compiler.rb +0 -455
  16. data/lib/nanoc3/base/compilation/compiler_dsl.rb +0 -214
  17. data/lib/nanoc3/base/compilation/dependency_tracker.rb +0 -196
  18. data/lib/nanoc3/base/compilation/filter.rb +0 -165
  19. data/lib/nanoc3/base/compilation/item_rep_proxy.rb +0 -102
  20. data/lib/nanoc3/base/compilation/item_rep_recorder_proxy.rb +0 -88
  21. data/lib/nanoc3/base/compilation/outdatedness_checker.rb +0 -223
  22. data/lib/nanoc3/base/compilation/outdatedness_reasons.rb +0 -46
  23. data/lib/nanoc3/base/compilation/rule.rb +0 -73
  24. data/lib/nanoc3/base/compilation/rule_context.rb +0 -84
  25. data/lib/nanoc3/base/compilation/rule_memory_calculator.rb +0 -40
  26. data/lib/nanoc3/base/compilation/rule_memory_store.rb +0 -53
  27. data/lib/nanoc3/base/compilation/rules_collection.rb +0 -231
  28. data/lib/nanoc3/base/context.rb +0 -47
  29. data/lib/nanoc3/base/core_ext.rb +0 -6
  30. data/lib/nanoc3/base/core_ext/array.rb +0 -62
  31. data/lib/nanoc3/base/core_ext/hash.rb +0 -63
  32. data/lib/nanoc3/base/core_ext/pathname.rb +0 -26
  33. data/lib/nanoc3/base/core_ext/string.rb +0 -46
  34. data/lib/nanoc3/base/directed_graph.rb +0 -275
  35. data/lib/nanoc3/base/errors.rb +0 -174
  36. data/lib/nanoc3/base/memoization.rb +0 -67
  37. data/lib/nanoc3/base/notification_center.rb +0 -84
  38. data/lib/nanoc3/base/ordered_hash.rb +0 -200
  39. data/lib/nanoc3/base/plugin_registry.rb +0 -165
  40. data/lib/nanoc3/base/result_data/item_rep.rb +0 -488
  41. data/lib/nanoc3/base/source_data/code_snippet.rb +0 -58
  42. data/lib/nanoc3/base/source_data/configuration.rb +0 -24
  43. data/lib/nanoc3/base/source_data/data_source.rb +0 -234
  44. data/lib/nanoc3/base/source_data/item.rb +0 -301
  45. data/lib/nanoc3/base/source_data/layout.rb +0 -130
  46. data/lib/nanoc3/base/source_data/site.rb +0 -361
  47. data/lib/nanoc3/base/store.rb +0 -135
  48. data/lib/nanoc3/cli.rb +0 -133
  49. data/lib/nanoc3/cli/command.rb +0 -139
  50. data/lib/nanoc3/cli/commands/autocompile.rb +0 -60
  51. data/lib/nanoc3/cli/commands/compile.rb +0 -280
  52. data/lib/nanoc3/cli/commands/create_item.rb +0 -62
  53. data/lib/nanoc3/cli/commands/create_layout.rb +0 -75
  54. data/lib/nanoc3/cli/commands/create_site.rb +0 -410
  55. data/lib/nanoc3/cli/commands/debug.rb +0 -119
  56. data/lib/nanoc3/cli/commands/info.rb +0 -98
  57. data/lib/nanoc3/cli/commands/nanoc.rb +0 -37
  58. data/lib/nanoc3/cli/commands/update.rb +0 -72
  59. data/lib/nanoc3/cli/commands/view.rb +0 -84
  60. data/lib/nanoc3/cli/commands/watch.rb +0 -125
  61. data/lib/nanoc3/cli/error_handler.rb +0 -193
  62. data/lib/nanoc3/cli/logger.rb +0 -91
  63. data/lib/nanoc3/data_sources.rb +0 -29
  64. data/lib/nanoc3/data_sources/deprecated/delicious.rb +0 -42
  65. data/lib/nanoc3/data_sources/deprecated/last_fm.rb +0 -87
  66. data/lib/nanoc3/data_sources/deprecated/twitter.rb +0 -38
  67. data/lib/nanoc3/data_sources/filesystem.rb +0 -299
  68. data/lib/nanoc3/data_sources/filesystem_unified.rb +0 -116
  69. data/lib/nanoc3/data_sources/filesystem_verbose.rb +0 -86
  70. data/lib/nanoc3/extra.rb +0 -22
  71. data/lib/nanoc3/extra/auto_compiler.rb +0 -103
  72. data/lib/nanoc3/extra/chick.rb +0 -125
  73. data/lib/nanoc3/extra/core_ext.rb +0 -4
  74. data/lib/nanoc3/extra/core_ext/enumerable.rb +0 -33
  75. data/lib/nanoc3/extra/core_ext/time.rb +0 -19
  76. data/lib/nanoc3/extra/deployers.rb +0 -11
  77. data/lib/nanoc3/extra/deployers/rsync.rb +0 -114
  78. data/lib/nanoc3/extra/file_proxy.rb +0 -40
  79. data/lib/nanoc3/extra/validators.rb +0 -12
  80. data/lib/nanoc3/extra/validators/links.rb +0 -264
  81. data/lib/nanoc3/extra/validators/w3c.rb +0 -95
  82. data/lib/nanoc3/extra/vcs.rb +0 -66
  83. data/lib/nanoc3/extra/vcses.rb +0 -17
  84. data/lib/nanoc3/extra/vcses/bazaar.rb +0 -25
  85. data/lib/nanoc3/extra/vcses/dummy.rb +0 -24
  86. data/lib/nanoc3/extra/vcses/git.rb +0 -25
  87. data/lib/nanoc3/extra/vcses/mercurial.rb +0 -25
  88. data/lib/nanoc3/extra/vcses/subversion.rb +0 -25
  89. data/lib/nanoc3/filters.rb +0 -53
  90. data/lib/nanoc3/filters/asciidoc.rb +0 -38
  91. data/lib/nanoc3/filters/bluecloth.rb +0 -19
  92. data/lib/nanoc3/filters/coderay.rb +0 -21
  93. data/lib/nanoc3/filters/colorize_syntax.rb +0 -261
  94. data/lib/nanoc3/filters/erb.rb +0 -35
  95. data/lib/nanoc3/filters/erubis.rb +0 -27
  96. data/lib/nanoc3/filters/haml.rb +0 -27
  97. data/lib/nanoc3/filters/kramdown.rb +0 -20
  98. data/lib/nanoc3/filters/less.rb +0 -53
  99. data/lib/nanoc3/filters/markaby.rb +0 -20
  100. data/lib/nanoc3/filters/maruku.rb +0 -20
  101. data/lib/nanoc3/filters/mustache.rb +0 -24
  102. data/lib/nanoc3/filters/rainpress.rb +0 -19
  103. data/lib/nanoc3/filters/rdiscount.rb +0 -22
  104. data/lib/nanoc3/filters/rdoc.rb +0 -33
  105. data/lib/nanoc3/filters/redcarpet.rb +0 -27
  106. data/lib/nanoc3/filters/redcloth.rb +0 -47
  107. data/lib/nanoc3/filters/relativize_paths.rb +0 -45
  108. data/lib/nanoc3/filters/rubypants.rb +0 -20
  109. data/lib/nanoc3/filters/sass.rb +0 -66
  110. data/lib/nanoc3/filters/slim.rb +0 -25
  111. data/lib/nanoc3/filters/typogruby.rb +0 -23
  112. data/lib/nanoc3/filters/uglify_js.rb +0 -42
  113. data/lib/nanoc3/helpers.rb +0 -16
  114. data/lib/nanoc3/helpers/blogging.rb +0 -319
  115. data/lib/nanoc3/helpers/breadcrumbs.rb +0 -40
  116. data/lib/nanoc3/helpers/capturing.rb +0 -138
  117. data/lib/nanoc3/helpers/filtering.rb +0 -50
  118. data/lib/nanoc3/helpers/html_escape.rb +0 -55
  119. data/lib/nanoc3/helpers/link_to.rb +0 -151
  120. data/lib/nanoc3/helpers/rendering.rb +0 -140
  121. data/lib/nanoc3/helpers/tagging.rb +0 -71
  122. data/lib/nanoc3/helpers/text.rb +0 -44
  123. data/lib/nanoc3/helpers/xml_sitemap.rb +0 -76
  124. data/lib/nanoc3/tasks.rb +0 -10
  125. data/lib/nanoc3/tasks/clean.rake +0 -16
  126. data/lib/nanoc3/tasks/clean.rb +0 -29
  127. data/lib/nanoc3/tasks/deploy/rsync.rake +0 -14
  128. data/lib/nanoc3/tasks/validate.rake +0 -92
  129. data/nanoc3.gemspec +0 -49
  130. data/tasks/doc.rake +0 -16
  131. data/tasks/test.rake +0 -44
  132. data/test/base/core_ext/array_spec.rb +0 -73
  133. data/test/base/core_ext/hash_spec.rb +0 -98
  134. data/test/base/core_ext/pathname_spec.rb +0 -27
  135. data/test/base/core_ext/string_spec.rb +0 -37
  136. data/test/base/test_checksum_store.rb +0 -35
  137. data/test/base/test_code_snippet.rb +0 -31
  138. data/test/base/test_compiler.rb +0 -316
  139. data/test/base/test_compiler_dsl.rb +0 -161
  140. data/test/base/test_context.rb +0 -31
  141. data/test/base/test_data_source.rb +0 -46
  142. data/test/base/test_dependency_tracker.rb +0 -262
  143. data/test/base/test_directed_graph.rb +0 -283
  144. data/test/base/test_filter.rb +0 -83
  145. data/test/base/test_item.rb +0 -179
  146. data/test/base/test_item_rep.rb +0 -553
  147. data/test/base/test_layout.rb +0 -59
  148. data/test/base/test_memoization.rb +0 -90
  149. data/test/base/test_notification_center.rb +0 -34
  150. data/test/base/test_outdatedness_checker.rb +0 -394
  151. data/test/base/test_plugin.rb +0 -30
  152. data/test/base/test_rule.rb +0 -19
  153. data/test/base/test_rule_context.rb +0 -65
  154. data/test/base/test_site.rb +0 -190
  155. data/test/cli/commands/test_compile.rb +0 -33
  156. data/test/cli/commands/test_create_item.rb +0 -14
  157. data/test/cli/commands/test_create_layout.rb +0 -28
  158. data/test/cli/commands/test_create_site.rb +0 -24
  159. data/test/cli/commands/test_help.rb +0 -12
  160. data/test/cli/commands/test_info.rb +0 -11
  161. data/test/cli/commands/test_update.rb +0 -10
  162. data/test/cli/test_cli.rb +0 -102
  163. data/test/cli/test_error_handler.rb +0 -29
  164. data/test/cli/test_logger.rb +0 -10
  165. data/test/data_sources/test_filesystem.rb +0 -433
  166. data/test/data_sources/test_filesystem_unified.rb +0 -536
  167. data/test/data_sources/test_filesystem_verbose.rb +0 -357
  168. data/test/extra/core_ext/test_enumerable.rb +0 -30
  169. data/test/extra/core_ext/test_time.rb +0 -15
  170. data/test/extra/deployers/test_rsync.rb +0 -232
  171. data/test/extra/test_auto_compiler.rb +0 -417
  172. data/test/extra/test_file_proxy.rb +0 -19
  173. data/test/extra/test_vcs.rb +0 -22
  174. data/test/extra/validators/test_links.rb +0 -51
  175. data/test/extra/validators/test_w3c.rb +0 -47
  176. data/test/filters/test_asciidoc.rb +0 -22
  177. data/test/filters/test_bluecloth.rb +0 -18
  178. data/test/filters/test_coderay.rb +0 -44
  179. data/test/filters/test_colorize_syntax.rb +0 -283
  180. data/test/filters/test_erb.rb +0 -99
  181. data/test/filters/test_erubis.rb +0 -70
  182. data/test/filters/test_haml.rb +0 -96
  183. data/test/filters/test_kramdown.rb +0 -18
  184. data/test/filters/test_less.rb +0 -113
  185. data/test/filters/test_markaby.rb +0 -24
  186. data/test/filters/test_maruku.rb +0 -18
  187. data/test/filters/test_mustache.rb +0 -25
  188. data/test/filters/test_rainpress.rb +0 -29
  189. data/test/filters/test_rdiscount.rb +0 -31
  190. data/test/filters/test_rdoc.rb +0 -18
  191. data/test/filters/test_redcarpet.rb +0 -63
  192. data/test/filters/test_redcloth.rb +0 -33
  193. data/test/filters/test_relativize_paths.rb +0 -332
  194. data/test/filters/test_rubypants.rb +0 -18
  195. data/test/filters/test_sass.rb +0 -229
  196. data/test/filters/test_slim.rb +0 -35
  197. data/test/filters/test_typogruby.rb +0 -21
  198. data/test/filters/test_uglify_js.rb +0 -30
  199. data/test/gem_loader.rb +0 -11
  200. data/test/helper.rb +0 -179
  201. data/test/helpers/test_blogging.rb +0 -754
  202. data/test/helpers/test_breadcrumbs.rb +0 -81
  203. data/test/helpers/test_capturing.rb +0 -41
  204. data/test/helpers/test_filtering.rb +0 -106
  205. data/test/helpers/test_html_escape.rb +0 -32
  206. data/test/helpers/test_link_to.rb +0 -249
  207. data/test/helpers/test_rendering.rb +0 -89
  208. data/test/helpers/test_tagging.rb +0 -87
  209. data/test/helpers/test_text.rb +0 -24
  210. data/test/helpers/test_xml_sitemap.rb +0 -103
  211. data/test/tasks/test_clean.rb +0 -67
@@ -1,59 +0,0 @@
1
- # encoding: utf-8
2
-
3
- class Nanoc3::LayoutTest < MiniTest::Unit::TestCase
4
-
5
- include Nanoc3::TestHelpers
6
-
7
- def test_initialize
8
- # Make sure attributes are cleaned
9
- layout = Nanoc3::Layout.new("content", { 'foo' => 'bar' }, '/foo/')
10
- assert_equal({ :foo => 'bar' }, layout.attributes)
11
-
12
- # Make sure identifier is cleaned
13
- layout = Nanoc3::Layout.new("content", { 'foo' => 'bar' }, 'foo')
14
- assert_equal('/foo/', layout.identifier)
15
- end
16
-
17
- def test_frozen_identifier
18
- layout = Nanoc3::Layout.new("foo", {}, '/foo')
19
-
20
- raised = false
21
- begin
22
- layout.identifier.chop!
23
- rescue => error
24
- raised = true
25
- assert_match /^can't modify frozen [Ss]tring$/, error.message
26
- end
27
- assert raised, 'Should have raised when trying to modify a frozen string'
28
- end
29
-
30
- def test_lookup_with_known_attribute
31
- # Create layout
32
- layout = Nanoc3::Layout.new("content", { 'foo' => 'bar' }, '/foo/')
33
-
34
- # Check attributes
35
- assert_equal('bar', layout[:foo])
36
- end
37
-
38
- def test_lookup_with_unknown_attribute
39
- # Create layout
40
- layout = Nanoc3::Layout.new("content", { 'foo' => 'bar' }, '/foo/')
41
-
42
- # Check attributes
43
- assert_equal(nil, layout[:filter])
44
- end
45
-
46
- def test_dump_and_load
47
- layout = Nanoc3::Layout.new(
48
- "foobar",
49
- { :a => { :b => 123 }},
50
- '/foo/')
51
-
52
- layout = Marshal.load(Marshal.dump(layout))
53
-
54
- assert_equal '/foo/', layout.identifier
55
- assert_equal 'foobar', layout.raw_content
56
- assert_equal({ :a => { :b => 123 }}, layout.attributes)
57
- end
58
-
59
- end
@@ -1,90 +0,0 @@
1
- # encoding: utf-8
2
-
3
- class Nanoc3::MemoizationTest < MiniTest::Unit::TestCase
4
-
5
- include Nanoc3::TestHelpers
6
-
7
- class Sample1
8
-
9
- extend Nanoc3::Memoization
10
-
11
- def initialize(value)
12
- @value = value
13
- end
14
-
15
- def run(n)
16
- @value*10 + n
17
- end
18
- memoize :run
19
-
20
- end
21
-
22
- class Sample2
23
-
24
- extend Nanoc3::Memoization
25
-
26
- def initialize(value)
27
- @value = value
28
- end
29
-
30
- def run(n)
31
- @value*100 + n
32
- end
33
- memoize :run
34
-
35
- end
36
-
37
- class EqualSample
38
-
39
- extend Nanoc3::Memoization
40
-
41
- def initialize(value)
42
- @value = value
43
- end
44
-
45
- def hash
46
- 4
47
- end
48
-
49
- def eql?(other)
50
- true
51
- end
52
-
53
- def ==(other)
54
- true
55
- end
56
-
57
- def run(n)
58
- @value*10 + n
59
- end
60
- memoize :run
61
-
62
- end
63
-
64
- def test
65
- sample1a = Sample1.new(10)
66
- sample1b = Sample1.new(15)
67
- sample2a = Sample2.new(20)
68
- sample2b = Sample2.new(25)
69
-
70
- 3.times do
71
- assert_equal (10*10+5), sample1a.run(5)
72
- assert_equal (10*15+7), sample1b.run(7)
73
- assert_equal (100*20+5), sample2a.run(5)
74
- assert_equal (100*25+7), sample2b.run(7)
75
- end
76
- end
77
-
78
- def test_equal
79
- sample1 = EqualSample.new(2)
80
- sample2 = EqualSample.new(3)
81
-
82
- 3.times do
83
- assert_equal (2*10+5), sample1.run(5)
84
- assert_equal (2*10+3), sample1.run(3)
85
- assert_equal (3*10+5), sample2.run(5)
86
- assert_equal (3*10+3), sample2.run(3)
87
- end
88
- end
89
-
90
- end
@@ -1,34 +0,0 @@
1
- # encoding: utf-8
2
-
3
- class Nanoc3::NotificationCenterTest < MiniTest::Unit::TestCase
4
-
5
- include Nanoc3::TestHelpers
6
-
7
- def test_post
8
- # Set up notification
9
- Nanoc3::NotificationCenter.on :ping_received, :test do
10
- @ping_received = true
11
- end
12
-
13
- # Post
14
- @ping_received = false
15
- Nanoc3::NotificationCenter.post :ping_received
16
- assert(@ping_received)
17
- end
18
-
19
- def test_remove
20
- # Set up notification
21
- Nanoc3::NotificationCenter.on :ping_received, :test do
22
- @ping_received = true
23
- end
24
-
25
- # Remove observer
26
- Nanoc3::NotificationCenter.remove :ping_received, :test
27
-
28
- # Post
29
- @ping_received = false
30
- Nanoc3::NotificationCenter.post :ping_received
31
- assert(!@ping_received)
32
- end
33
-
34
- end
@@ -1,394 +0,0 @@
1
- # encoding: utf-8
2
-
3
- class Nanoc3::OutdatednessCheckerTest < MiniTest::Unit::TestCase
4
-
5
- include Nanoc3::TestHelpers
6
-
7
- def test_not_outdated
8
- # Compile once
9
- with_site(:name => 'foo') do |site|
10
- File.open('content/index.html', 'w') { |io| io.write('o hello') }
11
- File.open('lib/stuff.rb', 'w') { |io| io.write('$foo = 123') }
12
-
13
- site.compile
14
- end
15
-
16
- # Check
17
- with_site(:name => 'foo') do |site|
18
- outdatedness_checker = site.compiler.send :outdatedness_checker
19
- rep = site.items[0].reps[0]
20
- assert_nil outdatedness_checker.outdatedness_reason_for(rep)
21
- end
22
- end
23
-
24
- def test_outdated_if_item_checksum_nil
25
- # Compile once
26
- with_site(:name => 'foo') do |site|
27
- File.open('content/index.html', 'w') { |io| io.write('o hello') }
28
- File.open('lib/stuff.rb', 'w') { |io| io.write('$foo = 123') }
29
-
30
- site.compile
31
- end
32
-
33
- # Delete checksums
34
- with_site(:name => 'foo') do |site|
35
- FileUtils.rm('tmp/checksums')
36
- end
37
-
38
- # Check
39
- with_site(:name => 'foo') do |site|
40
- outdatedness_checker = site.compiler.send :outdatedness_checker
41
- rep = site.items.find { |i| i.identifier == '/' }.reps[0]
42
- assert_equal ::Nanoc3::OutdatednessReasons::NotEnoughData,
43
- outdatedness_checker.outdatedness_reason_for(rep)
44
- end
45
- end
46
-
47
- def test_outdated_if_compiled_file_doesnt_exist
48
- # Compile once
49
- with_site(:name => 'foo') do |site|
50
- File.open('content/index.html', 'w') { |io| io.write('o hello') }
51
- File.open('lib/stuff.rb', 'w') { |io| io.write('$foo = 123') }
52
-
53
- site.compile
54
- end
55
-
56
- # Delete old item
57
- FileUtils.cd('foo') do
58
- FileUtils.rm_rf('output/index.html')
59
- end
60
-
61
- # Check
62
- with_site(:name => 'foo') do |site|
63
- outdatedness_checker = site.compiler.send :outdatedness_checker
64
- rep = site.items.find { |i| i.identifier == '/' }.reps[0]
65
- assert_equal ::Nanoc3::OutdatednessReasons::NotWritten,
66
- outdatedness_checker.outdatedness_reason_for(rep)
67
- end
68
- end
69
-
70
- def test_outdated_if_item_checksum_is_different
71
- # Compile once
72
- with_site(:name => 'foo') do |site|
73
- File.open('content/index.html', 'w') { |io| io.write('o hello') }
74
- File.open('content/new.html', 'w') { |io| io.write('o hello too') }
75
- File.open('lib/stuff.rb', 'w') { |io| io.write('$foo = 123') }
76
-
77
- site.compile
78
- end
79
-
80
- # Create new item
81
- FileUtils.cd('foo') do
82
- File.open('content/new.html', 'w') { |io| io.write('o hello DIFFERENT!!!') }
83
- end
84
-
85
- # Check
86
- with_site(:name => 'foo') do |site|
87
- outdatedness_checker = site.compiler.send :outdatedness_checker
88
- rep = site.items.find { |i| i.identifier == '/new/' }.reps[0]
89
- assert_equal ::Nanoc3::OutdatednessReasons::SourceModified,
90
- outdatedness_checker.outdatedness_reason_for(rep)
91
- end
92
- end
93
-
94
- def test_outdated_if_dependent_layout_outdated
95
- # Compile once
96
- with_site(:name => 'foo', :compilation_rule_content => 'layout "/default/"', :has_layout => true) do |site|
97
- File.open('content/index.html', 'w') { |io| io.write('o hello') }
98
- File.open('layouts/default.html', 'w') { |io| io.write('!!! <%= yield %> !!!') }
99
-
100
- site.compile
101
- end
102
-
103
- # Change layout
104
- FileUtils.cd('foo') do
105
- File.open('layouts/default.html', 'w') { |io| io.write('!!! <%= yield %> !!! different') }
106
- end
107
-
108
- # Check
109
- with_site(:name => 'foo') do |site|
110
- # FIXME ugly fugly hack
111
- site.compiler.load
112
-
113
- outdatedness_checker = site.compiler.send :outdatedness_checker
114
- rep = site.items.find { |i| i.identifier == '/' }.reps[0]
115
- assert_equal ::Nanoc3::OutdatednessReasons::DependenciesOutdated,
116
- outdatedness_checker.outdatedness_reason_for(rep)
117
- end
118
- end
119
-
120
- def test_outdated_if_dependent_item_outdated
121
- # Compile once
122
- with_site(:name => 'foo', :compilation_rule_content => 'filter :erb') do |site|
123
- File.open('content/a.html', 'w') do |io|
124
- io.write('<%= @items.find { |i| i.identifier == "/b/" }.compiled_content %>')
125
- end
126
- File.open('content/b.html', 'w') do |io|
127
- io.write('stuff')
128
- end
129
-
130
- site.compile
131
- end
132
-
133
- # Change item
134
- FileUtils.cd('foo') do
135
- File.open('content/b.html', 'w') do |io|
136
- io.write('stuff different!!!')
137
- end
138
- end
139
-
140
- # Check
141
- with_site(:name => 'foo') do |site|
142
- # FIXME ugly fugly hack
143
- site.compiler.load
144
-
145
- outdatedness_checker = site.compiler.send :outdatedness_checker
146
- rep = site.items.find { |i| i.identifier == '/a/' }.reps[0]
147
- assert_equal ::Nanoc3::OutdatednessReasons::DependenciesOutdated,
148
- outdatedness_checker.outdatedness_reason_for(rep)
149
- end
150
- end
151
-
152
- def test_outdated_if_dependent_item_outdated_chained
153
- # Compile once
154
- with_site(:name => 'foo', :compilation_rule_content => 'filter :erb') do |site|
155
- File.open('content/a.html', 'w') do |io|
156
- io.write('<%= @items.find { |i| i.identifier == "/b/" }.compiled_content %> aaa')
157
- end
158
- File.open('content/b.html', 'w') do |io|
159
- io.write('<%= @items.find { |i| i.identifier == "/c/" }.compiled_content %> bbb')
160
- end
161
- File.open('content/c.html', 'w') do |io|
162
- io.write('stuff')
163
- end
164
-
165
- site.compile
166
- end
167
-
168
- # Change item
169
- FileUtils.cd('foo') do
170
- File.open('content/c.html', 'w') do |io|
171
- io.write('stuff different!!!')
172
- end
173
- end
174
-
175
- # Check
176
- with_site(:name => 'foo') do |site|
177
- # FIXME ugly fugly hack
178
- site.compiler.load
179
-
180
- outdatedness_checker = site.compiler.send :outdatedness_checker
181
- rep = site.items.find { |i| i.identifier == '/a/' }.reps[0]
182
- assert_equal ::Nanoc3::OutdatednessReasons::DependenciesOutdated,
183
- outdatedness_checker.outdatedness_reason_for(rep)
184
- end
185
- end
186
-
187
- def test_outdated_if_dependent_item_removed
188
- # Compile once
189
- with_site(:name => 'foo', :compilation_rule_content => 'filter :erb') do |site|
190
- File.open('content/a.html', 'w') do |io|
191
- io.write('<% @items.select { |i| i.identifier != @item.identifier }.each do |i| %>')
192
- io.write(' <%= i.compiled_content %>')
193
- io.write('<% end %>')
194
- end
195
- File.open('content/b.html', 'w') do |io|
196
- io.write('stuff')
197
- end
198
-
199
- site.compile
200
- end
201
-
202
- # Delete item
203
- FileUtils.cd('foo') do
204
- FileUtils.rm_rf('content/b.html')
205
- end
206
-
207
- # Check
208
- with_site(:name => 'foo') do |site|
209
- # FIXME ugly fugly hack
210
- site.compiler.load
211
-
212
- outdatedness_checker = site.compiler.send :outdatedness_checker
213
- rep = site.items.find { |i| i.identifier == '/a/' }.reps[0]
214
- assert_equal ::Nanoc3::OutdatednessReasons::DependenciesOutdated,
215
- outdatedness_checker.outdatedness_reason_for(rep)
216
- end
217
- end
218
-
219
- def test_outdated_if_dependent_item_added
220
- # Compile once
221
- with_site(:name => 'foo', :compilation_rule_content => 'filter :erb') do |site|
222
- File.open('content/a.html', 'w') do |io|
223
- io.write('<% @items.select { |i| i.identifier != @item.identifier }.each do |i| %>')
224
- io.write(' <%= i.compiled_content %>')
225
- io.write('<% end %>')
226
- end
227
- File.open('content/b.html', 'w') do |io|
228
- io.write('stuff')
229
- end
230
-
231
- site.compile
232
- end
233
-
234
- # Add item
235
- FileUtils.cd('foo') do
236
- File.open('content/z.html', 'w') do |io|
237
- io.write('moar stuff')
238
- end
239
- end
240
-
241
- # Check
242
- with_site(:name => 'foo') do |site|
243
- # FIXME ugly fugly hack
244
- site.compiler.load
245
-
246
- outdatedness_checker = site.compiler.send :outdatedness_checker
247
- rep = site.items.find { |i| i.identifier == '/a/' }.reps[0]
248
- assert_equal ::Nanoc3::OutdatednessReasons::DependenciesOutdated,
249
- outdatedness_checker.outdatedness_reason_for(rep)
250
- end
251
- end
252
-
253
- # TODO make sure outdatedness of non-outdated items is correct
254
-
255
- def test_outdated_if_code_snippets_outdated
256
- # Compile once
257
- with_site(:name => 'foo') do |site|
258
- File.open('content/index.html', 'w') { |io| io.write('o hello') }
259
-
260
- site.compile
261
- end
262
-
263
- # Change code
264
- FileUtils.cd('foo') do
265
- File.open('lib/moo.rb', 'w') { |io| io.write('def moo ; puts "moo" ; end') }
266
- end
267
-
268
- # Check
269
- with_site(:name => 'foo') do |site|
270
- outdatedness_checker = site.compiler.send :outdatedness_checker
271
- rep = site.items.find { |i| i.identifier == '/' }.reps[0]
272
- assert_equal ::Nanoc3::OutdatednessReasons::CodeSnippetsModified,
273
- outdatedness_checker.outdatedness_reason_for(rep)
274
- end
275
- end
276
-
277
- def test_outdated_if_config_outdated
278
- # Compile once
279
- with_site(:name => 'foo') do |site|
280
- File.open('content/index.html', 'w') { |io| io.write('o hello') }
281
-
282
- site.compile
283
- end
284
-
285
- # Change code
286
- FileUtils.cd('foo') do
287
- File.open('config.yaml', 'w') { |io| io.write('awesome: true') }
288
- end
289
-
290
- # Check
291
- with_site(:name => 'foo') do |site|
292
- outdatedness_checker = site.compiler.send :outdatedness_checker
293
- rep = site.items.find { |i| i.identifier == '/' }.reps[0]
294
- assert_equal ::Nanoc3::OutdatednessReasons::ConfigurationModified,
295
- outdatedness_checker.outdatedness_reason_for(rep)
296
- end
297
- end
298
-
299
- def test_not_outdated_if_irrelevant_rule_modified
300
- # Compile once
301
- with_site(:name => 'foo') do |site|
302
- File.open('content/index.html', 'w') { |io| io.write('o hello') }
303
-
304
- site.compile
305
- end
306
-
307
- # Change code
308
- FileUtils.cd('foo') do
309
- File.open('Rules', 'a') { |io| io.write('layout "/moo/", :haml') }
310
- end
311
-
312
- # Check
313
- with_site(:name => 'foo') do |site|
314
- outdatedness_checker = site.compiler.send :outdatedness_checker
315
- rep = site.items.find { |i| i.identifier == '/' }.reps[0]
316
- assert_nil outdatedness_checker.outdatedness_reason_for(rep)
317
- end
318
- end
319
-
320
- def test_outdated_if_relevant_rule_modified
321
- # Create site
322
- with_site(:name => 'foo') do |site|
323
- File.open('content/index.html', 'w') { |io| io.write('o hello') }
324
- File.open('Rules', 'w') do |io|
325
- io.write("compile '/' do\n")
326
- io.write(" filter :erb\n")
327
- io.write("end\n")
328
- io.write("\n")
329
- io.write("route '/' do\n")
330
- io.write(" '/index.html'\n")
331
- io.write("end\n")
332
- end
333
- end
334
-
335
- # Compile once
336
- FileUtils.cd('foo') do
337
- site = Nanoc3::Site.new('.')
338
- site.compile
339
- end
340
-
341
- # Modify rules
342
- FileUtils.cd('foo') do
343
- File.open('Rules', 'w') do |io|
344
- io.write("compile '/' do\n")
345
- io.write("end\n")
346
- io.write("\n")
347
- io.write("route '/' do\n")
348
- io.write(" '/index.html'\n")
349
- io.write("end\n")
350
- end
351
- end
352
-
353
- # Check
354
- FileUtils.cd('foo') do
355
- site = Nanoc3::Site.new('.')
356
- outdatedness_checker = site.compiler.send :outdatedness_checker
357
- rep = site.items.find { |i| i.identifier == '/' }.reps[0]
358
- assert_equal ::Nanoc3::OutdatednessReasons::RulesModified,
359
- outdatedness_checker.outdatedness_reason_for(rep)
360
- end
361
- end
362
-
363
- def test_items_in_rules_should_not_cause_outdatedness
364
- # Create site
365
- with_site(:name => 'foo') do |site|
366
- File.open('content/index.html', 'w') { |io| io.write('o hello') }
367
- File.open('Rules', 'w') do |io|
368
- io.write("compile '/' do\n")
369
- io.write(" filter :erb, :stuff => @items\n")
370
- io.write("end\n")
371
- io.write("\n")
372
- io.write("route '/' do\n")
373
- io.write(" '/index.html'\n")
374
- io.write("end\n")
375
- end
376
- end
377
-
378
- # Compile
379
- FileUtils.cd('foo') do
380
- site = Nanoc3::Site.new('.')
381
- site.compile
382
- end
383
-
384
- # Assert not outdated
385
- FileUtils.cd('foo') do
386
- site = Nanoc3::Site.new('.')
387
- outdatedness_checker = site.compiler.outdatedness_checker
388
- site.items.each do |item|
389
- refute outdatedness_checker.outdated?(item), "item should not be outdated"
390
- end
391
- end
392
- end
393
-
394
- end