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
@@ -0,0 +1,126 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'rbconfig'
4
+ require 'yaml'
5
+
6
+ module Webgen
7
+
8
+ # This class is used for loading extension bundles. It provides a DSL for the most commonly needed
9
+ # commands.
10
+ #
11
+ # When an extension bundle is provided by a Rubygem and the Rubygem is not already activated, the
12
+ # Rubygem is automatically activated. This only works when one follows the standard naming
13
+ # conventions for webgen extension bundles, i.e. the Rubygem has to be named
14
+ # 'webgen-BUNDLE_NAME-bundle'.
15
+ class BundleLoader
16
+
17
+ # Create a new BundleLoader object belonging to the website object +website+.
18
+ def initialize(website, ext_dir)
19
+ @website = website
20
+ @website.ext.bundles = {}
21
+ @ext_dir = ext_dir
22
+ @loaded = []
23
+ @stack = []
24
+ end
25
+
26
+ # Load the extension bundle in the context of this BundleLoader object.
27
+ def load(name)
28
+ file = resolve_init_file(name)
29
+ raise(ArgumentError, "Extension bundle '#{name}' not found") if !file
30
+ file = File.expand_path(file)
31
+ return if @loaded.include?(file)
32
+
33
+ @loaded.push(file)
34
+ @stack.push(file)
35
+ self.instance_eval(File.read(file), file)
36
+ @stack.pop
37
+
38
+ if file != File.expand_path(File.join(@ext_dir, 'init.rb'))
39
+ name = File.basename(File.dirname(file))
40
+ info_file = File.join(File.dirname(file), 'info.yaml')
41
+ @website.ext.bundles[name] = (File.file?(info_file) ? info_file : nil)
42
+ end
43
+ end
44
+
45
+ # Loads all bundles that are marked for auto-loading.
46
+ def load_autoload_bundles
47
+ Gem::Specification.map {|s| s.name }.uniq.each do |gem_name|
48
+ md = /^webgen-(.*)-bundle$/.match(gem_name)
49
+ next unless md
50
+
51
+ bundle_name = md[1]
52
+ file = resolve_init_file(bundle_name)
53
+ next unless file
54
+
55
+ info_file = File.join(File.dirname(file), 'info.yaml')
56
+ next unless File.file?(info_file)
57
+ next unless YAML.load(File.read(info_file))['autoload']
58
+
59
+ load(bundle_name)
60
+ end
61
+ end
62
+
63
+ # Search in the website extension directory and then in the load path to find the initialization
64
+ # file of the bundle.
65
+ def resolve_init_file(name)
66
+ name.sub!(/(\/|^)init\.rb$/, '')
67
+
68
+ if name =~ /\A[\w-]+\z/
69
+ begin
70
+ Gem::Specification.find_by_name("webgen-#{name}-bundle").activate
71
+ rescue Gem::LoadError
72
+ end
73
+ end
74
+
75
+ possible_init_file_names(name).each {|path| return path if File.file?(path)}
76
+
77
+ nil
78
+ end
79
+ private :resolve_init_file
80
+
81
+ # Create all possible initialization file names for the given directory name.
82
+ def possible_init_file_names(dir_name)
83
+ [File.join(@ext_dir, dir_name, 'init.rb')] +
84
+ $LOAD_PATH.map {|path| File.join(path, 'webgen/bundle', dir_name, 'init.rb')}
85
+ end
86
+ private :possible_init_file_names
87
+
88
+ # :section: DSL methods
89
+ #
90
+ # All following method are DSL methods that are provided for convenience and can be used by the
91
+ # initialization files.
92
+
93
+ # Require the file relative to the currently loaded file.
94
+ def require_relative(file)
95
+ require(File.join(File.dirname(@stack.last), file))
96
+ end
97
+
98
+ # Define a configuration option.
99
+ #
100
+ # See Webgen::Configuration#define_option for more information.
101
+ def option(name, default, description, &validator)
102
+ @website.config.define_option(name, default, description, &validator)
103
+ end
104
+
105
+ # Return the website object.
106
+ def website
107
+ @website
108
+ end
109
+
110
+ # Mount the directory relative to the currently loaded file on the given mount point as passive
111
+ # source.
112
+ #
113
+ # See Webgen::Source for more information.
114
+ def mount_passive(dir, mount_point = '/', glob = '**/*')
115
+ @website.ext.source.passive_sources.unshift([mount_point, :file_system, absolute_path(dir), glob])
116
+ end
117
+
118
+ # Return the absolute path of the given path which is assumed to be relative to the currently
119
+ # loaded file.
120
+ def absolute_path(path)
121
+ File.expand_path(File.join(File.dirname(@stack.last), path))
122
+ end
123
+
124
+ end
125
+
126
+ end
data/lib/webgen/cache.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
3
  require 'set'
