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,126 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'rbconfig'
|
|
4
|
+
require 'yaml'
|
|
5
|
+
|
|
6
|
+
module Webgen
|
|
7
|
+
|
|
8
|
+
# This class is used for loading extension bundles. It provides a DSL for the most commonly needed
|
|
9
|
+
# commands.
|
|
10
|
+
#
|
|
11
|
+
# When an extension bundle is provided by a Rubygem and the Rubygem is not already activated, the
|
|
12
|
+
# Rubygem is automatically activated. This only works when one follows the standard naming
|
|
13
|
+
# conventions for webgen extension bundles, i.e. the Rubygem has to be named
|
|
14
|
+
# 'webgen-BUNDLE_NAME-bundle'.
|
|
15
|
+
class BundleLoader
|
|
16
|
+
|
|
17
|
+
# Create a new BundleLoader object belonging to the website object +website+.
|
|
18
|
+
def initialize(website, ext_dir)
|
|
19
|
+
@website = website
|
|
20
|
+
@website.ext.bundles = {}
|
|
21
|
+
@ext_dir = ext_dir
|
|
22
|
+
@loaded = []
|
|
23
|
+
@stack = []
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Load the extension bundle in the context of this BundleLoader object.
|
|
27
|
+
def load(name)
|
|
28
|
+
file = resolve_init_file(name)
|
|
29
|
+
raise(ArgumentError, "Extension bundle '#{name}' not found") if !file
|
|
30
|
+
file = File.expand_path(file)
|
|
31
|
+
return if @loaded.include?(file)
|
|
32
|
+
|
|
33
|
+
@loaded.push(file)
|
|
34
|
+
@stack.push(file)
|
|
35
|
+
self.instance_eval(File.read(file), file)
|
|
36
|
+
@stack.pop
|
|
37
|
+
|
|
38
|
+
if file != File.expand_path(File.join(@ext_dir, 'init.rb'))
|
|
39
|
+
name = File.basename(File.dirname(file))
|
|
40
|
+
info_file = File.join(File.dirname(file), 'info.yaml')
|
|
41
|
+
@website.ext.bundles[name] = (File.file?(info_file) ? info_file : nil)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Loads all bundles that are marked for auto-loading.
|
|
46
|
+
def load_autoload_bundles
|
|
47
|
+
Gem::Specification.map {|s| s.name }.uniq.each do |gem_name|
|
|
48
|
+
md = /^webgen-(.*)-bundle$/.match(gem_name)
|
|
49
|
+
next unless md
|
|
50
|
+
|
|
51
|
+
bundle_name = md[1]
|
|
52
|
+
file = resolve_init_file(bundle_name)
|
|
53
|
+
next unless file
|
|
54
|
+
|
|
55
|
+
info_file = File.join(File.dirname(file), 'info.yaml')
|
|
56
|
+
next unless File.file?(info_file)
|
|
57
|
+
next unless YAML.load(File.read(info_file))['autoload']
|
|
58
|
+
|
|
59
|
+
load(bundle_name)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Search in the website extension directory and then in the load path to find the initialization
|
|
64
|
+
# file of the bundle.
|
|
65
|
+
def resolve_init_file(name)
|
|
66
|
+
name.sub!(/(\/|^)init\.rb$/, '')
|
|
67
|
+
|
|
68
|
+
if name =~ /\A[\w-]+\z/
|
|
69
|
+
begin
|
|
70
|
+
Gem::Specification.find_by_name("webgen-#{name}-bundle").activate
|
|
71
|
+
rescue Gem::LoadError
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
possible_init_file_names(name).each {|path| return path if File.file?(path)}
|
|
76
|
+
|
|
77
|
+
nil
|
|
78
|
+
end
|
|
79
|
+
private :resolve_init_file
|
|
80
|
+
|
|
81
|
+
# Create all possible initialization file names for the given directory name.
|
|
82
|
+
def possible_init_file_names(dir_name)
|
|
83
|
+
[File.join(@ext_dir, dir_name, 'init.rb')] +
|
|
84
|
+
$LOAD_PATH.map {|path| File.join(path, 'webgen/bundle', dir_name, 'init.rb')}
|
|
85
|
+
end
|
|
86
|
+
private :possible_init_file_names
|
|
87
|
+
|
|
88
|
+
# :section: DSL methods
|
|
89
|
+
#
|
|
90
|
+
# All following method are DSL methods that are provided for convenience and can be used by the
|
|
91
|
+
# initialization files.
|
|
92
|
+
|
|
93
|
+
# Require the file relative to the currently loaded file.
|
|
94
|
+
def require_relative(file)
|
|
95
|
+
require(File.join(File.dirname(@stack.last), file))
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Define a configuration option.
|
|
99
|
+
#
|
|
100
|
+
# See Webgen::Configuration#define_option for more information.
|
|
101
|
+
def option(name, default, description, &validator)
|
|
102
|
+
@website.config.define_option(name, default, description, &validator)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Return the website object.
|
|
106
|
+
def website
|
|
107
|
+
@website
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Mount the directory relative to the currently loaded file on the given mount point as passive
|
|
111
|
+
# source.
|
|
112
|
+
#
|
|
113
|
+
# See Webgen::Source for more information.
|
|
114
|
+
def mount_passive(dir, mount_point = '/', glob = '**/*')
|
|
115
|
+
@website.ext.source.passive_sources.unshift([mount_point, :file_system, absolute_path(dir), glob])
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# Return the absolute path of the given path which is assumed to be relative to the currently
|
|
119
|
+
# loaded file.
|
|
120
|
+
def absolute_path(path)
|
|
121
|
+
File.expand_path(File.join(File.dirname(@stack.last), path))
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
end
|
data/lib/webgen/cache.rb
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
2
|
|
|
3
3
|
require 'set'
|
|
4
|
-
require 'webgen/common'
|
|
5
4
|
|
|
6
5
|
module Webgen
|
|
7
6
|
|
|
@@ -11,16 +10,17 @@ module Webgen
|
|
|
11
10
|
# runs.
|
|
12
11
|
#
|
|
13
12
|
# [volatile] The volatile cache is used for data that can easily be regenerated but might be
|
|
14
|
-
# expensive to do so. This cache is not stored between
|
|
13
|
+
# expensive to do so. This cache is not stored between passes when writing nodes to
|
|
14
|
+
# the destination.
|
|
15
15
|
#
|
|
16
16
|
# [standard] The standard cache saves data between webgen runs and returns the cached data (not
|
|
17
17
|
# the newly set data) if it is available. This is useful, for example, to store file
|
|
18
18
|
# modifcation times and check if a file has been changed between runs.
|
|
19
19
|
#
|
|
20
|
-
# The standard cache should be accessed through the
|
|
21
|
-
#
|
|
22
|
-
#
|
|
23
|
-
#
|
|
20
|
+
# The standard cache should be accessed through the #[] method which returns the correct value and
|
|
21
|
+
# the #[]= method should be used for setting the new value. However, if you really need to access
|
|
22
|
+
# a particular value of the old or new standard cache, you can use the accessors +old_data+ and
|
|
23
|
+
# +new_data+.
|
|
24
24
|
class Cache
|
|
25
25
|
|
|
26
26
|
# The permanent cache hash.
|
|
@@ -40,7 +40,7 @@ module Webgen
|
|
|
40
40
|
@old_data = {}
|
|
41
41
|
@new_data = {}
|
|
42
42
|
@volatile = {}
|
|
43
|
-
@permanent = {
|
|
43
|
+
@permanent = {}
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
# Return the cached data (or, if it is not available, the new data) identified by +key+ from the
|
|
@@ -58,10 +58,9 @@ module Webgen
|
|
|
58
58
|
@new_data[key] = value
|
|
59
59
|
end
|
|
60
60
|
|
|
61
|
-
# Restore the
|
|
61
|
+
# Restore the cache from +data+.
|
|
62
62
|
def restore(data)
|
|
63
63
|
@old_data, @permanent = *data
|
|
64
|
-
@permanent[:classes].each {|klass| instance(klass)}
|
|
65
64
|
end
|
|
66
65
|
|
|
67
66
|
# Return all caches that should be available between webgen runs.
|
|
@@ -71,15 +70,7 @@ module Webgen
|
|
|
71
70
|
|
|
72
71
|
# Reset the volatile cache.
|
|
73
72
|
def reset_volatile_cache
|
|
74
|
-
@volatile = {
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
# Return the unique instance of the class +name+ (a String). This method should be used when it
|
|
78
|
-
# is essential that webgen uses only one object of a class or when an object should
|
|
79
|
-
# automatically be recreated upon cache restoration (see #restore).
|
|
80
|
-
def instance(name)
|
|
81
|
-
@permanent[:classes] << name unless @permanent[:classes].include?(name)
|
|
82
|
-
(@volatile[:classes] ||= {})[name] ||= Common.const_for_name(name).new
|
|
73
|
+
@volatile = {}
|
|
83
74
|
end
|
|
84
75
|
|
|
85
76
|
end
|
data/lib/webgen/cli.rb
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
2
|
|
|
3
3
|
require 'cmdparse'
|
|
4
|
+
require 'yaml'
|
|
4
5
|
require 'webgen/website'
|
|
5
6
|
require 'webgen/version'
|
|
7
|
+
require 'webgen/cli/logger'
|
|
8
|
+
require 'webgen/cli/utils'
|
|
9
|
+
require 'webgen/cli/generate_command'
|
|
10
|
+
require 'webgen/cli/show_command'
|
|
11
|
+
require 'webgen/cli/bundle_command'
|
|
12
|
+
require 'webgen/cli/create_command'
|
|
6
13
|
|
|
7
14
|
module Webgen
|
|
8
15
|
|
|
@@ -10,30 +17,28 @@ module Webgen
|
|
|
10
17
|
#
|
|
11
18
|
# == Implementing a CLI command
|
|
12
19
|
#
|
|
13
|
-
#
|
|
14
|
-
#
|
|
15
|
-
#
|
|
16
|
-
# whole cmdparse package have a look at http://cmdparse.rubyforge.org!
|
|
20
|
+
# A CLI command is an extension that can be invoked from the webgen CLI and thus needs to be
|
|
21
|
+
# derived from CmdParse::Command. For detailed information on this class and the whole cmdparse
|
|
22
|
+
# package have a look at http://cmdparse.rubyforge.org!
|
|
17
23
|
#
|
|
18
|
-
# == Sample CLI command
|
|
24
|
+
# == Sample CLI command extension
|
|
19
25
|
#
|
|
20
|
-
# Here is a sample CLI command extension
|
|
21
|
-
# <tt>ext/init.rb</tt> of a webgen website:
|
|
26
|
+
# Here is a sample CLI command extension:
|
|
22
27
|
#
|
|
23
|
-
#
|
|
24
|
-
#
|
|
25
|
-
# class Webgen::CLI::SampleCommand < CmdParse::Command
|
|
28
|
+
# class SampleCommand < CmdParse::Command
|
|
26
29
|
#
|
|
27
30
|
# def initialize
|
|
28
31
|
# super('sample', false)
|
|
29
32
|
# self.short_desc = "This sample command just outputs its parameters"
|
|
30
|
-
# self.description = Webgen::CLI::Utils.
|
|
31
|
-
# "information when the level is set to verbose!")
|
|
33
|
+
# self.description = Webgen::CLI::Utils.format_command_desc("Uses the global verbosity level " +
|
|
34
|
+
# "and outputs additional "information when the level is set to verbose!")
|
|
32
35
|
# @username = nil
|
|
33
36
|
# self.options = CmdParse::OptionParserWrapper.new do |opts|
|
|
34
37
|
# opts.separator "Options:"
|
|
35
38
|
# opts.on('-u', '--user USER', String,
|
|
36
|
-
#
|
|
39
|
+
# *Webgen::CLI::Util.format_option_desc('Specify an additional user name to output')) do |username|
|
|
40
|
+
# @username = username
|
|
41
|
+
# end
|
|
37
42
|
# end
|
|
38
43
|
# end
|
|
39
44
|
#
|
|
@@ -43,8 +48,8 @@ module Webgen
|
|
|
43
48
|
# else
|
|
44
49
|
# puts "Command line arguments:"
|
|
45
50
|
# args.each {|arg| puts arg}
|
|
46
|
-
# if commandparser.
|
|
47
|
-
# puts "
|
|
51
|
+
# if commandparser.log_level <= 1
|
|
52
|
+
# puts "Some debug information here"
|
|
48
53
|
# end
|
|
49
54
|
# puts "The entered username: #{@username}" if @username
|
|
50
55
|
# end
|
|
@@ -52,77 +57,145 @@ module Webgen
|
|
|
52
57
|
#
|
|
53
58
|
# end
|
|
54
59
|
#
|
|
60
|
+
# website.ext.cli.add_command(SampleCommand.new)
|
|
61
|
+
#
|
|
55
62
|
# Note the use of Webgen::CLI::Utils.format in the initialize method so that the long text gets
|
|
56
63
|
# wrapped correctly! The Utils class provides some other useful methods, too!
|
|
57
64
|
#
|
|
58
|
-
# For information about which attributes are available on the webgen command parser instance have
|
|
59
|
-
# a look at Webgen::CLI::CommandParser!
|
|
60
65
|
module CLI
|
|
61
66
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
autoload :ApplyCommand, 'webgen/cli/apply_command'
|
|
66
|
-
|
|
67
|
-
autoload :Utils, 'webgen/cli/utils'
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
# This is the command parser class used for handling the webgen command line interface. After
|
|
71
|
-
# creating an instance, the inherited #parse method can be used for parsing the command line
|
|
67
|
+
# This is the command parser class used for handling the webgen command line interface.
|
|
68
|
+
#
|
|
69
|
+
# After creating an instance, the #parse method can be used for parsing the command line
|
|
72
70
|
# arguments and executing the requested command.
|
|
73
71
|
class CommandParser < CmdParse::CommandParser
|
|
74
72
|
|
|
75
|
-
#
|
|
73
|
+
# This error is thrown when an invalid configuration option is encountered.
|
|
74
|
+
class ConfigurationOptionError < CmdParse::ParseError
|
|
75
|
+
reason 'Problem with configuration option'
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
# The website directory. Default: the value of the WEBGEN_WEBSITE environment variable or the
|
|
80
|
+
# current working directory.
|
|
81
|
+
#
|
|
82
|
+
# *Note*: Only available after the #website method has been called (which is always the case
|
|
83
|
+
# when a command is executed).
|
|
76
84
|
attr_reader :directory
|
|
77
85
|
|
|
78
|
-
#
|
|
79
|
-
attr_reader :
|
|
86
|
+
# Specifies whether verbose output should be used.
|
|
87
|
+
attr_reader :verbose
|
|
80
88
|
|
|
81
|
-
# The log level. Default:
|
|
89
|
+
# The log level. Default: Logger::INFO
|
|
82
90
|
attr_reader :log_level
|
|
83
91
|
|
|
84
|
-
# Create a new CommandParser class.
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
def initialize # :nodoc:
|
|
88
|
-
super(true)
|
|
92
|
+
# Create a new CommandParser class.
|
|
93
|
+
def initialize
|
|
94
|
+
super(true, true, false)
|
|
89
95
|
@directory = nil
|
|
90
|
-
@
|
|
91
|
-
@
|
|
92
|
-
@
|
|
96
|
+
@verbose = false
|
|
97
|
+
@do_search = false
|
|
98
|
+
@log_level = ::Logger::INFO
|
|
99
|
+
@config_options = {}
|
|
100
|
+
|
|
101
|
+
self.add_command(CmdParse::VersionCommand.new)
|
|
102
|
+
self.add_command(CmdParse::HelpCommand.new)
|
|
93
103
|
|
|
94
104
|
self.program_name = "webgen"
|
|
95
105
|
self.program_version = Webgen::VERSION
|
|
96
106
|
self.options = CmdParse::OptionParserWrapper.new do |opts|
|
|
97
107
|
opts.separator "Global options:"
|
|
98
|
-
opts.on("--directory DIR", "-d", String,
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
opts.on("--
|
|
108
|
+
opts.on("--directory DIR", "-d", String,
|
|
109
|
+
*Utils.format_option_desc("The website directory to use")) do |d|
|
|
110
|
+
@directory = d
|
|
111
|
+
end
|
|
112
|
+
opts.on("--search-dirs", "-s",
|
|
113
|
+
*Utils.format_option_desc("Search parent directories for website directory")) do |s|
|
|
114
|
+
@do_search = s
|
|
115
|
+
end
|
|
116
|
+
opts.on("-c", "--[no-]color",
|
|
117
|
+
*Utils.format_option_desc("Colorize output (default: #{Webgen::CLI::Utils.use_colors ? "yes" : "no"})")) do |a|
|
|
118
|
+
Webgen::CLI::Utils.use_colors = a
|
|
119
|
+
end
|
|
120
|
+
opts.on("-v", "--[no-]verbose",
|
|
121
|
+
*Utils.format_option_desc("Verbose output (default: no)")) do |v|
|
|
122
|
+
@verbose = v
|
|
123
|
+
end
|
|
124
|
+
opts.on("-q", "--[no-]quiet",
|
|
125
|
+
*Utils.format_option_desc("Quiet output (default: no)")) do |v|
|
|
126
|
+
@log_level = (v ? ::Logger::WARN : :Logger::INFO)
|
|
127
|
+
end
|
|
128
|
+
opts.on("-n", "--[no-]dry-run",
|
|
129
|
+
*Utils.format_option_desc("Do a dry run, i.e. don't actually write anything (default: no)")) do |v|
|
|
130
|
+
@config_options['website.dry_run'] = v
|
|
131
|
+
end
|
|
132
|
+
opts.on("-o", "--option CONFIG_OPTION", String,
|
|
133
|
+
*Utils.format_option_desc("Specify a simple configuration option (key=value)")) do |v|
|
|
134
|
+
k, v = v.split('=')
|
|
135
|
+
begin
|
|
136
|
+
@config_options[k] = YAML.load(v)
|
|
137
|
+
rescue YAML::SyntaxError
|
|
138
|
+
raise ConfigurationOptionError.new("Couldn't parse value for '#{k}': #{$!}")
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
opts.on("--[no-]debug",
|
|
142
|
+
*Utils.format_option_desc("Enable debugging")) do |v|
|
|
143
|
+
@log_level = (v ? ::Logger::DEBUG : :Logger::INFO)
|
|
144
|
+
end
|
|
145
|
+
opts.on_tail("--version", "-V", "Show webgen version information") do
|
|
146
|
+
main_command.commands['version'].execute([])
|
|
147
|
+
end
|
|
103
148
|
end
|
|
104
|
-
self.add_command(
|
|
105
|
-
self.add_command(
|
|
149
|
+
self.add_command(Webgen::CLI::GenerateCommand.new, true)
|
|
150
|
+
self.add_command(Webgen::CLI::ShowCommand.new)
|
|
151
|
+
self.add_command(Webgen::CLI::BundleCommand.new)
|
|
152
|
+
self.add_command(Webgen::CLI::CreateCommand.new)
|
|
106
153
|
end
|
|
107
154
|
|
|
108
|
-
# Utility method for
|
|
109
|
-
def
|
|
110
|
-
if !
|
|
111
|
-
|
|
112
|
-
|
|
155
|
+
# Utility method for getting the Webgen::Website object.
|
|
156
|
+
def website
|
|
157
|
+
@directory = ENV['WEBGEN_WEBSITE'] if @directory.nil? && !ENV['WEBGEN_WEBSITE'].to_s.empty?
|
|
158
|
+
if @directory.nil? && @do_search
|
|
159
|
+
dir = Dir.pwd
|
|
160
|
+
file_missing = nil
|
|
161
|
+
dir = File.dirname(dir) while dir != '/' && (file_missing = !File.exist?(File.join(dir, Webgen::Website::CONFIG_FILENAME)))
|
|
162
|
+
@directory = dir if !file_missing
|
|
163
|
+
end
|
|
164
|
+
@directory = Dir.pwd if @directory.nil?
|
|
165
|
+
@website ||= Webgen::Website.new(@directory, Webgen::CLI::Logger.new) do |site, before_init|
|
|
166
|
+
if before_init
|
|
167
|
+
site.ext.cli = self
|
|
168
|
+
site.logger.level = @log_level
|
|
169
|
+
site.logger.verbose = @verbose
|
|
170
|
+
site.logger.prefix = '[DRY-RUN] ' if @config_options['website.dry_run']
|
|
171
|
+
else
|
|
172
|
+
@config_options.each do |k, v|
|
|
173
|
+
if site.config.option?(k)
|
|
174
|
+
site.config[k] = v
|
|
175
|
+
else
|
|
176
|
+
raise ConfigurationOptionError.new("Unknown option '#{k}'")
|
|
177
|
+
end
|
|
178
|
+
end
|
|
113
179
|
end
|
|
114
|
-
@website.logger.level = @log_level
|
|
115
|
-
@website.logger.verbosity = @verbosity
|
|
116
180
|
end
|
|
117
|
-
@website
|
|
118
181
|
end
|
|
119
182
|
|
|
120
|
-
#
|
|
183
|
+
# Parse the command line arguments.
|
|
184
|
+
#
|
|
185
|
+
# Once the website directory information is gathered, the Webgen::Website is initialized to
|
|
186
|
+
# allow additional CLI commands to be added by extensions.
|
|
121
187
|
def parse(argv = ARGV)
|
|
122
|
-
|
|
123
|
-
|
|
188
|
+
super do |level, name|
|
|
189
|
+
if level == 0
|
|
190
|
+
# Create website object/automatically performs initialization; needed so that custom
|
|
191
|
+
# commands can be added
|
|
192
|
+
website
|
|
193
|
+
end
|
|
124
194
|
end
|
|
125
|
-
|
|
195
|
+
rescue
|
|
196
|
+
puts "webgen encountered a problem:\n " + $!.message
|
|
197
|
+
puts $!.backtrace if @log_level == ::Logger::DEBUG
|
|
198
|
+
exit(1)
|
|
126
199
|
end
|
|
127
200
|
|
|
128
201
|
end
|