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