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
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
require 'fileutils'
|
|
4
|
-
|
|
5
|
-
module Webgen::Output
|
|
6
|
-
|
|
7
|
-
# This class uses the file systems as output device. On initialization a +root+ path is set and
|
|
8
|
-
# all other operations are taken relative to this root path.
|
|
9
|
-
class FileSystem
|
|
10
|
-
|
|
11
|
-
include Webgen::WebsiteAccess
|
|
12
|
-
|
|
13
|
-
# The root path, ie. the path to which the root node gets rendered.
|
|
14
|
-
attr_reader :root
|
|
15
|
-
|
|
16
|
-
# Create a new object with the given +root+ path. If +root+ is not absolute, it is taken
|
|
17
|
-
# relative to the website directory.
|
|
18
|
-
def initialize(root)
|
|
19
|
-
#TODO: copied from source/filesystem.rb
|
|
20
|
-
if root =~ /^([a-zA-Z]:|\/)/
|
|
21
|
-
@root = root
|
|
22
|
-
else
|
|
23
|
-
@root = File.join(website.directory, root)
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# Return +true+ if the given path exists.
|
|
28
|
-
def exists?(path)
|
|
29
|
-
File.exists?(File.join(@root, path))
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
# Delete the given +path+
|
|
33
|
-
def delete(path)
|
|
34
|
-
dest = File.join(@root, path)
|
|
35
|
-
if File.directory?(dest)
|
|
36
|
-
FileUtils.rm_rf(dest)
|
|
37
|
-
else
|
|
38
|
-
FileUtils.rm(dest)
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
# Write the +data+ to the given +path+. The +type+ parameter specifies the type of the path to
|
|
43
|
-
# be created which can either be <tt>:file</tt> or <tt>:directory</tt>.
|
|
44
|
-
def write(path, data, type = :file)
|
|
45
|
-
dest = File.join(@root, path)
|
|
46
|
-
FileUtils.makedirs(File.dirname(dest))
|
|
47
|
-
if type == :directory
|
|
48
|
-
FileUtils.makedirs(dest)
|
|
49
|
-
elsif type == :file
|
|
50
|
-
if data.kind_of?(String)
|
|
51
|
-
File.open(dest, 'wb') {|f| f.write(data) }
|
|
52
|
-
else
|
|
53
|
-
data.stream('rb') do |source|
|
|
54
|
-
File.open(dest, 'wb') {|f| FileUtils.copy_stream(source, f) }
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
else
|
|
58
|
-
raise "Unsupported path type '#{type}' for #{path}"
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
# Return the content of the given +path+ which is opened in +mode+.
|
|
63
|
-
def read(path, mode = 'rb')
|
|
64
|
-
File.open(File.join(@root, path), mode) {|f| f.read}
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
end
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
require 'pathname'
|
|
4
|
-
require 'webgen/websiteaccess'
|
|
5
|
-
require 'webgen/path'
|
|
6
|
-
|
|
7
|
-
module Webgen
|
|
8
|
-
|
|
9
|
-
# This class is used to read source paths from a directory in the file system.
|
|
10
|
-
class Source::FileSystem
|
|
11
|
-
|
|
12
|
-
# A special Webgen::Path class for handling with file system paths.
|
|
13
|
-
class Path < Webgen::Path
|
|
14
|
-
|
|
15
|
-
# Create a new object with absolute path +path+ for the file system path +fs_path+.
|
|
16
|
-
def initialize(path, fs_path)
|
|
17
|
-
super(path) {|mode| File.open(fs_path, mode) }
|
|
18
|
-
@fs_path = fs_path
|
|
19
|
-
WebsiteAccess.website.cache[[:fs_path, @fs_path]] = File.mtime(@fs_path)
|
|
20
|
-
@meta_info['modified_at'] = File.mtime(@fs_path)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# Return +true+ if the file system path used by the object has been modified.
|
|
24
|
-
def changed?
|
|
25
|
-
data = WebsiteAccess.website.cache[[:fs_path, @fs_path]]
|
|
26
|
-
File.mtime(@fs_path) > data
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
# The root path from which paths read.
|
|
32
|
-
attr_reader :root
|
|
33
|
-
|
|
34
|
-
# The glob (see Dir.glob for details) that is used to specify which paths under the root path
|
|
35
|
-
# should be returned by #paths.
|
|
36
|
-
attr_reader :glob
|
|
37
|
-
|
|
38
|
-
# Create a new file system source for the root path +root+ using the provided +glob+.
|
|
39
|
-
def initialize(root, glob = '**/*')
|
|
40
|
-
if root =~ /^([a-zA-Z]:|\/)/
|
|
41
|
-
@root = root
|
|
42
|
-
else
|
|
43
|
-
@root = File.join(WebsiteAccess.website.directory, root)
|
|
44
|
-
end
|
|
45
|
-
@glob = glob
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
# Return all paths under #root which match #glob.
|
|
49
|
-
def paths
|
|
50
|
-
@paths ||= Dir.glob(File.join(@root, @glob), File::FNM_DOTMATCH|File::FNM_CASEFOLD).to_set.collect do |f|
|
|
51
|
-
next unless File.exists?(f) # handle invalid links
|
|
52
|
-
temp = Pathname.new(f.sub(/^#{Regexp.escape(@root)}\/?/, '/')).cleanpath.to_s
|
|
53
|
-
temp += '/' if File.directory?(f) && temp[-1] != ?/
|
|
54
|
-
path = Path.new(temp, f)
|
|
55
|
-
path
|
|
56
|
-
end.compact
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
end
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
require 'webgen/websiteaccess'
|
|
4
|
-
require 'webgen/source'
|
|
5
|
-
require 'webgen/common'
|
|
6
|
-
|
|
7
|
-
module Webgen::Source
|
|
8
|
-
|
|
9
|
-
# This class is used to provide access to sources provided by resources.
|
|
10
|
-
class Resource
|
|
11
|
-
|
|
12
|
-
include Webgen::WebsiteAccess
|
|
13
|
-
|
|
14
|
-
# The glob (see File.fnmatch) specifying the resources.
|
|
15
|
-
attr_reader :glob
|
|
16
|
-
|
|
17
|
-
# The glob (see File.fnmatch) specifying the paths that should be used from the resources.
|
|
18
|
-
attr_reader :paths_glob
|
|
19
|
-
|
|
20
|
-
# The prefix that should optionally be stripped from the paths.
|
|
21
|
-
attr_reader :strip_prefix
|
|
22
|
-
|
|
23
|
-
# Create a new resource source for the the +glob+ and use only those paths matching +paths_glob+
|
|
24
|
-
# while stripping +strip_prefix+ off the path.
|
|
25
|
-
def initialize(glob, paths_glob = nil, strip_prefix = nil)
|
|
26
|
-
@glob, @paths_glob, @strip_prefix = glob, paths_glob, strip_prefix
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# Return all paths associated with the resources identified by #glob.
|
|
30
|
-
def paths
|
|
31
|
-
if !defined?(@paths)
|
|
32
|
-
stack = Stacked.new
|
|
33
|
-
website.config['resources'].select {|name, infos| File.fnmatch(@glob, name)}.sort.each do |name, infos|
|
|
34
|
-
stack.add([['/', Webgen::Common.const_for_name(infos.first).new(*infos[1..-1])]])
|
|
35
|
-
end
|
|
36
|
-
@paths = stack.paths
|
|
37
|
-
@paths = @paths.select {|p| File.fnmatch(@paths_glob, p)} if @paths_glob
|
|
38
|
-
@paths.collect! {|p| p.mount_at('/', @strip_prefix)} if @strip_prefix
|
|
39
|
-
end
|
|
40
|
-
@paths
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
end
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
require 'pathname'
|
|
4
|
-
require 'webgen/websiteaccess'
|
|
5
|
-
require 'webgen/path'
|
|
6
|
-
require 'open-uri'
|
|
7
|
-
require 'zlib'
|
|
8
|
-
begin
|
|
9
|
-
require 'archive/tar/minitar'
|
|
10
|
-
rescue LoadError
|
|
11
|
-
raise Webgen::LoadError.new('archive/tar/minitar', self.class.name, nil, 'archive-tar-minitar')
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
module Webgen
|
|
15
|
-
|
|
16
|
-
# This class is used to read source paths from a (gzipped) tar archive. The archive can be remote
|
|
17
|
-
# (http(s) or ftp) or local.
|
|
18
|
-
#
|
|
19
|
-
# For example, the following are all valid URIs:
|
|
20
|
-
# http://example.com/directory/file.tgz
|
|
21
|
-
# /home/test/my.tar.gz
|
|
22
|
-
# ftp://ftp.example.com/archives/archive.tar
|
|
23
|
-
#
|
|
24
|
-
class Source::TarArchive
|
|
25
|
-
|
|
26
|
-
# A special Webgen::Path class for handling paths from a tar archive.
|
|
27
|
-
class Path < Webgen::Path
|
|
28
|
-
|
|
29
|
-
# Create a new tar archive path object for the entry +entry+.
|
|
30
|
-
def initialize(path, data, mtime, uri)
|
|
31
|
-
super(path) {|mode| StringIO.new(data.to_s, mode) }
|
|
32
|
-
@uri = uri
|
|
33
|
-
@mtime = mtime
|
|
34
|
-
WebsiteAccess.website.cache[[:tararchive_path, @uri, path]] = @mtime if WebsiteAccess.website
|
|
35
|
-
@meta_info['modified_at'] = @mtime
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
# Return +true+ if the tar archive path used by the object has been modified.
|
|
39
|
-
def changed?
|
|
40
|
-
!WebsiteAccess.website || @mtime > WebsiteAccess.website.cache[[:tararchive_path, @uri, path]]
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
# The URI of the tar archive.
|
|
46
|
-
attr_reader :uri
|
|
47
|
-
|
|
48
|
-
# The glob (see File.fnmatch for details) that is used to specify which paths in the archive should
|
|
49
|
-
# be returned by #paths.
|
|
50
|
-
attr_reader :glob
|
|
51
|
-
|
|
52
|
-
# Create a new tar archive source for the URI string +uri+.
|
|
53
|
-
def initialize(uri, glob = '**/*')
|
|
54
|
-
@uri = uri
|
|
55
|
-
@glob = glob
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# Return all paths in the tar archive available at #uri.
|
|
59
|
-
def paths
|
|
60
|
-
if !defined?(@paths)
|
|
61
|
-
stream = open(@uri)
|
|
62
|
-
stream = Zlib::GzipReader.new(stream) if @uri =~ /(\.tar\.gz|\.tgz)$/
|
|
63
|
-
Archive::Tar::Minitar::Input.open(stream) do |input|
|
|
64
|
-
@paths = input.collect do |entry|
|
|
65
|
-
path = entry.full_name
|
|
66
|
-
next unless File.fnmatch(@glob, path, File::FNM_DOTMATCH|File::FNM_CASEFOLD|File::FNM_PATHNAME)
|
|
67
|
-
path += '/' if entry.directory? && path[-1,1] != '/'
|
|
68
|
-
path = '/' + path unless path[0,1] == '/'
|
|
69
|
-
Path.new(path, entry.read, Time.at(entry.mtime), @uri)
|
|
70
|
-
end.compact.to_set
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
@paths
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
end
|
data/lib/webgen/sourcehandler.rb
DELETED
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
require 'webgen/loggable'
|
|
4
|
-
require 'webgen/common'
|
|
5
|
-
require 'benchmark'
|
|
6
|
-
|
|
7
|
-
module Webgen
|
|
8
|
-
|
|
9
|
-
# Namespace for all classes that handle source paths.
|
|
10
|
-
#
|
|
11
|
-
# Have a look at Webgen::SourceHandler::Base for details on how to implement a source handler
|
|
12
|
-
# class.
|
|
13
|
-
module SourceHandler
|
|
14
|
-
|
|
15
|
-
autoload :Base, 'webgen/sourcehandler/base'
|
|
16
|
-
autoload :Copy, 'webgen/sourcehandler/copy'
|
|
17
|
-
autoload :Directory, 'webgen/sourcehandler/directory'
|
|
18
|
-
autoload :Metainfo, 'webgen/sourcehandler/metainfo'
|
|
19
|
-
autoload :Template, 'webgen/sourcehandler/template'
|
|
20
|
-
autoload :Page, 'webgen/sourcehandler/page'
|
|
21
|
-
autoload :Fragment, 'webgen/sourcehandler/fragment'
|
|
22
|
-
autoload :Virtual, 'webgen/sourcehandler/virtual'
|
|
23
|
-
autoload :Feed, 'webgen/sourcehandler/feed'
|
|
24
|
-
autoload :Sitemap, 'webgen/sourcehandler/sitemap'
|
|
25
|
-
autoload :Memory, 'webgen/sourcehandler/memory'
|
|
26
|
-
|
|
27
|
-
# This class is used by Website to do the actual rendering of the website. It
|
|
28
|
-
#
|
|
29
|
-
# * collects all source paths using the source classes
|
|
30
|
-
# * creates nodes using the source handler classes
|
|
31
|
-
# * writes changed nodes out using an output class
|
|
32
|
-
# * deletes old nodes
|
|
33
|
-
class Main
|
|
34
|
-
|
|
35
|
-
include WebsiteAccess
|
|
36
|
-
include Loggable
|
|
37
|
-
|
|
38
|
-
def initialize #:nodoc:
|
|
39
|
-
website.blackboard.add_service(:create_nodes, method(:create_nodes))
|
|
40
|
-
website.blackboard.add_service(:create_nodes_from_paths, method(:create_nodes_from_paths))
|
|
41
|
-
website.blackboard.add_service(:source_paths, method(:find_all_source_paths))
|
|
42
|
-
website.blackboard.add_listener(:node_meta_info_changed?, method(:meta_info_changed?))
|
|
43
|
-
|
|
44
|
-
website.blackboard.add_listener(:before_node_deleted) do |node|
|
|
45
|
-
unless node.is_fragment? || node['no_output'] || node.path == '/' || node == node.tree.dummy_root
|
|
46
|
-
website.blackboard.invoke(:output_instance).delete(node.path)
|
|
47
|
-
end
|
|
48
|
-
end if website.config['output.do_deletion']
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
# Render the current website. Before the actual rendering is done, the sources are checked for
|
|
52
|
-
# changes, i.e. nodes for deleted sources are deleted, nodes for new and changed sources are
|
|
53
|
-
# updated.
|
|
54
|
-
def render
|
|
55
|
-
begin
|
|
56
|
-
website.logger.mark_new_cycle if website.logger
|
|
57
|
-
|
|
58
|
-
puts "Updating tree..."
|
|
59
|
-
time = Benchmark.measure do
|
|
60
|
-
website.cache.reset_volatile_cache
|
|
61
|
-
update_tree
|
|
62
|
-
end
|
|
63
|
-
puts "...done in " + ('%2.4f' % time.real) + ' seconds'
|
|
64
|
-
|
|
65
|
-
if !website.tree.root
|
|
66
|
-
puts 'No source files found - maybe not a webgen website?'
|
|
67
|
-
return nil
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
puts "Writing changed nodes..."
|
|
71
|
-
time = Benchmark.measure do
|
|
72
|
-
write_tree
|
|
73
|
-
end
|
|
74
|
-
puts "...done in " + ('%2.4f' % time.real) + ' seconds'
|
|
75
|
-
end while website.tree.node_access[:alcn].any? {|name,node| node.flagged?(:created) || node.flagged?(:reinit)}
|
|
76
|
-
:success
|
|
77
|
-
rescue Webgen::Error
|
|
78
|
-
raise
|
|
79
|
-
rescue Exception => e
|
|
80
|
-
raise Webgen::Error.new(e)
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
#######
|
|
84
|
-
private
|
|
85
|
-
#######
|
|
86
|
-
|
|
87
|
-
# Update the <tt>website.tree</tt> by creating/reinitializing all needed nodes.
|
|
88
|
-
def update_tree
|
|
89
|
-
unused_paths = Set.new
|
|
90
|
-
referenced_nodes = Set.new
|
|
91
|
-
all_but_passive_paths = Set.new(find_all_source_paths.select {|name, path| !path.passive?}.collect {|name, path| name})
|
|
92
|
-
begin
|
|
93
|
-
used_paths = all_but_passive_paths - unused_paths
|
|
94
|
-
paths_to_use = Set.new
|
|
95
|
-
nodes_to_delete = Set.new
|
|
96
|
-
passive_nodes = Set.new
|
|
97
|
-
|
|
98
|
-
website.tree.node_access[:alcn].each do |alcn, node|
|
|
99
|
-
next if node == website.tree.dummy_root
|
|
100
|
-
|
|
101
|
-
begin
|
|
102
|
-
used_paths.delete(node.node_info[:src])
|
|
103
|
-
|
|
104
|
-
src_path = find_all_source_paths[node.node_info[:src]]
|
|
105
|
-
if !src_path
|
|
106
|
-
nodes_to_delete << node
|
|
107
|
-
elsif (!node.flagged?(:created) && src_path.changed?) || node.meta_info_changed?
|
|
108
|
-
node.flag(:reinit)
|
|
109
|
-
paths_to_use << node.node_info[:src]
|
|
110
|
-
elsif node.changed?
|
|
111
|
-
# nothing to be done here but method node.changed? has to be called
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
if src_path && src_path.passive?
|
|
115
|
-
passive_nodes << node
|
|
116
|
-
elsif src_path
|
|
117
|
-
referenced_nodes += node.node_info[:used_meta_info_nodes] + node.node_info[:used_nodes]
|
|
118
|
-
end
|
|
119
|
-
rescue Webgen::Error => e
|
|
120
|
-
e.alcn = node.alcn unless e.alcn
|
|
121
|
-
raise
|
|
122
|
-
rescue Exception => e
|
|
123
|
-
raise Webgen::Error.new(e, nil, node)
|
|
124
|
-
end
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
# add unused passive nodes to node_to_delete set
|
|
128
|
-
unreferenced_passive_nodes, other_passive_nodes = passive_nodes.partition do |pnode|
|
|
129
|
-
!referenced_nodes.include?(pnode.alcn)
|
|
130
|
-
end
|
|
131
|
-
refs = other_passive_nodes.collect {|n| (n.node_info[:used_meta_info_nodes] + n.node_info[:used_nodes]).to_a}.flatten
|
|
132
|
-
unreferenced_passive_nodes.each {|n| nodes_to_delete << n if !refs.include?(n.alcn)}
|
|
133
|
-
|
|
134
|
-
nodes_to_delete.each {|node| website.tree.delete_node(node)}
|
|
135
|
-
used_paths.merge(paths_to_use)
|
|
136
|
-
paths = create_nodes_from_paths(used_paths).collect {|n| n.node_info[:src]}
|
|
137
|
-
unused_paths.merge(used_paths - paths)
|
|
138
|
-
website.tree.node_access[:alcn].each {|name, node| website.tree.delete_node(node) if node.flagged?(:reinit)}
|
|
139
|
-
website.cache.reset_volatile_cache
|
|
140
|
-
end until used_paths.empty?
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
# Write out all changed nodes of the <tt>website.tree</tt>.
|
|
144
|
-
def write_tree
|
|
145
|
-
output = website.blackboard.invoke(:output_instance)
|
|
146
|
-
|
|
147
|
-
website.tree.node_access[:alcn].select do |name, node|
|
|
148
|
-
use_node = (node != website.tree.dummy_root && node.flagged?(:dirty))
|
|
149
|
-
node.unflag(:dirty_meta_info)
|
|
150
|
-
node.unflag(:created)
|
|
151
|
-
node.unflag(:dirty)
|
|
152
|
-
use_node
|
|
153
|
-
end.sort.each do |name, node|
|
|
154
|
-
begin
|
|
155
|
-
next if node['no_output'] || !(content = node.content)
|
|
156
|
-
|
|
157
|
-
puts " "*4 + name, :verbose
|
|
158
|
-
type = if node.is_directory?
|
|
159
|
-
:directory
|
|
160
|
-
elsif node.is_fragment?
|
|
161
|
-
:fragment
|
|
162
|
-
else
|
|
163
|
-
:file
|
|
164
|
-
end
|
|
165
|
-
output.write(node.path, content, type)
|
|
166
|
-
rescue Webgen::Error => e
|
|
167
|
-
e.alcn = node.alcn unless e.alcn
|
|
168
|
-
raise
|
|
169
|
-
rescue Exception => e
|
|
170
|
-
raise Webgen::RenderError.new(e, nil, node)
|
|
171
|
-
end
|
|
172
|
-
end
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
# Return a hash with all source paths.
|
|
176
|
-
def find_all_source_paths
|
|
177
|
-
if !defined?(@paths)
|
|
178
|
-
active_source = Webgen::Source::Stacked.new(website.config['sources'].collect do |mp, name, *args|
|
|
179
|
-
[mp, Webgen::Common.const_for_name(name).new(*args)]
|
|
180
|
-
end)
|
|
181
|
-
passive_source = Webgen::Source::Stacked.new(website.config['passive_sources'].collect do |mp, name, *args|
|
|
182
|
-
[mp, Webgen::Common.const_for_name(name).new(*args)]
|
|
183
|
-
end, true)
|
|
184
|
-
passive_source.paths.each {|path| path.passive = true }
|
|
185
|
-
source = Webgen::Source::Stacked.new([['/', active_source], ['/', passive_source]])
|
|
186
|
-
|
|
187
|
-
@paths = {}
|
|
188
|
-
source.paths.each do |path|
|
|
189
|
-
if !(website.config['sourcehandler.ignore'].any? {|pat| File.fnmatch(pat, path, File::FNM_CASEFOLD|File::FNM_DOTMATCH)})
|
|
190
|
-
@paths[path.source_path] = path
|
|
191
|
-
end
|
|
192
|
-
end
|
|
193
|
-
end
|
|
194
|
-
@paths
|
|
195
|
-
end
|
|
196
|
-
|
|
197
|
-
# Return only the subset of +paths+ which are handled by the source handler +name+.
|
|
198
|
-
def paths_for_handler(name, paths)
|
|
199
|
-
patterns = website.config['sourcehandler.patterns'][name]
|
|
200
|
-
return [] if patterns.nil?
|
|
201
|
-
|
|
202
|
-
options = (website.config['sourcehandler.casefold'] ? File::FNM_CASEFOLD : 0) |
|
|
203
|
-
(website.config['sourcehandler.use_hidden_files'] ? File::FNM_DOTMATCH : 0) |
|
|
204
|
-
File::FNM_PATHNAME
|
|
205
|
-
find_all_source_paths.values_at(*paths).compact.select do |path|
|
|
206
|
-
patterns.any? {|pat| File.fnmatch(pat, path, options)}
|
|
207
|
-
end
|
|
208
|
-
end
|
|
209
|
-
|
|
210
|
-
# Use the source handlers to create nodes for the +paths+ in the <tt>website.tree</tt> and
|
|
211
|
-
# return the nodes that have been created.
|
|
212
|
-
def create_nodes_from_paths(paths)
|
|
213
|
-
nodes = Set.new
|
|
214
|
-
website.config['sourcehandler.invoke'].sort.each do |priority, shns|
|
|
215
|
-
shns.each do |shn|
|
|
216
|
-
sh = website.cache.instance(shn)
|
|
217
|
-
handler_paths = paths_for_handler(shn, paths)
|
|
218
|
-
handler_paths.sort {|a,b| a.path.length <=> b.path.length}.each do |path|
|
|
219
|
-
if !website.tree[path.parent_path]
|
|
220
|
-
nodes.merge(create_nodes_from_paths([path.parent_path]))
|
|
221
|
-
end
|
|
222
|
-
nodes += create_nodes(path, sh)
|
|
223
|
-
end
|
|
224
|
-
end
|
|
225
|
-
end
|
|
226
|
-
nodes
|
|
227
|
-
end
|
|
228
|
-
|
|
229
|
-
# Prepare everything to create from the +path+ using the +source_handler+. If a block is
|
|
230
|
-
# given, the actual creation of the nodes is deferred to it. Otherwise the #create_node method
|
|
231
|
-
# of the +source_handler+ is used. After the nodes are created, it is also checked if they
|
|
232
|
-
# have all needed properties.
|
|
233
|
-
def create_nodes(path, source_handler) #:yields: path
|
|
234
|
-
path = path.dup
|
|
235
|
-
path.meta_info = default_meta_info(path, source_handler.class.name)
|
|
236
|
-
(website.cache[:sourcehandler_path_mi] ||= {})[[path.path, source_handler.class.name]] = path.meta_info.dup
|
|
237
|
-
website.blackboard.dispatch_msg(:before_node_created, path)
|
|
238
|
-
*nodes = if block_given?
|
|
239
|
-
yield(path)
|
|
240
|
-
else
|
|
241
|
-
source_handler.create_node(path)
|
|
242
|
-
end
|
|
243
|
-
nodes = nodes.flatten.compact
|
|
244
|
-
nodes.each {|node| website.blackboard.dispatch_msg(:after_node_created, node)}
|
|
245
|
-
nodes
|
|
246
|
-
rescue Webgen::Error => e
|
|
247
|
-
e.alcn = path unless e.alcn
|
|
248
|
-
raise
|
|
249
|
-
rescue Exception => e
|
|
250
|
-
raise Webgen::NodeCreationError.new(e, source_handler.class.name, path)
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
# Return the default meta info for the pair of +path+ and +sh_name+.
|
|
254
|
-
def default_meta_info(path, sh_name)
|
|
255
|
-
path.meta_info.merge(website.config['sourcehandler.default_meta_info'][:all]).
|
|
256
|
-
merge(website.config['sourcehandler.default_meta_info'][sh_name] || {})
|
|
257
|
-
end
|
|
258
|
-
|
|
259
|
-
# Check if the default meta information for +node+ has changed since the last run. But don't
|
|
260
|
-
# take the node's path's +modified_at+ meta information into account since that changes on
|
|
261
|
-
# every path change.
|
|
262
|
-
def meta_info_changed?(node)
|
|
263
|
-
path = node.node_info[:creation_path]
|
|
264
|
-
old_mi = website.cache[:sourcehandler_path_mi][[path, node.node_info[:processor]]]
|
|
265
|
-
old_mi.delete('modified_at')
|
|
266
|
-
new_mi = default_meta_info(@paths[path] || Webgen::Path.new(path), node.node_info[:processor])
|
|
267
|
-
new_mi.delete('modified_at')
|
|
268
|
-
node.flag(:dirty_meta_info) if !old_mi || old_mi != new_mi
|
|
269
|
-
end
|
|
270
|
-
|
|
271
|
-
end
|
|
272
|
-
|
|
273
|
-
end
|
|
274
|
-
|
|
275
|
-
end
|