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.
- data/API.rdoc +143 -0
- data/AUTHORS +0 -1
- data/COPYING +17 -8
- data/ChangeLog +4456 -0
- data/GPL +623 -289
- data/README.md +71 -0
- data/Rakefile +87 -99
- data/VERSION +1 -1
- data/bin/webgen +1 -7
- data/data/webgen/basic_website_template/ext/init.rb +15 -0
- data/data/webgen/basic_website_template/webgen.config +18 -0
- data/data/webgen/bundle_template_files/README.md.erb +24 -0
- data/data/webgen/bundle_template_files/Rakefile.erb +36 -0
- data/data/webgen/bundle_template_files/info.yaml.erb +16 -0
- data/data/webgen/bundle_template_files/init.rb.erb +1 -0
- data/data/webgen/passive_sources/default.metainfo +32 -0
- data/data/webgen/passive_sources/stylesheets/coderay-default.css +109 -118
- data/data/webgen/passive_sources/templates/feed.template +62 -0
- data/data/webgen/passive_sources/templates/sitemap.template +3 -6
- data/data/webgen/passive_sources/templates/tag.template +42 -0
- data/data/webgen/website_bundles/default/README +2 -2
- data/lib/webgen/blackboard.rb +15 -51
- data/lib/webgen/bundle/built-in-show-changes/init.rb +54 -0
- data/lib/webgen/bundle/built-in/init.rb +366 -0
- data/lib/webgen/bundle_loader.rb +126 -0
- data/lib/webgen/cache.rb +9 -18
- data/lib/webgen/cli.rb +131 -58
- data/lib/webgen/cli/bundle_command.rb +30 -0
- data/lib/webgen/cli/create_bundle_command.rb +46 -0
- data/lib/webgen/cli/create_command.rb +48 -60
- data/lib/webgen/cli/generate_command.rb +25 -0
- data/lib/webgen/cli/install_bundle_command.rb +34 -0
- data/lib/webgen/cli/list_bundle_command.rb +108 -0
- data/lib/webgen/cli/logger.rb +45 -0
- data/lib/webgen/cli/show_command.rb +30 -0
- data/lib/webgen/cli/show_config_command.rb +63 -0
- data/lib/webgen/cli/show_dependencies_command.rb +103 -0
- data/lib/webgen/cli/show_extensions_command.rb +74 -0
- data/lib/webgen/cli/utils.rb +68 -95
- data/lib/webgen/configuration.rb +143 -105
- data/lib/webgen/content_processor.rb +160 -0
- data/lib/webgen/content_processor/blocks.rb +96 -0
- data/lib/webgen/content_processor/builder.rb +25 -0
- data/lib/webgen/content_processor/erb.rb +25 -0
- data/lib/webgen/content_processor/erubis.rb +31 -0
- data/lib/webgen/content_processor/fragments.rb +82 -0
- data/lib/webgen/content_processor/haml.rb +25 -0
- data/lib/webgen/content_processor/html_head.rb +157 -0
- data/lib/webgen/content_processor/kramdown.rb +49 -0
- data/lib/webgen/content_processor/maruku.rb +39 -0
- data/lib/webgen/content_processor/r_discount.rb +21 -0
- data/lib/webgen/content_processor/rdoc.rb +22 -0
- data/lib/webgen/content_processor/redcloth.rb +23 -0
- data/lib/webgen/content_processor/ruby.rb +20 -0
- data/lib/webgen/content_processor/sass.rb +145 -0
- data/lib/webgen/content_processor/scss.rb +23 -0
- data/lib/webgen/content_processor/tags.rb +30 -0
- data/lib/webgen/content_processor/tidy.rb +32 -0
- data/lib/webgen/content_processor/tikz.rb +116 -0
- data/lib/webgen/content_processor/xmllint.rb +31 -0
- data/lib/webgen/context.rb +57 -29
- data/lib/webgen/context/html_head.rb +60 -0
- data/lib/webgen/context/nodes.rb +32 -27
- data/lib/webgen/context/rendering.rb +39 -0
- data/lib/webgen/context/webgen_tags.rb +25 -0
- data/lib/webgen/core_ext.rb +25 -0
- data/lib/webgen/destination.rb +151 -0
- data/lib/webgen/destination/file_system.rb +62 -0
- data/lib/webgen/error.rb +59 -49
- data/lib/webgen/extension_manager.rb +121 -0
- data/lib/webgen/item_tracker.rb +237 -0
- data/lib/webgen/item_tracker/file.rb +39 -0
- data/lib/webgen/item_tracker/missing_node.rb +61 -0
- data/lib/webgen/item_tracker/node_content.rb +40 -0
- data/lib/webgen/item_tracker/node_meta_info.rb +53 -0
- data/lib/webgen/item_tracker/nodes.rb +92 -0
- data/lib/webgen/logger.rb +26 -82
- data/lib/webgen/node.rb +122 -367
- data/lib/webgen/node_finder.rb +336 -0
- data/lib/webgen/page.rb +48 -85
- data/lib/webgen/path.rb +218 -156
- data/lib/webgen/path_handler.rb +400 -0
- data/lib/webgen/path_handler/base.rb +220 -0
- data/lib/webgen/path_handler/copy.rb +78 -0
- data/lib/webgen/path_handler/directory.rb +21 -0
- data/lib/webgen/path_handler/feed.rb +82 -0
- data/lib/webgen/path_handler/meta_info.rb +84 -0
- data/lib/webgen/path_handler/page.rb +38 -0
- data/lib/webgen/path_handler/page_utils.rb +79 -0
- data/lib/webgen/path_handler/sitemap.rb +52 -0
- data/lib/webgen/path_handler/template.rb +96 -0
- data/lib/webgen/path_handler/virtual.rb +85 -0
- data/lib/webgen/{webgentask.rb → rake_task.rb} +31 -27
- data/lib/webgen/source.rb +106 -24
- data/lib/webgen/source/file_system.rb +41 -0
- data/lib/webgen/source/stacked.rb +49 -53
- data/lib/webgen/source/tar_archive.rb +59 -0
- data/lib/webgen/tag.rb +250 -19
- data/lib/webgen/tag/breadcrumb_trail.rb +65 -0
- data/lib/webgen/tag/coderay.rb +32 -35
- data/lib/webgen/tag/date.rb +9 -9
- data/lib/webgen/tag/execute_command.rb +31 -0
- data/lib/webgen/tag/include_file.rb +32 -0
- data/lib/webgen/tag/langbar.rb +31 -47
- data/lib/webgen/tag/link.rb +17 -18
- data/lib/webgen/tag/menu.rb +27 -189
- data/lib/webgen/tag/meta_info.rb +31 -0
- data/lib/webgen/tag/relocatable.rb +48 -39
- data/lib/webgen/tag/tikz.rb +24 -100
- data/lib/webgen/task.rb +99 -0
- data/lib/webgen/task/create_bundle.rb +73 -0
- data/lib/webgen/task/create_website.rb +94 -0
- data/lib/webgen/task/generate_website.rb +47 -0
- data/lib/webgen/test_helper.rb +183 -0
- data/lib/webgen/tree.rb +95 -46
- data/lib/webgen/utils.rb +39 -0
- data/lib/webgen/utils/external_command.rb +27 -0
- data/lib/webgen/utils/tag_parser.rb +124 -0
- data/lib/webgen/version.rb +1 -1
- data/lib/webgen/website.rb +134 -296
- data/setup.rb +1 -1
- data/test/test_documentation.rb +43 -0
- data/test/webgen/cli/test_logger.rb +41 -0
- data/test/{test_contentprocessor_blocks.rb → webgen/content_processor/test_blocks.rb} +30 -28
- data/test/webgen/content_processor/test_builder.rb +25 -0
- data/test/webgen/content_processor/test_erb.rb +21 -0
- data/test/webgen/content_processor/test_erubis.rb +33 -0
- data/test/webgen/content_processor/test_fragments.rb +96 -0
- data/test/webgen/content_processor/test_haml.rb +24 -0
- data/test/webgen/content_processor/test_html_head.rb +78 -0
- data/test/webgen/content_processor/test_kramdown.rb +49 -0
- data/test/webgen/content_processor/test_maruku.rb +30 -0
- data/test/webgen/content_processor/test_r_discount.rb +18 -0
- data/test/webgen/content_processor/test_rdoc.rb +18 -0
- data/test/webgen/content_processor/test_redcloth.rb +23 -0
- data/test/webgen/content_processor/test_ruby.rb +24 -0
- data/test/webgen/content_processor/test_sass.rb +44 -0
- data/test/webgen/content_processor/test_scss.rb +23 -0
- data/test/webgen/content_processor/test_tags.rb +44 -0
- data/test/webgen/content_processor/test_tidy.rb +31 -0
- data/test/webgen/content_processor/test_tikz.rb +33 -0
- data/test/webgen/content_processor/test_xmllint.rb +32 -0
- data/test/webgen/destination/test_file_system.rb +54 -0
- data/test/webgen/item_tracker/test_file.rb +31 -0
- data/test/webgen/item_tracker/test_missing_node.rb +70 -0
- data/test/webgen/item_tracker/test_node_content.rb +42 -0
- data/test/webgen/item_tracker/test_node_meta_info.rb +44 -0
- data/test/webgen/item_tracker/test_nodes.rb +61 -0
- data/test/webgen/path_handler/test_base.rb +153 -0
- data/test/webgen/path_handler/test_copy.rb +56 -0
- data/test/webgen/path_handler/test_feed.rb +85 -0
- data/test/webgen/path_handler/test_meta_info.rb +98 -0
- data/test/webgen/path_handler/test_page.rb +25 -0
- data/test/webgen/path_handler/test_page_utils.rb +59 -0
- data/test/webgen/path_handler/test_sitemap.rb +95 -0
- data/test/webgen/path_handler/test_template.rb +64 -0
- data/test/webgen/path_handler/test_virtual.rb +87 -0
- data/test/webgen/source/test_file_system.rb +51 -0
- data/test/webgen/source/test_stacked.rb +35 -0
- data/test/{test_source_tararchive.rb → webgen/source/test_tar_archive.rb} +10 -25
- data/test/webgen/tag/test_breadcrumb_trail.rb +66 -0
- data/test/webgen/tag/test_coderay.rb +34 -0
- data/test/webgen/tag/test_date.rb +18 -0
- data/test/webgen/tag/test_execute_command.rb +36 -0
- data/test/webgen/tag/test_include_file.rb +35 -0
- data/test/webgen/tag/test_langbar.rb +50 -0
- data/test/webgen/tag/test_link.rb +40 -0
- data/test/webgen/tag/test_menu.rb +61 -0
- data/test/webgen/tag/test_meta_info.rb +25 -0
- data/test/webgen/tag/test_relocatable.rb +50 -0
- data/test/webgen/tag/test_tikz.rb +41 -0
- data/test/webgen/task/test_create_website.rb +46 -0
- data/test/webgen/test_blackboard.rb +31 -0
- data/test/webgen/test_bundle_loader.rb +55 -0
- data/test/{test_cache.rb → webgen/test_cache.rb} +3 -15
- data/test/webgen/test_cli.rb +41 -0
- data/test/webgen/test_configuration.rb +131 -0
- data/test/webgen/test_content_processor.rb +86 -0
- data/test/webgen/test_context.rb +73 -0
- data/test/webgen/test_core_ext.rb +20 -0
- data/test/webgen/test_destination.rb +48 -0
- data/test/webgen/test_error.rb +121 -0
- data/test/webgen/test_extension_manager.rb +70 -0
- data/test/webgen/test_item_tracker.rb +106 -0
- data/test/{test_languages.rb → webgen/test_languages.rb} +4 -4
- data/test/webgen/test_logger.rb +46 -0
- data/test/webgen/test_node.rb +178 -0
- data/test/webgen/test_node_finder.rb +127 -0
- data/test/{test_page.rb → webgen/test_page.rb} +44 -48
- data/test/webgen/test_path.rb +271 -0
- data/test/{test_webgentask.rb → webgen/test_rake_task.rb} +4 -4
- data/test/webgen/test_source.rb +59 -0
- data/test/webgen/test_tag.rb +137 -0
- data/test/webgen/test_task.rb +40 -0
- data/test/webgen/test_tree.rb +147 -0
- data/test/webgen/test_utils.rb +16 -0
- data/test/webgen/test_website.rb +45 -0
- data/test/webgen/utils/test_tag_parser.rb +99 -0
- metadata +292 -344
- data/data/webgen/passive_sources/templates/atom_feed.template +0 -39
- data/data/webgen/passive_sources/templates/rss_feed.template +0 -28
- data/data/webgen/resources.yaml +0 -4
- data/data/webgen/webgui/app.rb +0 -11
- data/data/webgen/webgui/controller/main.rb +0 -135
- data/data/webgen/webgui/layout/default.xhtml +0 -40
- data/data/webgen/webgui/overrides/win32console.rb +0 -0
- data/data/webgen/webgui/public/css/jquery.autocomplete.css +0 -50
- data/data/webgen/webgui/public/css/ramaze_error.css +0 -90
- data/data/webgen/webgui/public/css/style.css +0 -55
- data/data/webgen/webgui/public/img/headerbg.jpg +0 -0
- data/data/webgen/webgui/public/img/webgen_logo.png +0 -0
- data/data/webgen/webgui/public/js/jquery.autocomplete.js +0 -15
- data/data/webgen/webgui/public/js/jquery.js +0 -32
- data/data/webgen/webgui/start.rb +0 -9
- data/data/webgen/webgui/view/create_website.xhtml +0 -14
- data/data/webgen/webgui/view/error.xhtml +0 -64
- data/data/webgen/webgui/view/index.xhtml +0 -22
- data/data/webgen/webgui/view/manage_website.xhtml +0 -18
- data/data/webgen/website_skeleton/README +0 -10
- data/data/webgen/website_skeleton/Rakefile +0 -69
- data/data/webgen/website_skeleton/config.yaml +0 -35
- data/data/webgen/website_skeleton/ext/init.rb +0 -10
- data/doc/contentprocessor.template +0 -11
- data/doc/contentprocessor/blocks.page +0 -129
- data/doc/contentprocessor/builder.page +0 -79
- data/doc/contentprocessor/erb.page +0 -60
- data/doc/contentprocessor/erubis.page +0 -46
- data/doc/contentprocessor/fragments.page +0 -26
- data/doc/contentprocessor/haml.page +0 -46
- data/doc/contentprocessor/head.page +0 -31
- data/doc/contentprocessor/kramdown.page +0 -49
- data/doc/contentprocessor/less.page +0 -34
- data/doc/contentprocessor/maruku.page +0 -44
- data/doc/contentprocessor/rdiscount.page +0 -37
- data/doc/contentprocessor/rdoc.page +0 -36
- data/doc/contentprocessor/redcloth.page +0 -41
- data/doc/contentprocessor/sass.page +0 -31
- data/doc/contentprocessor/scss.page +0 -39
- data/doc/contentprocessor/tags.page +0 -73
- data/doc/contentprocessor/tidy.page +0 -14
- data/doc/contentprocessor/xmllint.page +0 -14
- data/doc/extensions.metainfo +0 -29
- data/doc/extensions.page +0 -15
- data/doc/extensions.template +0 -17
- data/doc/faq.page +0 -222
- data/doc/getting_started.page +0 -135
- data/doc/index.page +0 -71
- data/doc/manual.page +0 -727
- data/doc/reference_configuration.page +0 -1254
- data/doc/reference_metainfo.page +0 -265
- data/doc/reference_website_styles.page +0 -32
- data/doc/source/filesystem.page +0 -41
- data/doc/source/tararchive.page +0 -40
- data/doc/sourcehandler.template +0 -23
- data/doc/sourcehandler/copy.page +0 -19
- data/doc/sourcehandler/directory.page +0 -27
- data/doc/sourcehandler/feed.page +0 -102
- data/doc/sourcehandler/metainfo.page +0 -48
- data/doc/sourcehandler/page.page +0 -14
- data/doc/sourcehandler/sitemap.page +0 -46
- data/doc/sourcehandler/template.page +0 -45
- data/doc/sourcehandler/virtual.page +0 -49
- data/doc/tag.template +0 -25
- data/doc/tag/breadcrumbtrail.page +0 -40
- data/doc/tag/coderay.page +0 -53
- data/doc/tag/date.page +0 -31
- data/doc/tag/executecommand.page +0 -26
- data/doc/tag/includefile.page +0 -32
- data/doc/tag/langbar.page +0 -47
- data/doc/tag/link.page +0 -44
- data/doc/tag/menu.page +0 -109
- data/doc/tag/metainfo.page +0 -29
- data/doc/tag/relocatable.page +0 -38
- data/doc/tag/sitemap.page +0 -31
- data/doc/tag/tikz.page +0 -159
- data/doc/upgrading.page +0 -138
- data/doc/webgen_page_format.page +0 -129
- data/doc/website_styles.metainfo +0 -8
- data/lib/webgen/cli/apply_command.rb +0 -66
- data/lib/webgen/cli/run_command.rb +0 -22
- data/lib/webgen/cli/webgui_command.rb +0 -68
- data/lib/webgen/common.rb +0 -27
- data/lib/webgen/common/sitemap.rb +0 -83
- data/lib/webgen/contentprocessor.rb +0 -117
- data/lib/webgen/contentprocessor/blocks.rb +0 -92
- data/lib/webgen/contentprocessor/builder.rb +0 -29
- data/lib/webgen/contentprocessor/erb.rb +0 -26
- data/lib/webgen/contentprocessor/erubis.rb +0 -39
- data/lib/webgen/contentprocessor/fragments.rb +0 -25
- data/lib/webgen/contentprocessor/haml.rb +0 -34
- data/lib/webgen/contentprocessor/head.rb +0 -128
- data/lib/webgen/contentprocessor/kramdown.rb +0 -27
- data/lib/webgen/contentprocessor/kramdown/html.rb +0 -36
- data/lib/webgen/contentprocessor/less.rb +0 -35
- data/lib/webgen/contentprocessor/maruku.rb +0 -36
- data/lib/webgen/contentprocessor/rdiscount.rb +0 -19
- data/lib/webgen/contentprocessor/rdoc.rb +0 -20
- data/lib/webgen/contentprocessor/redcloth.rb +0 -21
- data/lib/webgen/contentprocessor/sass.rb +0 -22
- data/lib/webgen/contentprocessor/scss.rb +0 -22
- data/lib/webgen/contentprocessor/tags.rb +0 -170
- data/lib/webgen/contentprocessor/tidy.rb +0 -38
- data/lib/webgen/contentprocessor/xmllint.rb +0 -37
- data/lib/webgen/context/render.rb +0 -32
- data/lib/webgen/context/tags.rb +0 -20
- data/lib/webgen/coreext.rb +0 -13
- data/lib/webgen/default_config.rb +0 -240
- data/lib/webgen/loggable.rb +0 -25
- data/lib/webgen/output.rb +0 -86
- data/lib/webgen/output/filesystem.rb +0 -69
- data/lib/webgen/source/filesystem.rb +0 -61
- data/lib/webgen/source/resource.rb +0 -45
- data/lib/webgen/source/tararchive.rb +0 -78
- data/lib/webgen/sourcehandler.rb +0 -275
- data/lib/webgen/sourcehandler/base.rb +0 -281
- data/lib/webgen/sourcehandler/copy.rb +0 -44
- data/lib/webgen/sourcehandler/directory.rb +0 -30
- data/lib/webgen/sourcehandler/feed.rb +0 -92
- data/lib/webgen/sourcehandler/fragment.rb +0 -70
- data/lib/webgen/sourcehandler/memory.rb +0 -42
- data/lib/webgen/sourcehandler/metainfo.rb +0 -128
- data/lib/webgen/sourcehandler/page.rb +0 -64
- data/lib/webgen/sourcehandler/sitemap.rb +0 -60
- data/lib/webgen/sourcehandler/template.rb +0 -66
- data/lib/webgen/sourcehandler/virtual.rb +0 -117
- data/lib/webgen/tag/base.rb +0 -170
- data/lib/webgen/tag/breadcrumbtrail.rb +0 -70
- data/lib/webgen/tag/executecommand.rb +0 -31
- data/lib/webgen/tag/includefile.rb +0 -42
- data/lib/webgen/tag/metainfo.rb +0 -27
- data/lib/webgen/tag/sitemap.rb +0 -41
- data/lib/webgen/websiteaccess.rb +0 -31
- data/lib/webgen/websitemanager.rb +0 -125
- data/misc/default.css +0 -403
- data/misc/default.template +0 -76
- data/misc/htmldoc.metainfo +0 -26
- data/misc/htmldoc.virtual +0 -17
- data/misc/images/arrow.gif +0 -0
- data/misc/images/error.png +0 -0
- data/misc/images/headerbg.jpg +0 -0
- data/misc/images/important.png +0 -0
- data/misc/images/information.png +0 -0
- data/misc/images/quote.gif +0 -0
- data/misc/images/warning.png +0 -0
- data/misc/logo.svg +0 -313
- data/misc/style.page +0 -33
- data/test/helper.rb +0 -61
- data/test/test_blackboard.rb +0 -60
- data/test/test_cli.rb +0 -119
- data/test/test_common_sitemap.rb +0 -58
- data/test/test_configuration.rb +0 -68
- data/test/test_contentprocessor.rb +0 -39
- data/test/test_contentprocessor_builder.rb +0 -41
- data/test/test_contentprocessor_erb.rb +0 -33
- data/test/test_contentprocessor_erubis.rb +0 -62
- data/test/test_contentprocessor_fragments.rb +0 -43
- data/test/test_contentprocessor_haml.rb +0 -39
- data/test/test_contentprocessor_head.rb +0 -96
- data/test/test_contentprocessor_kramdown.rb +0 -56
- data/test/test_contentprocessor_less.rb +0 -40
- data/test/test_contentprocessor_maruku.rb +0 -33
- data/test/test_contentprocessor_rdiscount.rb +0 -21
- data/test/test_contentprocessor_rdoc.rb +0 -22
- data/test/test_contentprocessor_redcloth.rb +0 -26
- data/test/test_contentprocessor_sass.rb +0 -28
- data/test/test_contentprocessor_scss.rb +0 -28
- data/test/test_contentprocessor_tags.rb +0 -122
- data/test/test_contentprocessor_tidy.rb +0 -34
- data/test/test_contentprocessor_xmllint.rb +0 -38
- data/test/test_context.rb +0 -81
- data/test/test_error.rb +0 -93
- data/test/test_loggable.rb +0 -32
- data/test/test_logger.rb +0 -94
- data/test/test_node.rb +0 -469
- data/test/test_output_filesystem.rb +0 -60
- data/test/test_path.rb +0 -241
- data/test/test_source_filesystem.rb +0 -76
- data/test/test_source_resource.rb +0 -28
- data/test/test_source_stacked.rb +0 -49
- data/test/test_sourcehandler_base.rb +0 -136
- data/test/test_sourcehandler_copy.rb +0 -47
- data/test/test_sourcehandler_directory.rb +0 -38
- data/test/test_sourcehandler_feed.rb +0 -88
- data/test/test_sourcehandler_fragment.rb +0 -70
- data/test/test_sourcehandler_main.rb +0 -39
- data/test/test_sourcehandler_memory.rb +0 -44
- data/test/test_sourcehandler_metainfo.rb +0 -127
- data/test/test_sourcehandler_page.rb +0 -73
- data/test/test_sourcehandler_sitemap.rb +0 -68
- data/test/test_sourcehandler_template.rb +0 -68
- data/test/test_sourcehandler_virtual.rb +0 -106
- data/test/test_tag_base.rb +0 -62
- data/test/test_tag_breadcrumbtrail.rb +0 -91
- data/test/test_tag_coderay.rb +0 -45
- data/test/test_tag_date.rb +0 -18
- data/test/test_tag_executecommand.rb +0 -41
- data/test/test_tag_includefile.rb +0 -50
- data/test/test_tag_langbar.rb +0 -71
- data/test/test_tag_link.rb +0 -70
- data/test/test_tag_menu.rb +0 -207
- data/test/test_tag_metainfo.rb +0 -26
- data/test/test_tag_relocatable.rb +0 -60
- data/test/test_tag_sitemap.rb +0 -47
- data/test/test_tag_tikz.rb +0 -69
- data/test/test_tree.rb +0 -70
- data/test/test_website.rb +0 -130
- data/test/test_websiteaccess.rb +0 -25
- 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
|
-
#
|
|
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
|
|
9
|
-
|
|
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
|
-
#
|
|
12
|
-
attr_accessor :
|
|
13
|
+
# Contains the path name if the error is related to a specific source or destination path,
|
|
14
|
+
attr_accessor :path
|
|
13
15
|
|
|
14
|
-
#
|
|
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
|
-
|
|
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
|
-
@
|
|
29
|
+
@location, @path = location, path.to_s
|
|
31
30
|
end
|
|
32
31
|
|
|
33
|
-
def message # :nodoc:
|
|
34
|
-
|
|
35
|
-
msg
|
|
36
|
-
msg
|
|
37
|
-
msg
|
|
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
|
|
47
|
-
msg
|
|
48
|
-
msg
|
|
49
|
-
msg
|
|
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
|
|
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 :
|
|
72
|
+
attr_accessor :error_path
|
|
61
73
|
|
|
62
|
-
# The line number in the +
|
|
74
|
+
# The line number in the +error_path+ where the errror happened.
|
|
63
75
|
attr_accessor :line
|
|
64
76
|
|
|
65
|
-
# Create a new RenderError
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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 @
|
|
77
|
-
|
|
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
|
|
82
|
-
msg
|
|
83
|
-
msg
|
|
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
|
|
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,
|
|
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
|
|
107
|
-
super(msg,
|
|
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,
|
|
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
|
|
135
|
+
# Create a new CommandNotFoundError.
|
|
126
136
|
#
|
|
127
137
|
# The parameter +cmd+ specifies the command that is missing.
|
|
128
|
-
def initialize(cmd,
|
|
129
|
-
super("The needed command '#{cmd}' is missing!",
|
|
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
|
|