webgen 0.5.17 → 1.0.0.beta1

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 (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