webgen 0.5.17 → 1.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (408) hide show
  1. data/API.rdoc +143 -0
  2. data/AUTHORS +0 -1
  3. data/COPYING +17 -8
  4. data/ChangeLog +4456 -0
  5. data/GPL +623 -289
  6. data/README.md +71 -0
  7. data/Rakefile +87 -99
  8. data/VERSION +1 -1
  9. data/bin/webgen +1 -7
  10. data/data/webgen/basic_website_template/ext/init.rb +15 -0
  11. data/data/webgen/basic_website_template/webgen.config +18 -0
  12. data/data/webgen/bundle_template_files/README.md.erb +24 -0
  13. data/data/webgen/bundle_template_files/Rakefile.erb +36 -0
  14. data/data/webgen/bundle_template_files/info.yaml.erb +16 -0
  15. data/data/webgen/bundle_template_files/init.rb.erb +1 -0
  16. data/data/webgen/passive_sources/default.metainfo +32 -0
  17. data/data/webgen/passive_sources/stylesheets/coderay-default.css +109 -118
  18. data/data/webgen/passive_sources/templates/feed.template +62 -0
  19. data/data/webgen/passive_sources/templates/sitemap.template +3 -6
  20. data/data/webgen/passive_sources/templates/tag.template +42 -0
  21. data/data/webgen/website_bundles/default/README +2 -2
  22. data/lib/webgen/blackboard.rb +15 -51
  23. data/lib/webgen/bundle/built-in-show-changes/init.rb +54 -0
  24. data/lib/webgen/bundle/built-in/init.rb +366 -0
  25. data/lib/webgen/bundle_loader.rb +126 -0
  26. data/lib/webgen/cache.rb +9 -18
  27. data/lib/webgen/cli.rb +131 -58
  28. data/lib/webgen/cli/bundle_command.rb +30 -0
  29. data/lib/webgen/cli/create_bundle_command.rb +46 -0
  30. data/lib/webgen/cli/create_command.rb +48 -60
  31. data/lib/webgen/cli/generate_command.rb +25 -0
  32. data/lib/webgen/cli/install_bundle_command.rb +34 -0
  33. data/lib/webgen/cli/list_bundle_command.rb +108 -0
  34. data/lib/webgen/cli/logger.rb +45 -0
  35. data/lib/webgen/cli/show_command.rb +30 -0
  36. data/lib/webgen/cli/show_config_command.rb +63 -0
  37. data/lib/webgen/cli/show_dependencies_command.rb +103 -0
  38. data/lib/webgen/cli/show_extensions_command.rb +74 -0
  39. data/lib/webgen/cli/utils.rb +68 -95
  40. data/lib/webgen/configuration.rb +143 -105
  41. data/lib/webgen/content_processor.rb +160 -0
  42. data/lib/webgen/content_processor/blocks.rb +96 -0
  43. data/lib/webgen/content_processor/builder.rb +25 -0
  44. data/lib/webgen/content_processor/erb.rb +25 -0
  45. data/lib/webgen/content_processor/erubis.rb +31 -0
  46. data/lib/webgen/content_processor/fragments.rb +82 -0
  47. data/lib/webgen/content_processor/haml.rb +25 -0
  48. data/lib/webgen/content_processor/html_head.rb +157 -0
  49. data/lib/webgen/content_processor/kramdown.rb +49 -0
  50. data/lib/webgen/content_processor/maruku.rb +39 -0
  51. data/lib/webgen/content_processor/r_discount.rb +21 -0
  52. data/lib/webgen/content_processor/rdoc.rb +22 -0
  53. data/lib/webgen/content_processor/redcloth.rb +23 -0
  54. data/lib/webgen/content_processor/ruby.rb +20 -0
  55. data/lib/webgen/content_processor/sass.rb +145 -0
  56. data/lib/webgen/content_processor/scss.rb +23 -0
  57. data/lib/webgen/content_processor/tags.rb +30 -0
  58. data/lib/webgen/content_processor/tidy.rb +32 -0
  59. data/lib/webgen/content_processor/tikz.rb +116 -0
  60. data/lib/webgen/content_processor/xmllint.rb +31 -0
  61. data/lib/webgen/context.rb +57 -29
  62. data/lib/webgen/context/html_head.rb +60 -0
  63. data/lib/webgen/context/nodes.rb +32 -27
  64. data/lib/webgen/context/rendering.rb +39 -0
  65. data/lib/webgen/context/webgen_tags.rb +25 -0
  66. data/lib/webgen/core_ext.rb +25 -0
  67. data/lib/webgen/destination.rb +151 -0
  68. data/lib/webgen/destination/file_system.rb +62 -0
  69. data/lib/webgen/error.rb +59 -49
  70. data/lib/webgen/extension_manager.rb +121 -0
  71. data/lib/webgen/item_tracker.rb +237 -0
  72. data/lib/webgen/item_tracker/file.rb +39 -0
  73. data/lib/webgen/item_tracker/missing_node.rb +61 -0
  74. data/lib/webgen/item_tracker/node_content.rb +40 -0
  75. data/lib/webgen/item_tracker/node_meta_info.rb +53 -0
  76. data/lib/webgen/item_tracker/nodes.rb +92 -0
  77. data/lib/webgen/logger.rb +26 -82
  78. data/lib/webgen/node.rb +122 -367
  79. data/lib/webgen/node_finder.rb +336 -0
  80. data/lib/webgen/page.rb +48 -85
  81. data/lib/webgen/path.rb +218 -156
  82. data/lib/webgen/path_handler.rb +400 -0
  83. data/lib/webgen/path_handler/base.rb +220 -0
  84. data/lib/webgen/path_handler/copy.rb +78 -0
  85. data/lib/webgen/path_handler/directory.rb +21 -0
  86. data/lib/webgen/path_handler/feed.rb +82 -0
  87. data/lib/webgen/path_handler/meta_info.rb +84 -0
  88. data/lib/webgen/path_handler/page.rb +38 -0
  89. data/lib/webgen/path_handler/page_utils.rb +79 -0
  90. data/lib/webgen/path_handler/sitemap.rb +52 -0
  91. data/lib/webgen/path_handler/template.rb +96 -0
  92. data/lib/webgen/path_handler/virtual.rb +85 -0
  93. data/lib/webgen/{webgentask.rb → rake_task.rb} +31 -27
  94. data/lib/webgen/source.rb +106 -24
  95. data/lib/webgen/source/file_system.rb +41 -0
  96. data/lib/webgen/source/stacked.rb +49 -53
  97. data/lib/webgen/source/tar_archive.rb +59 -0
  98. data/lib/webgen/tag.rb +250 -19
  99. data/lib/webgen/tag/breadcrumb_trail.rb +65 -0
  100. data/lib/webgen/tag/coderay.rb +32 -35
  101. data/lib/webgen/tag/date.rb +9 -9
  102. data/lib/webgen/tag/execute_command.rb +31 -0
  103. data/lib/webgen/tag/include_file.rb +32 -0
  104. data/lib/webgen/tag/langbar.rb +31 -47
  105. data/lib/webgen/tag/link.rb +17 -18
  106. data/lib/webgen/tag/menu.rb +27 -189
  107. data/lib/webgen/tag/meta_info.rb +31 -0
  108. data/lib/webgen/tag/relocatable.rb +48 -39
  109. data/lib/webgen/tag/tikz.rb +24 -100
  110. data/lib/webgen/task.rb +99 -0
  111. data/lib/webgen/task/create_bundle.rb +73 -0
  112. data/lib/webgen/task/create_website.rb +94 -0
  113. data/lib/webgen/task/generate_website.rb +47 -0
  114. data/lib/webgen/test_helper.rb +183 -0
  115. data/lib/webgen/tree.rb +95 -46
  116. data/lib/webgen/utils.rb +39 -0
  117. data/lib/webgen/utils/external_command.rb +27 -0
  118. data/lib/webgen/utils/tag_parser.rb +124 -0
  119. data/lib/webgen/version.rb +1 -1
  120. data/lib/webgen/website.rb +134 -296
  121. data/setup.rb +1 -1
  122. data/test/test_documentation.rb +43 -0
  123. data/test/webgen/cli/test_logger.rb +41 -0
  124. data/test/{test_contentprocessor_blocks.rb → webgen/content_processor/test_blocks.rb} +30 -28
  125. data/test/webgen/content_processor/test_builder.rb +25 -0
  126. data/test/webgen/content_processor/test_erb.rb +21 -0
  127. data/test/webgen/content_processor/test_erubis.rb +33 -0
  128. data/test/webgen/content_processor/test_fragments.rb +96 -0
  129. data/test/webgen/content_processor/test_haml.rb +24 -0
  130. data/test/webgen/content_processor/test_html_head.rb +78 -0
  131. data/test/webgen/content_processor/test_kramdown.rb +49 -0
  132. data/test/webgen/content_processor/test_maruku.rb +30 -0
  133. data/test/webgen/content_processor/test_r_discount.rb +18 -0
  134. data/test/webgen/content_processor/test_rdoc.rb +18 -0
  135. data/test/webgen/content_processor/test_redcloth.rb +23 -0
  136. data/test/webgen/content_processor/test_ruby.rb +24 -0
  137. data/test/webgen/content_processor/test_sass.rb +44 -0
  138. data/test/webgen/content_processor/test_scss.rb +23 -0
  139. data/test/webgen/content_processor/test_tags.rb +44 -0
  140. data/test/webgen/content_processor/test_tidy.rb +31 -0
  141. data/test/webgen/content_processor/test_tikz.rb +33 -0
  142. data/test/webgen/content_processor/test_xmllint.rb +32 -0
  143. data/test/webgen/destination/test_file_system.rb +54 -0
  144. data/test/webgen/item_tracker/test_file.rb +31 -0
  145. data/test/webgen/item_tracker/test_missing_node.rb +70 -0
  146. data/test/webgen/item_tracker/test_node_content.rb +42 -0
  147. data/test/webgen/item_tracker/test_node_meta_info.rb +44 -0
  148. data/test/webgen/item_tracker/test_nodes.rb +61 -0
  149. data/test/webgen/path_handler/test_base.rb +153 -0
  150. data/test/webgen/path_handler/test_copy.rb +56 -0
  151. data/test/webgen/path_handler/test_feed.rb +85 -0
  152. data/test/webgen/path_handler/test_meta_info.rb +98 -0
  153. data/test/webgen/path_handler/test_page.rb +25 -0
  154. data/test/webgen/path_handler/test_page_utils.rb +59 -0
  155. data/test/webgen/path_handler/test_sitemap.rb +95 -0
  156. data/test/webgen/path_handler/test_template.rb +64 -0
  157. data/test/webgen/path_handler/test_virtual.rb +87 -0
  158. data/test/webgen/source/test_file_system.rb +51 -0
  159. data/test/webgen/source/test_stacked.rb +35 -0
  160. data/test/{test_source_tararchive.rb → webgen/source/test_tar_archive.rb} +10 -25
  161. data/test/webgen/tag/test_breadcrumb_trail.rb +66 -0
  162. data/test/webgen/tag/test_coderay.rb +34 -0
  163. data/test/webgen/tag/test_date.rb +18 -0
  164. data/test/webgen/tag/test_execute_command.rb +36 -0
  165. data/test/webgen/tag/test_include_file.rb +35 -0
  166. data/test/webgen/tag/test_langbar.rb +50 -0
  167. data/test/webgen/tag/test_link.rb +40 -0
  168. data/test/webgen/tag/test_menu.rb +61 -0
  169. data/test/webgen/tag/test_meta_info.rb +25 -0
  170. data/test/webgen/tag/test_relocatable.rb +50 -0
  171. data/test/webgen/tag/test_tikz.rb +41 -0
  172. data/test/webgen/task/test_create_website.rb +46 -0
  173. data/test/webgen/test_blackboard.rb +31 -0
  174. data/test/webgen/test_bundle_loader.rb +55 -0
  175. data/test/{test_cache.rb → webgen/test_cache.rb} +3 -15
  176. data/test/webgen/test_cli.rb +41 -0
  177. data/test/webgen/test_configuration.rb +131 -0
  178. data/test/webgen/test_content_processor.rb +86 -0
  179. data/test/webgen/test_context.rb +73 -0
  180. data/test/webgen/test_core_ext.rb +20 -0
  181. data/test/webgen/test_destination.rb +48 -0
  182. data/test/webgen/test_error.rb +121 -0
  183. data/test/webgen/test_extension_manager.rb +70 -0
  184. data/test/webgen/test_item_tracker.rb +106 -0
  185. data/test/{test_languages.rb → webgen/test_languages.rb} +4 -4
  186. data/test/webgen/test_logger.rb +46 -0
  187. data/test/webgen/test_node.rb +178 -0
  188. data/test/webgen/test_node_finder.rb +127 -0
  189. data/test/{test_page.rb → webgen/test_page.rb} +44 -48
  190. data/test/webgen/test_path.rb +271 -0
  191. data/test/{test_webgentask.rb → webgen/test_rake_task.rb} +4 -4
  192. data/test/webgen/test_source.rb +59 -0
  193. data/test/webgen/test_tag.rb +137 -0
  194. data/test/webgen/test_task.rb +40 -0
  195. data/test/webgen/test_tree.rb +147 -0
  196. data/test/webgen/test_utils.rb +16 -0
  197. data/test/webgen/test_website.rb +45 -0
  198. data/test/webgen/utils/test_tag_parser.rb +99 -0
  199. metadata +292 -344
  200. data/data/webgen/passive_sources/templates/atom_feed.template +0 -39
  201. data/data/webgen/passive_sources/templates/rss_feed.template +0 -28
  202. data/data/webgen/resources.yaml +0 -4
  203. data/data/webgen/webgui/app.rb +0 -11
  204. data/data/webgen/webgui/controller/main.rb +0 -135
  205. data/data/webgen/webgui/layout/default.xhtml +0 -40
  206. data/data/webgen/webgui/overrides/win32console.rb +0 -0
  207. data/data/webgen/webgui/public/css/jquery.autocomplete.css +0 -50
  208. data/data/webgen/webgui/public/css/ramaze_error.css +0 -90
  209. data/data/webgen/webgui/public/css/style.css +0 -55
  210. data/data/webgen/webgui/public/img/headerbg.jpg +0 -0
  211. data/data/webgen/webgui/public/img/webgen_logo.png +0 -0
  212. data/data/webgen/webgui/public/js/jquery.autocomplete.js +0 -15
  213. data/data/webgen/webgui/public/js/jquery.js +0 -32
  214. data/data/webgen/webgui/start.rb +0 -9
  215. data/data/webgen/webgui/view/create_website.xhtml +0 -14
  216. data/data/webgen/webgui/view/error.xhtml +0 -64
  217. data/data/webgen/webgui/view/index.xhtml +0 -22
  218. data/data/webgen/webgui/view/manage_website.xhtml +0 -18
  219. data/data/webgen/website_skeleton/README +0 -10
  220. data/data/webgen/website_skeleton/Rakefile +0 -69
  221. data/data/webgen/website_skeleton/config.yaml +0 -35
  222. data/data/webgen/website_skeleton/ext/init.rb +0 -10
  223. data/doc/contentprocessor.template +0 -11
  224. data/doc/contentprocessor/blocks.page +0 -129
  225. data/doc/contentprocessor/builder.page +0 -79
  226. data/doc/contentprocessor/erb.page +0 -60
  227. data/doc/contentprocessor/erubis.page +0 -46
  228. data/doc/contentprocessor/fragments.page +0 -26
  229. data/doc/contentprocessor/haml.page +0 -46
  230. data/doc/contentprocessor/head.page +0 -31
  231. data/doc/contentprocessor/kramdown.page +0 -49
  232. data/doc/contentprocessor/less.page +0 -34
  233. data/doc/contentprocessor/maruku.page +0 -44
  234. data/doc/contentprocessor/rdiscount.page +0 -37
  235. data/doc/contentprocessor/rdoc.page +0 -36
  236. data/doc/contentprocessor/redcloth.page +0 -41
  237. data/doc/contentprocessor/sass.page +0 -31
  238. data/doc/contentprocessor/scss.page +0 -39
  239. data/doc/contentprocessor/tags.page +0 -73
  240. data/doc/contentprocessor/tidy.page +0 -14
  241. data/doc/contentprocessor/xmllint.page +0 -14
  242. data/doc/extensions.metainfo +0 -29
  243. data/doc/extensions.page +0 -15
  244. data/doc/extensions.template +0 -17
  245. data/doc/faq.page +0 -222
  246. data/doc/getting_started.page +0 -135
  247. data/doc/index.page +0 -71
  248. data/doc/manual.page +0 -727
  249. data/doc/reference_configuration.page +0 -1254
  250. data/doc/reference_metainfo.page +0 -265
  251. data/doc/reference_website_styles.page +0 -32
  252. data/doc/source/filesystem.page +0 -41
  253. data/doc/source/tararchive.page +0 -40
  254. data/doc/sourcehandler.template +0 -23
  255. data/doc/sourcehandler/copy.page +0 -19
  256. data/doc/sourcehandler/directory.page +0 -27
  257. data/doc/sourcehandler/feed.page +0 -102
  258. data/doc/sourcehandler/metainfo.page +0 -48
  259. data/doc/sourcehandler/page.page +0 -14
  260. data/doc/sourcehandler/sitemap.page +0 -46
  261. data/doc/sourcehandler/template.page +0 -45
  262. data/doc/sourcehandler/virtual.page +0 -49
  263. data/doc/tag.template +0 -25
  264. data/doc/tag/breadcrumbtrail.page +0 -40
  265. data/doc/tag/coderay.page +0 -53
  266. data/doc/tag/date.page +0 -31
  267. data/doc/tag/executecommand.page +0 -26
  268. data/doc/tag/includefile.page +0 -32
  269. data/doc/tag/langbar.page +0 -47
  270. data/doc/tag/link.page +0 -44
  271. data/doc/tag/menu.page +0 -109
  272. data/doc/tag/metainfo.page +0 -29
  273. data/doc/tag/relocatable.page +0 -38
  274. data/doc/tag/sitemap.page +0 -31
  275. data/doc/tag/tikz.page +0 -159
  276. data/doc/upgrading.page +0 -138
  277. data/doc/webgen_page_format.page +0 -129
  278. data/doc/website_styles.metainfo +0 -8
  279. data/lib/webgen/cli/apply_command.rb +0 -66
  280. data/lib/webgen/cli/run_command.rb +0 -22
  281. data/lib/webgen/cli/webgui_command.rb +0 -68
  282. data/lib/webgen/common.rb +0 -27
  283. data/lib/webgen/common/sitemap.rb +0 -83
  284. data/lib/webgen/contentprocessor.rb +0 -117
  285. data/lib/webgen/contentprocessor/blocks.rb +0 -92
  286. data/lib/webgen/contentprocessor/builder.rb +0 -29
  287. data/lib/webgen/contentprocessor/erb.rb +0 -26
  288. data/lib/webgen/contentprocessor/erubis.rb +0 -39
  289. data/lib/webgen/contentprocessor/fragments.rb +0 -25
  290. data/lib/webgen/contentprocessor/haml.rb +0 -34
  291. data/lib/webgen/contentprocessor/head.rb +0 -128
  292. data/lib/webgen/contentprocessor/kramdown.rb +0 -27
  293. data/lib/webgen/contentprocessor/kramdown/html.rb +0 -36
  294. data/lib/webgen/contentprocessor/less.rb +0 -35
  295. data/lib/webgen/contentprocessor/maruku.rb +0 -36
  296. data/lib/webgen/contentprocessor/rdiscount.rb +0 -19
  297. data/lib/webgen/contentprocessor/rdoc.rb +0 -20
  298. data/lib/webgen/contentprocessor/redcloth.rb +0 -21
  299. data/lib/webgen/contentprocessor/sass.rb +0 -22
  300. data/lib/webgen/contentprocessor/scss.rb +0 -22
  301. data/lib/webgen/contentprocessor/tags.rb +0 -170
  302. data/lib/webgen/contentprocessor/tidy.rb +0 -38
  303. data/lib/webgen/contentprocessor/xmllint.rb +0 -37
  304. data/lib/webgen/context/render.rb +0 -32
  305. data/lib/webgen/context/tags.rb +0 -20
  306. data/lib/webgen/coreext.rb +0 -13
  307. data/lib/webgen/default_config.rb +0 -240
  308. data/lib/webgen/loggable.rb +0 -25
  309. data/lib/webgen/output.rb +0 -86
  310. data/lib/webgen/output/filesystem.rb +0 -69
  311. data/lib/webgen/source/filesystem.rb +0 -61
  312. data/lib/webgen/source/resource.rb +0 -45
  313. data/lib/webgen/source/tararchive.rb +0 -78
  314. data/lib/webgen/sourcehandler.rb +0 -275
  315. data/lib/webgen/sourcehandler/base.rb +0 -281
  316. data/lib/webgen/sourcehandler/copy.rb +0 -44
  317. data/lib/webgen/sourcehandler/directory.rb +0 -30
  318. data/lib/webgen/sourcehandler/feed.rb +0 -92
  319. data/lib/webgen/sourcehandler/fragment.rb +0 -70
  320. data/lib/webgen/sourcehandler/memory.rb +0 -42
  321. data/lib/webgen/sourcehandler/metainfo.rb +0 -128
  322. data/lib/webgen/sourcehandler/page.rb +0 -64
  323. data/lib/webgen/sourcehandler/sitemap.rb +0 -60
  324. data/lib/webgen/sourcehandler/template.rb +0 -66
  325. data/lib/webgen/sourcehandler/virtual.rb +0 -117
  326. data/lib/webgen/tag/base.rb +0 -170
  327. data/lib/webgen/tag/breadcrumbtrail.rb +0 -70
  328. data/lib/webgen/tag/executecommand.rb +0 -31
  329. data/lib/webgen/tag/includefile.rb +0 -42
  330. data/lib/webgen/tag/metainfo.rb +0 -27
  331. data/lib/webgen/tag/sitemap.rb +0 -41
  332. data/lib/webgen/websiteaccess.rb +0 -31
  333. data/lib/webgen/websitemanager.rb +0 -125
  334. data/misc/default.css +0 -403
  335. data/misc/default.template +0 -76
  336. data/misc/htmldoc.metainfo +0 -26
  337. data/misc/htmldoc.virtual +0 -17
  338. data/misc/images/arrow.gif +0 -0
  339. data/misc/images/error.png +0 -0
  340. data/misc/images/headerbg.jpg +0 -0
  341. data/misc/images/important.png +0 -0
  342. data/misc/images/information.png +0 -0
  343. data/misc/images/quote.gif +0 -0
  344. data/misc/images/warning.png +0 -0
  345. data/misc/logo.svg +0 -313
  346. data/misc/style.page +0 -33
  347. data/test/helper.rb +0 -61
  348. data/test/test_blackboard.rb +0 -60
  349. data/test/test_cli.rb +0 -119
  350. data/test/test_common_sitemap.rb +0 -58
  351. data/test/test_configuration.rb +0 -68
  352. data/test/test_contentprocessor.rb +0 -39
  353. data/test/test_contentprocessor_builder.rb +0 -41
  354. data/test/test_contentprocessor_erb.rb +0 -33
  355. data/test/test_contentprocessor_erubis.rb +0 -62
  356. data/test/test_contentprocessor_fragments.rb +0 -43
  357. data/test/test_contentprocessor_haml.rb +0 -39
  358. data/test/test_contentprocessor_head.rb +0 -96
  359. data/test/test_contentprocessor_kramdown.rb +0 -56
  360. data/test/test_contentprocessor_less.rb +0 -40
  361. data/test/test_contentprocessor_maruku.rb +0 -33
  362. data/test/test_contentprocessor_rdiscount.rb +0 -21
  363. data/test/test_contentprocessor_rdoc.rb +0 -22
  364. data/test/test_contentprocessor_redcloth.rb +0 -26
  365. data/test/test_contentprocessor_sass.rb +0 -28
  366. data/test/test_contentprocessor_scss.rb +0 -28
  367. data/test/test_contentprocessor_tags.rb +0 -122
  368. data/test/test_contentprocessor_tidy.rb +0 -34
  369. data/test/test_contentprocessor_xmllint.rb +0 -38
  370. data/test/test_context.rb +0 -81
  371. data/test/test_error.rb +0 -93
  372. data/test/test_loggable.rb +0 -32
  373. data/test/test_logger.rb +0 -94
  374. data/test/test_node.rb +0 -469
  375. data/test/test_output_filesystem.rb +0 -60
  376. data/test/test_path.rb +0 -241
  377. data/test/test_source_filesystem.rb +0 -76
  378. data/test/test_source_resource.rb +0 -28
  379. data/test/test_source_stacked.rb +0 -49
  380. data/test/test_sourcehandler_base.rb +0 -136
  381. data/test/test_sourcehandler_copy.rb +0 -47
  382. data/test/test_sourcehandler_directory.rb +0 -38
  383. data/test/test_sourcehandler_feed.rb +0 -88
  384. data/test/test_sourcehandler_fragment.rb +0 -70
  385. data/test/test_sourcehandler_main.rb +0 -39
  386. data/test/test_sourcehandler_memory.rb +0 -44
  387. data/test/test_sourcehandler_metainfo.rb +0 -127
  388. data/test/test_sourcehandler_page.rb +0 -73
  389. data/test/test_sourcehandler_sitemap.rb +0 -68
  390. data/test/test_sourcehandler_template.rb +0 -68
  391. data/test/test_sourcehandler_virtual.rb +0 -106
  392. data/test/test_tag_base.rb +0 -62
  393. data/test/test_tag_breadcrumbtrail.rb +0 -91
  394. data/test/test_tag_coderay.rb +0 -45
  395. data/test/test_tag_date.rb +0 -18
  396. data/test/test_tag_executecommand.rb +0 -41
  397. data/test/test_tag_includefile.rb +0 -50
  398. data/test/test_tag_langbar.rb +0 -71
  399. data/test/test_tag_link.rb +0 -70
  400. data/test/test_tag_menu.rb +0 -207
  401. data/test/test_tag_metainfo.rb +0 -26
  402. data/test/test_tag_relocatable.rb +0 -60
  403. data/test/test_tag_sitemap.rb +0 -47
  404. data/test/test_tag_tikz.rb +0 -69
  405. data/test/test_tree.rb +0 -70
  406. data/test/test_website.rb +0 -130
  407. data/test/test_websiteaccess.rb +0 -25
  408. data/test/test_websitemanager.rb +0 -65
