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,39 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/content_processor/blocks'
4
+
5
+ module Webgen
6
+ class Context
7
+
8
+ # Provides methods for rendering page blocks.
9
+ module Rendering
10
+
11
+ # Render the named block and return the result.
12
+ #
13
+ # call-seq:
14
+ # context.render_block(block_name)
15
+ # context.render_block(:name => block_name, :option => value, ...)
16
+ #
17
+ # This method uses the functionality of Webgen::ContentProcessor::Blocks for doing the actual
18
+ # work, so you may also want to look at Webgen::ContentProcessor::Blocks.render_block. You can
19
+ # call this method in two ways:
20
+ #
21
+ # [#render_block(block_name)]
22
+ # Renders the block named +block_name+ of the next node in the current node chain. This is
23
+ # the version that most want to use since it is equivalent to the use of '<webgen:block
24
+ # name="block_name" />'. It is also equivalent to '#render_block(:name => block_name)'.
25
+ #
26
+ # [#render_block(opts_hash)]
27
+ # This version allows the same level of control over the output as the blocks content
28
+ # processor. For a list of valid options have a look at the documentation of the
29
+ # Webgen::ContentProcessor::Blocks.render_block method!
30
+ #
31
+ def render_block(name_or_hash)
32
+ name_or_hash = {:name => name_or_hash} if name_or_hash.kind_of?(String)
33
+ Webgen::ContentProcessor::Blocks.render_block(self, name_or_hash)
34
+ end
35
+
36
+ end
37
+
38
+ end
39
+ end
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ module Webgen
4
+ class Context
5
+
6
+ # Provides methods for using webgen tags.
7
+ module WebgenTags
8
+
9
+ # Returns the result of evaluating the webgen tag +name+ with the tag parameters +params+ and
10
+ # the +body+ in the current context.
11
+ #
12
+ # Have a look at Webgen::Tag for more information about webgen tags!
13
+ #
14
+ # This method is useful when you want to have the functionality of webgen tags available but you
15
+ # don't want to use the content processor for them. Or, for example, if the used markup language
16
+ # uses a similar markup as webgen tags do and therefore you can't use the normal webgen tags
17
+ # content processor.
18
+ def tag(name, params = {}, body = '')
19
+ website.ext.tag.call(name, params, body, self)
20
+ end
21
+
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/error'
4
+
5
+ # Require the given library but handle a possible loading error more gracefully.
6
+ #
7
+ # The parameter +gem+ (which defaults to +library+) should be set to the Rubygem that provides the
8
+ # library or to +nil+ if no such Rubygem exists.
9
+ def webgen_require(library, gem = library)
10
+ require library
11
+ rescue LoadError
12
+ raise Webgen::LoadError.new(library, self.class.name, nil, gem)
13
+ end
14
+
15
+
16
+ class Hash
17
+
18
+ # Return a new hash where all String keys are converted to Symbol keys.
19
+ def symbolize_keys
20
+ hash = dup
21
+ hash.keys.each {|k| hash[(k.to_sym rescue k)] = hash.delete(k)}
22
+ hash
23
+ end
24
+
25
+ end
@@ -0,0 +1,151 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/extension_manager'
4
+ require 'webgen/error'
5
+
6
+ module Webgen
7
+
8
+ # Namespace for all classes that are used to write content to a specific destination.
9
+ #
10
+ # == About
11
+ #
12
+ # This class is used to manage destination classes. A destination class is a class that writes
13
+ # content to a specific destination. For example, the FileSystem class uses the file system to
14
+ # write out the generated content to the file system.
15
+ #
16
+ # The #register method is used for registering new destination classes.
17
+ #
18
+ # Since there can only be one destination class per website instance, this manager class hides the
19
+ # implementation details and uses the configuration option "destination" to create a new object
20
+ # from the correct destination class. Use the #write, #read, #exists? and #delete methods on this
21
+ # manager class to perform the equivalent operations on the destination class.
22
+ #
23
+ # == Implementing a destination class
24
+ #
25
+ # A destination class must respond to the following five methods:
26
+ #
27
+ # [initialize(website, *args)]
28
+ # The website instance is always provided as the first argument and the initialize method can
29
+ # have any number of other parameters.
30
+ #
31
+ # [exists?(path)]
32
+ # Return +true+ if the given path exists.
33
+ #
34
+ # [delete(path)]
35
+ # Delete the given path.
36
+ #
37
+ # [write(path, data)]
38
+ # Write the +data+ to the given +path+. If +path+ ends with a slash, a directory should be
39
+ # created. The parameter +data+ is either a String with the content or a Webgen::Path object. If
40
+ # it is the latter, use the Webgen::Path#io method for retrieving the IO object.
41
+ #
42
+ # [read(path, mode = 'rb')]
43
+ # Return the content of the given path if it exists or raise an error otherwise. The parameter
44
+ # +mode+ specifies the mode in which the path should be opened and defaults to reading in binary
45
+ # mode.
46
+ #
47
+ # It seems a bit odd that a destination object has to implement reading functionality. However,
48
+ # consider the case where you want webgen to render a website programmatically and *use* the
49
+ # generated data. In this case you need a way to get the content of the generated files!
50
+ #
51
+ # == Sample destination class
52
+ #
53
+ # Following is a simple destination class which stores the written content in a hash in memory:
54
+ #
55
+ # class MemoryDestination
56
+ #
57
+ # attr_reader :data
58
+ #
59
+ # def initialize(website)
60
+ # # the website object is not used in this destination class
61
+ # @data = {}
62
+ # end
63
+ #
64
+ # def exists?(path)
65
+ # @data.has_key?(path)
66
+ # end
67
+ #
68
+ # def delete(path)
69
+ # @data.delete(path)
70
+ # end
71
+ #
72
+ # def write(path, data)
73
+ # @data[path] = (data.kind_of?(String) ? data : data.data)
74
+ # end
75
+ #
76
+ # def read(path, mode = 'rb')
77
+ # raise "No such path #{path}" unless @data[path] && path[-1] != ?/
78
+ # @data[path]
79
+ # end
80
+ # end
81
+ #
82
+ # website.ext.destination.register MemoryDestination, :name => 'memory'
83
+ #
84
+ class Destination
85
+
86
+ include Webgen::ExtensionManager
87
+
88
+ # Create a new Destination object that is associated with the given website.
89
+ def initialize(website)
90
+ super()
91
+ @website = website
92
+ end
93
+
94
+ # Register a destination class.
95
+ #
96
+ # The parameter +klass+ has to contain the name of the destination class or the class object
97
+ # itself. If the class is located under this namespace, only the class name without the
98
+ # hierarchy part is needed, otherwise the full class name including parent module/class names is
99
+ # needed.
100
+ #
101
+ # === Options:
102
+ #
103
+ # [:name] The name for the destination class. If not set, it defaults to the snake-case version
104
+ # (i.e. FileSystem → file_system) of the class name (without the hierarchy part). It
105
+ # should only contain letters.
106
+ #
107
+ # === Examples:
108
+ #
109
+ # destination.register('FileSystem') # registers Webgen::Destination::FileSystem
110
+ #
111
+ # destination.register('::FileSystem') # registers FileSystem !!!
112
+ #
113
+ # destination.register('MyModule::Doit', name: 'doit_now')
114
+ #
115
+ def register(klass, options={}, &block)
116
+ do_register(klass, options, false, &block)
117
+ end
118
+
119
+ # Return the instance of the configured destination class.
120
+ def instance
121
+ if !defined?(@instance)
122
+ name, *args = @website.config['destination']
123
+ @instance = extension(name).new(@website, *args)
124
+ end
125
+ @instance
126
+ end
127
+ private :instance
128
+
129
+ # Return +true+ if the given path exists.
130
+ def exists?(path)
131
+ instance.exists?(path)
132
+ end
133
+
134
+ # Delete the given +path+
135
+ def delete(path)
136
+ instance.delete(path)
137
+ end
138
+
139
+ # Write the +data+ (either a String or a Webgen::Path object) to the given +path+.
140
+ def write(path, data)
141
+ instance.write(path, data) if !@website.config['website.dry_run']
142
+ end
143
+
144
+ # Return the content of the given +path+ which is opened in +mode+.
145
+ def read(path, mode = 'rb')
146
+ instance.read(path, mode)
147
+ end
148
+
149
+ end
150
+
151
+ end
@@ -0,0 +1,62 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/destination'
4
+ require 'fileutils'
5
+
6
+ module Webgen
7
+ class Destination
8
+
9
+ # This class uses the file systems as output device. On initialization a root path is set and
10
+ # all other operations are taken relative to this root path.
11
+ class FileSystem
12
+
13
+ # The root path, ie. the path to which the root node gets rendered.
14
+ attr_reader :root
15
+
16
+ # Create a new FileSystem object with the given +root+ path. If +root+ is not absolute, it is
17
+ # taken relative to the website directory.
18
+ def initialize(website, root)
19
+ @root = File.absolute_path(root, website.directory)
20
+ end
21
+
22
+ # Return +true+ if the given path exists.
23
+ def exists?(path)
24
+ File.exists?(File.join(@root, path))
25
+ end
26
+
27
+ # Delete the given +path+
28
+ def delete(path)
29
+ dest = File.join(@root, path)
30
+ if File.directory?(dest)
31
+ FileUtils.rm_rf(dest)
32
+ else
33
+ FileUtils.rm(dest)
34
+ end
35
+ end
36
+
37
+ # Write the +data+ to the given +path+.
38
+ def write(path, data)
39
+ dest = File.join(@root, path)
40
+ FileUtils.makedirs(File.dirname(dest))
41
+ if path[-1] == ?/
42
+ FileUtils.makedirs(dest)
43
+ else
44
+ if data.kind_of?(String)
45
+ File.open(dest, 'wb') {|f| f.write(data) }
46
+ else
47
+ data.io('rb') do |source|
48
+ File.open(dest, 'wb') {|f| FileUtils.copy_stream(source, f) }
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ # Return the content of the given +path+ which is opened in +mode+.
55
+ def read(path, mode = 'rb')
56
+ File.open(File.join(@root, path), mode) {|f| f.read}
57
+ end
58
+
59
+ end
60
+
61
+ end
62
+ end
data/lib/webgen/error.rb CHANGED
@@ -2,51 +2,63 @@
2
2
 
