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,69 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require 'fileutils'
4
-
5
- module Webgen::Output
6
-
7
- # This class uses the file systems as output device. On initialization a +root+ path is set and
8
- # all other operations are taken relative to this root path.
9
- class FileSystem
10
-
11
- include Webgen::WebsiteAccess
12
-
13
- # The root path, ie. the path to which the root node gets rendered.
14
- attr_reader :root
15
-
16
- # Create a new object with the given +root+ path. If +root+ is not absolute, it is taken
17
- # relative to the website directory.
18
- def initialize(root)
19
- #TODO: copied from source/filesystem.rb
20
- if root =~ /^([a-zA-Z]:|\/)/
21
- @root = root
22
- else
23
- @root = File.join(website.directory, root)
24
- end
25
- end
26
-
27
- # Return +true+ if the given path exists.
28
- def exists?(path)
29
- File.exists?(File.join(@root, path))
30
- end
31
-
32
- # Delete the given +path+
33
- def delete(path)
34
- dest = File.join(@root, path)
35
- if File.directory?(dest)
36
- FileUtils.rm_rf(dest)
37
- else
38
- FileUtils.rm(dest)
39
- end
40
- end
41
-
42
- # Write the +data+ to the given +path+. The +type+ parameter specifies the type of the path to
43
- # be created which can either be <tt>:file</tt> or <tt>:directory</tt>.
44
- def write(path, data, type = :file)
45
- dest = File.join(@root, path)
46
- FileUtils.makedirs(File.dirname(dest))
47
- if type == :directory
48
- FileUtils.makedirs(dest)
49
- elsif type == :file
50
- if data.kind_of?(String)
51
- File.open(dest, 'wb') {|f| f.write(data) }
52
- else
53
- data.stream('rb') do |source|
54
- File.open(dest, 'wb') {|f| FileUtils.copy_stream(source, f) }
55
- end
56
- end
57
- else
58
- raise "Unsupported path type '#{type}' for #{path}"
59
- end
60
- end
61
-
62
- # Return the content of the given +path+ which is opened in +mode+.
63
- def read(path, mode = 'rb')
64
- File.open(File.join(@root, path), mode) {|f| f.read}
65
- end
66
-
67
- end
68
-
69
- end
@@ -1,61 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require 'pathname'
4
- require 'webgen/websiteaccess'
5
- require 'webgen/path'
6
-
7
- module Webgen
8
-
9
- # This class is used to read source paths from a directory in the file system.
10
- class Source::FileSystem
11
-
12
- # A special Webgen::Path class for handling with file system paths.
13
- class Path < Webgen::Path
14
-
15
- # Create a new object with absolute path +path+ for the file system path +fs_path+.
16
- def initialize(path, fs_path)
17
- super(path) {|mode| File.open(fs_path, mode) }
18
- @fs_path = fs_path
19
- WebsiteAccess.website.cache[[:fs_path, @fs_path]] = File.mtime(@fs_path)
20
- @meta_info['modified_at'] = File.mtime(@fs_path)
21
- end
22
-
23
- # Return +true+ if the file system path used by the object has been modified.
24
- def changed?
25
- data = WebsiteAccess.website.cache[[:fs_path, @fs_path]]
26
- File.mtime(@fs_path) > data
27
- end
28
-
29
- end
30
-
31
- # The root path from which paths read.
32
- attr_reader :root
33
-
34
- # The glob (see Dir.glob for details) that is used to specify which paths under the root path
35
- # should be returned by #paths.
36
- attr_reader :glob
37
-
38
- # Create a new file system source for the root path +root+ using the provided +glob+.
39
- def initialize(root, glob = '**/*')
40
- if root =~ /^([a-zA-Z]:|\/)/
41
- @root = root
42
- else
43
- @root = File.join(WebsiteAccess.website.directory, root)
44
- end
45
- @glob = glob
46
- end
47
-
48
- # Return all paths under #root which match #glob.
49
- def paths
50
- @paths ||= Dir.glob(File.join(@root, @glob), File::FNM_DOTMATCH|File::FNM_CASEFOLD).to_set.collect do |f|
51
- next unless File.exists?(f) # handle invalid links
52
- temp = Pathname.new(f.sub(/^#{Regexp.escape(@root)}\/?/, '/')).cleanpath.to_s
53
- temp += '/' if File.directory?(f) && temp[-1] != ?/
54
- path = Path.new(temp, f)
55
- path
56
- end.compact
57
- end
58
-
59
- end
60
-
61
- end
@@ -1,45 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require 'webgen/websiteaccess'
4
- require 'webgen/source'
5
- require 'webgen/common'
6
-
7
- module Webgen::Source
8
-
9
- # This class is used to provide access to sources provided by resources.
10
- class Resource
11
-
12
- include Webgen::WebsiteAccess
13
-
14
- # The glob (see File.fnmatch) specifying the resources.
15
- attr_reader :glob
16
-
17
- # The glob (see File.fnmatch) specifying the paths that should be used from the resources.
18
- attr_reader :paths_glob
19
-
20
- # The prefix that should optionally be stripped from the paths.
21
- attr_reader :strip_prefix
22
-
23
- # Create a new resource source for the the +glob+ and use only those paths matching +paths_glob+
24
- # while stripping +strip_prefix+ off the path.
25
- def initialize(glob, paths_glob = nil, strip_prefix = nil)
26
- @glob, @paths_glob, @strip_prefix = glob, paths_glob, strip_prefix
27
- end
28
-
29
- # Return all paths associated with the resources identified by #glob.
30
- def paths
31
- if !defined?(@paths)
32
- stack = Stacked.new
33
- website.config['resources'].select {|name, infos| File.fnmatch(@glob, name)}.sort.each do |name, infos|
34
- stack.add([['/', Webgen::Common.const_for_name(infos.first).new(*infos[1..-1])]])
35
- end
36
- @paths = stack.paths
37
- @paths = @paths.select {|p| File.fnmatch(@paths_glob, p)} if @paths_glob
38
- @paths.collect! {|p| p.mount_at('/', @strip_prefix)} if @strip_prefix
39
- end
40
- @paths
41
- end
42
-
43
- end
44
-
45
- end
@@ -1,78 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require 'pathname'
4
- require 'webgen/websiteaccess'
5
- require 'webgen/path'
6
- require 'open-uri'
7
- require 'zlib'
8
- begin
9
- require 'archive/tar/minitar'
10
- rescue LoadError
11
- raise Webgen::LoadError.new('archive/tar/minitar', self.class.name, nil, 'archive-tar-minitar')
12
- end
13
-
14
- module Webgen
15
-
16
- # This class is used to read source paths from a (gzipped) tar archive. The archive can be remote
17
- # (http(s) or ftp) or local.
18
- #
19
- # For example, the following are all valid URIs:
20
- # http://example.com/directory/file.tgz
21
- # /home/test/my.tar.gz
22
- # ftp://ftp.example.com/archives/archive.tar
23
- #
24
- class Source::TarArchive
25
-
26
- # A special Webgen::Path class for handling paths from a tar archive.
27
- class Path < Webgen::Path
28
-
29
- # Create a new tar archive path object for the entry +entry+.
30
- def initialize(path, data, mtime, uri)
31
- super(path) {|mode| StringIO.new(data.to_s, mode) }
32
- @uri = uri
33
- @mtime = mtime
34
- WebsiteAccess.website.cache[[:tararchive_path, @uri, path]] = @mtime if WebsiteAccess.website
35
- @meta_info['modified_at'] = @mtime
36
- end
37
-
38
- # Return +true+ if the tar archive path used by the object has been modified.
39
- def changed?
40
- !WebsiteAccess.website || @mtime > WebsiteAccess.website.cache[[:tararchive_path, @uri, path]]
41
- end
42
-
43
- end
44
-
45
- # The URI of the tar archive.
46
- attr_reader :uri
47
-
48
- # The glob (see File.fnmatch for details) that is used to specify which paths in the archive should
49
- # be returned by #paths.
50
- attr_reader :glob
51
-
52
- # Create a new tar archive source for the URI string +uri+.
53
- def initialize(uri, glob = '**/*')
54
- @uri = uri
55
- @glob = glob
56
- end
57
-
58
- # Return all paths in the tar archive available at #uri.
59
- def paths
60
- if !defined?(@paths)
61
- stream = open(@uri)
62
- stream = Zlib::GzipReader.new(stream) if @uri =~ /(\.tar\.gz|\.tgz)$/
63
- Archive::Tar::Minitar::Input.open(stream) do |input|
64
- @paths = input.collect do |entry|
65
- path = entry.full_name
66
- next unless File.fnmatch(@glob, path, File::FNM_DOTMATCH|File::FNM_CASEFOLD|File::FNM_PATHNAME)
67
- path += '/' if entry.directory? && path[-1,1] != '/'
68
- path = '/' + path unless path[0,1] == '/'
69
- Path.new(path, entry.read, Time.at(entry.mtime), @uri)
70
- end.compact.to_set
71
- end
72
- end
73
- @paths
74
- end
75
-
76
- end
77
-
78
- end
@@ -1,275 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require 'webgen/loggable'
4
- require 'webgen/common'
5
- require 'benchmark'
6
-
7
- module Webgen
8
-
9
- # Namespace for all classes that handle source paths.
10
- #
11
- # Have a look at Webgen::SourceHandler::Base for details on how to implement a source handler
12
- # class.
13
- module SourceHandler
14
-
15
- autoload :Base, 'webgen/sourcehandler/base'
16
- autoload :Copy, 'webgen/sourcehandler/copy'
17
- autoload :Directory, 'webgen/sourcehandler/directory'
18
- autoload :Metainfo, 'webgen/sourcehandler/metainfo'
19
- autoload :Template, 'webgen/sourcehandler/template'
20
- autoload :Page, 'webgen/sourcehandler/page'
21
- autoload :Fragment, 'webgen/sourcehandler/fragment'
22
- autoload :Virtual, 'webgen/sourcehandler/virtual'
23
- autoload :Feed, 'webgen/sourcehandler/feed'
24
- autoload :Sitemap, 'webgen/sourcehandler/sitemap'
25
- autoload :Memory, 'webgen/sourcehandler/memory'
26
-
27
- # This class is used by Website to do the actual rendering of the website. It
28
- #
29
- # * collects all source paths using the source classes
30
- # * creates nodes using the source handler classes
31
- # * writes changed nodes out using an output class
32
- # * deletes old nodes
33
- class Main
34
-
35
- include WebsiteAccess
36
- include Loggable
37
-
38
- def initialize #:nodoc:
39
- website.blackboard.add_service(:create_nodes, method(:create_nodes))
40
- website.blackboard.add_service(:create_nodes_from_paths, method(:create_nodes_from_paths))
41
- website.blackboard.add_service(:source_paths, method(:find_all_source_paths))
42
- website.blackboard.add_listener(:node_meta_info_changed?, method(:meta_info_changed?))
43
-
44
- website.blackboard.add_listener(:before_node_deleted) do |node|
45
- unless node.is_fragment? || node['no_output'] || node.path == '/' || node == node.tree.dummy_root
46
- website.blackboard.invoke(:output_instance).delete(node.path)
47
- end
48
- end if website.config['output.do_deletion']
49
- end
50
-
51
- # Render the current website. Before the actual rendering is done, the sources are checked for
52
- # changes, i.e. nodes for deleted sources are deleted, nodes for new and changed sources are
53
- # updated.
54
- def render
55
- begin
56
- website.logger.mark_new_cycle if website.logger
57
-
58
- puts "Updating tree..."
59
- time = Benchmark.measure do
60
- website.cache.reset_volatile_cache
61
- update_tree
62
- end
63
- puts "...done in " + ('%2.4f' % time.real) + ' seconds'
64
-
65
- if !website.tree.root
66
- puts 'No source files found - maybe not a webgen website?'
67
- return nil
68
- end
69
-
70
- puts "Writing changed nodes..."
71
- time = Benchmark.measure do
72
- write_tree
73
- end
74
- puts "...done in " + ('%2.4f' % time.real) + ' seconds'
75
- end while website.tree.node_access[:alcn].any? {|name,node| node.flagged?(:created) || node.flagged?(:reinit)}
76
- :success
77
- rescue Webgen::Error
78
- raise
79
- rescue Exception => e
80
- raise Webgen::Error.new(e)
81
- end
82
-
83
- #######
84
- private
85
- #######
86
-
87
- # Update the <tt>website.tree</tt> by creating/reinitializing all needed nodes.
88
- def update_tree
89
- unused_paths = Set.new
90
- referenced_nodes = Set.new
91
- all_but_passive_paths = Set.new(find_all_source_paths.select {|name, path| !path.passive?}.collect {|name, path| name})
92
- begin
93
- used_paths = all_but_passive_paths - unused_paths
94
- paths_to_use = Set.new
95
- nodes_to_delete = Set.new
96
- passive_nodes = Set.new
97
-
98
- website.tree.node_access[:alcn].each do |alcn, node|
99
- next if node == website.tree.dummy_root
100
-
101
- begin
102
- used_paths.delete(node.node_info[:src])
103
-
104
- src_path = find_all_source_paths[node.node_info[:src]]
105
- if !src_path
106
- nodes_to_delete << node
107
- elsif (!node.flagged?(:created) && src_path.changed?) || node.meta_info_changed?
108
- node.flag(:reinit)
109
- paths_to_use << node.node_info[:src]
110
- elsif node.changed?
111
- # nothing to be done here but method node.changed? has to be called
112
- end
113
-
114
- if src_path && src_path.passive?
115
- passive_nodes << node
116
- elsif src_path
117
- referenced_nodes += node.node_info[:used_meta_info_nodes] + node.node_info[:used_nodes]
118
- end
119
- rescue Webgen::Error => e
120
- e.alcn = node.alcn unless e.alcn
121
- raise
122
- rescue Exception => e
123
- raise Webgen::Error.new(e, nil, node)
124
- end
125
- end
126
-
127
- # add unused passive nodes to node_to_delete set
128
- unreferenced_passive_nodes, other_passive_nodes = passive_nodes.partition do |pnode|
129
- !referenced_nodes.include?(pnode.alcn)
130
- end
131
- refs = other_passive_nodes.collect {|n| (n.node_info[:used_meta_info_nodes] + n.node_info[:used_nodes]).to_a}.flatten
132
- unreferenced_passive_nodes.each {|n| nodes_to_delete << n if !refs.include?(n.alcn)}
133
-
134
- nodes_to_delete.each {|node| website.tree.delete_node(node)}
135
- used_paths.merge(paths_to_use)
136
- paths = create_nodes_from_paths(used_paths).collect {|n| n.node_info[:src]}
137
- unused_paths.merge(used_paths - paths)
138
- website.tree.node_access[:alcn].each {|name, node| website.tree.delete_node(node) if node.flagged?(:reinit)}
139
- website.cache.reset_volatile_cache
140
- end until used_paths.empty?
141
- end
142
-
143
- # Write out all changed nodes of the <tt>website.tree</tt>.
144
- def write_tree
145
- output = website.blackboard.invoke(:output_instance)
146
-
147
- website.tree.node_access[:alcn].select do |name, node|
148
- use_node = (node != website.tree.dummy_root && node.flagged?(:dirty))
149
- node.unflag(:dirty_meta_info)
150
- node.unflag(:created)
151
- node.unflag(:dirty)
152
- use_node
153
- end.sort.each do |name, node|
154
- begin
155
- next if node['no_output'] || !(content = node.content)
156
-
157
- puts " "*4 + name, :verbose
158
- type = if node.is_directory?
159
- :directory
160
- elsif node.is_fragment?
161
- :fragment
162
- else
163
- :file
164
- end
165
- output.write(node.path, content, type)
166
- rescue Webgen::Error => e
167
- e.alcn = node.alcn unless e.alcn
168
- raise
169
- rescue Exception => e
170
- raise Webgen::RenderError.new(e, nil, node)
171
- end
172
- end
173
- end
174
-
175
- # Return a hash with all source paths.
176
- def find_all_source_paths
177
- if !defined?(@paths)
178
- active_source = Webgen::Source::Stacked.new(website.config['sources'].collect do |mp, name, *args|
179
- [mp, Webgen::Common.const_for_name(name).new(*args)]
180
- end)
181
- passive_source = Webgen::Source::Stacked.new(website.config['passive_sources'].collect do |mp, name, *args|
182
- [mp, Webgen::Common.const_for_name(name).new(*args)]
183
- end, true)
184
- passive_source.paths.each {|path| path.passive = true }
185
- source = Webgen::Source::Stacked.new([['/', active_source], ['/', passive_source]])
186
-
187
- @paths = {}
188
- source.paths.each do |path|
189
- if !(website.config['sourcehandler.ignore'].any? {|pat| File.fnmatch(pat, path, File::FNM_CASEFOLD|File::FNM_DOTMATCH)})
190
- @paths[path.source_path] = path
191
- end
192
- end
193
- end
194
- @paths
195
- end
196
-
197
- # Return only the subset of +paths+ which are handled by the source handler +name+.
198
- def paths_for_handler(name, paths)
199
- patterns = website.config['sourcehandler.patterns'][name]
200
- return [] if patterns.nil?
201
-
202
- options = (website.config['sourcehandler.casefold'] ? File::FNM_CASEFOLD : 0) |
203
- (website.config['sourcehandler.use_hidden_files'] ? File::FNM_DOTMATCH : 0) |
204
- File::FNM_PATHNAME
205
- find_all_source_paths.values_at(*paths).compact.select do |path|
206
- patterns.any? {|pat| File.fnmatch(pat, path, options)}
207
- end
208
- end
209
-
210
- # Use the source handlers to create nodes for the +paths+ in the <tt>website.tree</tt> and
211
- # return the nodes that have been created.
212
- def create_nodes_from_paths(paths)
213
- nodes = Set.new
214
- website.config['sourcehandler.invoke'].sort.each do |priority, shns|
215
- shns.each do |shn|
216
- sh = website.cache.instance(shn)
217
- handler_paths = paths_for_handler(shn, paths)
218
- handler_paths.sort {|a,b| a.path.length <=> b.path.length}.each do |path|
219
- if !website.tree[path.parent_path]
220
- nodes.merge(create_nodes_from_paths([path.parent_path]))
221
- end
222
- nodes += create_nodes(path, sh)
223
- end
224
- end
225
- end
226
- nodes
227
- end
228
-
229
- # Prepare everything to create from the +path+ using the +source_handler+. If a block is
230
- # given, the actual creation of the nodes is deferred to it. Otherwise the #create_node method
231
- # of the +source_handler+ is used. After the nodes are created, it is also checked if they
232
- # have all needed properties.
233
- def create_nodes(path, source_handler) #:yields: path
234
- path = path.dup
235
- path.meta_info = default_meta_info(path, source_handler.class.name)
236
- (website.cache[:sourcehandler_path_mi] ||= {})[[path.path, source_handler.class.name]] = path.meta_info.dup
237
- website.blackboard.dispatch_msg(:before_node_created, path)
238
- *nodes = if block_given?
239
- yield(path)
240
- else
241
- source_handler.create_node(path)
242
- end
243
- nodes = nodes.flatten.compact
244
- nodes.each {|node| website.blackboard.dispatch_msg(:after_node_created, node)}
245
- nodes
246
- rescue Webgen::Error => e
247
- e.alcn = path unless e.alcn
248
- raise
249
- rescue Exception => e
250
- raise Webgen::NodeCreationError.new(e, source_handler.class.name, path)
251
- end
252
-
253
- # Return the default meta info for the pair of +path+ and +sh_name+.
254
- def default_meta_info(path, sh_name)
255
- path.meta_info.merge(website.config['sourcehandler.default_meta_info'][:all]).
256
- merge(website.config['sourcehandler.default_meta_info'][sh_name] || {})
257
- end
258
-
259
- # Check if the default meta information for +node+ has changed since the last run. But don't
260
- # take the node's path's +modified_at+ meta information into account since that changes on
261
- # every path change.
262
- def meta_info_changed?(node)
263
- path = node.node_info[:creation_path]
264
- old_mi = website.cache[:sourcehandler_path_mi][[path, node.node_info[:processor]]]
265
- old_mi.delete('modified_at')
266
- new_mi = default_meta_info(@paths[path] || Webgen::Path.new(path), node.node_info[:processor])
267
- new_mi.delete('modified_at')
268
- node.flag(:dirty_meta_info) if !old_mi || old_mi != new_mi
269
- end
270
-
271
- end
272
-
273
- end
274
-
275
- end