4
- require 'webgen/common'
5
4
 
6
5
  module Webgen
7
6
 
@@ -11,16 +10,17 @@ module Webgen
11
10
  # runs.
12
11
  #
13
12
  # [volatile] The volatile cache is used for data that can easily be regenerated but might be
14
- # expensive to do so. This cache is not stored between webgen runs.
13
+ # expensive to do so. This cache is not stored between passes when writing nodes to
14
+ # the destination.
15
15
  #
16
16
  # [standard] The standard cache saves data between webgen runs and returns the cached data (not
17
17
  # the newly set data) if it is available. This is useful, for example, to store file
18
18
  # modifcation times and check if a file has been changed between runs.
19
19
  #
20
- # The standard cache should be accessed through the <tt>[]</tt> method which returns the correct
21
- # value and the <tt>[]=</tt> method should be used for setting the new value. However, if you
22
- # really need to access a particular value of the old or new standard cache, you can use the
23
- # accessors +old_data+ and +new_data+.
20
+ # The standard cache should be accessed through the #[] method which returns the correct value and
21
+ # the #[]= method should be used for setting the new value. However, if you really need to access
22
+ # a particular value of the old or new standard cache, you can use the accessors +old_data+ and
23
+ # +new_data+.
24
24
  class Cache
25
25
 
26
26
  # The permanent cache hash.
@@ -40,7 +40,7 @@ module Webgen
40
40
  @old_data = {}
41
41
  @new_data = {}
42
42
  @volatile = {}
43
- @permanent = {:classes => []}
43
+ @permanent = {}
44
44
  end
45
45
 
46
46
  # Return the cached data (or, if it is not available, the new data) identified by +key+ from the
@@ -58,10 +58,9 @@ module Webgen
58
58
  @new_data[key] = value
59
59
  end
60
60
 
61
- # Restore the caches from +data+ and recreate all cached instances (see #instance).
61
+ # Restore the cache from +data+.
62
62
  def restore(data)
63
63
  @old_data, @permanent = *data
64
- @permanent[:classes].each {|klass| instance(klass)}
65
64
  end
66
65
 
67
66
  # Return all caches that should be available between webgen runs.
@@ -71,15 +70,7 @@ module Webgen
71
70
 
72
71
  # Reset the volatile cache.
73
72
  def reset_volatile_cache
74
- @volatile = {:classes => @volatile[:classes]}
75
- end
76
-
77
- # Return the unique instance of the class +name+ (a String). This method should be used when it
78
- # is essential that webgen uses only one object of a class or when an object should
79
- # automatically be recreated upon cache restoration (see #restore).
80
- def instance(name)
81
- @permanent[:classes] << name unless @permanent[:classes].include?(name)
82
- (@volatile[:classes] ||= {})[name] ||= Common.const_for_name(name).new
73
+ @volatile = {}
83
74
  end
84
75
 
85
76
  end
data/lib/webgen/cli.rb CHANGED
@@ -1,8 +1,15 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
3
  require 'cmdparse'
4
+ require 'yaml'
4
5
  require 'webgen/website'
5
6
  require 'webgen/version'