3
3
  module Webgen
4
4
 
5
- # Custom webgen error.
5
+ # This error class and its descendants are only used in webgen when user-visible errors need to be
6
+ # created. For example, when the format of the configuration is not valid. Use the built-in Ruby
7
+ # error classes for all other error situations!
6
8
  class Error < StandardError
7
9
 
8
- # The name of the class where the error happened.
9
- attr_reader :class_name
10
+ # The location where the error happened (this can be set to a file name, a class name, ...).
11
+ attr_accessor :location
10
12
 
11
- # This is either the source path or the node alcn which is responsible for the error.
12
- attr_accessor :alcn
13
+ # Contains the path name if the error is related to a specific source or destination path,
14
+ attr_accessor :path
13
15
 
14
- # The plain error message.
15
- attr_reader :plain_message
16
-
17
- # Create a new Error using the provided values.
16
+ # Create a new Error object.
18
17
  #
19
18
  # If +msg_or_error+ is a String, it is treated as the error message. If it is an exception, the
20
- # exception is wrapped.
21
- def initialize(msg_or_error, class_name = nil, alcn = nil)
19
+ # exception is wrapped. The +location+ parameter can be used to further describe where the error
20
+ # happened and the +path+ parameter can be used to associate a source or destination path with
21
+ # the error.
22
+ def initialize(msg_or_error, location = nil, path = nil)
22
23
  if msg_or_error.kind_of?(String)
