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
@@ -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
|