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
data/lib/webgen/tag/base.rb
DELETED
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
require 'yaml'
|
|
4
|
-
require 'webgen/loggable'
|
|
5
|
-
require 'webgen/websiteaccess'
|
|
6
|
-
|
|
7
|
-
# This module should be mixed into any class that wants to serve as a webgen tag class. Have a look
|
|
8
|
-
# a the example below to see how a basic tag class looks like.
|
|
9
|
-
#
|
|
10
|
-
# == Tag classes
|
|
11
|
-
#
|
|
12
|
-
# A tag class is a webgen extension that handles specific webgen tags. webgen tags are used to add
|
|
13
|
-
# dynamic content to page and template files and are made for ease of use.
|
|
14
|
-
#
|
|
15
|
-
# A tag class can handle multiple different tags. Just add a (tag name)-(class name) pair to the
|
|
16
|
-
# <tt>contentprocessor.tags.map</tt> configuration entry for each tag name you want to associate
|
|
17
|
-
# with the tag class. The special name <tt>:default</tt> is used for the default tag class which is
|
|
18
|
-
# called if a tag with an unknown tag name is encountered.
|
|
19
|
-
#
|
|
20
|
-
# The only method needed to be written is +call+ which is called by the tags content processor to
|
|
21
|
-
# the actual processing. And the +initialize+ method must not take any parameters!
|
|
22
|
-
#
|
|
23
|
-
# Tag classes *can* also choose to not use this module. If they don't use it they have to provide
|
|
24
|
-
# the following methods: +set_params+, +create_tag_params+, +create_params_hash+, +call+.
|
|
25
|
-
#
|
|
26
|
-
# == Tag parameters
|
|
27
|
-
#
|
|
28
|
-
# webgen tags allow the specification of parameters in the tag definition. The method
|
|
29
|
-
# +tag_params_list+ returns all configuration entries that can be set this way. And the method
|
|
30
|
-
# +tag_config_base+ is used to resolve partially stated configuration entries. The default method
|
|
31
|
-
# uses the full class name, strips a <tt>Webgen::</tt> part at the beginning away, substitutes
|
|
32
|
-
# <tt>.</tt> for <tt>::</tt> and makes everything lowercase.
|
|
33
|
-
#
|
|
34
|
-
# An additional configuration entry option is also used: <tt>:mandatory</tt>. If this key is set to
|
|
35
|
-
# +true+ for a configuration entry, the entry counts as mandatory and needs to be set in the tag
|
|
36
|
-
# definition. If this key is set to +default+, this means that this entry should be the default
|
|
37
|
-
# mandatory parameter (used when only a string is provided in the tag definition). There *should* be
|
|
38
|
-
# only one default mandatory parameter.
|
|
39
|
-
#
|
|
40
|
-
# == Sample Tag Class
|
|
41
|
-
#
|
|
42
|
-
# Following is a simple tag class example which just reverses the body text and adds some
|
|
43
|
-
# information about the context to the result. Note that the class does not reside in the
|
|
44
|
-
# Webgen::Tag namespace and that the configuration entry is therefore also not under the
|
|
45
|
-
# <tt>tag.</tt> namespace.
|
|
46
|
-
#
|
|
47
|
-
# class Reverser
|
|
48
|
-
#
|
|
49
|
-
# include Webgen::Tag::Base
|
|
50
|
-
#
|
|
51
|
-
# def call(tag, body, context)
|
|
52
|
-
# result = param('do_reverse') ? body.reverse : body
|
|
53
|
-
# result += "Node: " + context.content_node.alcn + " (" + context.content_node['title'] + ")"
|
|
54
|
-
# result += "Reference node: " + context.ref_node.alcn
|
|
55
|
-
# result
|
|
56
|
-
# end
|
|
57
|
-
#
|
|
58
|
-
# end
|
|
59
|
-
#
|
|
60
|
-
# WebsiteAccess.website.config.reverser.do_reverse nil, :mandatory => 'default'
|
|
61
|
-
# WebsiteAccess.website.config['contentprocessor.tags.map']['reverse'] = 'Reverser'
|
|
62
|
-
#
|
|
63
|
-
module Webgen::Tag::Base
|
|
64
|
-
|
|
65
|
-
include Webgen::Loggable
|
|
66
|
-
include Webgen::WebsiteAccess
|
|
67
|
-
|
|
68
|
-
# Create a hash with parameter values extracted from the string +tag_config+ and return it.
|
|
69
|
-
def create_tag_params(tag_config, ref_node)
|
|
70
|
-
begin
|
|
71
|
-
config = YAML::load("--- #{tag_config}")
|
|
72
|
-
rescue ArgumentError => e
|
|
73
|
-
raise Webgen::RenderError.new("Could not parse the tag params '#{tag_config}': #{e.message}",
|
|
74
|
-
self.class.name, nil, ref_node)
|
|
75
|
-
end
|
|
76
|
-
create_params_hash(config, ref_node)
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
# Create and return the parameter hash from +config+ which needs to be a Hash, a String or +nil+.
|
|
80
|
-
def create_params_hash(config, node)
|
|
81
|
-
params = tag_params_list
|
|
82
|
-
result = case config
|
|
83
|
-
when Hash then create_from_hash(config, params, node)
|
|
84
|
-
when String then create_from_string(config, params, node)
|
|
85
|
-
when NilClass then {}
|
|
86
|
-
else
|
|
87
|
-
raise Webgen::RenderError.new("Invalid parameter type (#{config.class})",
|
|
88
|
-
self.class.name, nil, node)
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
unless params.all? {|k| !website.config.meta_info[k][:mandatory] || result.has_key?(k)}
|
|
92
|
-
raise Webgen::RenderError.new("Not all mandatory parameters set", self.class.name, nil, node)
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
result
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
# Set the current parameter configuration to +params+.
|
|
99
|
-
def set_params(params)
|
|
100
|
-
@params = params
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
# Retrieve the parameter value for +name+. The value is taken from the current parameter
|
|
104
|
-
# configuration if the parameter is specified there or from the website configuration otherwise.
|
|
105
|
-
def param(name)
|
|
106
|
-
(defined?(@params) && @params.has_key?(name) ? @params[name] : website.config[name])
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
# Default implementation for processing a tag. The parameter +tag+ specifies the name of the tag
|
|
110
|
-
# which should be processed (useful for tag classes which process different tags).
|
|
111
|
-
#
|
|
112
|
-
# The parameter +body+ holds the optional body value for the tag.
|
|
113
|
-
#
|
|
114
|
-
# The +context+ parameter holds all relevant information for processing. Have a look at the
|
|
115
|
-
# Webgen::Context class to see what is available.
|
|
116
|
-
#
|
|
117
|
-
# The method has to return the result of the tag processing and, optionally, a boolean value
|
|
118
|
-
# specifying if the result should further be processed (ie. webgen tags replaced).
|
|
119
|
-
#
|
|
120
|
-
# Needs to be redefined by classes that mixin this module!
|
|
121
|
-
def call(tag, body, context)
|
|
122
|
-
raise NotImplementedError
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
#######
|
|
126
|
-
private
|
|
127
|
-
#######
|
|
128
|
-
|
|
129
|
-
# The base part of the configuration name. This isthe class name without the Webgen module
|
|
130
|
-
# downcased and all "::" substituted with "." (e.g. Webgen::Tag::Menu -> tag.menu). By overriding
|
|
131
|
-
# this method one can provide a different way of specifying the base part of the configuration
|
|
132
|
-
# name.
|
|
133
|
-
def tag_config_base
|
|
134
|
-
self.class.name.gsub('::', '.').gsub(/^Webgen\./, '').downcase
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
# Return the list of all parameters for the tag class. All configuration options starting with
|
|
138
|
-
# +tag_config_base+ are used.
|
|
139
|
-
def tag_params_list
|
|
140
|
-
regexp = /^#{tag_config_base}/
|
|
141
|
-
website.config.data.keys.select {|key| key =~ regexp}
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
# Return a valid parameter hash taking values from +config+ which has to be a Hash.
|
|
145
|
-
def create_from_hash(config, params, node)
|
|
146
|
-
result = {}
|
|
147
|
-
config.each do |key, value|
|
|
148
|
-
if params.include?(key)
|
|
149
|
-
result[key] = value
|
|
150
|
-
elsif params.include?(tag_config_base + '.' + key)
|
|
151
|
-
result[tag_config_base + '.' + key] = value
|
|
152
|
-
else
|
|
153
|
-
log(:warn) { "Invalid parameter '#{key}' for tag '#{self.class.name}' in <#{node}>" }
|
|
154
|
-
end
|
|
155
|
-
end
|
|
156
|
-
result
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
# Return a valid parameter hash by setting +value+ to the default mandatory parameter.
|
|
160
|
-
def create_from_string(value, params, node)
|
|
161
|
-
param_name = params.find {|k| website.config.meta_info[k][:mandatory] == 'default'}
|
|
162
|
-
if param_name.nil?
|
|
163
|
-
log(:error) { "No default mandatory parameter specified for tag '#{self.class.name}' but set in <#{node}>"}
|
|
164
|
-
{}
|
|
165
|
-
else
|
|
166
|
-
{param_name => value}
|
|
167
|
-
end
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
end
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
module Webgen::Tag
|
|
4
|
-
|
|
5
|
-
# Generates a breadcrumb trail for the page. This is especially useful when pages are in deep
|
|
6
|
-
# hierarchies of directories.
|
|
7
|
-
class BreadcrumbTrail
|
|
8
|
-
|
|
9
|
-
include Webgen::WebsiteAccess
|
|
10
|
-
include Base
|
|
11
|
-
|
|
12
|
-
def initialize #:nodoc:
|
|
13
|
-
website.blackboard.add_listener(:node_changed?, method(:node_changed?))
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
# Create the breadcrumb trail.
|
|
17
|
-
def call(tag, body, context)
|
|
18
|
-
out = breadcrumb_trail_list(context.content_node)
|
|
19
|
-
(context.dest_node.node_info[:tag_breadcrumb_trail] ||= {})[[@params.to_a.sort, context.content_node.alcn]] = out.map {|n| n.alcn}
|
|
20
|
-
out = out.map {|n| context.dest_node.link_to(n, :lang => context.content_node.lang) }.
|
|
21
|
-
join(param('tag.breadcrumbtrail.separator'))
|
|
22
|
-
log(:debug) { "Breadcrumb trail for <#{context.content_node}>: #{out}" }
|
|
23
|
-
out
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
#######
|
|
27
|
-
private
|
|
28
|
-
#######
|
|
29
|
-
|
|
30
|
-
# Return the list of nodes that make up the breadcrumb trail of +node+ according to the current
|
|
31
|
-
# parameters.
|
|
32
|
-
def breadcrumb_trail_list(node)
|
|
33
|
-
list = []
|
|
34
|
-
omit_index_path = if node.meta_info.has_key?('omit_index_path')
|
|
35
|
-
node['omit_index_path']
|
|
36
|
-
else
|
|
37
|
-
param('tag.breadcrumbtrail.omit_index_path')
|
|
38
|
-
end
|
|
39
|
-
omit_index_path = omit_index_path && node.parent.routing_node(node.lang) == node
|
|
40
|
-
|
|
41
|
-
node = node.parent if omit_index_path
|
|
42
|
-
|
|
43
|
-
until node == node.tree.dummy_root
|
|
44
|
-
list.unshift(node)
|
|
45
|
-
node = node.parent
|
|
46
|
-
end
|
|
47
|
-
list[param('tag.breadcrumbtrail.start_level')..param('tag.breadcrumbtrail.end_level')].to_a
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
# Check if the breadcrumb trails for +node+ have changed.
|
|
51
|
-
def node_changed?(node)
|
|
52
|
-
return if !node.node_info[:tag_breadcrumb_trail]
|
|
53
|
-
|
|
54
|
-
node.node_info[:tag_breadcrumb_trail].each do |(params, cn_alcn), cached_list|
|
|
55
|
-
cn = node.tree[cn_alcn]
|
|
56
|
-
set_params(params.to_hash)
|
|
57
|
-
list = breadcrumb_trail_list(cn)
|
|
58
|
-
set_params({})
|
|
59
|
-
|
|
60
|
-
if (list.map {|n| n.alcn} != cached_list) ||
|
|
61
|
-
list.any? {|n| (r = n.routing_node(cn.lang)) && r != node && r.meta_info_changed?}
|
|
62
|
-
node.flag(:dirty)
|
|
63
|
-
break
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
end
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
require 'cgi'
|
|
4
|
-
require 'tempfile'
|
|
5
|
-
require 'rbconfig'
|
|
6
|
-
|
|
7
|
-
module Webgen::Tag
|
|
8
|
-
|
|
9
|
-
# Executes the given command and returns the standard output. All special HTML characters are
|
|
10
|
-
# escaped.
|
|
11
|
-
class ExecuteCommand
|
|
12
|
-
|
|
13
|
-
include Webgen::Tag::Base
|
|
14
|
-
|
|
15
|
-
BIT_BUCKET = (Config::CONFIG['host_os'] =~ /mswin|mingw/ ? "nul" : "/dev/null")
|
|
16
|
-
|
|
17
|
-
# Execute the command and return the standard output.
|
|
18
|
-
def call(tag, body, context)
|
|
19
|
-
command = param('tag.executecommand.command')
|
|
20
|
-
output = `#{command} 2> #{BIT_BUCKET}`
|
|
21
|
-
if $?.exitstatus != 0
|
|
22
|
-
raise Webgen::RenderError.new("Command '#{command}' has return value != 0: #{output}",
|
|
23
|
-
self.class.name, context.dest_node, context.ref_node)
|
|
24
|
-
end
|
|
25
|
-
output = CGI::escapeHTML(output) if param('tag.executecommand.escape_html')
|
|
26
|
-
[output, param('tag.executecommand.process_output')]
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
end
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
require 'cgi'
|
|
4
|
-
|
|
5
|
-
module Webgen::Tag
|
|
6
|
-
|
|
7
|
-
# Includes a file verbatim and optionally escapes all special HTML characters and processes webgen
|
|
8
|
-
# tags in it.
|
|
9
|
-
class IncludeFile
|
|
10
|
-
|
|
11
|
-
include Webgen::Tag::Base
|
|
12
|
-
include Webgen::WebsiteAccess
|
|
13
|
-
|
|
14
|
-
def initialize #:nodoc:
|
|
15
|
-
website.blackboard.add_listener(:node_changed?, method(:node_changed?))
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
# Include the specified file verbatim in the output, optionally escaping special HTML characters
|
|
19
|
-
# and processing tags in it.
|
|
20
|
-
def call(tag, body, context)
|
|
21
|
-
filename = param('tag.includefile.filename')
|
|
22
|
-
filename = File.join(website.directory, filename) unless filename =~ /^(\/|\w:)/
|
|
23
|
-
content = File.open(filename, 'rb') {|f| f.read}
|
|
24
|
-
content = CGI::escapeHTML(content) if param('tag.includefile.escape_html')
|
|
25
|
-
(context.dest_node.node_info[:tag_includefile_filenames] ||= []) << [filename, File.mtime(filename)]
|
|
26
|
-
|
|
27
|
-
[content, param('tag.includefile.process_output')]
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
#######
|
|
31
|
-
private
|
|
32
|
-
#######
|
|
33
|
-
|
|
34
|
-
def node_changed?(node)
|
|
35
|
-
if filenames = node.node_info[:tag_includefile_filenames]
|
|
36
|
-
node.flag(:dirty) if filenames.any? {|f, mtime| File.mtime(f) > mtime}
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
end
|
data/lib/webgen/tag/metainfo.rb
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
require 'cgi'
|
|
3
|
-
|
|
4
|
-
module Webgen::Tag
|
|
5
|
-
|
|
6
|
-
# Provides easy access to the meta information of a node.
|
|
7
|
-
class Metainfo
|
|
8
|
-
|
|
9
|
-
include Base
|
|
10
|
-
|
|
11
|
-
# Return the meta information key specified in +tag+ of the content node.
|
|
12
|
-
def call(tag, body, context)
|
|
13
|
-
output = ''
|
|
14
|
-
if tag == 'lang'
|
|
15
|
-
output = context.content_node.lang
|
|
16
|
-
elsif context.content_node[tag]
|
|
17
|
-
output = context.content_node[tag].to_s
|
|
18
|
-
output = CGI::escapeHTML(output) if param('tag.metainfo.escape_html')
|
|
19
|
-
else
|
|
20
|
-
log(:error) { "No value for meta info key '#{tag}' in <#{context.ref_node}> found in <#{context.content_node}>" }
|
|
21
|
-
end
|
|
22
|
-
output
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
end
|
data/lib/webgen/tag/sitemap.rb
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
module Webgen::Tag
|
|
4
|
-
|
|
5
|
-
# Generates a sitemap. The sitemap contains the hierarchy of all pages on the web site.
|
|
6
|
-
class Sitemap
|
|
7
|
-
|
|
8
|
-
include Base
|
|
9
|
-
include Webgen::WebsiteAccess
|
|
10
|
-
|
|
11
|
-
# Create the sitemap.
|
|
12
|
-
def call(tag, body, context)
|
|
13
|
-
tree = website.blackboard.invoke(:create_sitemap, context.dest_node, context.content_node.lang, @params)
|
|
14
|
-
(tree.children.empty? ? '' : output_sitemap(tree, context))
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
#######
|
|
18
|
-
private
|
|
19
|
-
#######
|
|
20
|
-
|
|
21
|
-
# The modified tag base to support the easy specification of common.sitemap.* options.
|
|
22
|
-
def tag_config_base
|
|
23
|
-
'common.sitemap'
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
# Create the HTML representation of the sitemap nodes in +tree+ in respect to +context+.
|
|
27
|
-
def output_sitemap(tree, context)
|
|
28
|
-
out = "<ul>"
|
|
29
|
-
tree.children.each do |child|
|
|
30
|
-
sub = (child.children.length > 0 ? output_sitemap(child, context) : '')
|
|
31
|
-
out << "<li>" + context.dest_node.link_to(child.node, :lang => child.node.lang || context.content_node.lang)
|
|
32
|
-
out << sub
|
|
33
|
-
out << "</li>"
|
|
34
|
-
end
|
|
35
|
-
out << "</ul>"
|
|
36
|
-
out
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
end
|
data/lib/webgen/websiteaccess.rb
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
module Webgen
|
|
4
|
-
|
|
5
|
-
# Should be mixed into modules/classes that need access to the current website object.
|
|
6
|
-
module WebsiteAccess
|
|
7
|
-
|
|
8
|
-
# The methods of this module are available on classes that include WebsiteAccess.
|
|
9
|
-
module ClassMethods
|
|
10
|
-
|
|
11
|
-
# See WebsiteAccess.website
|
|
12
|
-
def website
|
|
13
|
-
WebsiteAccess.website
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def self.included(klass) #:nodoc:
|
|
19
|
-
super
|
|
20
|
-
klass.extend(ClassMethods)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# Return the current website object or +nil+.
|
|
24
|
-
def website
|
|
25
|
-
Thread.current[:webgen_website]
|
|
26
|
-
end
|
|
27
|
-
module_function :website
|
|
28
|
-
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
end
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
require 'ostruct'
|
|
4
|
-
require 'fileutils'
|
|
5
|
-
require 'webgen/website'
|
|
6
|
-
|
|
7
|
-
module Webgen
|
|
8
|
-
|
|
9
|
-
# This class is used for managing webgen websites. It provides access to website bundles defined
|
|
10
|
-
# as resources and makes it easy to apply them to a webgen website.
|
|
11
|
-
#
|
|
12
|
-
# == General information
|
|
13
|
-
#
|
|
14
|
-
# Currently, the following actions are supported:
|
|
15
|
-
#
|
|
16
|
-
# * creating a website based on a website bundle (#create_website)
|
|
17
|
-
# * applying a bundle to an existing website (#apply_bundle)
|
|
18
|
-
#
|
|
19
|
-
# Bundles are partial webgen websites that contain certain functionality. For example, most of the
|
|
20
|
-
# bundles shipped with webgen are style bundles that define the basic page layout or how image
|
|
21
|
-
# galleries should look like. So style bundles are basically used to change the appearance of
|
|
22
|
-
# parts (or the whole) website. This makes them a powerful tool as this plugin makes it easy to
|
|
23
|
-
# change to another style bundle later!
|
|
24
|
-
#
|
|
25
|
-
# However, not all bundles have to be style bundles. For example, you could as easily create a
|
|
26
|
-
# bundle for a plugin or for a complete website (e.g. a blog template).
|
|
27
|
-
#
|
|
28
|
-
# == website bundle resource naming convention
|
|
29
|
-
#
|
|
30
|
-
# The shipped bundles are defined using resources. Each such resource has to be a directory
|
|
31
|
-
# containing an optional README file in YAML format in which key-value pairs provide additional
|
|
32
|
-
# information about the bundle (e.g. copyright information, description, ...). All other
|
|
33
|
-
# files/directories in the directory are copied to the root of the destination webgen website when
|
|
34
|
-
# the bundle is used.
|
|
35
|
-
#
|
|
36
|
-
# This class uses a special naming convention to recognize website bundles:
|
|
37
|
-
#
|
|
38
|
-
# * A resource named <tt>webgen-website-bundle-CATEGORY-NAME</tt> is considered to be a bundle in
|
|
39
|
-
# the category CATEGORY called NAME (where CATEGORY is optional). There are no fixed categories,
|
|
40
|
-
# one can use anything here! The shipped style bundles are located in the 'style' category. You
|
|
41
|
-
# need to use the the full name, i.e. CATEGORY-NAME, for accessing a bundle later.
|
|
42
|
-
#
|
|
43
|
-
# Website bundle names have to be unique!
|
|
44
|
-
class WebsiteManager
|
|
45
|
-
|
|
46
|
-
# A hash with the available website bundles (mapping name to infos).
|
|
47
|
-
attr_reader :bundles
|
|
48
|
-
|
|
49
|
-
# The used Website object.
|
|
50
|
-
attr_reader :website
|
|
51
|
-
|
|
52
|
-
# Create a new WebsiteManager.
|
|
53
|
-
#
|
|
54
|
-
# If +dir+ is a String, then the website manager is created for the website in the directory
|
|
55
|
-
# +dir+.
|
|
56
|
-
#
|
|
57
|
-
# If +dir+ is a Website object, the website manager is created for the website represented by
|
|
58
|
-
# +dir+. If the website object is initialized if it isn't already.
|
|
59
|
-
def initialize(dir)
|
|
60
|
-
if dir.kind_of?(Webgen::Website)
|
|
61
|
-
@website = dir
|
|
62
|
-
@website.init if @website.config.nil?
|
|
63
|
-
else
|
|
64
|
-
@website = Webgen::Website.new(dir)
|
|
65
|
-
@website.init
|
|
66
|
-
end
|
|
67
|
-
@bundles = {}
|
|
68
|
-
|
|
69
|
-
@website.execute_in_env do
|
|
70
|
-
prefix = "webgen-website-bundle-"
|
|
71
|
-
@website.config['resources'].select {|name, data| name =~ /^#{prefix}/}.each do |name, data|
|
|
72
|
-
add_source(Webgen::Source::Resource.new(name), name.sub(prefix, ''))
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
# Treat the +source+ as a website bundle and make it available to the WebsiteManager under
|
|
78
|
-
# +name+.
|
|
79
|
-
def add_source(source, name)
|
|
80
|
-
paths = source.paths.dup
|
|
81
|
-
readme = paths.select {|path| path == '/README' }.first
|
|
82
|
-
paths.delete(readme) if readme
|
|
83
|
-
infos = OpenStruct.new(readme.nil? ? {} : YAML::load(readme.io.data))
|
|
84
|
-
infos.paths = paths
|
|
85
|
-
@bundles[name] = infos
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
# Create the basic website skeleton (without any bundle applied).
|
|
89
|
-
def create_website
|
|
90
|
-
raise "Directory <#{@website.directory}> does already exist!" if File.exists?(@website.directory)
|
|
91
|
-
@website.execute_in_env do
|
|
92
|
-
write_paths(Webgen::Source::Resource.new('webgen-website-skeleton').paths) +
|
|
93
|
-
[FileUtils.mkdir_p(File.join(@website.directory, 'src'))] # fixes Rubygems bug (see RF#28393)
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
# Apply the given +bundle+ to the website by copying the files.
|
|
98
|
-
def apply_bundle(bundle)
|
|
99
|
-
raise ArgumentError.new("Invalid bundle name") if !@bundles.has_key?(bundle)
|
|
100
|
-
raise "Directory <#{@website.directory}> does not exist!" unless File.exists?(@website.directory)
|
|
101
|
-
write_paths(@bundles[bundle].paths)
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
#######
|
|
105
|
-
private
|
|
106
|
-
#######
|
|
107
|
-
|
|
108
|
-
# Write the paths to the website directory.
|
|
109
|
-
def write_paths(paths)
|
|
110
|
-
paths.each do |path|
|
|
111
|
-
output_path = File.join(@website.directory, path.path)
|
|
112
|
-
if path.path =~ /\/$/
|
|
113
|
-
FileUtils.mkdir_p(output_path)
|
|
114
|
-
else
|
|
115
|
-
FileUtils.mkdir_p(File.dirname(output_path))
|
|
116
|
-
path.io.stream do |source|
|
|
117
|
-
File.open(output_path, 'wb') {|f| FileUtils.copy_stream(source, f) }
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
end
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
end
|