webgen 0.5.17 → 1.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (408) hide show
  1. data/API.rdoc +143 -0
  2. data/AUTHORS +0 -1
  3. data/COPYING +17 -8
  4. data/ChangeLog +4456 -0
  5. data/GPL +623 -289
  6. data/README.md +71 -0
  7. data/Rakefile +87 -99
  8. data/VERSION +1 -1
  9. data/bin/webgen +1 -7
  10. data/data/webgen/basic_website_template/ext/init.rb +15 -0
  11. data/data/webgen/basic_website_template/webgen.config +18 -0
  12. data/data/webgen/bundle_template_files/README.md.erb +24 -0
  13. data/data/webgen/bundle_template_files/Rakefile.erb +36 -0
  14. data/data/webgen/bundle_template_files/info.yaml.erb +16 -0
  15. data/data/webgen/bundle_template_files/init.rb.erb +1 -0
  16. data/data/webgen/passive_sources/default.metainfo +32 -0
  17. data/data/webgen/passive_sources/stylesheets/coderay-default.css +109 -118
  18. data/data/webgen/passive_sources/templates/feed.template +62 -0
  19. data/data/webgen/passive_sources/templates/sitemap.template +3 -6
  20. data/data/webgen/passive_sources/templates/tag.template +42 -0
  21. data/data/webgen/website_bundles/default/README +2 -2
  22. data/lib/webgen/blackboard.rb +15 -51
  23. data/lib/webgen/bundle/built-in-show-changes/init.rb +54 -0
  24. data/lib/webgen/bundle/built-in/init.rb +366 -0
  25. data/lib/webgen/bundle_loader.rb +126 -0
  26. data/lib/webgen/cache.rb +9 -18
  27. data/lib/webgen/cli.rb +131 -58
  28. data/lib/webgen/cli/bundle_command.rb +30 -0
  29. data/lib/webgen/cli/create_bundle_command.rb +46 -0
  30. data/lib/webgen/cli/create_command.rb +48 -60
  31. data/lib/webgen/cli/generate_command.rb +25 -0
  32. data/lib/webgen/cli/install_bundle_command.rb +34 -0
  33. data/lib/webgen/cli/list_bundle_command.rb +108 -0
  34. data/lib/webgen/cli/logger.rb +45 -0
  35. data/lib/webgen/cli/show_command.rb +30 -0
  36. data/lib/webgen/cli/show_config_command.rb +63 -0
  37. data/lib/webgen/cli/show_dependencies_command.rb +103 -0
  38. data/lib/webgen/cli/show_extensions_command.rb +74 -0
  39. data/lib/webgen/cli/utils.rb +68 -95
  40. data/lib/webgen/configuration.rb +143 -105
  41. data/lib/webgen/content_processor.rb +160 -0
  42. data/lib/webgen/content_processor/blocks.rb +96 -0
  43. data/lib/webgen/content_processor/builder.rb +25 -0
  44. data/lib/webgen/content_processor/erb.rb +25 -0
  45. data/lib/webgen/content_processor/erubis.rb +31 -0
  46. data/lib/webgen/content_processor/fragments.rb +82 -0
  47. data/lib/webgen/content_processor/haml.rb +25 -0
  48. data/lib/webgen/content_processor/html_head.rb +157 -0
  49. data/lib/webgen/content_processor/kramdown.rb +49 -0
  50. data/lib/webgen/content_processor/maruku.rb +39 -0
  51. data/lib/webgen/content_processor/r_discount.rb +21 -0
  52. data/lib/webgen/content_processor/rdoc.rb +22 -0
  53. data/lib/webgen/content_processor/redcloth.rb +23 -0
  54. data/lib/webgen/content_processor/ruby.rb +20 -0
  55. data/lib/webgen/content_processor/sass.rb +145 -0
  56. data/lib/webgen/content_processor/scss.rb +23 -0
  57. data/lib/webgen/content_processor/tags.rb +30 -0
  58. data/lib/webgen/content_processor/tidy.rb +32 -0
  59. data/lib/webgen/content_processor/tikz.rb +116 -0
  60. data/lib/webgen/content_processor/xmllint.rb +31 -0
  61. data/lib/webgen/context.rb +57 -29
  62. data/lib/webgen/context/html_head.rb +60 -0
  63. data/lib/webgen/context/nodes.rb +32 -27
  64. data/lib/webgen/context/rendering.rb +39 -0
  65. data/lib/webgen/context/webgen_tags.rb +25 -0
  66. data/lib/webgen/core_ext.rb +25 -0
  67. data/lib/webgen/destination.rb +151 -0
  68. data/lib/webgen/destination/file_system.rb +62 -0
  69. data/lib/webgen/error.rb +59 -49
  70. data/lib/webgen/extension_manager.rb +121 -0
  71. data/lib/webgen/item_tracker.rb +237 -0
  72. data/lib/webgen/item_tracker/file.rb +39 -0
  73. data/lib/webgen/item_tracker/missing_node.rb +61 -0
  74. data/lib/webgen/item_tracker/node_content.rb +40 -0
  75. data/lib/webgen/item_tracker/node_meta_info.rb +53 -0
  76. data/lib/webgen/item_tracker/nodes.rb +92 -0
  77. data/lib/webgen/logger.rb +26 -82
  78. data/lib/webgen/node.rb +122 -367
  79. data/lib/webgen/node_finder.rb +336 -0
  80. data/lib/webgen/page.rb +48 -85
  81. data/lib/webgen/path.rb +218 -156
  82. data/lib/webgen/path_handler.rb +400 -0
  83. data/lib/webgen/path_handler/base.rb +220 -0
  84. data/lib/webgen/path_handler/copy.rb +78 -0
  85. data/lib/webgen/path_handler/directory.rb +21 -0
  86. data/lib/webgen/path_handler/feed.rb +82 -0
  87. data/lib/webgen/path_handler/meta_info.rb +84 -0
  88. data/lib/webgen/path_handler/page.rb +38 -0
  89. data/lib/webgen/path_handler/page_utils.rb +79 -0
  90. data/lib/webgen/path_handler/sitemap.rb +52 -0
  91. data/lib/webgen/path_handler/template.rb +96 -0
  92. data/lib/webgen/path_handler/virtual.rb +85 -0
  93. data/lib/webgen/{webgentask.rb → rake_task.rb} +31 -27
  94. data/lib/webgen/source.rb +106 -24
  95. data/lib/webgen/source/file_system.rb +41 -0
  96. data/lib/webgen/source/stacked.rb +49 -53
  97. data/lib/webgen/source/tar_archive.rb +59 -0
  98. data/lib/webgen/tag.rb +250 -19
  99. data/lib/webgen/tag/breadcrumb_trail.rb +65 -0
  100. data/lib/webgen/tag/coderay.rb +32 -35
  101. data/lib/webgen/tag/date.rb +9 -9
  102. data/lib/webgen/tag/execute_command.rb +31 -0
  103. data/lib/webgen/tag/include_file.rb +32 -0
  104. data/lib/webgen/tag/langbar.rb +31 -47
  105. data/lib/webgen/tag/link.rb +17 -18
  106. data/lib/webgen/tag/menu.rb +27 -189
  107. data/lib/webgen/tag/meta_info.rb +31 -0
  108. data/lib/webgen/tag/relocatable.rb +48 -39
  109. data/lib/webgen/tag/tikz.rb +24 -100
  110. data/lib/webgen/task.rb +99 -0
  111. data/lib/webgen/task/create_bundle.rb +73 -0
  112. data/lib/webgen/task/create_website.rb +94 -0
  113. data/lib/webgen/task/generate_website.rb +47 -0
  114. data/lib/webgen/test_helper.rb +183 -0
  115. data/lib/webgen/tree.rb +95 -46
  116. data/lib/webgen/utils.rb +39 -0
  117. data/lib/webgen/utils/external_command.rb +27 -0
  118. data/lib/webgen/utils/tag_parser.rb +124 -0
  119. data/lib/webgen/version.rb +1 -1
  120. data/lib/webgen/website.rb +134 -296
  121. data/setup.rb +1 -1
  122. data/test/test_documentation.rb +43 -0
  123. data/test/webgen/cli/test_logger.rb +41 -0
  124. data/test/{test_contentprocessor_blocks.rb → webgen/content_processor/test_blocks.rb} +30 -28
  125. data/test/webgen/content_processor/test_builder.rb +25 -0
  126. data/test/webgen/content_processor/test_erb.rb +21 -0
  127. data/test/webgen/content_processor/test_erubis.rb +33 -0
  128. data/test/webgen/content_processor/test_fragments.rb +96 -0
  129. data/test/webgen/content_processor/test_haml.rb +24 -0
  130. data/test/webgen/content_processor/test_html_head.rb +78 -0
  131. data/test/webgen/content_processor/test_kramdown.rb +49 -0
  132. data/test/webgen/content_processor/test_maruku.rb +30 -0
  133. data/test/webgen/content_processor/test_r_discount.rb +18 -0
  134. data/test/webgen/content_processor/test_rdoc.rb +18 -0
  135. data/test/webgen/content_processor/test_redcloth.rb +23 -0
  136. data/test/webgen/content_processor/test_ruby.rb +24 -0
  137. data/test/webgen/content_processor/test_sass.rb +44 -0
  138. data/test/webgen/content_processor/test_scss.rb +23 -0
  139. data/test/webgen/content_processor/test_tags.rb +44 -0
  140. data/test/webgen/content_processor/test_tidy.rb +31 -0
  141. data/test/webgen/content_processor/test_tikz.rb +33 -0
  142. data/test/webgen/content_processor/test_xmllint.rb +32 -0
  143. data/test/webgen/destination/test_file_system.rb +54 -0
  144. data/test/webgen/item_tracker/test_file.rb +31 -0
  145. data/test/webgen/item_tracker/test_missing_node.rb +70 -0
  146. data/test/webgen/item_tracker/test_node_content.rb +42 -0
  147. data/test/webgen/item_tracker/test_node_meta_info.rb +44 -0
  148. data/test/webgen/item_tracker/test_nodes.rb +61 -0
  149. data/test/webgen/path_handler/test_base.rb +153 -0
  150. data/test/webgen/path_handler/test_copy.rb +56 -0
  151. data/test/webgen/path_handler/test_feed.rb +85 -0
  152. data/test/webgen/path_handler/test_meta_info.rb +98 -0
  153. data/test/webgen/path_handler/test_page.rb +25 -0
  154. data/test/webgen/path_handler/test_page_utils.rb +59 -0
  155. data/test/webgen/path_handler/test_sitemap.rb +95 -0
  156. data/test/webgen/path_handler/test_template.rb +64 -0
  157. data/test/webgen/path_handler/test_virtual.rb +87 -0
  158. data/test/webgen/source/test_file_system.rb +51 -0
  159. data/test/webgen/source/test_stacked.rb +35 -0
  160. data/test/{test_source_tararchive.rb → webgen/source/test_tar_archive.rb} +10 -25
  161. data/test/webgen/tag/test_breadcrumb_trail.rb +66 -0
  162. data/test/webgen/tag/test_coderay.rb +34 -0
  163. data/test/webgen/tag/test_date.rb +18 -0
  164. data/test/webgen/tag/test_execute_command.rb +36 -0
  165. data/test/webgen/tag/test_include_file.rb +35 -0
  166. data/test/webgen/tag/test_langbar.rb +50 -0
  167. data/test/webgen/tag/test_link.rb +40 -0
  168. data/test/webgen/tag/test_menu.rb +61 -0
  169. data/test/webgen/tag/test_meta_info.rb +25 -0
  170. data/test/webgen/tag/test_relocatable.rb +50 -0
  171. data/test/webgen/tag/test_tikz.rb +41 -0
  172. data/test/webgen/task/test_create_website.rb +46 -0
  173. data/test/webgen/test_blackboard.rb +31 -0
  174. data/test/webgen/test_bundle_loader.rb +55 -0
  175. data/test/{test_cache.rb → webgen/test_cache.rb} +3 -15
  176. data/test/webgen/test_cli.rb +41 -0
  177. data/test/webgen/test_configuration.rb +131 -0
  178. data/test/webgen/test_content_processor.rb +86 -0
  179. data/test/webgen/test_context.rb +73 -0
  180. data/test/webgen/test_core_ext.rb +20 -0
  181. data/test/webgen/test_destination.rb +48 -0
  182. data/test/webgen/test_error.rb +121 -0
  183. data/test/webgen/test_extension_manager.rb +70 -0
  184. data/test/webgen/test_item_tracker.rb +106 -0
  185. data/test/{test_languages.rb → webgen/test_languages.rb} +4 -4
  186. data/test/webgen/test_logger.rb +46 -0
  187. data/test/webgen/test_node.rb +178 -0
  188. data/test/webgen/test_node_finder.rb +127 -0
  189. data/test/{test_page.rb → webgen/test_page.rb} +44 -48
  190. data/test/webgen/test_path.rb +271 -0
  191. data/test/{test_webgentask.rb → webgen/test_rake_task.rb} +4 -4
  192. data/test/webgen/test_source.rb +59 -0
  193. data/test/webgen/test_tag.rb +137 -0
  194. data/test/webgen/test_task.rb +40 -0
  195. data/test/webgen/test_tree.rb +147 -0
  196. data/test/webgen/test_utils.rb +16 -0
  197. data/test/webgen/test_website.rb +45 -0
  198. data/test/webgen/utils/test_tag_parser.rb +99 -0
  199. metadata +292 -344
  200. data/data/webgen/passive_sources/templates/atom_feed.template +0 -39
  201. data/data/webgen/passive_sources/templates/rss_feed.template +0 -28
  202. data/data/webgen/resources.yaml +0 -4
  203. data/data/webgen/webgui/app.rb +0 -11
  204. data/data/webgen/webgui/controller/main.rb +0 -135
  205. data/data/webgen/webgui/layout/default.xhtml +0 -40
  206. data/data/webgen/webgui/overrides/win32console.rb +0 -0
  207. data/data/webgen/webgui/public/css/jquery.autocomplete.css +0 -50
  208. data/data/webgen/webgui/public/css/ramaze_error.css +0 -90
  209. data/data/webgen/webgui/public/css/style.css +0 -55
  210. data/data/webgen/webgui/public/img/headerbg.jpg +0 -0
  211. data/data/webgen/webgui/public/img/webgen_logo.png +0 -0
  212. data/data/webgen/webgui/public/js/jquery.autocomplete.js +0 -15
  213. data/data/webgen/webgui/public/js/jquery.js +0 -32
  214. data/data/webgen/webgui/start.rb +0 -9
  215. data/data/webgen/webgui/view/create_website.xhtml +0 -14
  216. data/data/webgen/webgui/view/error.xhtml +0 -64
  217. data/data/webgen/webgui/view/index.xhtml +0 -22
  218. data/data/webgen/webgui/view/manage_website.xhtml +0 -18
  219. data/data/webgen/website_skeleton/README +0 -10
  220. data/data/webgen/website_skeleton/Rakefile +0 -69
  221. data/data/webgen/website_skeleton/config.yaml +0 -35
  222. data/data/webgen/website_skeleton/ext/init.rb +0 -10
  223. data/doc/contentprocessor.template +0 -11
  224. data/doc/contentprocessor/blocks.page +0 -129
  225. data/doc/contentprocessor/builder.page +0 -79
  226. data/doc/contentprocessor/erb.page +0 -60
  227. data/doc/contentprocessor/erubis.page +0 -46
  228. data/doc/contentprocessor/fragments.page +0 -26
  229. data/doc/contentprocessor/haml.page +0 -46
  230. data/doc/contentprocessor/head.page +0 -31
  231. data/doc/contentprocessor/kramdown.page +0 -49
  232. data/doc/contentprocessor/less.page +0 -34
  233. data/doc/contentprocessor/maruku.page +0 -44
  234. data/doc/contentprocessor/rdiscount.page +0 -37
  235. data/doc/contentprocessor/rdoc.page +0 -36
  236. data/doc/contentprocessor/redcloth.page +0 -41
  237. data/doc/contentprocessor/sass.page +0 -31
  238. data/doc/contentprocessor/scss.page +0 -39
  239. data/doc/contentprocessor/tags.page +0 -73
  240. data/doc/contentprocessor/tidy.page +0 -14
  241. data/doc/contentprocessor/xmllint.page +0 -14
  242. data/doc/extensions.metainfo +0 -29
  243. data/doc/extensions.page +0 -15
  244. data/doc/extensions.template +0 -17
  245. data/doc/faq.page +0 -222
  246. data/doc/getting_started.page +0 -135
  247. data/doc/index.page +0 -71
  248. data/doc/manual.page +0 -727
  249. data/doc/reference_configuration.page +0 -1254
  250. data/doc/reference_metainfo.page +0 -265
  251. data/doc/reference_website_styles.page +0 -32
  252. data/doc/source/filesystem.page +0 -41
  253. data/doc/source/tararchive.page +0 -40
  254. data/doc/sourcehandler.template +0 -23
  255. data/doc/sourcehandler/copy.page +0 -19
  256. data/doc/sourcehandler/directory.page +0 -27
  257. data/doc/sourcehandler/feed.page +0 -102
  258. data/doc/sourcehandler/metainfo.page +0 -48
  259. data/doc/sourcehandler/page.page +0 -14
  260. data/doc/sourcehandler/sitemap.page +0 -46
  261. data/doc/sourcehandler/template.page +0 -45
  262. data/doc/sourcehandler/virtual.page +0 -49
  263. data/doc/tag.template +0 -25
  264. data/doc/tag/breadcrumbtrail.page +0 -40
  265. data/doc/tag/coderay.page +0 -53
  266. data/doc/tag/date.page +0 -31
  267. data/doc/tag/executecommand.page +0 -26
  268. data/doc/tag/includefile.page +0 -32
  269. data/doc/tag/langbar.page +0 -47
  270. data/doc/tag/link.page +0 -44
  271. data/doc/tag/menu.page +0 -109
  272. data/doc/tag/metainfo.page +0 -29
  273. data/doc/tag/relocatable.page +0 -38
  274. data/doc/tag/sitemap.page +0 -31
  275. data/doc/tag/tikz.page +0 -159
  276. data/doc/upgrading.page +0 -138
  277. data/doc/webgen_page_format.page +0 -129
  278. data/doc/website_styles.metainfo +0 -8
  279. data/lib/webgen/cli/apply_command.rb +0 -66
  280. data/lib/webgen/cli/run_command.rb +0 -22
  281. data/lib/webgen/cli/webgui_command.rb +0 -68
  282. data/lib/webgen/common.rb +0 -27
  283. data/lib/webgen/common/sitemap.rb +0 -83
  284. data/lib/webgen/contentprocessor.rb +0 -117
  285. data/lib/webgen/contentprocessor/blocks.rb +0 -92
  286. data/lib/webgen/contentprocessor/builder.rb +0 -29
  287. data/lib/webgen/contentprocessor/erb.rb +0 -26
  288. data/lib/webgen/contentprocessor/erubis.rb +0 -39
  289. data/lib/webgen/contentprocessor/fragments.rb +0 -25
  290. data/lib/webgen/contentprocessor/haml.rb +0 -34
  291. data/lib/webgen/contentprocessor/head.rb +0 -128
  292. data/lib/webgen/contentprocessor/kramdown.rb +0 -27
  293. data/lib/webgen/contentprocessor/kramdown/html.rb +0 -36
  294. data/lib/webgen/contentprocessor/less.rb +0 -35
  295. data/lib/webgen/contentprocessor/maruku.rb +0 -36
  296. data/lib/webgen/contentprocessor/rdiscount.rb +0 -19
  297. data/lib/webgen/contentprocessor/rdoc.rb +0 -20
  298. data/lib/webgen/contentprocessor/redcloth.rb +0 -21
  299. data/lib/webgen/contentprocessor/sass.rb +0 -22
  300. data/lib/webgen/contentprocessor/scss.rb +0 -22
  301. data/lib/webgen/contentprocessor/tags.rb +0 -170
  302. data/lib/webgen/contentprocessor/tidy.rb +0 -38
  303. data/lib/webgen/contentprocessor/xmllint.rb +0 -37
  304. data/lib/webgen/context/render.rb +0 -32
  305. data/lib/webgen/context/tags.rb +0 -20
  306. data/lib/webgen/coreext.rb +0 -13
  307. data/lib/webgen/default_config.rb +0 -240
  308. data/lib/webgen/loggable.rb +0 -25
  309. data/lib/webgen/output.rb +0 -86
  310. data/lib/webgen/output/filesystem.rb +0 -69
  311. data/lib/webgen/source/filesystem.rb +0 -61
  312. data/lib/webgen/source/resource.rb +0 -45
  313. data/lib/webgen/source/tararchive.rb +0 -78
  314. data/lib/webgen/sourcehandler.rb +0 -275
  315. data/lib/webgen/sourcehandler/base.rb +0 -281
  316. data/lib/webgen/sourcehandler/copy.rb +0 -44
  317. data/lib/webgen/sourcehandler/directory.rb +0 -30
  318. data/lib/webgen/sourcehandler/feed.rb +0 -92
  319. data/lib/webgen/sourcehandler/fragment.rb +0 -70
  320. data/lib/webgen/sourcehandler/memory.rb +0 -42
  321. data/lib/webgen/sourcehandler/metainfo.rb +0 -128
  322. data/lib/webgen/sourcehandler/page.rb +0 -64
  323. data/lib/webgen/sourcehandler/sitemap.rb +0 -60
  324. data/lib/webgen/sourcehandler/template.rb +0 -66
  325. data/lib/webgen/sourcehandler/virtual.rb +0 -117
  326. data/lib/webgen/tag/base.rb +0 -170
  327. data/lib/webgen/tag/breadcrumbtrail.rb +0 -70
  328. data/lib/webgen/tag/executecommand.rb +0 -31
  329. data/lib/webgen/tag/includefile.rb +0 -42
  330. data/lib/webgen/tag/metainfo.rb +0 -27
  331. data/lib/webgen/tag/sitemap.rb +0 -41
  332. data/lib/webgen/websiteaccess.rb +0 -31
  333. data/lib/webgen/websitemanager.rb +0 -125
  334. data/misc/default.css +0 -403
  335. data/misc/default.template +0 -76
  336. data/misc/htmldoc.metainfo +0 -26
  337. data/misc/htmldoc.virtual +0 -17
  338. data/misc/images/arrow.gif +0 -0
  339. data/misc/images/error.png +0 -0
  340. data/misc/images/headerbg.jpg +0 -0
  341. data/misc/images/important.png +0 -0
  342. data/misc/images/information.png +0 -0
  343. data/misc/images/quote.gif +0 -0
  344. data/misc/images/warning.png +0 -0
  345. data/misc/logo.svg +0 -313
  346. data/misc/style.page +0 -33
  347. data/test/helper.rb +0 -61
  348. data/test/test_blackboard.rb +0 -60
  349. data/test/test_cli.rb +0 -119
  350. data/test/test_common_sitemap.rb +0 -58
  351. data/test/test_configuration.rb +0 -68
  352. data/test/test_contentprocessor.rb +0 -39
  353. data/test/test_contentprocessor_builder.rb +0 -41
  354. data/test/test_contentprocessor_erb.rb +0 -33
  355. data/test/test_contentprocessor_erubis.rb +0 -62
  356. data/test/test_contentprocessor_fragments.rb +0 -43
  357. data/test/test_contentprocessor_haml.rb +0 -39
  358. data/test/test_contentprocessor_head.rb +0 -96
  359. data/test/test_contentprocessor_kramdown.rb +0 -56
  360. data/test/test_contentprocessor_less.rb +0 -40
  361. data/test/test_contentprocessor_maruku.rb +0 -33
  362. data/test/test_contentprocessor_rdiscount.rb +0 -21
  363. data/test/test_contentprocessor_rdoc.rb +0 -22
  364. data/test/test_contentprocessor_redcloth.rb +0 -26
  365. data/test/test_contentprocessor_sass.rb +0 -28
  366. data/test/test_contentprocessor_scss.rb +0 -28
  367. data/test/test_contentprocessor_tags.rb +0 -122
  368. data/test/test_contentprocessor_tidy.rb +0 -34
  369. data/test/test_contentprocessor_xmllint.rb +0 -38
  370. data/test/test_context.rb +0 -81
  371. data/test/test_error.rb +0 -93
  372. data/test/test_loggable.rb +0 -32
  373. data/test/test_logger.rb +0 -94
  374. data/test/test_node.rb +0 -469
  375. data/test/test_output_filesystem.rb +0 -60
  376. data/test/test_path.rb +0 -241
  377. data/test/test_source_filesystem.rb +0 -76
  378. data/test/test_source_resource.rb +0 -28
  379. data/test/test_source_stacked.rb +0 -49
  380. data/test/test_sourcehandler_base.rb +0 -136
  381. data/test/test_sourcehandler_copy.rb +0 -47
  382. data/test/test_sourcehandler_directory.rb +0 -38
  383. data/test/test_sourcehandler_feed.rb +0 -88
  384. data/test/test_sourcehandler_fragment.rb +0 -70
  385. data/test/test_sourcehandler_main.rb +0 -39
  386. data/test/test_sourcehandler_memory.rb +0 -44
  387. data/test/test_sourcehandler_metainfo.rb +0 -127
  388. data/test/test_sourcehandler_page.rb +0 -73
  389. data/test/test_sourcehandler_sitemap.rb +0 -68
  390. data/test/test_sourcehandler_template.rb +0 -68
  391. data/test/test_sourcehandler_virtual.rb +0 -106
  392. data/test/test_tag_base.rb +0 -62
  393. data/test/test_tag_breadcrumbtrail.rb +0 -91
  394. data/test/test_tag_coderay.rb +0 -45
  395. data/test/test_tag_date.rb +0 -18
  396. data/test/test_tag_executecommand.rb +0 -41
  397. data/test/test_tag_includefile.rb +0 -50
  398. data/test/test_tag_langbar.rb +0 -71
  399. data/test/test_tag_link.rb +0 -70
  400. data/test/test_tag_menu.rb +0 -207
  401. data/test/test_tag_metainfo.rb +0 -26
  402. data/test/test_tag_relocatable.rb +0 -60
  403. data/test/test_tag_sitemap.rb +0 -47
  404. data/test/test_tag_tikz.rb +0 -69
  405. data/test/test_tree.rb +0 -70
  406. data/test/test_website.rb +0 -130
  407. data/test/test_websiteaccess.rb +0 -25
  408. data/test/test_websitemanager.rb +0 -65
