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