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,754 +0,0 @@
1
- # encoding: utf-8
2
-
3
- class Nanoc3::Helpers::BloggingTest < MiniTest::Unit::TestCase
4
-
5
- include Nanoc3::TestHelpers
6
-
7
- include Nanoc3::Helpers::Blogging
8
- include Nanoc3::Helpers::Text
9
-
10
- def mock_article
11
- item = mock
12
- item.stubs(:[]).with(:updated_at).returns(Time.now - 500)
13
- item.stubs(:[]).with(:kind).returns('article')
14
- item.stubs(:[]).with(:created_at).returns(Time.now - 1000)
15
- item.stubs(:[]).with(:title).returns('An Item')
16
- item.stubs(:[]).with(:custom_path_in_feed).returns(nil)
17
- item.stubs(:[]).with(:custom_url_in_feed).returns(nil)
18
- item.stubs(:[]).with(:excerpt).returns(nil)
19
- item.stubs(:path).returns("/item/")
20
- item.stubs(:[]).with(:author_name).returns(nil)
21
- item.stubs(:[]).with(:author_uri).returns(nil)
22
- item.stubs(:compiled_content).returns('item content')
23
- item
24
- end
25
-
26
- def mock_item
27
- item = mock
28
- item.stubs(:[]).with(:kind).returns('item')
29
- item
30
- end
31
-
32
- def test_articles
33
- # Create items
34
- @items = [
35
- Nanoc3::Item.new(
36
- 'blah',
37
- { :kind => 'item' },
38
- '/0/'
39
- ),
40
- Nanoc3::Item.new(
41
- 'blah blah',
42
- { :kind => 'article' },
43
- '/1/'
44
- ),
45
- Nanoc3::Item.new(
46
- 'blah blah blah',
47
- { :kind => 'article' },
48
- '/2/'
49
- )
50
- ]
51
-
52
- # Check
53
- assert_equal(2, articles.size)
54
- assert articles.include?(@items[1])
55
- assert articles.include?(@items[2])
56
- ensure
57
- # Cleanup
58
- @items = nil
59
- end
60
-
61
- def test_sorted_articles
62
- # Create items
63
- @items = [
64
- Nanoc3::Item.new(
65
- 'blah',
66
- { :kind => 'item' },
67
- '/0/'
68
- ),
69
- Nanoc3::Item.new(
70
- 'blah',
71
- { :kind => 'article', :created_at => (Date.today - 1).to_s },
72
- '/1/'
73
- ),
74
- Nanoc3::Item.new(
75
- 'blah',
76
- { :kind => 'article', :created_at => (Time.now - 500).to_s },
77
- '/2/'
78
- )
79
- ]
80
-
81
- # Check
82
- assert_equal(2, sorted_articles.size)
83
- assert_equal(@items[2], sorted_articles[0])
84
- assert_equal(@items[1], sorted_articles[1])
85
- ensure
86
- # Cleanup
87
- @items = nil
88
- end
89
-
90
- def test_atom_feed
91
- if_have 'builder' do
92
- # Create items
93
- @items = [ mock, mock_article, mock_article ]
94
-
95
- # Create item 0
96
- @items[0].stubs(:[]).with(:kind).returns('item')
97
-
98
- # Create item 1
99
- @items[1].stubs(:[]).with(:updated_at).returns(Date.today - 1)
100
- @items[1].stubs(:[]).with(:kind).returns('article')
101
- @items[1].stubs(:[]).with(:created_at).returns((Date.today - 2).to_s)
102
- @items[1].stubs(:[]).with(:title).returns('Item One')
103
- @items[1].stubs(:[]).with(:custom_path_in_feed).returns(nil)
104
- @items[1].stubs(:[]).with(:custom_url_in_feed).returns(nil)
105
- @items[1].stubs(:[]).with(:excerpt).returns(nil)
106
- @items[1].stubs(:path).returns("/item1/")
107
- @items[1].expects(:compiled_content).with(:snapshot => :pre).returns('item 1 content')
108
-
109
- # Create item 2
110
- @items[2].expects(:compiled_content).with(:snapshot => :pre).returns('item 2 content')
111
-
112
- # Mock site
113
- @site = mock
114
- @site.stubs(:config).returns({ :base_url => 'http://example.com' })
115
-
116
- # Create feed item
117
- @item = mock
118
- @item.stubs(:[]).with(:title).returns('My Cool Blog')
119
- @item.stubs(:[]).with(:author_name).returns('Denis Defreyne')
120
- @item.stubs(:[]).with(:author_uri).returns('http://stoneship.org/')
121
- @item.stubs(:[]).with(:feed_url).returns(nil)
122
- @item.stubs(:path).returns("/journal/feed/")
123
-
124
- # Check
125
- atom_feed
126
- end
127
- end
128
-
129
- def test_atom_feed_with_times
130
- if_have 'builder' do
131
- # Create items
132
- @items = [ mock_item, mock_article, mock_article ]
133
-
134
- # Create item 1
135
- @items[1].stubs(:[]).with(:updated_at).returns(Time.now - 500)
136
- @items[1].stubs(:[]).with(:created_at).returns(Time.now - 1000)
137
- @items[1].expects(:compiled_content).returns('item 1 content')
138
-
139
- # Create item 2
140
- @items[2].stubs(:[]).with(:updated_at).returns(Time.now - 250)
141
- @items[2].stubs(:[]).with(:created_at).returns(Time.now - 1200)
142
- @items[2].expects(:compiled_content).returns('item 2 content')
143
-
144
- # Mock site
145
- @site = mock
146
- @site.stubs(:config).returns({ :base_url => 'http://example.com' })
147
-
148
- # Create feed item
149
- @item = mock
150
- @item.stubs(:[]).with(:title).returns('My Cool Blog')
151
- @item.stubs(:[]).with(:author_name).returns('Denis Defreyne')
152
- @item.stubs(:[]).with(:author_uri).returns('http://stoneship.org/')
153
- @item.stubs(:[]).with(:feed_url).returns(nil)
154
- @item.stubs(:path).returns("/journal/feed/")
155
-
156
- # Check
157
- atom_feed
158
- end
159
- end
160
-
161
- def test_atom_feed_without_articles
162
- if_have 'builder' do
163
- # Mock items
164
- @items = [ mock_item, mock_item ]
165
-
166
- # Mock site
167
- @site = mock
168
- @site.stubs(:config).returns({ :base_url => 'http://example.com' })
169
-
170
- # Create feed item
171
- @item = mock
172
- @item.stubs(:[]).with(:title).returns('My Blog Or Something')
173
- @item.stubs(:[]).with(:author_name).returns('J. Doe')
174
- @item.stubs(:[]).with(:author_uri).returns('http://example.com/~jdoe')
175
-
176
- # Check
177
- error = assert_raises(RuntimeError) do
178
- atom_feed
179
- end
180
- assert_equal(
181
- 'Cannot build Atom feed: no articles',
182
- error.message
183
- )
184
- end
185
- end
186
-
187
- def test_atom_feed_without_base_url
188
- if_have 'builder' do
189
- # Create items
190
- @items = [ mock_item, mock_article ]
191
-
192
- # Mock site
193
- @site = mock
194
- @site.stubs(:config).returns({:base_url => nil})
195
-
196
- # Create feed item
197
- @item = mock
198
- @item.stubs(:[]).with(:title).returns('My Blog Or Something')
199
- @item.stubs(:[]).with(:author_name).returns('J. Doe')
200
- @item.stubs(:[]).with(:author_uri).returns('http://example.com/~jdoe')
201
-
202
- # Check
203
- error = assert_raises(RuntimeError) do
204
- atom_feed
205
- end
206
- assert_equal(
207
- 'Cannot build Atom feed: site configuration has no base_url',
208
- error.message
209
- )
210
- end
211
- end
212
-
213
- def test_atom_feed_without_title
214
- if_have 'builder' do
215
- # Create items
216
- @items = [ mock_item, mock_article ]
217
-
218
- # Mock site
219
- @site = mock
220
- @site.stubs(:config).returns({ :base_url => 'http://example.com' })
221
-
222
- # Create feed item
223
- @item = mock
224
- @item.stubs(:[]).with(:title).returns(nil)
225
- @item.stubs(:[]).with(:author_name).returns('J. Doe')
226
- @item.stubs(:[]).with(:author_uri).returns('http://example.com/~jdoe')
227
-
228
- # Check
229
- error = assert_raises(RuntimeError) do
230
- atom_feed
231
- end
232
- assert_equal(
233
- 'Cannot build Atom feed: no title in params, item or site config',
234
- error.message
235
- )
236
- end
237
- end
238
-
239
- def test_atom_feed_without_author_name
240
- if_have 'builder' do
241
- # Create items
242
- @items = [ mock_item, mock_article ]
243
-
244
- # Mock site
245
- @site = mock
246
- @site.stubs(:config).returns({ :base_url => 'http://example.com' })
247
-
248
- # Create feed item
249
- @item = mock
250
- @item.stubs(:[]).with(:title).returns('My Blog Or Something')
251
- @item.stubs(:[]).with(:author_name).returns(nil)
252
- @item.stubs(:[]).with(:author_uri).returns('http://example.com/~jdoe')
253
-
254
- # Check
255
- error = assert_raises(RuntimeError) do
256
- atom_feed
257
- end
258
- assert_equal(
259
- 'Cannot build Atom feed: no author_name in params, item or site config',
260
- error.message
261
- )
262
- end
263
- end
264
-
265
- def test_atom_feed_with_author_name_and_uri_from_content_item
266
- if_have 'builder' do
267
- # Create items
268
- @items = [ mock_article ]
269
-
270
- # Create item 1
271
- @items[0].stubs(:[]).with(:author_name).returns("Don Alias")
272
- @items[0].stubs(:[]).with(:author_uri).returns("http://don.example.com/")
273
- @items[0].expects(:compiled_content).returns('item 1 content')
274
-
275
- # Mock site
276
- @site = mock
277
- @site.stubs(:config).returns({ :base_url => 'http://example.com/' })
278
-
279
- # Create feed item
280
- @item = mock
281
- @item.stubs(:[]).with(:kind).returns(nil)
282
- @item.stubs(:[]).with(:title).returns('My Cool Blog')
283
- @item.stubs(:[]).with(:author_name).returns('Denis Defreyne')
284
- @item.stubs(:[]).with(:author_uri).returns('http://stoneship.org/')
285
- @item.stubs(:[]).with(:feed_url).returns(nil)
286
- @item.stubs(:path).returns("/journal/feed/")
287
-
288
- # Check
289
- # TODO: Use xpath matchers for more specific test
290
- result = atom_feed
291
- # Still should keep feed level author
292
- assert_match(
293
- /#{Regexp.escape('<name>Denis Defreyne</name>')}/, #'
294
- result
295
- )
296
- assert_match(
297
- /#{Regexp.escape('<uri>http://stoneship.org/</uri>')}/, #'
298
- result
299
- )
300
-
301
- # Overrides on specific items
302
- assert_match(
303
- /#{Regexp.escape('<name>Don Alias</name>')}/, #'
304
- result
305
- )
306
- assert_match(
307
- /#{Regexp.escape('<uri>http://don.example.com/</uri>')}/, #'
308
- result
309
- )
310
- end
311
- end
312
-
313
- def test_atom_feed_without_author_uri
314
- if_have 'builder' do
315
- # Create items
316
- @items = [ mock_item, mock_article ]
317
-
318
- # Mock site
319
- @site = mock
320
- @site.stubs(:config).returns({ :base_url => 'http://example.com' })
321
-
322
- # Create feed item
323
- @item = mock
324
- @item.stubs(:[]).with(:title).returns('My Blog Or Something')
325
- @item.stubs(:[]).with(:author_name).returns('J. Doe')
326
- @item.stubs(:[]).with(:author_uri).returns(nil)
327
-
328
- # Check
329
- error = assert_raises(RuntimeError) do
330
- atom_feed
331
- end
332
- assert_equal(
333
- 'Cannot build Atom feed: no author_uri in params, item or site config',
334
- error.message
335
- )
336
- end
337
- end
338
-
339
- def test_atom_feed_without_articles_created_at
340
- if_have 'builder' do
341
- # Create items
342
- @items = [ mock_item, mock_article, mock_article ]
343
- @items[1].stubs(:[]).with(:created_at).returns(Time.now.to_s)
344
- @items[2].stubs(:[]).with(:created_at).returns(nil)
345
-
346
- # Mock site
347
- @site = mock
348
- @site.stubs(:config).returns({ :base_url => 'http://example.com' })
349
-
350
- # Create feed item
351
- @item = mock
352
- @item.stubs(:[]).with(:title).returns('My Blog Or Something')
353
- @item.stubs(:[]).with(:author_name).returns('J. Doe')
354
- @item.stubs(:[]).with(:author_uri).returns('http://example.com/~jdoe')
355
-
356
- # Check
357
- error = assert_raises(RuntimeError) do
358
- atom_feed
359
- end
360
- assert_equal(
361
- 'Cannot build Atom feed: one or more articles lack created_at',
362
- error.message
363
- )
364
- end
365
- end
366
-
367
- def test_atom_feed_with_title_author_name_and_uri_as_params
368
- if_have 'builder' do
369
- # Create items
370
- @items = [ mock_item, mock_article ]
371
- @items[1].expects(:compiled_content).with(:snapshot => :pre).returns('asdf')
372
-
373
- # Mock site
374
- @site = mock
375
- @site.stubs(:config).returns({ :base_url => 'http://example.com' })
376
-
377
- # Create feed item
378
- @item = mock
379
- @item.stubs(:[]).with(:title).returns(nil)
380
- @item.stubs(:[]).with(:author_name).returns(nil)
381
- @item.stubs(:[]).with(:author_uri).returns(nil)
382
- @item.stubs(:[]).with(:[]).with(:feed_url).returns('http://example.com/feed')
383
-
384
- # Check
385
- atom_feed(
386
- :author_name => 'Bob',
387
- :author_uri => 'http://example.com/~bob/',
388
- :title => 'My Blog Or Something'
389
- )
390
- end
391
- end
392
-
393
- def test_atom_feed_with_title_author_name_and_uri_from_config
394
- if_have 'builder' do
395
- # Create items
396
- @items = [ mock_item, mock_article ]
397
- @items[1].expects(:compiled_content).with(:snapshot => :pre).returns('asdf')
398
-
399
- # Mock site
400
- @config = {
401
- :author_name => 'Bob',
402
- :author_uri => 'http://example.com/~bob/',
403
- :title => 'My Blog Or Something',
404
- :base_url => 'http://example.com'
405
- }
406
- @site = mock
407
- @site.stubs(:config).returns(@config)
408
-
409
- # Create feed item
410
- @item = mock
411
- @item.stubs(:[]).with(:title).returns(nil)
412
- @item.stubs(:[]).with(:author_name).returns(nil)
413
- @item.stubs(:[]).with(:author_uri).returns(nil)
414
- @item.stubs(:[]).with(:[]).with(:feed_url).returns('http://example.com/feed')
415
-
416
- # Check
417
- atom_feed
418
- end
419
- end
420
-
421
- def test_atom_feed_with_articles_param
422
- if_have 'builder' do
423
- # Mock items
424
- @items = [ mock_article, mock_article ]
425
-
426
- @items[0].expects(:compiled_content).never
427
- @items[1].stubs(:[]).with(:title).returns('Item One')
428
- @items[1].expects(:compiled_content).with(:snapshot => :pre).returns('asdf')
429
-
430
- # Mock site
431
- @site = mock
432
- @site.stubs(:config).returns({ :base_url => 'http://example.com' })
433
-
434
- # Create feed item
435
- @item = mock
436
- @item.stubs(:[]).with(:title).returns('My Blog Or Something')
437
- @item.stubs(:[]).with(:author_name).returns('J. Doe')
438
- @item.stubs(:[]).with(:author_uri).returns('http://example.com/~jdoe')
439
- @item.stubs(:[]).with(:[]).with(:feed_url).returns('http://example.com/feed')
440
-
441
- # Check
442
- atom_feed :articles => [ @items[1] ]
443
- end
444
- end
445
-
446
- def test_atom_feed_with_limit_param
447
- if_have 'builder' do
448
- # Mock articles
449
- @items = [ mock_article, mock_article ]
450
- @items.each_with_index do |article, i|
451
- article.stubs(:[]).with(:title).returns("Article #{i}")
452
- article.stubs(:[]).with(:created_at).returns(Time.now - i)
453
- end
454
-
455
- # Mock site
456
- @site = mock
457
- @site.stubs(:config).returns({ :base_url => 'http://example.com' })
458
-
459
- # Create feed item
460
- @item = mock
461
- @item.stubs(:[]).with(:title).returns('My Blog Or Something')
462
- @item.stubs(:[]).with(:author_name).returns('J. Doe')
463
- @item.stubs(:[]).with(:author_uri).returns('http://example.com/~jdoe')
464
- @item.stubs(:[]).with(:feed_url).returns('http://example.com/feed')
465
-
466
- # Check
467
- result = atom_feed :limit => 1, :articles => @items
468
- assert_match(
469
- Regexp.new('Article 0', Regexp::MULTILINE),
470
- result
471
- )
472
- refute_match(
473
- Regexp.new('Article 1', Regexp::MULTILINE),
474
- result
475
- )
476
- end
477
- end
478
-
479
- def test_atom_feed_sorting
480
- if_have 'builder' do
481
- # Mock articles
482
- @items = [ mock_article, mock_article ]
483
- @items.each_with_index do |article, i|
484
- article.stubs(:[]).with(:title).returns("Article #{i}")
485
- end
486
- @items[0].stubs(:[]).with(:created_at).returns('23-02-2009')
487
- @items[1].stubs(:[]).with(:created_at).returns('22-03-2009')
488
-
489
- # Mock site
490
- @site = mock
491
- @site.stubs(:config).returns({ :base_url => 'http://example.com' })
492
-
493
- # Create feed item
494
- @item = mock
495
- @item.stubs(:[]).with(:title).returns('My Blog Or Something')
496
- @item.stubs(:[]).with(:author_name).returns('J. Doe')
497
- @item.stubs(:[]).with(:author_uri).returns('http://example.com/~jdoe')
498
- @item.stubs(:[]).with(:feed_url).returns('http://example.com/feed')
499
-
500
- # Check
501
- result = atom_feed
502
- assert_match(
503
- Regexp.new('Article 1.*Article 0', Regexp::MULTILINE),
504
- result
505
- )
506
- end
507
- end
508
-
509
- def test_atom_feed_with_content_proc_param
510
- if_have 'builder' do
511
- # Mock article
512
- @items = [ mock_article ]
513
-
514
- # Mock site
515
- @site = mock
516
- @site.stubs(:config).returns({ :base_url => 'http://example.com' })
517
-
518
- # Create feed item
519
- @item = mock
520
- @item.stubs(:[]).with(:title).returns('My Blog Or Something')
521
- @item.stubs(:[]).with(:author_name).returns('J. Doe')
522
- @item.stubs(:[]).with(:author_uri).returns('http://example.com/~jdoe')
523
- @item.stubs(:[]).with(:feed_url).returns('http://example.com/feed')
524
-
525
- # Check
526
- result = atom_feed :content_proc => lambda { |a| 'foobar!' }
527
- assert_match 'foobar!</content>', result
528
- end
529
- end
530
-
531
- def test_atom_feed_with_excerpt_proc_param
532
- if_have 'builder' do
533
- # Mock article
534
- @items = [ mock_article ]
535
-
536
- # Mock site
537
- @site = mock
538
- @site.stubs(:config).returns({ :base_url => 'http://example.com' })
539
-
540
- # Create feed item
541
- @item = mock
542
- @item.stubs(:[]).with(:title).returns('My Blog Or Something')
543
- @item.stubs(:[]).with(:author_name).returns('J. Doe')
544
- @item.stubs(:[]).with(:author_uri).returns('http://example.com/~jdoe')
545
- @item.stubs(:[]).with(:[]).with(:feed_url).returns('http://example.com/feed')
546
-
547
- # Check
548
- result = atom_feed :excerpt_proc => lambda { |a| 'foobar!' }
549
- assert_match 'foobar!</summary>', result
550
- end
551
- end
552
-
553
- def test_atom_feed_with_item_without_path
554
- if_have 'builder' do
555
- # Create items
556
- @items = [ mock_article ]
557
- @items[0].stubs(:path).returns(nil)
558
-
559
- # Mock site
560
- @site = mock
561
- @site.stubs(:config).returns({ :base_url => 'http://example.com' })
562
-
563
- # Create feed item
564
- @item = mock
565
- @item.stubs(:identifier).returns('/feed/')
566
- @item.stubs(:[]).with(:title).returns('My Cool Blog')
567
- @item.stubs(:[]).with(:author_name).returns('Denis Defreyne')
568
- @item.stubs(:[]).with(:author_uri).returns('http://stoneship.org/')
569
- @item.stubs(:[]).with(:feed_url).returns(nil)
570
- @item.stubs(:path).returns("/journal/feed/")
571
-
572
- # Check
573
- atom_feed
574
- end
575
- end
576
-
577
- def test_url_for_without_custom_path_in_feed
578
- # Create site
579
- @site = Nanoc3::Site.new({ :base_url => 'http://example.com' })
580
-
581
- # Create article
582
- item = Nanoc3::Item.new('content', {}, '/foo/')
583
- item.reps << Nanoc3::ItemRep.new(item, :default)
584
- item.reps[0].path = '/foo/bar/'
585
-
586
- # Check
587
- assert_equal('http://example.com/foo/bar/', url_for(item))
588
- ensure
589
- # Cleanup
590
- @item = nil
591
- end
592
-
593
- def test_url_for_with_custom_path_in_feed
594
- # Create site
595
- @site = Nanoc3::Site.new({ :base_url => 'http://example.com' })
596
-
597
- # Create article
598
- item = Nanoc3::Item.new(
599
- 'content', { :custom_path_in_feed => '/meow/woof/' }, '/foo/')
600
- item.reps << Nanoc3::ItemRep.new(item, :default)
601
-
602
- # Check
603
- assert_equal('http://example.com/meow/woof/', url_for(item))
604
- ensure
605
- # Cleanup
606
- @item = nil
607
- end
608
-
609
- def test_url_for_with_custom_url_in_feed
610
- # Create site
611
- @site = Nanoc3::Site.new({ :base_url => 'http://example.com' })
612
-
613
- # Create article
614
- item = Nanoc3::Item.new(
615
- 'content', { :custom_url_in_feed => 'http://example.org/x' }, '/foo/')
616
- item.reps << Nanoc3::ItemRep.new(item, :default)
617
-
618
- # Check
619
- assert_equal('http://example.org/x', url_for(item))
620
- ensure
621
- # Cleanup
622
- @item = nil
623
- end
624
-
625
- def test_url_for_without_base_url
626
- # Create site
627
- @site = Nanoc3::Site.new({})
628
-
629
- # Check
630
- assert_raises(RuntimeError) do
631
- url_for(nil)
632
- end
633
- end
634
-
635
- def test_url_for_without_path
636
- # Create site
637
- @site = Nanoc3::Site.new({ :base_url => 'http://example.com' })
638
-
639
- # Create article
640
- item = Nanoc3::Item.new('content', {}, '/foo/')
641
- item.reps << Nanoc3::ItemRep.new(item, :default)
642
- item.reps[0].path = nil
643
-
644
- # Check
645
- assert_equal(nil, url_for(item))
646
- end
647
-
648
- def test_feed_url_without_custom_feed_url
649
- # Create site
650
- @site = Nanoc3::Site.new({ :base_url => 'http://example.com' })
651
-
652
- # Create article
653
- @item = Nanoc3::Item.new('content', {}, '/foo/')
654
- @item.reps << Nanoc3::ItemRep.new(@item, :default)
655
- @item.reps[0].path = '/foo/bar/'
656
-
657
- # Check
658
- assert_equal('http://example.com/foo/bar/', feed_url)
659
- ensure
660
- # Cleanup
661
- @item = nil
662
- end
663
-
664
- def test_feed_url_with_custom_feed_url
665
- # Create site
666
- @site = Nanoc3::Site.new({ :base_url => 'http://example.com' })
667
-
668
- # Create feed item
669
- @item = Nanoc3::Item.new('content', { :feed_url => 'http://example.com/feed/' }, '/foo/')
670
- @item.reps << Nanoc3::ItemRep.new(@item, :default)
671
- @item.reps[0].path = '/foo/bar/'
672
-
673
- # Check
674
- assert_equal('http://example.com/feed/', feed_url)
675
- ensure
676
- # Cleanup
677
- @item = nil
678
- end
679
-
680
- def test_feed_url_without_base_url
681
- # Create site
682
- @site = Nanoc3::Site.new({})
683
-
684
- # Check
685
- assert_raises(RuntimeError) do
686
- feed_url
687
- end
688
- end
689
-
690
- def test_atom_tag_for_with_path
691
- # Create site
692
- @site = Nanoc3::Site.new({ :base_url => 'http://example.com' })
693
-
694
- # Create article
695
- item = Nanoc3::Item.new('content', { :created_at => '2008-05-19' }, '/foo/')
696
- item.reps << Nanoc3::ItemRep.new(item, :default)
697
- item.reps[0].path = '/foo/bar/'
698
-
699
- # Check
700
- assert_equal('tag:example.com,2008-05-19:/foo/bar/', atom_tag_for(item))
701
- end
702
-
703
- def test_atom_tag_for_without_path
704
- # Create site
705
- @site = Nanoc3::Site.new({ :base_url => 'http://example.com' })
706
-
707
- # Create article
708
- item = Nanoc3::Item.new('content', { :created_at => '2008-05-19' }, '/baz/qux/')
709
- item.reps << Nanoc3::ItemRep.new(item, :default)
710
-
711
- # Check
712
- assert_equal('tag:example.com,2008-05-19:/baz/qux/', atom_tag_for(item))
713
- end
714
-
715
- def test_atom_tag_for_with_base_url_in_dir
716
- # Create site
717
- @site = Nanoc3::Site.new({ :base_url => 'http://example.com/somedir' })
718
-
719
- # Create article
720
- item = Nanoc3::Item.new('content', { :created_at => '2008-05-19' }, '/foo/')
721
- item.reps << Nanoc3::ItemRep.new(item, :default)
722
- item.reps[0].path = '/foo/bar/'
723
-
724
- # Check
725
- assert_equal('tag:example.com,2008-05-19:/somedir/foo/bar/', atom_tag_for(item))
726
- end
727
-
728
- def test_atom_tag_for_with_time
729
- # Create site
730
- @site = Nanoc3::Site.new({ :base_url => 'http://example.com' })
731
-
732
- # Create article
733
- item = Nanoc3::Item.new('content', { :created_at => Time.parse('2008-05-19') }, '/foo/')
734
- item.reps << Nanoc3::ItemRep.new(item, :default)
735
- item.reps[0].path = '/foo/bar/'
736
-
737
- # Check
738
- assert_equal('tag:example.com,2008-05-19:/foo/bar/', atom_tag_for(item))
739
- end
740
-
741
- def test_atom_tag_for_with_date
742
- # Create site
743
- @site = Nanoc3::Site.new({ :base_url => 'http://example.com' })
744
-
745
- # Create article
746
- item = Nanoc3::Item.new('content', { :created_at => Date.parse('2008-05-19') }, '/foo/')
747
- item.reps << Nanoc3::ItemRep.new(item, :default)
748
- item.reps[0].path = '/foo/bar/'
749
-
750
- # Check
751
- assert_equal('tag:example.com,2008-05-19:/foo/bar/', atom_tag_for(item))
752
- end
753
-
754
- end