7
+ require 'webgen/cli/logger'
8
+ require 'webgen/cli/utils'
9
+ require 'webgen/cli/generate_command'
10
+ require 'webgen/cli/show_command'
11
+ require 'webgen/cli/bundle_command'
12
+ require 'webgen/cli/create_command'
6
13
 
7
14
  module Webgen
8
15
 
@@ -10,30 +17,28 @@ module Webgen
10
17
  #
11
18
  # == Implementing a CLI command
12
19
  #
13
- # Each CLI command class needs to be put into this module and has to end with +Command+, otherwise
14
- # it is not used. A CLI command is an extension that can be invoked from the webgen command and
15
- # thus needs to be derived from CmdParse::Command. For detailed information on this class and the
16
- # whole cmdparse package have a look at http://cmdparse.rubyforge.org!
20
+ # A CLI command is an extension that can be invoked from the webgen CLI and thus needs to be
21
+ # derived from CmdParse::Command. For detailed information on this class and the whole cmdparse
22
+ # package have a look at http://cmdparse.rubyforge.org!
17
23
  #
18
- # == Sample CLI command
24
+ # == Sample CLI command extension
19
25
  #
20
- # Here is a sample CLI command extension which could be put, for example, into the
21
- # <tt>ext/init.rb</tt> of a webgen website:
26
+ # Here is a sample CLI command extension:
22
27
  #
23
- # require 'webgen/cli'
24
- #
25
- # class Webgen::CLI::SampleCommand < CmdParse::Command
28
+ # class SampleCommand < CmdParse::Command
26
29
  #
27
30
  # def initialize
28
31
  # super('sample', false)
29
32
  # self.short_desc = "This sample command just outputs its parameters"
30
- # self.description = Webgen::CLI::Utils.format("Uses the global verbosity level and outputs additional " +
31
- # "information when the level is set to verbose!")
33
+ # self.description = Webgen::CLI::Utils.format_command_desc("Uses the global verbosity level " +
34
+ # "and outputs additional "information when the level is set to verbose!")
32
35
  # @username = nil
33
36
  # self.options = CmdParse::OptionParserWrapper.new do |opts|
34
37
  # opts.separator "Options:"
35
38
  # opts.on('-u', '--user USER', String,
36
- # 'Specify an additional user name to output') {|username| @username = username}
39
+ # *Webgen::CLI::Util.format_option_desc('Specify an additional user name to output')) do |username|
40
+ # @username = username
41
+ # end
37
42
  # end
38
43
  # end
39
44
  #
@@ -43,8 +48,8 @@ module Webgen
43
48
  # else
44
49
  # puts "Command line arguments:"
45
50
  # args.each {|arg| puts arg}
46
- # if commandparser.verbosity == :verbose
47
- # puts "Yeah, some additional information is always cool!"
51
+ # if commandparser.log_level <= 1
52
+ # puts "Some debug information here"
48
53
  # end
49
54
  # puts "The entered username: #{@username}" if @username
50
55
  # end
@@ -52,77 +57,145 @@ module Webgen
52
57
  #
53
58
  # end
54
59
  #
60
+ # website.ext.cli.add_command(SampleCommand.new)
61
+ #
55
62
  # Note the use of Webgen::CLI::Utils.format in the initialize method so that the long text gets
56
63
  # wrapped correctly! The Utils class provides some other useful methods, too!
57
64
  #
58
- # For information about which attributes are available on the webgen command parser instance have
59
- # a look at Webgen::CLI::CommandParser!
60
65
  module CLI
61
66
 
62
- autoload :RunCommand, 'webgen/cli/run_command'
63
- autoload :CreateCommand, 'webgen/cli/create_command'
64
- autoload :WebguiCommand, 'webgen/cli/webgui_command'
65
- autoload :ApplyCommand, 'webgen/cli/apply_command'
66
-
67
- autoload :Utils, 'webgen/cli/utils'
68
-
69
-
70
- # This is the command parser class used for handling the webgen command line interface. After
71
- # creating an instance, the inherited #parse method can be used for parsing the command line
67
+ # This is the command parser class used for handling the webgen command line interface.
68
+ #
69
+ # After creating an instance, the #parse method can be used for parsing the command line
72
70
  # arguments and executing the requested command.