@@ -1,38 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require 'tempfile'
3
-
4
- module Webgen::ContentProcessor
5
-
6
- # Uses the external +tidy+ program to format the content as valid (X)HTML.
7
- class Tidy
8
-
9
- include Webgen::Loggable
10
-
11
- # Process the content of +context+ with the +tidy+ program.
12
- def call(context)
13
- error_file = Tempfile.new('webgen-tidy')
14
- error_file.close
15
-
16
- `tidy -v 2>&1`
17
- if $?.exitstatus != 0
18
- raise Webgen::CommandNotFoundError.new('tidy', self.class.name, context.dest_node)
19
- end
20
-
21
- cmd = "tidy -q -f #{error_file.path} #{context.website.config['contentprocessor.tidy.options']}"
22
- result = IO.popen(cmd, 'r+') do |io|
23
- io.write(context.content)
24
- io.close_write
25
- io.read
26
- end
27
- if $?.exitstatus != 0
28
- File.readlines(error_file.path).each do |line|
29
- log($?.exitstatus == 1 ? :warn : :error) { "Tidy reported problems for <#{context.dest_node}>: #{line}" }
30
- end
31
- end
32
- context.content = result
33
- context
34
- end
35
-
36
- end
37
-
38
- end
@@ -1,37 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require 'tempfile'
3
-
4
- module Webgen::ContentProcessor
5
-
6
- # Uses the external +xmllint+ program to check if the content is valid (X)HTML.
7
- class Xmllint
8
-
9
- include Webgen::Loggable
10
-
11
- # Checks the content of +context+ with the +xmllint+ program for validness.
12
- def call(context)
13
- error_file = Tempfile.new('webgen-xmllint')
14
- error_file.close
15
-
16
- `xmllint --version 2>&1`
17
- if $?.exitstatus != 0
18
- raise Webgen::CommandNotFoundError.new('xmllint', self.class.name, context.dest_node)
19
- end
20
-
21
- cmd = "xmllint #{context.website.config['contentprocessor.xmllint.options']} - 2>'#{error_file.path}'"
22
- result = IO.popen(cmd, 'r+') do |io|
23
- io.write(context.content)
24
- io.close_write
25
- io.read
26
- end
27
- if $?.exitstatus != 0
28
- File.read(error_file.path).scan(/^-:(\d+):(.*?\n)(.*?\n)/).each do |line, error_msg, line_context|
29
- log(:warn) { "xmllint reported problems for <#{context.dest_node}:~#{line}>: #{error_msg.strip} (context: #{line_context.strip})" }
30
- end
31
- end
32
- context
33
- end
34
-
35
- end
36
-
37
- end
@@ -1,32 +0,0 @@
1
- module Webgen
2
-
3
- class Context
4
-
5
- # Render the named block and return the result.
6
- #
7
- # call-seq:
8
- # context.render_block(block_name)<br />
9
- # context.render_block(:name => block_name, :option => value, ...)
10
- #
11
- # This method uses the functionality of the content processor +blocks+ for doing the actual
12
- # work, so you may also want to look at Webgen::ContentProcessor::Blocks#render_block. You can
13
- # call this method in two ways:
14
- #
15
- # [<tt>#render_block(block_name)</tt>]
16
- # Renders the block named +block_name+ of the next node in the current node chain. This is the
17
- # version that most want to use since it is equivalent to the use of <tt><webgen:block
18
- # name="block_name" /></tt>. It is equivalent to <tt>#render_block(:name =>
19
- # block_name)</tt>.
20
- #
21
- # [<tt>#render_block(opts_hash)</tt>]
22
- # This version allows the same level of control over the output as the blocks content
23
- # processor. For a list of valid options have a look at the documentation of the
24
- # Webgen::ContentProcessor::Blocks#render_block method!
25
- def render_block(name_or_hash)
26
- name_or_hash = {:name => name_or_hash} if name_or_hash.kind_of?(String)
27
- website.cache.instance('Webgen::ContentProcessor::Blocks').render_block(self, name_or_hash)
28
- end
29
-
30
- end
31
-
32
- end
@@ -1,20 +0,0 @@
1
- module Webgen
2
-
3
- class Context
4
-
5
- # Returns the result of evaluating the webgen tag +name+ with the tag parameters +params+ and
6
- # the +body+ in the current context.
7
- #
8
- # Have a look at Webgen::Tag::Base for more information about webgen tags!
9
- #
10
- # This method is useful when you want to have the functionality of webgen tags available but you
11
- # don't want to use the content processor for them. Or, for example, if the used markup language
12
- # uses a similar markup as webgen tags do and therefore you can't use the normal webgen tags
13
- # content processor.
14
- def tag(name, params = {}, body = '')
15
- website.cache.instance('Webgen::ContentProcessor::Tags').process_tag(name, params, body, self)
16
- end
17
-
18
- end
19
-
20
- end
@@ -1,13 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- # :stopdoc:
4
- class Array
5
-
6
- def to_hash
7
- h = {}
8
- self.each {|k,v| h[k] = v}
9
- h
10
- end
11
-
12
- end
13
- # :startdoc:
@@ -1,240 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- website = Webgen::WebsiteAccess.website
4
- config = website.config
5
-
6
- # General configuration parameters
7
- config.website.cache([:file, 'webgen.cache'], :doc => 'The file name (or String) from/to which the cache is read/written')
8
- config.website.lang('en', :doc => 'The default language used for the website')
9
- config.website.link_to_current_page(false, :doc => 'Specifies whether links to the current page should be used')
10
-
11
- # All things regarding logging
12
- config.logger.mask(nil, :doc => 'Only show logging events which match the regexp mask')
13
-
14
-
15
- # All things regarding resources
16
- config.resources({}, :doc => 'A mapping from resource names to source identifiers')
17
-
18
- resources = YAML::load(File.read(File.join(Webgen.data_dir, 'resources.yaml')))
19
- resources.each do |res_path_template, res_name|
20
- Dir.glob(File.join(Webgen.data_dir, res_path_template), File::FNM_CASEFOLD).each do |res_path|
21
- substs = Hash.new {|h,k| h[k] = "$" + k }
22
- substs.merge!({
23
- 'basename' => File.basename(res_path),
24
- 'basename_no_ext' => File.basename(res_path, '.*'),
25
- 'extname' => File.extname(res_path)[1..-1],
26
- :dirnames => File.dirname(res_path).split(File::SEPARATOR),
27
- })
28
- name = res_name.to_s.gsub(/\$\w+/) do |m|
29
- if m =~ /^\$dir(\d+)$/
30
- substs[:dirnames][-($1.to_i)]
31
- else
32
- substs[m[1..-1]]
33
- end
34
- end
35
- config['resources'][name] = if File.directory?(res_path)
36
- ["Webgen::Source::FileSystem", res_path]
37
- else
38
- ["Webgen::Source::FileSystem", File.dirname(res_path), File.basename(res_path)]
39
- end
40
- end
41
- end
42
-
43
-
44
- # All things regarding sources
45
- config.sources [['/', "Webgen::Source::FileSystem", 'src']], :doc => 'One or more sources from which files are read, relative to website directory'
46
- config.passive_sources([['/', "Webgen::Source::Resource", "webgen-passive-sources"]], :doc => 'One or more sources for delayed node creation on node resolution')
47
-
48
- # All things regarding source handler
49
- config.sourcehandler.patterns({
50
- 'Webgen::SourceHandler::Copy' => ['**/*.css', '**/*.js', '**/*.html', '**/*.gif', '**/*.jpg', '**/*.png', '**/*.ico'],
51
- 'Webgen::SourceHandler::Directory' => ['**/'],
52
- 'Webgen::SourceHandler::Metainfo' => ['**/metainfo', '**/*.metainfo'],
53
- 'Webgen::SourceHandler::Template' => ['**/*.template'],
54
- 'Webgen::SourceHandler::Page' => ['**/*.page'],
55
- 'Webgen::SourceHandler::Virtual' => ['**/virtual', '**/*.virtual'],
56
- 'Webgen::SourceHandler::Feed' => ['**/*.feed'],
57
- 'Webgen::SourceHandler::Sitemap' => ['**/*.sitemap']
58
- }, :doc => 'Source handler to path pattern map')
59
- config.sourcehandler.invoke({
60
- 1 => ['Webgen::SourceHandler::Directory', 'Webgen::SourceHandler::Metainfo'],
61
- 5 => ['Webgen::SourceHandler::Copy', 'Webgen::SourceHandler::Template',
62
- 'Webgen::SourceHandler::Page', 'Webgen::SourceHandler::Feed',
63
- 'Webgen::SourceHandler::Sitemap'],
64
- 9 => ['Webgen::SourceHandler::Virtual']
65
- }, :doc => 'All source handlers listed here are used by webgen and invoked according to their priority setting')
66
- config.sourcehandler.casefold(true, :doc => 'Specifies whether path are considered to be case-sensitive')
67
- config.sourcehandler.use_hidden_files(false, :doc => 'Specifies whether hidden files (those starting with a dot) are used')
68
- config.sourcehandler.ignore(['**/*~', '**/.svn/**'], :doc => 'Path patterns that should be ignored')
69
- config.sourcehandler.default_lang_in_output_path(false, :doc => 'Specifies whether output paths in the default language should have the language in the name')
70
-
71
- config.sourcehandler.default_meta_info({
72
- :all => {
73
- 'output_path' => 'standard',
74
- 'output_path_style' => [:parent, :basename, ['.', :lang], :ext]
75
- },
76
- 'Webgen::SourceHandler::Copy' => {
77
- 'kind' => 'asset'
78
- },
79
- 'Webgen::SourceHandler::Directory' => {
80
- 'index_path' => 'index.html',
81
- 'kind' => 'directory'
82
- },
83
- 'Webgen::SourceHandler::Page' => {
84
- 'kind' => 'page',
85
- 'fragments_in_menu' => true,
86
- 'blocks' => {'default' => {'pipeline' => 'erb,tags,markdown,blocks,fragments'}}
87
- },
88
- 'Webgen::SourceHandler::Fragment' => {
89
- 'kind' => 'fragment'
90
- },
91
- 'Webgen::SourceHandler::Template' => {
92
- 'blocks' => {'default' => {'pipeline' => 'erb,tags,blocks,head'}}
93
- },
94
- 'Webgen::SourceHandler::Metainfo' => {
95
- 'blocks' => {1 => {'name' => 'paths'}, 2 => {'name' => 'alcn'}}
96
- },
97
- 'Webgen::SourceHandler::Feed' => {
98
- 'rss' => true,
99
- 'atom' => true,
100
- 'blocks' => {'default' => {'pipeline' => 'erb'}}
101
- },
102
- 'Webgen::SourceHandler::Sitemap' => {
103
- 'default_priority' => 0.5,
104
- 'default_change_freq' => 'weekly',
105
- 'common.sitemap.any_lang' => true,
106
- 'blocks' => {'default' => {'pipeline' => 'erb'}}
107
- }
108
- }, :doc => "Default meta information for all nodes and for nodes belonging to a specific source handler")
109
-
110
- config.sourcehandler.template.default_template('default.template', :doc => 'The name of the default template file of a directory')
111
-
112
- website.autoload_service(:templates_for_node, 'Webgen::SourceHandler::Template')
113
-
114
- website.autoload_service(:create_fragment_nodes, 'Webgen::SourceHandler::Fragment')
115
- website.autoload_service(:parse_html_headers, 'Webgen::SourceHandler::Fragment')
116
-
117
-
118
- # All things regarding output
119
- config.output ["Webgen::Output::FileSystem", 'out'], :doc => 'The class which is used to output the generated paths.'
120
- config.output.do_deletion(false, :doc => 'Specifies whether the generated output paths should be deleted once the sources are deleted')
121
-
122
-
123
- Webgen::WebsiteAccess.website.blackboard.add_service(:output_instance, Webgen::Output.method(:instance))
124
-
125
-
126
- # All things regarding content processors
127
- config.contentprocessor.map({
128
- 'markdown' => 'Webgen::ContentProcessor::Kramdown',
129
- 'maruku' => 'Webgen::ContentProcessor::Maruku',
130
- 'textile' => 'Webgen::ContentProcessor::RedCloth',
131
- 'redcloth' => 'Webgen::ContentProcessor::RedCloth',
132
- 'tags' => 'Webgen::ContentProcessor::Tags',
133
- 'blocks' => 'Webgen::ContentProcessor::Blocks',
134
- 'erb' => 'Webgen::ContentProcessor::Erb',
135
- 'haml' => 'Webgen::ContentProcessor::Haml',
136
- 'sass' => 'Webgen::ContentProcessor::Sass',
137
- 'scss' => 'Webgen::ContentProcessor::Scss',
138
- 'rdoc' => 'Webgen::ContentProcessor::RDoc',
139
- 'builder' => 'Webgen::ContentProcessor::Builder',
140
- 'erubis' => 'Webgen::ContentProcessor::Erubis',
141
- 'rdiscount' => 'Webgen::ContentProcessor::RDiscount',
142
- 'fragments' => 'Webgen::ContentProcessor::Fragments',
143
- 'head' => 'Webgen::ContentProcessor::Head',
144
- 'tidy' => 'Webgen::ContentProcessor::Tidy',
145
- 'xmllint' => 'Webgen::ContentProcessor::Xmllint',
146
- 'kramdown' => 'Webgen::ContentProcessor::Kramdown',
147
- 'less' => 'Webgen::ContentProcessor::Less'
148
- }, :doc => 'Content processor name to class map')
149
-
150
- Webgen::WebsiteAccess.website.blackboard.add_service(:content_processor_names, Webgen::ContentProcessor.method(:list))
151
- Webgen::WebsiteAccess.website.blackboard.add_service(:content_processor, Webgen::ContentProcessor.method(:for_name))
152
- Webgen::WebsiteAccess.website.blackboard.add_service(:content_processor_binary?, Webgen::ContentProcessor.method(:is_binary?))
153
-
154
- # All things regarding tags
155
- config.contentprocessor.tags.prefix('', :doc => 'The prefix used for tag names to avoid name clashes when another content processor uses similar markup.')
156
- config.contentprocessor.tags.map({
157
- 'relocatable' => 'Webgen::Tag::Relocatable',
158
- 'menu' => 'Webgen::Tag::Menu',
159
- 'breadcrumb_trail' => 'Webgen::Tag::BreadcrumbTrail',
160
- 'langbar' => 'Webgen::Tag::Langbar',
161
- 'include_file' => 'Webgen::Tag::IncludeFile',
162
- 'execute_cmd' => 'Webgen::Tag::ExecuteCommand',
163
- 'coderay' => 'Webgen::Tag::Coderay',
164
- 'date' => 'Webgen::Tag::Date',
165
- 'sitemap' => 'Webgen::Tag::Sitemap',
166
- 'tikz' => 'Webgen::Tag::TikZ',
167
- 'link' => 'Webgen::Tag::Link',
168
- :default => 'Webgen::Tag::Metainfo'
169
- }, :doc => 'Tag processor name to class map')
170
-
171
- config.contentprocessor.erubis.use_pi(false, :doc => 'Specifies whether processing instructions should be used')
172
- config.contentprocessor.erubis.options({}, :doc => 'A hash of additional options')
173
-
174
- config.contentprocessor.redcloth.hard_breaks(false, :doc => 'Specifies whether new lines are turned into hard breaks')
175
-
176
- config.contentprocessor.tidy.options("-raw", :doc => "The options passed to the tidy command")
177
-
178
- config.contentprocessor.xmllint.options("--catalogs --noout --valid", :doc => 'Options passed to the xmllint command')
179
-
180
- config.contentprocessor.kramdown.options({:auto_ids => true}, :doc => 'The options hash for the kramdown processor')
181
- config.contentprocessor.kramdown.handle_links(true, :doc => 'Whether all links in a kramdown document should be handled by webgen')
182
-
183
-
184
- config.tag.metainfo.escape_html(true, :doc => 'Special HTML characters in the output will be escaped if true')
185
-
186
- config.tag.relocatable.path(nil, :doc => 'The path which should be made relocatable', :mandatory => 'default')
187
-
188
- config.tag.menu.start_level(1, :doc => 'The level at which the menu starts.')
189
- config.tag.menu.min_levels(1, :doc => 'The minimum number of menu levels that should always be shown.')
190
- config.tag.menu.max_levels(3, :doc => 'The maximum number of menu levels that should be shown.')
191
- config.tag.menu.show_current_subtree_only(true, :doc => 'Specifies whether only the current subtree should be shown.')
192
- config.tag.menu.used_nodes('all', :doc => 'Specifies the kind of nodes that should be used: all, files, or fragments')
193
- config.tag.menu.nested(true, :doc => 'Specifies whether a nested menu list should be generated.')
194
-
195
- config.tag.breadcrumbtrail.separator(' / ', :doc => 'Separates the hierachy entries from each other.')
196
- config.tag.breadcrumbtrail.omit_index_path(false, :doc => 'Omits the last path component if it is an index path.')
197
- config.tag.breadcrumbtrail.start_level(0, :doc => 'The level at which the breadcrumb trail starts.')
198
- config.tag.breadcrumbtrail.end_level(-1, :doc => 'The level at which the breadcrumb trail ends.')
199
-
200
- config.tag.langbar.separator(' | ', :doc => 'Separates the languages from each other.')
201
- config.tag.langbar.show_single_lang(true, :doc => 'Should the link be shown although the page is only available in one language?')
202
- config.tag.langbar.show_own_lang(true, :doc => 'Should the link to the currently displayed language page be shown?')
203
- config.tag.langbar.lang_names({}, :doc => 'A map from language code to language names')
204
- config.tag.langbar.process_output(false, :doc => 'The content of the language bar will be scanned for tags if true.')
205
-
206
- config.tag.includefile.filename(nil, :doc => 'The name of the file which should be included (relative to the website).', :mandatory => 'default')
207
- config.tag.includefile.process_output(true, :doc => 'The file content will be scanned for tags if true.')
208
- config.tag.includefile.escape_html(true, :doc => 'Special HTML characters in the file content will be escaped if true.')
209
-
210
- config.tag.executecommand.command(nil, :doc => 'The command which should be executed', :mandatory => 'default')
211
- config.tag.executecommand.process_output(true, :doc => 'The output of the command will be scanned for tags if true')
212
- config.tag.executecommand.escape_html(true, :doc => 'Special HTML characters in the output will be escaped if true')
213
-
214
- config.tag.coderay.lang('ruby', :doc => 'The highlighting language', :mandatory => 'default')
215
- config.tag.coderay.process_body(true, :doc => 'The tag body will be scanned for tags first if true')
216
- config.tag.coderay.wrap(:div, :doc => 'Specifies how the code should be wrapped, either :div or :span')
217
- config.tag.coderay.line_numbers(true, :doc => 'Show line numbers')
218
- config.tag.coderay.line_number_start(1, :doc => 'Line number of first line')
219
- config.tag.coderay.bold_every(10, :doc => 'The interval at which the line number appears bold')
220
- config.tag.coderay.tab_width(8, :doc => 'Number of spaces used for a tabulator')
221
- config.tag.coderay.css(:style, :doc => 'Specifies how the highlighted code should be styled')
222
-
223
- config.tag.date.format('%Y-%m-%d %H:%M:%S', :doc => 'The format of the date (same options as Ruby\'s Time#strftime)')
224
-
225
- config.tag.tikz.path(nil, :doc => 'The source path of the created image', :mandatory => 'default')
226
- config.tag.tikz.libraries(nil, :doc => 'An array of additional TikZ library names')
227
- config.tag.tikz.opts(nil, :doc => 'A string with global options for the tikzpicture environment')
228
- config.tag.tikz.resolution('72 72', :doc => 'A string specifying the render and output resolutions')
229
- config.tag.tikz.transparent(false, :doc => 'Specifies whether the generated image should be transparent (only png)')
230
- config.tag.tikz.img_attr({}, :doc => 'A hash of additional HTML attributes for the created img tag')
231
-
232
- config.tag.link.path(nil, :doc => 'The (A)LCN path to which a link should be generated', :mandatory => 'default')
233
- config.tag.link.attr({}, :doc => 'A hash of additional HTML attributes that should be set on the link')
234
-
235
- # All things regarding common functionality
236
- website.autoload_service(:create_sitemap, 'Webgen::Common::Sitemap')
237
-
238
- config.common.sitemap.honor_in_menu(false, :doc => 'Only include pages that are also in the menu if true')
239
- config.common.sitemap.any_lang(false, :doc => 'Use nodes in any language if true')
240
- config.common.sitemap.used_kinds(['page'], :doc => 'Array of node kinds that is used for the sitemap')
@@ -1,25 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require 'webgen/websiteaccess'
4
-
5
- module Webgen
6
-
7
- # This module should be included in all classes that need a logging facility.
8
- module Loggable
9
-
10
- # Log the result of the +block+ using the log level +log_level+.
11
- def log(sev_level, &block)
12
- source = (self.kind_of?(Class) ? self.name : self.class.name) + '#' + caller[0][%r"`.*"][1..-2]
13
- if WebsiteAccess.website && WebsiteAccess.website.logger && (!WebsiteAccess.website.config['logger.mask'] || source =~ WebsiteAccess.website.config['logger.mask'])
14
- WebsiteAccess.website.logger.send(sev_level, source, &block)
15
- end
16
- end
17
-
18
- # Shortcut for writing a line to the normal log output.
19
- def puts(*args)
20
- (args.last == :verbose ? log(:verbose) { args[0..-2].join } : log(:stdout) { args.join })
21
- end
22
-
23
- end
24
-
25
- end
data/lib/webgen/output.rb DELETED
@@ -1,86 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require 'webgen/common'
4
-
5
- module Webgen
6
-
7
- # Namespace for all classes that know how to write out node content.
8
- #
9
- # == Implementing an output class
10
- #
11
- # Output classes know how to write rendered node data to an output location.
12
- #
13
- # An output class must respond to three methods
14
- #
15
- # [<tt>exists?(path)</tt>]
16
- # Return +true+ if the output path exists.
17
- # [<tt>delete(path)</tt>]
18
- # Delete the given output path.
19
- # [<tt>write(path, data, type)</tt>]
20
- # Write the +data+ to the given output +path+. The parameter +data+ is either a String with the
21
- # content or a Webgen::Path::SourceIO object. The parameter +type+ specifies the type of the to
22
- # be written path: <tt>:file</tt> or <tt>:directory</tt>.
23
- # [<tt>read(path, mode = 'rb')</tt>]
24
- # Return the content of the given path if it exists or raise an error otherwise. The parameter
25
- # +mode+ specifies the mode in which the path should be opened and defaults to reading in binary
26
- # mode.
27
- #
28
- # It seems a bit odd that an output instance has to implement reading functionality. However,
29
- # consider the case where you want webgen to render a website programmatically and *use* the
30
- # output. In this case you need a way to get to content of the written files! This functionality
31
- # is used, for example, in the webgui.
32
- #
33
- # == Sample Output Class
34
- #
35
- # Following is a simple but actually used (by the webgui) output class which stores the written
36
- # nodes in a hash in memory:
37
- #
38
- # class MemoryOutput
39
- # include Webgen::WebsiteAccess
40
- #
41
- # attr_reader :data
42
- #
43
- # def initialize
44
- # @data = {}
45
- # end
46
- #
47
- # def exists?(path)
48
- # @data.has_key?(path)
49
- # end
50
- #
51
- # def delete(path)
52
- # @data.delete(path)
53
- # end
54
- #
55
- # def write(path, io, type = :file)
56
- # @data[path] = [(io.kind_of?(String) ? io : io.data), type]
57
- # end
58
- #
59
- # def read(path, mode = 'rb')
60
- # path = File.join('/', path)
61
- # raise "No such file #{path}" unless @data[path] && @data[path].last == :file
62
- # @data[path].first
63
- # end
64
- # end
65
- #
66
- # WebsiteAccess.website.config.output(['MemoryOutput'])
67
- #
68
- # The last line is used to tell webgen to use this new output class instead of the default one.
69
- #
70
- module Output
71
-
72
- autoload :FileSystem, 'webgen/output/filesystem'
73
-
74
- # Returns an instance of the configured output class.
75
- def self.instance
76
- classes = (WebsiteAccess.website.cache.volatile[:classes] ||= {})
77
- unless classes.has_key?(:output_instance)
78
- klass, *args = WebsiteAccess.website.config['output']
79
- classes[:output_instance] = Common.const_for_name(klass).new(*args)
80
- end
81
- classes[:output_instance]
82
- end
83
-
84
- end
85
-
86
- end