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