73
71
  class CommandParser < CmdParse::CommandParser
74
72
 
75
- # The website directory. Default: the current working directory.
73
+ # This error is thrown when an invalid configuration option is encountered.
74
+ class ConfigurationOptionError < CmdParse::ParseError
75
+ reason 'Problem with configuration option'
76
+ end
77
+
78
+
79
+ # The website directory. Default: the value of the WEBGEN_WEBSITE environment variable or the
80
+ # current working directory.
81
+ #
82
+ # *Note*: Only available after the #website method has been called (which is always the case
83
+ # when a command is executed).
76
84
  attr_reader :directory
77
85
 
78
- # The verbosity level. Default: <tt>:normal</tt>
79
- attr_reader :verbosity
86
+ # Specifies whether verbose output should be used.
87
+ attr_reader :verbose
80
88
 
81
- # The log level. Default: <tt>Logger::WARN</tt>
89
+ # The log level. Default: Logger::INFO
82
90
  attr_reader :log_level
83
91
 
84
- # Create a new CommandParser class. The default webgen website (if not specified via the
85
- # <tt>-d</tt> option) is taken from the environment variable +WEBGEN_WEBSITE+ or, if it is not
86
- # set or empty, the current working directory.
87
- def initialize # :nodoc:
88
- super(true)
92
+ # Create a new CommandParser class.
93
+ def initialize
94
+ super(true, true, false)
89
95
  @directory = nil
90
- @verbosity = :normal
91
- @log_level = ::Logger::WARN
92
- @log_filter = nil
96
+ @verbose = false
97
+ @do_search = false
98
+ @log_level = ::Logger::INFO
99
+ @config_options = {}
100
+
101
+ self.add_command(CmdParse::VersionCommand.new)
102
+ self.add_command(CmdParse::HelpCommand.new)
93
103
 
94
104
  self.program_name = "webgen"
95
105
  self.program_version = Webgen::VERSION
96
106
  self.options = CmdParse::OptionParserWrapper.new do |opts|
97
107
  opts.separator "Global options:"
98
- opts.on("--directory DIR", "-d", String, "The website directory (default: the current directory)") {|p| @directory = p}
99
- opts.on("--verbose", "-v", "Print more output") { @verbosity = :verbose }
100
- opts.on("--quiet", "-q", "No output") { @verbosity = :quiet }
101
- opts.on("--log-level LEVEL", "-l", Integer, "The logging level (0..debug, 3..error)") {|p| @log_level = p}
102
- opts.on("--log-filter", "-f", Regexp, 'Filter for logging events') {|p| @log_filter = p}
108
+ opts.on("--directory DIR", "-d", String,
109
+ *Utils.format_option_desc("The website directory to use")) do |d|
110
+ @directory = d
111
+ end
112
+ opts.on("--search-dirs", "-s",
113
+ *Utils.format_option_desc("Search parent directories for website directory")) do |s|
114
+ @do_search = s
115
+ end
116
+ opts.on("-c", "--[no-]color",
117
+ *Utils.format_option_desc("Colorize output (default: #{Webgen::CLI::Utils.use_colors ? "yes" : "no"})")) do |a|
118
+ Webgen::CLI::Utils.use_colors = a
119
+ end
120
+ opts.on("-v", "--[no-]verbose",
121
+ *Utils.format_option_desc("Verbose output (default: no)")) do |v|
122
+ @verbose = v
123
+ end
124
+ opts.on("-q", "--[no-]quiet",
125
+ *Utils.format_option_desc("Quiet output (default: no)")) do |v|
126
+ @log_level = (v ? ::Logger::WARN : :Logger::INFO)
127
+ end
128
+ opts.on("-n", "--[no-]dry-run",
129
+ *Utils.format_option_desc("Do a dry run, i.e. don't actually write anything (default: no)")) do |v|
130
+ @config_options['website.dry_run'] = v
131
+ end
132
+ opts.on("-o", "--option CONFIG_OPTION", String,
133
+ *Utils.format_option_desc("Specify a simple configuration option (key=value)")) do |v|
134
+ k, v = v.split('=')
135
+ begin
136
+ @config_options[k] = YAML.load(v)
137
+ rescue YAML::SyntaxError
138
+ raise ConfigurationOptionError.new("Couldn't parse value for '#{k}': #{$!}")
139
+ end
140
+ end
141
+ opts.on("--[no-]debug",
142
+ *Utils.format_option_desc("Enable debugging")) do |v|
143
+ @log_level = (v ? ::Logger::DEBUG : :Logger::INFO)
144
+ end
145
+ opts.on_tail("--version", "-V", "Show webgen version information") do
146
+ main_command.commands['version'].execute([])
147
+ end
103
148
  end
