webgen 0.5.17 → 1.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|