@@ -1,281 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require 'webgen/websiteaccess'
4
- require 'webgen/loggable'
5
- require 'webgen/page'
6
-
7
- module Webgen::SourceHandler
8
-
9
- # This module should be included in every source handler as it provides the default methods for
10
- # creating nodes.
11
- #
12
- # == Implementing Source Handlers
13
- #
14
- # A source handler is a webgen extension that processes source paths to create nodes and that
15
- # provides the rendered content of these nodes. The nodes are later written to the output
16
- # location. This can range from simply copying a path from the source to the output location to
17
- # generating a whole set of nodes from one input path!
18
- #
19
- # The paths that are handled by a source handler are specified via path patterns (see
20
- # below). During a webgen run the #create_node method for each source paths that matches a
21
- # specified path pattern is called. And when it is time to write out the node, the #content
22
- # method is called to retrieve the rendered content.
23
- #
24
- # A source handler must not take any parameters on initialization and when this module is not
25
- # mixed in, the methods #create_node and #content need to be defined. Also, a source handler does
26
- # not need to reside under the Webgen::SourceHandler namespace but all shipped ones do.
27
- #
28
- # This base class provides useful default implementations of methods that are used by nearly all
29
- # source handler classes:
30
- # * #create_node
31
- # * #output_path
32
- # * #node_exists?
33
- #
34
- # It also provides other utility methods:
35
- # * #page_from_path
36
- # * #content
37
- # * #parent_node
38
- #
39
- # == Nodes Created for Paths
40
- #
41
- # The main functions of a source handler class are to create one or more nodes for a source path
42
- # and to provide the content of these nodes. To achieve this, certain information needs to be set
43
- # on a created node. If you use the +create_node+ method provided by this base class, you don't
44
- # need to set them explicitly because this is done by the method:
45
- #
46
- # [<tt>node_info[:processor]</tt>] Has to be set to the class name of the source handler. This is
47
- # used by the Node class: all unknown method calls are forwarded
48
- # to the node processor.
49
- # [<tt>node_info[:src]</tt>] Has to be set to the string version of the path that lead to the
50
- # creation of the node.
51
- # [<tt>node_info[:creation_path]</tt>] Has to be set to the string version of the path that is
52
- # used to create the path.
53
- # [<tt>meta_info['no_output']</tt>] Has to be set to +true+ on nodes that are used during a
54
- # webgen run but do not produce an output file.
55
- # [<tt>meta_info['modified_at']</tt>] Has to be set to the current time if not already set
56
- # correctly (ie. if not a Time object).
57
- #
58
- # If <tt>meta_info['draft']</tt> is set on a path, then no node should be created in +create_node+
59
- # and +nil+ has to be returned.
60
- #
61
- # Note: The difference between +:src+ and +:creation_path+ is that a creation path
62
- # need not have an existing source path representation. For example, fragments created from a page
63
- # source path have a different +:creation_path+ which includes the fragment part.
64
- #
65
- # Additional information that is used only for processing purposes should be stored in the
66
- # #node_info hash of a node as the #meta_info hash is reserved for real node meta information and
67
- # should not be changed once the node is created.
68
- #
69
- # == Output Path Names
70
- #
71
- # The method for creating an output path name for a source path is stored in the meta information
72
- # +output_path+. If you don't use the provided method +output_path+, have a look at its
73
- # implementation to see how to an output path gets created. Individual output path creation
74
- # methods are stored as methods in the OutputPathHelpers module.
75
- #
76
- # == Path Patterns and Invocation order
77
- #
78
- # Path patterns define which paths are handled by a specific source handler. These patterns are
79
- # specified in the <tt>sourcehandler.patterns</tt> configuration hash as a mapping from the source
80
- # handler class name to an array of path patterns. The patterns need to have a format that
81
- # <tt>Dir.glob</tt> can handle. You can use the configuration helper +patterns+ to set this (is
82
- # shown in the example below).
83
- #
84
- # Specifying a path pattern does not mean that webgen uses the source handler. One also needs to
85
- # provide an entry in the configuration value <tt>sourcehandler.invoke</tt>. This is a hash that
86
- # maps the invocation rank (a number) to an array of source handler class names. The lower the
87
- # invocation rank the earlier the specified source handlers are used.
88
- #
89
- # The default invocation ranks are:
90
- # [1] Early. Normally there is no need to use this rank.
91
- # [5] Standard. This is the rank the normal source handler should use.
92
- # [9] Late. This rank should be used by source handlers that operate on/use already created nodes
93
- # and need to ensure that these nodes are available.
94
- #
95
- # == Default Meta Information
96
- #
97
- # Each source handler can define default meta information that gets automatically set on the
98
- # source paths that are passed to the #create_node method.
99
- #
100
- # The default meta information is specified in the <tt>sourcehandler.default_meta_info</tt>
101
- # configuration hash as a mapping from the source handler class name to the meta information
102
- # hash.
103
- #
104
- # == Sample Source Handler Class
105
- #
106
- # Following is a simple source handler class example which copies paths from the source to
107
- # the output location modifying the extension:
108
- #
109
- # class SimpleCopy
110
- #
111
- # include Webgen::SourceHandler::Base
112
- # include Webgen::WebsiteAccess
113
- #
114
- # def create_node(path)
115
- # path.ext += '.copied'
116
- # super(path)
117
- # end
118
- #
119
- # def content(node)
120
- # website.blackboard.invoke(:source_paths)[node.node_info[:src]].io
121
- # end
122
- #
123
- # end
124
- #
125
- # WebsiteAccess.website.config.patterns('SimpleCopy' => ['**/*.jpg', '**/*.png'])
126
- # WebsiteAccess.website.config.sourcehandler.invoke[5] << 'SimpleCopy'
127
- #
128
- module Base
129
-
130
- # This module is used for defining all methods that can be used for creating output paths.
131
- #
132
- # All public methods of this module are considered to be output path creation methods and must
133
- # have the following parameters:
134
- #
135
- # [+parent+] the parent node
136
- # [+path+] the path for which the output name should be created
137
- # [+use_lang_part+] controls whether the output path name has to include the language part
138
- module OutputPathHelpers
139
-
140
- # Default method for creating an output path for +parent+ and source +path+.
141
- #
142
- # The automatically set parameter +style+ (which uses the meta information +output_path_style+
143
- # from the path's meta information hash) defines how the output name should be built (more
144
- # information about this in the user documentation).
145
- def standard_output_path(parent, path, use_lang_part, style = path.meta_info['output_path_style'])
146
- result = style.collect do |part|
147
- case part
148
- when String then part
149
- when :lang then use_lang_part ? path.meta_info['lang'] : ''
150
- when :ext then path.ext.empty? ? '' : '.' + path.ext
151
- when :parent then temp = parent; temp = temp.parent while temp.is_fragment?; temp.path
152
- when :year, :month, :day
153
- ctime = path.meta_info['created_at']
154
- if !ctime.kind_of?(Time)
155
- raise Webgen::NodeCreationError.new("Invalid meta info 'created_at', needed because of used output path style",
156
- self.class.name, path)
157
- end
158
- ctime.send(part).to_s.rjust(2, '0')
159
- when Symbol then path.send(part)
160
- when Array then part.include?(:lang) && !use_lang_part ? '' : standard_output_path(parent, path, use_lang_part, part)
161
- else ''
162
- end
163
- end
164
- result.join('')
165
- end
166
-
167
- end
168
-
169
- include Webgen::Loggable
170
- include OutputPathHelpers
171
-
172
- # Construct the output name for the given +path+ and +parent+. First it is checked if a node
173
- # with the constructed output name already exists. If it exists, the language part is forced to
174
- # be in the output name and the resulting output name is returned.
175
- def output_path(parent, path)
176
- method = path.meta_info['output_path'] + '_output_path'
177
- use_lang_part = if path.meta_info['lang'].nil? # unlocalized files never get a lang in the filename!
178
- false
179
- else
180
- Webgen::WebsiteAccess.website.config['sourcehandler.default_lang_in_output_path'] ||
181
- Webgen::WebsiteAccess.website.config['website.lang'] != path.meta_info['lang']
182
- end
183
- if OutputPathHelpers.public_instance_methods(false).map {|c| c.to_s}.include?(method)
184
- name = send(method, parent, path, use_lang_part)
185
- name += '/' if path.path =~ /\/$/ && name !~ /\/$/
186
- if (node = node_exists?(path, name)) && node.lang != path.meta_info['lang']
187
- name = send(method, parent, path, (path.meta_info['lang'].nil? ? false : true))
188
- name += '/' if path.path =~ /\/$/ && name !~ /\/$/
189
- end
190
- name
191
- else
192
- raise Webgen::NodeCreationError.new("Unknown method for creating output path: #{path.meta_info['output_path']}",
193
- self.class.name, path)
194
- end
195
- end
196
-
197
- # Check if the node alcn and output path which would be created by #create_node exist. The
198
- # +output_path+ to check for can individually be set.
199
- def node_exists?(path, output_path = self.output_path(parent_node(path), path))
200
- Webgen::WebsiteAccess.website.tree[path.alcn] || (!path.meta_info['no_output'] && Webgen::WebsiteAccess.website.tree[output_path, :path])
201
- end
202
-
203
- # Create a node from +path+ if it does not already exists or re-initalize an already existing
204
- # node. The found node or the newly created node is returned afterwards. +nil+ is returned if no
205
- # node can be created (e.g. when <tt>path.meta_info['draft']</tt> is set).
206
- #
207
- # The +options+ parameter can be used for providing the optional parameters:
208
- #
209
- # [<tt>:parent</tt>] The parent node under which the new node should be created. If this is not
210
- # specified (the usual case), the parent node is determined by the
211
- # #parent_node method.
212
- #
213
- # [<tt>:output_path</tt>] The output path that should be used for the node. If this is not
214
- # specified (the usual case), the output path is determined via the
215
- # #output_path method.
216
- #
217
- # Some additional node information like <tt>:src</tt> and <tt>:processor</tt> is set and the
218
- # meta information is checked for validness. The created/re-initialized node is yielded if a
219
- # block is given.
220
- def create_node(path, options = {})
221
- return nil if path.meta_info['draft']
222
- parent = options[:parent] || parent_node(path)
223
- output_path = options[:output_path] || self.output_path(parent, path)
224
- node = node_exists?(path, output_path)
225
-
226
- if node && (node.node_info[:src] != path.source_path || node.node_info[:processor] != self.class.name)
227
- log(:warn) { "Node already exists: source = #{path.source_path} | path = #{node.path} | alcn = #{node.alcn}"}
228
- return node #TODO: think! should nil be returned?
229
- elsif !node
230
- node = Webgen::Node.new(parent, output_path, path.cn, path.meta_info)
231
- elsif node.flagged?(:reinit)
232
- node.reinit(output_path, path.meta_info)
233
- else
234
- return node
235
- end
236
-
237
- if !node['modified_at'].kind_of?(Time)
238
- log(:warn) { "Meta information 'modified_at' set to current time in <#{node}> since its value '#{node['modified_at']}' was of type #{node['modified_at'].class}" } unless node['modified_at'].nil?
239
- node['modified_at'] = Time.now
240
- end
241
- node.node_info[:src] = path.source_path
242
- node.node_info[:creation_path] = path.path
243
- node.node_info[:processor] = self.class.name
244
- yield(node) if block_given?
245
- node
246
- end
247
-
248
- # Return the content of the given +node+. If the return value is not +nil+ then the node gets
249
- # written, otherwise it is ignored.
250
- #
251
- # This default +content+ method just returns +nil+.
252
- def content(node)
253
- nil
254
- end
255
-
256
- # Utility method for creating a Webgen::Page object from the +path+. Also updates
257
- # <tt>path.meta_info</tt> with the meta info from the page.
258
- def page_from_path(path)
259
- begin
260
- page = Webgen::Page.from_data(path.io.data, path.meta_info)
261
- rescue Webgen::Page::FormatError => e
262
- raise Webgen::NodeCreationError.new("Error reading source path: #{e.message}",
263
- self.class.name, path)
264
- end
265
- path.meta_info = page.meta_info
266
- page
267
- end
268
-
269
- # Return the parent node for the given +path+.
270
- def parent_node(path)
271
- parent_dir = (path.parent_path == '' ? '' : Webgen::Path.new(path.parent_path).alcn)
272
- if !(parent = Webgen::WebsiteAccess.website.tree[parent_dir])
273
- raise Webgen::NodeCreationError.new("The needed parent path <#{parent_dir}> does not exist",
274
- self.class.name, path)
275
- end
276
- parent
277
- end
278
-
279
- end
280
-
281
- end
@@ -1,44 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- module Webgen::SourceHandler
4
-
5
- # Simple source handler for copying files from the source tree, either verbatim or by applying a
6
- # content processor.
7
- class Copy
8
-
9
- include Webgen::WebsiteAccess
10
- include Base
11
-
12
- # Create the node for +path+. If the +path+ has the name of a content processor as the first
13
- # part in the extension, it is preprocessed.
14
- def create_node(path)
15
- if path.ext.index('.')
16
- processor, *rest = path.ext.split('.')
17
- if website.blackboard.invoke(:content_processor_names).include?(processor)
18
- path.ext = rest.join('.')
19
- else
20
- processor = nil
21
- end
22
- end
23
- super(path) do |node|
24
- node.node_info[:preprocessor] = processor
25
- end
26
- end
27
-
28
- # Return either the preprocessed content of the +node+ or the IO object for the node's source
29
- # path depending on the node type.
30
- def content(node)
31
- io = website.blackboard.invoke(:source_paths)[node.node_info[:src]].io
32
- if node.node_info[:preprocessor]
33
- is_binary = website.blackboard.invoke(:content_processor_binary?, node.node_info[:preprocessor])
34
- context = Webgen::Context.new(:content => io.data(is_binary ? 'rb' : 'r'), :chain => [node])
35
- website.blackboard.invoke(:content_processor, node.node_info[:preprocessor]).call(context)
36
- context.content
37
- else
38
- io
39
- end
40
- end
41
-
42
- end
43
-
44
- end
@@ -1,30 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- module Webgen::SourceHandler
4
-
5
- # Handles directory source paths.
6
- class Directory
7
-
8
- include Base
9
- include Webgen::WebsiteAccess
10
-
11
- def initialize # :nodoc:
12
- website.blackboard.add_service(:create_directories, method(:create_directories))
13
- end
14
-
15
- # Recursively create the directories specified in +dirname+ under +parent+ (a leading slash is
16
- # ignored). The path +path+ is the path that lead to the creation of these directories.
17
- def create_directories(parent, dirname, path)
18
- dirname.sub(/^\//, '').split('/').each do |dir|
19
- dir_path = Webgen::Path.new(File.join(parent.alcn, dir, '/'), path)
20
- nodes = website.blackboard.invoke(:create_nodes, dir_path, self) do |dir_path|
21
- node_exists?(dir_path) || create_node(dir_path)
22
- end
23
- parent = nodes.first
24
- end
25
- parent
26
- end
27
-
28
- end
29
-
30
- end
@@ -1,92 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- module Webgen::SourceHandler
4
-
5
- # Source handler for creating atom and/or rss feeds.
6
- class Feed
7
-
8
- include Webgen::WebsiteAccess
9
- include Base
10
-
11
- # The mandatory keys that need to be set in a feed file.
12
- MANDATORY_INFOS = %W[site_url author entries]
13
-
14
- def initialize # :nodoc:
15
- website.blackboard.add_listener(:node_changed?, method(:node_changed?))
16
- end
17
-
18
- # Create atom and/or rss feed files from +path+.
19
- def create_node(path)
20
- page = page_from_path(path)
21
- path.meta_info['link'] ||= path.parent_path
22
-
23
- if MANDATORY_INFOS.any? {|t| path.meta_info[t].nil?}
24
- raise Webgen::NodeCreationError.new("At least one of #{MANDATORY_INFOS.join('/')} is missing",
25
- self.class.name, path)
26
- end
27
-
28
- create_feed_node = lambda do |type|
29
- path.ext = type
30
- super(path) do |node|
31
- node.node_info[:feed] = page
32
- node.node_info[:feed_type] = type
33
- end
34
- end
35
-
36
- nodes = []
37
- nodes << create_feed_node['atom'] if path.meta_info['atom']
38
- nodes << create_feed_node['rss'] if path.meta_info['rss']
39
-
40
- nodes
41
- end
42
-
43
- # Return the rendered feed represented by +node+.
44
- def content(node)
45
- website.cache[[:sourcehandler_feed, node.node_info[:src]]] = feed_entries(node).map {|n| n.alcn}
46
-
47
- block_name = node.node_info[:feed_type] + '_template'
48
- if node.node_info[:feed].blocks.has_key?(block_name)
49
- node.node_info[:feed].blocks[block_name].render(Webgen::Context.new(:chain => [node])).content
50
- else
51
- chain = [node.resolve("/templates/#{node.node_info[:feed_type]}_feed.template"), node]
52
- node.node_info[:used_nodes] << chain.first.alcn
53
- chain.first.node_info[:page].blocks['content'].render(Webgen::Context.new(:chain => chain)).content
54
- end
55
- end
56
-
57
- # Return the entries for the feed +node+.
58
- def feed_entries(node)
59
- nr_items = (node['number_of_entries'].to_i == 0 ? 10 : node['number_of_entries'].to_i)
60
- patterns = [node['entries']].flatten.map {|pat| Webgen::Path.make_absolute(node.parent.alcn, pat)}
61
-
62
- node.tree.node_access[:alcn].values.
63
- select {|node| patterns.any? {|pat| node =~ pat} && node.node_info[:page]}.
64
- sort {|a,b| a['modified_at'] <=> b['modified_at']}.reverse[0, nr_items]
65
- end
66
-
67
- # Return the feed link URL for the feed +node+.
68
- def feed_link(node)
69
- Webgen::Node.url(File.join(node['site_url'], node.tree[node['link']].path), false)
70
- end
71
-
72
- # Return the content of an +entry+ of the feed +node+.
73
- def entry_content(node, entry)
74
- entry.node_info[:page].blocks[node['content_block_name'] || 'content'].render(Webgen::Context.new(:chain => [entry])).content
75
- end
76
-
77
- #######
78
- private
79
- #######
80
-
81
- # Check if the any of the nodes used by this feed +node+ have changed and then mark the node as
82
- # dirty.
83
- def node_changed?(node)
84
- return if node.node_info[:processor] != self.class.name
85
- entries = node.feed_entries
86
- node.flag(:dirty) if entries.map {|n| n.alcn } != website.cache[[:sourcehandler_feed, node.node_info[:src]]] ||
87
- entries.any? {|n| n.changed?}
88
- end
89
-
90
- end
91
-
92
- end