23
24
  super(msg_or_error)
24
- @plain_message = msg_or_error
25
25
  else
26
26
  super(msg_or_error.message)
27
27
  set_backtrace(msg_or_error.backtrace)
28
- @plain_message = msg_or_error.message
29
28
  end
30
- @class_name, @alcn = class_name, (alcn.kind_of?(Node) ? alcn.to_s : alcn)
29
+ @location, @path = location, path.to_s
31
30
  end
32
31
 
33
- def message # :nodoc:
34
- msg = 'Error while working'
35
- msg += (@alcn ? " on <#{@alcn}>" : '')
36
- msg += " with #{@class_name}" if @class_name
37
- msg + ":\n " + plain_message
32
+ def message(wrapped_msg_only = false) # :nodoc:
33
+ return super().gsub(/\n/, "\n ") if wrapped_msg_only
34
+ msg = 'Error'
35
+ msg << " at #{@location}" if @location
36
+ msg << (!@path.to_s.empty? ? " while working on <#{@path}>" : '')
37
+ msg << ":\n " << super().gsub(/\n/, "\n ")
38
+ end
39
+
40
+ # Return the error line by inspecting the backtrace of the given +error+ instance.
41
+ def self.error_line(error)
42
+ (error.is_a?(::SyntaxError) ? error.message : error.backtrace[0]).scan(/:(\d+)/).first.first.to_i rescue nil
43
+ end
44
+
45
+ # Return the file name where the error occured.
46
+ def self.error_file(error)
47
+ (error.is_a?(::SyntaxError) ? error.message : error.backtrace[0]).scan(/(?:^|\s)(.*?):(\d+)/).first.first
38
48
  end
39
49
 
40
50
  end
41
51
 
52
+
42
53
  # This error is raised when an error condition occurs during the creation of a node.
43
54
  class NodeCreationError < Error
44
55
 
45
56
  def message # :nodoc:
46
- msg = 'Error while creating a node'
47
- msg += (@alcn ? " from <#{@alcn}>" : '')
48
- msg += " with #{@class_name}" if @class_name
49
- msg + ":\n " + plain_message
57
+ msg = 'Error'
58
+ msg << " at #{@location}" if @location
59
+ msg << ' while creating a node'
60
+ msg << (!@path.to_s.empty? ? " from <#{@path}>" : '')
61
+ msg << ":\n " << super(true)
50
62
  end
51
63
 
52
64
  end
@@ -55,33 +67,31 @@ module Webgen
55
67
  # This error is raised when an error condition occurs during rendering of a node.
56
68
  class RenderError < Error
57
69
 
58
- # The alcn of the file where the error happened. This can be different from #alcn (e.g. a page
70
+ # The path of the file where the error happened. This can be different from #path (e.g. a page
59
71
  # file is rendered but the error happens in a used template).
60
- attr_accessor :error_alcn
72
+ attr_accessor :error_path
61
73
 
62
- # The line number in the +error_alcn+ where the errror happened.
74
+ # The line number in the +error_path+ where the errror happened.
63
75
  attr_accessor :line
64
76
 
65
- # Create a new RenderError using the provided values.
66
- #
67
- # If +msg_or_error+ is a String, it is treated as the error message. If it is an exception, the
68
- # exception is wrapped.
69
- def initialize(msg_or_error, class_name = nil, alcn = nil, error_alcn = nil, line = nil)
70
- super(msg_or_error, class_name, alcn)
71
- @error_alcn, @line = (error_alcn.kind_of?(Node) ? error_alcn.to_s : error_alcn), line
77
+ # Create a new RenderError.
78
+ def initialize(msg_or_error, location = nil, path = nil, error_path = nil, line = nil)
79
+ super(msg_or_error, location, path)
80
+ @error_path = error_path || (Exception === msg_or_error ? self.class.error_file(msg_or_error) : nil)
81
+ @line = line || (Exception === msg_or_error ? self.class.error_line(msg_or_error) : nil)
72
82
  end
73
83
 
74
84
  def message # :nodoc:
75
- msg = 'Error '
76
- if @error_alcn
77
- msg += "in <#{@error_alcn}"
85
+ msg = 'Error'
86
+ msg << " at #{@location}" if @location
87
+ if @error_path
88
+ msg += " in <#{@error_path}"
78
89
  msg += ":~#{@line}" if @line
79
- msg += "> "
90
+ msg += ">"
80
91
  end
81
- msg += 'while rendering '
82
- msg += (@alcn ? "<#{@alcn}>" : 'the website')
83
- msg += " with #{@class_name}" if @class_name
84
- msg + ":\n " + plain_message
92
+ msg << ' while rendering'
93
+ msg << (!@path.to_s.empty? ? " <#{@path}>" : ' the website')
94
+ msg << ":\n " << super(true)
85
95
  end
86
96
 
87
97
  end
@@ -96,18 +106,18 @@ module Webgen
96
106
  # The name of the Rubygem that provides the missing library.
97
107
  attr_reader :gem
98
108
 
99
- # Create a new LoadError using the provided values.
109
+ # Create a new LoadError.
100
110
  #
101
111
  # If +library_or_error+ is a String, it is treated as the missing library name and an approriate
102
112
  # error message is created. If it is an exception, the exception is wrapped.
103
- def initialize(library_or_error, class_name = nil, alcn = nil, gem = nil)
113
+ def initialize(library_or_error, location = nil, path = nil, gem = nil)
104
114
  if library_or_error.kind_of?(String)
105
115
  msg = "The needed library '#{library_or_error}' is missing."
106
- msg += " You can install it via rubygems with 'gem install #{gem}'!" if gem
107
- super(msg, class_name, alcn)
116
+ msg << " You can install it with rubygems by running 'gem install #{gem}'!" if gem
117
+ super(msg, location, path)
108
118
  @library = library_or_error
109
119
  else
110
- super(library_or_error, class_name, alcn)
120
+ super(library_or_error, location, path)
111
121
  @library = nil
112
122
  end
113
123
  @gem = gem
@@ -122,11 +132,11 @@ module Webgen
122
132
  # The command that is missing.
123
133
  attr_reader :cmd
124
134
 
125
- # Create a new CommandNotFoundError using the provided values.
135
+ # Create a new CommandNotFoundError.
126
136
  #
127
137
  # The parameter +cmd+ specifies the command that is missing.
128
- def initialize(cmd, class_name = nil, alcn = nil)
129
- super("The needed command '#{cmd}' is missing!", class_name, alcn)
138
+ def initialize(cmd, location = nil, path = nil)
139
+ super("The needed command '#{cmd}' is missing!", location, path)
130
140
  @cmd = cmd
131
141
  end
132
142