104
- self.add_command(CmdParse::HelpCommand.new)
105
- self.add_command(CmdParse::VersionCommand.new)
149
+ self.add_command(Webgen::CLI::GenerateCommand.new, true)
150
+ self.add_command(Webgen::CLI::ShowCommand.new)
151
+ self.add_command(Webgen::CLI::BundleCommand.new)
152
+ self.add_command(Webgen::CLI::CreateCommand.new)
106
153
  end
107
154
 
108
- # Utility method for sub-commands to create the correct Webgen::Website object.
109
- def create_website
110
- if !defined?(@website)
111
- @website = Webgen::Website.new(@directory) do |config|
112
- config['logger.mask'] = @log_filter
155
+ # Utility method for getting the Webgen::Website object.
156
+ def website
157
+ @directory = ENV['WEBGEN_WEBSITE'] if @directory.nil? && !ENV['WEBGEN_WEBSITE'].to_s.empty?
158
+ if @directory.nil? && @do_search
159
+ dir = Dir.pwd
160
+ file_missing = nil
161
+ dir = File.dirname(dir) while dir != '/' && (file_missing = !File.exist?(File.join(dir, Webgen::Website::CONFIG_FILENAME)))
162
+ @directory = dir if !file_missing
163
+ end
164
+ @directory = Dir.pwd if @directory.nil?
165
+ @website ||= Webgen::Website.new(@directory, Webgen::CLI::Logger.new) do |site, before_init|
166
+ if before_init
167
+ site.ext.cli = self
168
+ site.logger.level = @log_level
169
+ site.logger.verbose = @verbose
170
+ site.logger.prefix = '[DRY-RUN] ' if @config_options['website.dry_run']
171
+ else
172
+ @config_options.each do |k, v|
173
+ if site.config.option?(k)
174
+ site.config[k] = v
175
+ else
176
+ raise ConfigurationOptionError.new("Unknown option '#{k}'")
177
+ end
178
+ end
113
179
  end
114
- @website.logger.level = @log_level
115
- @website.logger.verbosity = @verbosity
116
180
  end
117
- @website
118
181
  end
119
182
 
120
- # :nodoc:
183
+ # Parse the command line arguments.
184
+ #
185
+ # Once the website directory information is gathered, the Webgen::Website is initialized to
186
+ # allow additional CLI commands to be added by extensions.
121
187
  def parse(argv = ARGV)
122
- Webgen::CLI.constants.select {|c| c =~ /.+Command$/ }.each do |c|
123
- self.add_command(Webgen::CLI.const_get(c).new, (c.to_s == 'RunCommand' ? true : false))
188
+ super do |level, name|
189
+ if level == 0
190
+ # Create website object/automatically performs initialization; needed so that custom
191
+ # commands can be added
192
+ website
193
+ end
124
194
  end
125
- super
195
+ rescue
196
+ puts "webgen encountered a problem:\n " + $!.message
197
+ puts $!.backtrace if @log_level == ::Logger::DEBUG
198
+ exit(1)
126
199
  end
127
200
 
128
201
  end