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,85 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'uri'
|
|
4
|
+
require 'yaml'
|
|
5
|
+
require 'webgen/path_handler/base'
|
|
6
|
+
require 'webgen/path_handler/page_utils'
|
|
7
|
+
|
|
8
|
+
module Webgen
|
|
9
|
+
class PathHandler
|
|
10
|
+
|
|
11
|
+
# Handles files which contain specifications for "virtual" nodes, ie. nodes that don't have real
|
|
12
|
+
# source paths.
|
|
13
|
+
#
|
|
14
|
+
# This can be used, for example, to provide multiple links to the same node or links to external
|
|
15
|
+
# URLs.
|
|
16
|
+
class Virtual
|
|
17
|
+
|
|
18
|
+
include Base
|
|
19
|
+
include PageUtils
|
|
20
|
+
|
|
21
|
+
# Create all virtual nodes which are specified in +path+.
|
|
22
|
+
def create_nodes(path, blocks)
|
|
23
|
+
nodes = []
|
|
24
|
+
if path.meta_info.delete(:virtual)
|
|
25
|
+
nodes << create_node(path)
|
|
26
|
+
else
|
|
27
|
+
read_entries(blocks) do |key, meta_info|
|
|
28
|
+
meta_info['modified_at'] = path.meta_info['modified_at']
|
|
29
|
+
meta_info['no_output'] = true
|
|
30
|
+
|
|
31
|
+
key = Webgen::Path.append(path.parent_path, key)
|
|
32
|
+
parent_path = create_directories(File.dirname(key), 'modified_at' => meta_info['modified_at'])
|
|
33
|
+
|
|
34
|
+
dest_path = meta_info.delete('dest_path') || key
|
|
35
|
+
dest_path = (URI::parse(dest_path).absolute? || dest_path =~ /^\// ?
|
|
36
|
+
dest_path : File.join(parent_path, dest_path))
|
|
37
|
+
meta_info['dest_path'] = dest_path
|
|
38
|
+
entry_path = Webgen::Path.new(key, meta_info)
|
|
39
|
+
|
|
40
|
+
if key =~ /\/$/
|
|
41
|
+
entry_path['handler'] = 'directory'
|
|
42
|
+
nodes << @website.ext.path_handler.create_secondary_nodes(entry_path)
|
|
43
|
+
else
|
|
44
|
+
entry_path[:virtual] = true
|
|
45
|
+
entry_path['handler'] = 'virtual'
|
|
46
|
+
nodes << @website.ext.path_handler.create_secondary_nodes(entry_path)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
nodes.flatten.compact.each do |node|
|
|
51
|
+
node.node_info[:path] = path
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
#######
|
|
56
|
+
private
|
|
57
|
+
#######
|
|
58
|
+
|
|
59
|
+
# Read all entries from all blocks and yield the found path as well as the meta info hash for
|
|
60
|
+
# each entry.
|
|
61
|
+
def read_entries(blocks)
|
|
62
|
+
blocks.each do |name, content|
|
|
63
|
+
YAML::load(content).each do |key, meta_info|
|
|
64
|
+
yield(key, meta_info || {})
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Create the needed parent directories for a virtual node.
|
|
70
|
+
def create_directories(directory, mi)
|
|
71
|
+
mi.merge!('no_output' => true, 'handler' => 'directory')
|
|
72
|
+
directory.sub(/^\//, '').split('/').inject('/') do |parent_path, dir|
|
|
73
|
+
parent_path = File.join(parent_path, dir) + '/'
|
|
74
|
+
path = Webgen::Path.new(parent_path, mi)
|
|
75
|
+
if !@website.tree[path.alcn]
|
|
76
|
+
@website.ext.path_handler.create_secondary_nodes(path)
|
|
77
|
+
end
|
|
78
|
+
parent_path
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
2
|
|
|
3
|
-
# -*- ruby -*-
|
|
4
3
|
#
|
|
5
4
|
#--
|
|
6
|
-
#
|
|
5
|
+
# rake_task.rb:
|
|
7
6
|
#
|
|
8
7
|
# Define a task library for running webgen
|
|
9
8
|
#
|
|
10
9
|
# Copyright (C) 2007 Jeremy Hinegardner
|
|
11
10
|
#
|
|
12
11
|
# Tasks restructuration by Massimiliano Filacchioni
|
|
13
|
-
# Modifications for 0.5.0 by Thomas Leitner
|
|
12
|
+
# Modifications for 0.5.0- by Thomas Leitner
|
|
14
13
|
#
|
|
15
14
|
# This program is free software; you can redistribute it and/or modify
|
|
16
15
|
# it under the terms of the GNU General Public License as published by
|
|
@@ -43,9 +42,9 @@ module Webgen
|
|
|
43
42
|
#
|
|
44
43
|
# == Basics
|
|
45
44
|
#
|
|
46
|
-
# require 'webgen/
|
|
45
|
+
# require 'webgen/rake_task'
|
|
47
46
|
#
|
|
48
|
-
# Webgen::
|
|
47
|
+
# Webgen::RakeTask.new
|
|
49
48
|
#
|
|
50
49
|
# == Attributes
|
|
51
50
|
#
|
|
@@ -63,24 +62,24 @@ module Webgen
|
|
|
63
62
|
# The tasks provided are :
|
|
64
63
|
#
|
|
65
64
|
# [webgen]
|
|
66
|
-
#
|
|
65
|
+
# generate the webgen website
|
|
67
66
|
# [clobber_webgen]
|
|
68
|
-
# remove all
|
|
67
|
+
# remove all files created during generation
|
|
69
68
|
#
|
|
70
69
|
# == Integrate webgen in other project
|
|
71
70
|
#
|
|
72
71
|
# To integrate webgen tasks in another project you can use rake namespaces. For example assuming
|
|
73
|
-
# webgen's
|
|
72
|
+
# webgen's website directory is +webgen+ under the main project directory use the following code
|
|
74
73
|
# fragment in project Rakefile:
|
|
75
74
|
#
|
|
76
|
-
# require 'webgen/
|
|
75
|
+
# require 'webgen/rake_task'
|
|
77
76
|
#
|
|
78
77
|
# namespace :dev do
|
|
79
|
-
# Webgen::
|
|
78
|
+
# Webgen::RakeTask.new do |site|
|
|
80
79
|
# site.directory = File.join(Dir.pwd, "webgen")
|
|
81
80
|
# site.clobber_outdir = true
|
|
82
|
-
# site.config_block = lambda |
|
|
83
|
-
# config['website.lang'] = 'de'
|
|
81
|
+
# site.config_block = lambda |website|
|
|
82
|
+
# website.config['website.lang'] = 'de'
|
|
84
83
|
# end
|
|
85
84
|
# end
|
|
86
85
|
# end
|
|
@@ -94,20 +93,23 @@ module Webgen
|
|
|
94
93
|
#
|
|
95
94
|
# and add dev:clobber_webgen to the main clobber task.
|
|
96
95
|
#
|
|
97
|
-
class
|
|
96
|
+
class RakeTask < ::Rake::TaskLib
|
|
98
97
|
|
|
99
|
-
# The directory of the webgen website.
|
|
100
|
-
# file. Or the parent directory of the <tt>src/</tt> directory for webgen.
|
|
98
|
+
# The directory of the webgen website.
|
|
101
99
|
#
|
|
102
|
-
#
|
|
100
|
+
# This would be the directory of your 'webgen.config' file. Or the parent directory of the 'src'
|
|
101
|
+
# directory.
|
|
102
|
+
#
|
|
103
|
+
# The default value is +Dir.pwd+.
|
|
103
104
|
attr_accessor :directory
|
|
104
105
|
|
|
105
|
-
# The configuration block that is invoked when the Webgen::Website object is initialized.
|
|
106
|
-
#
|
|
106
|
+
# The configuration block that is invoked when the Webgen::Website object is initialized.
|
|
107
|
+
#
|
|
108
|
+
# This can be used to set configuration parameters and to avoid having a 'webgen.config' file
|
|
107
109
|
# lying around.
|
|
108
110
|
attr_accessor :config_block
|
|
109
111
|
|
|
110
|
-
# During the clobber, should webgen's output directory be clobbered
|
|
112
|
+
# During the clobber, should webgen's output directory be clobbered? The default is false.
|
|
111
113
|
attr_accessor :clobber_outdir
|
|
112
114
|
|
|
113
115
|
# Create webgen tasks. You can override the task name with the parameter +name+.
|
|
@@ -127,13 +129,14 @@ module Webgen
|
|
|
127
129
|
#######
|
|
128
130
|
|
|
129
131
|
def define # :nodoc:
|
|
130
|
-
desc "
|
|
131
|
-
task @name, :
|
|
132
|
+
desc "Generate the webgen website"
|
|
133
|
+
task @name, :verbose, :debug do |t, args|
|
|
132
134
|
require 'webgen/website'
|
|
133
|
-
|
|
134
|
-
website
|
|
135
|
-
website.logger.
|
|
136
|
-
website.
|
|
135
|
+
require 'webgen/cli'
|
|
136
|
+
website = Webgen::Website.new(@directory, Webgen::CLI::Logger.new($stdout), &@config_block)
|
|
137
|
+
website.logger.verbose = args[:verbose] && args[:verbose].to_s == 'true'
|
|
138
|
+
website.logger.level = (args[:debug] && args[:debug].to_s == 'true' ? ::Logger::DEBUG : ::Logger::INFO)
|
|
139
|
+
website.execute_task(:generate_website)
|
|
137
140
|
end
|
|
138
141
|
|
|
139
142
|
task :clobber => paste('clobber_', @name)
|
|
@@ -141,8 +144,9 @@ module Webgen
|
|
|
141
144
|
desc "Remove webgen products"
|
|
142
145
|
task paste('clobber_', @name) do
|
|
143
146
|
require 'webgen/website'
|
|
144
|
-
|
|
145
|
-
website.
|
|
147
|
+
require 'webgen/cli'
|
|
148
|
+
website = Webgen::Website.new(@directory, Webgen::CLI::Logger.new($stdout), &@config_block)
|
|
149
|
+
website.ext.destination.delete('/')
|
|
146
150
|
end
|
|
147
151
|
end
|
|
148
152
|
|
data/lib/webgen/source.rb
CHANGED
|
@@ -1,28 +1,44 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
2
|
|
|
3
|
+
require 'webgen/extension_manager'
|
|
4
|
+
require 'webgen/path'
|
|
5
|
+
|
|
3
6
|
module Webgen
|
|
4
7
|
|
|
5
8
|
# Namespace for all classes that provide source paths.
|
|
6
9
|
#
|
|
7
|
-
# ==
|
|
10
|
+
# == About
|
|
11
|
+
#
|
|
12
|
+
# This class is used to manage source classes. A source class is a class that returns a set of
|
|
13
|
+
# Path objects when the \#paths method is called. For example, the FileSystem class uses the file
|
|
14
|
+
# system as the source for the source paths.
|
|
8
15
|
#
|
|
9
|
-
#
|
|
16
|
+
# The #register method is used for registering new source classes.
|
|
10
17
|
#
|
|
11
|
-
#
|
|
12
|
-
# for the source. The returned paths must respond to the method <tt>changed?</tt> (has to return
|
|
13
|
-
# +true+ if the paths has changed since the last webgen run). If a path represents a directory, it
|
|
14
|
-
# needs to have a trailing slash! The default implementation in the Path class just returns
|
|
15
|
-
# +true+. One can either derive a specialized path class or define singleton methods on each path
|
|
16
|
-
# object.
|
|
18
|
+
# To get all configured source paths, use the #paths method of this class.
|
|
17
19
|
#
|
|
18
|
-
#
|
|
19
|
-
#
|
|
20
|
+
# Extension writers may be interested in the #passive_sources accessor which allows one to
|
|
21
|
+
# register sources that provide paths that are only used when actually referenced.
|
|
22
|
+
#
|
|
23
|
+
# == Implementing a source class
|
|
20
24
|
#
|
|
21
|
-
#
|
|
25
|
+
# A source class only needs to respond to the method +paths+ which needs to return a set of Path
|
|
26
|
+
# objects for the source. It is expected that after a source object is initialized it always
|
|
27
|
+
# returns the same path objects. The +initialize+ method of a source class must take the website
|
|
28
|
+
# object as first argument and may take an arbitrary number of additional arguments.
|
|
22
29
|
#
|
|
23
|
-
#
|
|
30
|
+
# Note that the returned Path objects need to have the meta information 'modified_at' set to the
|
|
31
|
+
# correct last modification time of the path, i.e. the value has to be a Time object! This is
|
|
32
|
+
# needed to determine whether the content of the path has been changed since the last invocation
|
|
33
|
+
# of webgen.
|
|
34
|
+
#
|
|
35
|
+
# == Sample source class
|
|
36
|
+
#
|
|
37
|
+
# Following is a simple source class which stores the paths and their contents in a hash:
|
|
24
38
|
#
|
|
25
39
|
# require 'stringio'
|
|
40
|
+
# require 'set'
|
|
41
|
+
# require 'webgen/path'
|
|
26
42
|
#
|
|
27
43
|
# class MemorySource
|
|
28
44
|
#
|
|
@@ -31,26 +47,92 @@ module Webgen
|
|
|
31
47
|
# '/directory/file.page' => "This is the content of the file"
|
|
32
48
|
# }
|
|
33
49
|
#
|
|
50
|
+
# def initialize(website, data = {})
|
|
51
|
+
# @data = data
|
|
52
|
+
# end
|
|
53
|
+
#
|
|
34
54
|
# def paths
|
|
35
|
-
# CONTENT.collect do |path, content|
|
|
36
|
-
# Webgen::Path.new(path) { StringIO.new(content.to_s) }
|
|
55
|
+
# CONTENT.merge(@data).collect do |path, content|
|
|
56
|
+
# Webgen::Path.new(path, 'modified_at' => Time.now) { StringIO.new(content.to_s) }
|
|
37
57
|
# end.to_set
|
|
38
58
|
# end
|
|
39
59
|
#
|
|
40
60
|
# end
|
|
41
61
|
#
|
|
42
|
-
#
|
|
43
|
-
# <tt>ext/init.rb</tt>) by updating the <tt>sources</tt> configuration option:
|
|
62
|
+
# website.ext.source.register MemorySource, :name => 'memory'
|
|
44
63
|
#
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
64
|
+
class Source
|
|
65
|
+
|
|
66
|
+
include Webgen::ExtensionManager
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
# An array with one or more passive source definitions (a source definition is an array
|
|
70
|
+
# containing a mount point, the short name for a Source class and its arguments).
|
|
71
|
+
#
|
|
72
|
+
# The paths read from these sources will automatically be tagged with the 'passive' meta
|
|
73
|
+
# information key so that they are only used when referenced.
|
|
74
|
+
#
|
|
75
|
+
# This is very useful for providing templates, images and other paths in webgen extensions that
|
|
76
|
+
# should only be rendered when actually being referenced.
|
|
77
|
+
attr_reader :passive_sources
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
# Create a new source manager object for the given website.
|
|
81
|
+
def initialize(website)
|
|
82
|
+
super()
|
|
83
|
+
@website = website
|
|
84
|
+
@passive_sources = []
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Register a source class.
|
|
88
|
+
#
|
|
89
|
+
# The parameter +klass+ has to contain the name of the source class or the class object itself.
|
|
90
|
+
# If the class is located under this namespace, only the class name without the hierarchy part
|
|
91
|
+
# is needed, otherwise the full class name including parent module/class names is needed.
|
|
92
|
+
#
|
|
93
|
+
# === Options:
|
|
94
|
+
#
|
|
95
|
+
# [:name] The name for the source. If not set, it defaults to the snake-case version (i.e.
|
|
96
|
+
# FileSystem → file_system) of the class name (without the hierarchy part). It should
|
|
97
|
+
# only contain letters.
|
|
98
|
+
#
|
|
99
|
+
# === Examples:
|
|
100
|
+
#
|
|
101
|
+
# source.register('FileSystem') # registers Webgen::Source::FileSystem
|
|
102
|
+
#
|
|
103
|
+
# source.register('::FileSystem') # registers FileSystem !!!
|
|
104
|
+
#
|
|
105
|
+
# source.register('MyModule::Doit', name: 'my_doit')
|
|
106
|
+
#
|
|
107
|
+
def register(klass, options={}, &block)
|
|
108
|
+
do_register(klass, options, false, &block)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Return all configured source paths.
|
|
112
|
+
#
|
|
113
|
+
# The source paths are taken from the sources specified in the "sources" configuration option
|
|
114
|
+
# and from passive sources array (see #passive_sources). All paths that additionally match one
|
|
115
|
+
# of the "sources.ignore_paths" patterns are ignored.
|
|
116
|
+
def paths
|
|
117
|
+
if !defined?(@paths)
|
|
118
|
+
active_source = extension('stacked').new(@website, @website.config['sources'].collect do |mp, name, *args|
|
|
119
|
+
[mp, extension(name).new(@website, *args)]
|
|
120
|
+
end)
|
|
121
|
+
passive_source = extension('stacked').new(@website, @passive_sources.collect do |mp, name, *args|
|
|
122
|
+
[mp, extension(name).new(@website, *args)]
|
|
123
|
+
end)
|
|
124
|
+
passive_source.paths.each {|path| path['passive'] = true}
|
|
125
|
+
source = extension('stacked').new(@website, [['/', active_source], ['/', passive_source]])
|
|
48
126
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
127
|
+
@paths = []
|
|
128
|
+
source.paths.each do |path|
|
|
129
|
+
if !(@website.config['sources.ignore_paths'].any? {|pat| Webgen::Path.matches_pattern?(path, pat)})
|
|
130
|
+
@paths << path
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
@paths
|
|
135
|
+
end
|
|
54
136
|
|
|
55
137
|
end
|
|
56
138
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'pathname'
|
|
4
|
+
require 'set'
|
|
5
|
+
require 'webgen/source'
|
|
6
|
+
require 'webgen/path'
|
|
7
|
+
|
|
8
|
+
module Webgen
|
|
9
|
+
class Source
|
|
10
|
+
|
|
11
|
+
# This class is used to read source paths from a directory in the file system.
|
|
12
|
+
class FileSystem
|
|
13
|
+
|
|
14
|
+
# The root path from which paths are read.
|
|
15
|
+
attr_reader :root
|
|
16
|
+
|
|
17
|
+
# The glob (see Dir.glob for details) that is used to specify which paths under the root path
|
|
18
|
+
# should be returned by #paths.
|
|
19
|
+
attr_reader :glob
|
|
20
|
+
|
|
21
|
+
# Create a new file system source for the root path +root+ using the provided +glob+. If
|
|
22
|
+
# +root+ is not an absolute path, the website directory will be prepended.
|
|
23
|
+
def initialize(website, root, glob = '**/*')
|
|
24
|
+
@root = File.absolute_path(root, website.directory)
|
|
25
|
+
@glob = glob
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Return all paths under the root path which match the glob.
|
|
29
|
+
def paths
|
|
30
|
+
@paths ||= Dir.glob(File.join(@root, @glob), File::FNM_DOTMATCH|File::FNM_CASEFOLD).collect do |f|
|
|
31
|
+
next unless File.exists?(f) # handle invalid links
|
|
32
|
+
temp = Pathname.new(f.sub(/^#{Regexp.escape(@root)}\/?/, '/')).cleanpath.to_s
|
|
33
|
+
temp += '/' if File.directory?(f) && temp[-1] != ?/
|
|
34
|
+
Path.new(temp, 'modified_at' => File.mtime(f)) {|mode| File.open(f, mode)}
|
|
35
|
+
end.compact.to_set
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -1,63 +1,59 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
#
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
# and a source object.
|
|
39
|
-
def add(maps)
|
|
40
|
-
raise "Cannot add new maps since caching is activated for this source" if defined?(@paths) && @cache_paths
|
|
41
|
-
maps.each do |mp, source|
|
|
42
|
-
raise "Invalid mount point specified: #{mp}" unless mp =~ /^\//
|
|
43
|
-
@stack << [mp, source]
|
|
3
|
+
require 'webgen/source'
|
|
4
|
+
require 'set'
|
|
5
|
+
|
|
6
|
+
module Webgen
|
|
7
|
+
class Source
|
|
8
|
+
|
|
9
|
+
# This source class is used to stack several sources together.
|
|
10
|
+
#
|
|
11
|
+
# It serves two purposes:
|
|
12
|
+
#
|
|
13
|
+
# * First, it can be used to access more than one source. This is useful when your website
|
|
14
|
+
# consists of more than one source directory and you want to use all of them.
|
|
15
|
+
#
|
|
16
|
+
# * Second, sources can be mounted on specific directories. For example, a folder with images
|
|
17
|
+
# that you don't want to copy to the main website source directory can be mounted under
|
|
18
|
+
# '/images' so that they are available nonetheless.
|
|
19
|
+
#
|
|
20
|
+
# Also be aware that when a path is returned by a source that has already be returned by a prior
|
|
21
|
+
# source, it is discarded and not used.
|
|
22
|
+
class Stacked
|
|
23
|
+
|
|
24
|
+
# Return the stack of [mount point, source object] entries.
|
|
25
|
+
attr_reader :stack
|
|
26
|
+
|
|
27
|
+
# Create a new stack.
|
|
28
|
+
#
|
|
29
|
+
# The optional +map+ parameter is used to provide mappings of mount points to source objects.
|
|
30
|
+
# It should be an array of two-element arrays which contain an absolute directory (ie.
|
|
31
|
+
# starting and ending with a slash) and a source object.
|
|
32
|
+
def initialize(website, map = {})
|
|
33
|
+
@stack = []
|
|
34
|
+
map.each do |mp, source|
|
|
35
|
+
raise "Invalid mount point specified: #{mp}" unless mp =~ /^\//
|
|
36
|
+
@stack << [mp, source]
|
|
37
|
+
end
|
|
44
38
|
end
|
|
45
|
-
end
|
|
46
39
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
40
|
+
# Return all paths returned by the sources in the stack.
|
|
41
|
+
#
|
|
42
|
+
# Since the stack is ordered, paths returned by later source objects are not used if a prior
|
|
43
|
+
# source object has returned the same path.
|
|
44
|
+
def paths
|
|
45
|
+
if !defined?(@paths)
|
|
46
|
+
@paths = Set.new
|
|
47
|
+
@stack.each do |mp, source|
|
|
48
|
+
source.paths.each do |path|
|
|
49
|
+
@paths.add?(path.mount_at(mp))
|
|
50
|
+
end
|
|
51
|
+
end
|
|
56
52
|
end
|
|
53
|
+
@paths
|
|
57
54
|
end
|
|
58
|
-
|
|
55
|
+
|
|
59
56
|
end
|
|
60
57
|
|
|
61
58
|
end
|
|
62
|
-
|
|
63
59
|
end
|