middleman-core 3.2.2 → 3.3.0
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.
- checksums.yaml +4 -4
- data/features/cli_init.feature +18 -8
- data/features/helpers_select_tag.feature +1 -1
- data/features/layouts_dir.feature +8 -0
- data/features/markdown_redcarpet.feature +2 -2
- data/fixtures/asciidoc-app/source/layouts/default.erb +0 -1
- data/fixtures/capture-html-app/source/capture_html_haml.html.haml +1 -1
- data/fixtures/content-for-app/source/content_for_haml.html.haml +1 -1
- data/fixtures/frontmatter-settings-app/source/layouts/override.erb +1 -2
- data/fixtures/frontmatter-settings-neighbor-app/source/layouts/override.erb +1 -2
- data/fixtures/layouts-dir-app/source/ambiguous.html.erb +5 -0
- data/fixtures/layouts-dir-app/source/layouts/other.erb +3 -0
- data/fixtures/layouts-dir-app/source/other.erb +3 -0
- data/fixtures/link-to-app/source/link_to_haml.html.haml +1 -1
- data/fixtures/link-to-app/source/link_to_slim.html.slim +1 -1
- data/fixtures/nested-layout-app/source/layouts/inner_haml.haml +1 -1
- data/fixtures/nested-layout-app/source/layouts/inner_slim.slim +1 -1
- data/fixtures/nested-layout-app/source/layouts/outer_haml.haml +1 -1
- data/fixtures/nested-layout-app/source/layouts/outer_slim.slim +1 -1
- data/lib/middleman-core/application.rb +12 -3
- data/lib/middleman-core/cli/build.rb +5 -3
- data/lib/middleman-core/cli/console.rb +1 -1
- data/lib/middleman-core/cli/init.rb +1 -1
- data/lib/middleman-core/core_extensions.rb +0 -1
- data/lib/middleman-core/core_extensions/file_watcher.rb +11 -11
- data/lib/middleman-core/core_extensions/rendering.rb +40 -66
- data/lib/middleman-core/extension.rb +167 -0
- data/lib/middleman-core/extensions.rb +2 -151
- data/lib/middleman-core/logger.rb +2 -2
- data/lib/middleman-core/meta_pages/assets/config.css +13 -0
- data/lib/middleman-core/meta_pages/assets/meta.css +19 -3
- data/lib/middleman-core/meta_pages/assets/sitemap.css +18 -1
- data/lib/middleman-core/meta_pages/config_setting.rb +7 -9
- data/lib/middleman-core/meta_pages/sitemap_resource.rb +24 -15
- data/lib/middleman-core/meta_pages/sitemap_tree.rb +5 -1
- data/lib/middleman-core/meta_pages/templates/config.html.erb +2 -2
- data/lib/middleman-core/meta_pages/templates/index.html.erb +18 -8
- data/lib/middleman-core/meta_pages/templates/sitemap.html.erb +4 -5
- data/lib/middleman-core/preview_server.rb +6 -3
- data/lib/middleman-core/renderers/erb.rb +12 -14
- data/lib/middleman-core/renderers/haml.rb +10 -0
- data/lib/middleman-core/renderers/markdown.rb +5 -1
- data/lib/middleman-core/renderers/sass.rb +0 -4
- data/lib/middleman-core/renderers/slim.rb +16 -3
- data/lib/middleman-core/sitemap/resource.rb +1 -1
- data/lib/middleman-core/step_definitions.rb +2 -1
- data/lib/middleman-core/templates.rb +3 -1
- data/lib/middleman-core/templates/shared/Gemfile.tt +4 -1
- data/lib/middleman-core/templates/shared/config.tt +3 -1
- data/lib/middleman-core/templates/shared/gitignore +2 -1
- data/lib/middleman-core/util.rb +22 -16
- data/lib/middleman-core/version.rb +1 -1
- data/lib/middleman-more/core_extensions/compass.rb +3 -3
- data/lib/middleman-more/core_extensions/default_helpers.rb +18 -15
- data/lib/middleman-more/extensions/asset_hash.rb +1 -0
- data/middleman-core.gemspec +9 -6
- metadata +69 -227
- data/features/sass_cache_path.feature +0 -22
- data/fixtures/sass-cache-path-custom-app/config.rb +0 -3
- data/fixtures/sass-cache-path-custom-app/source/stylesheets/plain.css.sass +0 -4
- data/fixtures/sass-cache-path-default-app/config.rb +0 -3
- data/fixtures/sass-cache-path-default-app/source/stylesheets/plain.css.sass +0 -4
- data/lib/vendored-middleman-deps/hooks-0.2.0/CHANGES.textile +0 -9
- data/lib/vendored-middleman-deps/hooks-0.2.0/Gemfile +0 -3
- data/lib/vendored-middleman-deps/hooks-0.2.0/README.rdoc +0 -107
- data/lib/vendored-middleman-deps/hooks-0.2.0/Rakefile +0 -12
- data/lib/vendored-middleman-deps/hooks-0.2.0/hooks.gemspec +0 -22
- data/lib/vendored-middleman-deps/hooks-0.2.0/lib/hooks.rb +0 -109
- data/lib/vendored-middleman-deps/hooks-0.2.0/lib/hooks/inheritable_attribute.rb +0 -33
- data/lib/vendored-middleman-deps/hooks-0.2.0/test/hooks_test.rb +0 -141
- data/lib/vendored-middleman-deps/hooks-0.2.0/test/inheritable_attribute_test.rb +0 -55
- data/lib/vendored-middleman-deps/hooks-0.2.0/test/test_helper.rb +0 -10
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/.document +0 -5
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/.gitignore +0 -22
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/.yardopts +0 -1
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/LICENSE.txt +0 -20
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/README.rdoc +0 -294
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/Rakefile +0 -5
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/bin/padrino +0 -9
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core.rb +0 -200
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application.rb +0 -297
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/flash.rb +0 -229
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/rendering.rb +0 -317
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/rendering/extensions/erubis.rb +0 -64
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/rendering/extensions/haml.rb +0 -28
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/rendering/extensions/slim.rb +0 -14
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/routing.rb +0 -1077
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/showexceptions.rb +0 -21
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/caller.rb +0 -53
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/cli/adapter.rb +0 -24
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/cli/base.rb +0 -159
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/cli/console.rb +0 -20
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/cli/rake.rb +0 -47
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/cli/rake_tasks.rb +0 -52
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/command.rb +0 -38
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/images/404.png +0 -0
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/images/500.png +0 -0
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/loader.rb +0 -224
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/cs.yml +0 -33
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/da.yml +0 -33
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/de.yml +0 -33
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/en.yml +0 -33
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/es.yml +0 -33
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/fr.yml +0 -33
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/hu.yml +0 -33
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/it.yml +0 -39
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/ja.yml +0 -33
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/lv.yml +0 -33
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/nl.yml +0 -33
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/no.yml +0 -33
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/pl.yml +0 -33
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/pt_br.yml +0 -39
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/ro.yml +0 -33
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/ru.yml +0 -34
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/sv.yml +0 -33
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/tr.yml +0 -33
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/uk.yml +0 -33
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/zh_cn.yml +0 -33
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/zh_tw.yml +0 -33
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/logger.rb +0 -438
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/module.rb +0 -58
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/mounter.rb +0 -234
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/reloader.rb +0 -341
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/router.rb +0 -95
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/server.rb +0 -77
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/support_lite.rb +0 -260
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/tasks.rb +0 -21
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/version.rb +0 -20
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/padrino-core.gemspec +0 -43
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/app_gem/Gemfile +0 -4
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/app_gem/app/app.rb +0 -3
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/app_gem/app_gem.gemspec +0 -17
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/app_gem/lib/app_gem.rb +0 -7
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/app_gem/lib/app_gem/version.rb +0 -3
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/apps/.components +0 -6
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/apps/.gitignore +0 -7
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/apps/complex.rb +0 -32
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/apps/simple.rb +0 -33
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/a.rb +0 -9
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/b.rb +0 -4
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/c.rb +0 -1
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/circular/e.rb +0 -13
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/circular/f.rb +0 -2
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/circular/g.rb +0 -2
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/d.rb +0 -4
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/helper.rb +0 -83
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/mini_shoulda.rb +0 -45
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_application.rb +0 -125
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_core.rb +0 -77
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_csrf_protection.rb +0 -80
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_dependencies.rb +0 -44
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_filters.rb +0 -348
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_flash.rb +0 -168
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_locale.rb +0 -21
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_logger.rb +0 -210
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_mounter.rb +0 -199
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_reloader_complex.rb +0 -75
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_reloader_simple.rb +0 -98
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_rendering.rb +0 -545
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_rendering_extensions.rb +0 -14
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_restful_routing.rb +0 -33
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_router.rb +0 -146
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_routing.rb +0 -1927
- data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_support_lite.rb +0 -56
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/.document +0 -5
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/.gitignore +0 -21
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/.yardopts +0 -1
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/LICENSE.txt +0 -20
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/README.rdoc +0 -239
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/Rakefile +0 -5
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers.rb +0 -57
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/asset_tag_helpers.rb +0 -401
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/breadcrumb_helpers.rb +0 -183
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/form_builder/abstract_form_builder.rb +0 -317
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/form_builder/standard_form_builder.rb +0 -40
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/form_helpers.rb +0 -919
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/format_helpers.rb +0 -372
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/cs.yml +0 -103
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/da.yml +0 -91
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/de.yml +0 -81
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/en.yml +0 -103
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/es.yml +0 -103
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/fr.yml +0 -79
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/hu.yml +0 -103
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/it.yml +0 -89
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/ja.yml +0 -103
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/lv.yml +0 -103
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/nl.yml +0 -82
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/no.yml +0 -91
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/pl.yml +0 -95
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/pt_br.yml +0 -103
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/ro.yml +0 -103
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/ru.yml +0 -103
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/sv.yml +0 -103
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/tr.yml +0 -103
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/uk.yml +0 -103
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/zh_cn.yml +0 -103
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/zh_tw.yml +0 -103
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/number_helpers.rb +0 -283
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/output_helpers.rb +0 -207
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/output_helpers/abstract_handler.rb +0 -96
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/output_helpers/erb_handler.rb +0 -78
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/output_helpers/haml_handler.rb +0 -63
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/output_helpers/slim_handler.rb +0 -78
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/render_helpers.rb +0 -59
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/tag_helpers.rb +0 -292
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/translation_helpers.rb +0 -36
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/padrino-helpers.gemspec +0 -27
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/app.rb +0 -84
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/button_to.erb +0 -8
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/button_to.haml +0 -5
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/button_to.slim +0 -6
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/capture_concat.erb +0 -14
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/capture_concat.haml +0 -12
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/capture_concat.slim +0 -12
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_for.erb +0 -14
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_for.haml +0 -12
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_for.slim +0 -12
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_tag.erb +0 -11
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_tag.haml +0 -9
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_tag.slim +0 -9
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/current_engine.erb +0 -5
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/current_engine.haml +0 -5
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/current_engine.slim +0 -5
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/fields_for.erb +0 -20
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/fields_for.haml +0 -15
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/fields_for.slim +0 -15
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_for.erb +0 -72
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_for.haml +0 -59
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_for.slim +0 -59
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_tag.erb +0 -95
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_tag.haml +0 -78
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_tag.slim +0 -79
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/link_to.erb +0 -5
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/link_to.haml +0 -4
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/link_to.slim +0 -4
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/mail_to.erb +0 -3
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/mail_to.haml +0 -3
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/mail_to.slim +0 -3
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/meta_tag.erb +0 -3
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/meta_tag.haml +0 -3
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/meta_tag.slim +0 -3
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/partials/_erb.erb +0 -1
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/partials/_haml.haml +0 -1
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/partials/_slim.slim +0 -1
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/simple_partial.erb +0 -1
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/simple_partial.haml +0 -1
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/simple_partial.slim +0 -1
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/app.rb +0 -58
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/current_engine.haml +0 -5
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/current_engines/_erb.erb +0 -1
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/current_engines/_haml.haml +0 -1
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/current_engines/_slim.slim +0 -1
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/double_capture_erb.erb +0 -3
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/double_capture_haml.haml +0 -2
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/double_capture_slim.slim +0 -2
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/erb/test.erb +0 -1
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/explicit_engine.haml +0 -5
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/haml/test.haml +0 -1
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/template/_user.haml +0 -7
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/template/haml_template.haml +0 -1
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/template/some_template.haml +0 -2
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/helper.rb +0 -67
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_asset_tag_helpers.rb +0 -359
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_breadcrumb_helpers.rb +0 -134
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_form_builder.rb +0 -1178
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_form_helpers.rb +0 -1030
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_format_helpers.rb +0 -241
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_locale.rb +0 -20
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_number_helpers.rb +0 -143
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_output_helpers.rb +0 -154
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_render_helpers.rb +0 -94
- data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_tag_helpers.rb +0 -117
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
module Padrino
|
|
2
|
-
module Module
|
|
3
|
-
attr_accessor :root
|
|
4
|
-
|
|
5
|
-
##
|
|
6
|
-
# Register this module as being loaded from a gem. This automatically
|
|
7
|
-
# sets the root and therefore the dependency paths correctly.
|
|
8
|
-
#
|
|
9
|
-
# @param [String] name
|
|
10
|
-
# The name of the gem. Has to be the name as stated in the gemspec.
|
|
11
|
-
#
|
|
12
|
-
# @returns the gems root.
|
|
13
|
-
def gem!(name)
|
|
14
|
-
self.root = Padrino.gem(name, self)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
##
|
|
18
|
-
# Helper method for file references within a Padrino module.
|
|
19
|
-
#
|
|
20
|
-
# @param [Array<String>] args
|
|
21
|
-
# The directories to join to {Module.root}.
|
|
22
|
-
#
|
|
23
|
-
# @return [String]
|
|
24
|
-
# The absolute path.
|
|
25
|
-
#
|
|
26
|
-
# @example
|
|
27
|
-
# module MyModule
|
|
28
|
-
# extend Padrino::Module
|
|
29
|
-
# gem! 'my_gem'
|
|
30
|
-
# end
|
|
31
|
-
# Module.root!
|
|
32
|
-
def root(*args)
|
|
33
|
-
File.expand_path(File.join(@root, *args))
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
##
|
|
37
|
-
# Returns the list of path globs to load as dependencies.
|
|
38
|
-
# Appends custom dependency patterns to the be loaded for Padrino.
|
|
39
|
-
#
|
|
40
|
-
# @return [Array<String>]
|
|
41
|
-
# The dependency paths.
|
|
42
|
-
#
|
|
43
|
-
# @example
|
|
44
|
-
# module MyModule
|
|
45
|
-
# extend Padrino::Module
|
|
46
|
-
# gem! 'my_gem'
|
|
47
|
-
# end
|
|
48
|
-
#
|
|
49
|
-
# Module.dependency_paths << "#{MyModule.root}/uploaders/*.rb"
|
|
50
|
-
#
|
|
51
|
-
def dependency_paths
|
|
52
|
-
[
|
|
53
|
-
"#{root}/lib/**/*.rb", "#{root}/shared/lib/**/*.rb",
|
|
54
|
-
"#{root}/models/**/*.rb", "#{root}/shared/models/**/*.rb"
|
|
55
|
-
]
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end
|
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
module Padrino
|
|
2
|
-
##
|
|
3
|
-
# Represents a particular mounted Padrino application.
|
|
4
|
-
# Stores the name of the application (app folder name) and url mount path.
|
|
5
|
-
#
|
|
6
|
-
# @example
|
|
7
|
-
# Mounter.new("blog_app", :app_class => "Blog").to("/blog")
|
|
8
|
-
# Mounter.new("blog_app", :app_file => "/path/to/blog/app.rb").to("/blog")
|
|
9
|
-
#
|
|
10
|
-
class Mounter
|
|
11
|
-
class MounterException < RuntimeError
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
attr_accessor :name, :uri_root, :app_file, :app_class, :app_root, :app_obj, :app_host
|
|
15
|
-
|
|
16
|
-
##
|
|
17
|
-
# @param [String, Padrino::Application] name
|
|
18
|
-
# The app name or the {Padrino::Application} class.
|
|
19
|
-
#
|
|
20
|
-
# @param [Hash] options
|
|
21
|
-
# @option options [Symbol] :app_class (Detected from name)
|
|
22
|
-
# @option options [Symbol] :app_file (Automatically detected)
|
|
23
|
-
# @option options [Symbol] :app_obj (Detected)
|
|
24
|
-
# @option options [Symbol] :app_root (Directory of :app_file)
|
|
25
|
-
# @option options [Symbol] :gem The gem to load the app from (Detected from name)
|
|
26
|
-
#
|
|
27
|
-
def initialize(name, options={})
|
|
28
|
-
@name = name.to_s
|
|
29
|
-
@app_class = options[:app_class] || @name.camelize
|
|
30
|
-
@gem = options[:gem] || @app_class.split("::").first.underscore
|
|
31
|
-
@app_file = options[:app_file] || locate_app_file
|
|
32
|
-
@app_obj = options[:app_obj] || app_constant || locate_app_object
|
|
33
|
-
ensure_app_file! || ensure_app_object!
|
|
34
|
-
@app_root = options[:app_root] || File.dirname(@app_file)
|
|
35
|
-
@uri_root = "/"
|
|
36
|
-
Padrino::Reloader.exclude_constants << @app_class
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
##
|
|
40
|
-
# Registers the mounted application onto Padrino.
|
|
41
|
-
#
|
|
42
|
-
# @param [String] mount_url
|
|
43
|
-
# Path where we mount the app.
|
|
44
|
-
#
|
|
45
|
-
# @example
|
|
46
|
-
# Mounter.new("blog_app").to("/blog")
|
|
47
|
-
#
|
|
48
|
-
def to(mount_url)
|
|
49
|
-
@uri_root = mount_url
|
|
50
|
-
Padrino.insert_mounted_app(self)
|
|
51
|
-
self
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
##
|
|
55
|
-
# Registers the mounted application onto Padrino for the given host.
|
|
56
|
-
#
|
|
57
|
-
# @param [String] mount_host
|
|
58
|
-
# Host name.
|
|
59
|
-
#
|
|
60
|
-
# @example
|
|
61
|
-
# Mounter.new("blog_app").to("/blog").host("blog.padrino.org")
|
|
62
|
-
# Mounter.new("blog_app").host("blog.padrino.org")
|
|
63
|
-
# Mounter.new("catch_all").host(/.*\.padrino.org/)
|
|
64
|
-
#
|
|
65
|
-
def host(mount_host)
|
|
66
|
-
@app_host = mount_host
|
|
67
|
-
Padrino.insert_mounted_app(self)
|
|
68
|
-
self
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
##
|
|
72
|
-
# Maps Padrino application onto a Padrino::Router.
|
|
73
|
-
# For use in constructing a Rack application.
|
|
74
|
-
#
|
|
75
|
-
# @param [Padrino::Router]
|
|
76
|
-
#
|
|
77
|
-
# @return [Padrino::Router]
|
|
78
|
-
#
|
|
79
|
-
# @example
|
|
80
|
-
# @app.map_onto(router)
|
|
81
|
-
#
|
|
82
|
-
def map_onto(router)
|
|
83
|
-
app_data, app_obj = self, @app_obj
|
|
84
|
-
app_obj.set :uri_root, app_data.uri_root
|
|
85
|
-
app_obj.set :app_name, app_data.name
|
|
86
|
-
app_obj.set :app_file, app_data.app_file unless ::File.exist?(app_obj.app_file)
|
|
87
|
-
app_obj.set :root, app_data.app_root unless app_data.app_root.blank?
|
|
88
|
-
app_obj.set :public_folder, Padrino.root('public', app_data.uri_root) unless File.exists?(app_obj.public_folder)
|
|
89
|
-
app_obj.set :static, File.exist?(app_obj.public_folder) if app_obj.nil?
|
|
90
|
-
app_obj.setup_application! # Initializes the app here with above settings.
|
|
91
|
-
router.map(:to => app_obj, :path => app_data.uri_root, :host => app_data.app_host)
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
###
|
|
95
|
-
# Returns the route objects for the mounted application.
|
|
96
|
-
#
|
|
97
|
-
def routes
|
|
98
|
-
app_obj.routes
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
###
|
|
102
|
-
# Returns the basic route information for each named route.
|
|
103
|
-
#
|
|
104
|
-
# @return [Array]
|
|
105
|
-
# Array of routes.
|
|
106
|
-
#
|
|
107
|
-
def named_routes
|
|
108
|
-
app_obj.routes.map { |route|
|
|
109
|
-
name_array = "(#{route.name.to_s.split("_").map { |piece| %Q[:#{piece}] }.join(", ")})"
|
|
110
|
-
request_method = route.request_methods.first
|
|
111
|
-
next if route.name.blank? || request_method == 'HEAD'
|
|
112
|
-
original_path = route.original_path.is_a?(Regexp) ? route.original_path.inspect : route.original_path
|
|
113
|
-
full_path = File.join(uri_root, original_path)
|
|
114
|
-
OpenStruct.new(:verb => request_method, :identifier => route.name, :name => name_array, :path => full_path)
|
|
115
|
-
}.compact
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
##
|
|
119
|
-
# Makes two Mounters equal if they have the same name and uri_root.
|
|
120
|
-
#
|
|
121
|
-
# @param [Padrino::Mounter] other
|
|
122
|
-
#
|
|
123
|
-
def ==(other)
|
|
124
|
-
other.is_a?(Mounter) && self.app_class == other.app_class && self.uri_root == other.uri_root
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
##
|
|
128
|
-
# @return [Padrino::Application]
|
|
129
|
-
# the class object for the app if defined, nil otherwise.
|
|
130
|
-
#
|
|
131
|
-
def app_constant
|
|
132
|
-
klass = Object
|
|
133
|
-
for piece in app_class.split("::")
|
|
134
|
-
piece = piece.to_sym
|
|
135
|
-
if klass.const_defined?(piece)
|
|
136
|
-
klass = klass.const_get(piece)
|
|
137
|
-
else
|
|
138
|
-
return
|
|
139
|
-
end
|
|
140
|
-
end
|
|
141
|
-
klass
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
protected
|
|
145
|
-
##
|
|
146
|
-
# Locates and requires the file to load the app constant.
|
|
147
|
-
#
|
|
148
|
-
def locate_app_object
|
|
149
|
-
@_app_object ||= begin
|
|
150
|
-
ensure_app_file!
|
|
151
|
-
Padrino.require_dependencies(app_file)
|
|
152
|
-
app_constant
|
|
153
|
-
end
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
##
|
|
157
|
-
# Returns the determined location of the mounted application main file.
|
|
158
|
-
#
|
|
159
|
-
def locate_app_file
|
|
160
|
-
candidates = []
|
|
161
|
-
candidates << app_constant.app_file if app_constant.respond_to?(:app_file) && File.exist?(app_constant.app_file.to_s)
|
|
162
|
-
candidates << Padrino.first_caller if File.identical?(Padrino.first_caller.to_s, Padrino.called_from.to_s)
|
|
163
|
-
candidates << Padrino.mounted_root(name.downcase, "app.rb")
|
|
164
|
-
simple_name = name.split("::").last.downcase
|
|
165
|
-
mod_name = name.split("::")[0..-2].join("::")
|
|
166
|
-
Padrino.modules.each do |mod|
|
|
167
|
-
if mod.name == mod_name
|
|
168
|
-
candidates << mod.root(simple_name, "app.rb")
|
|
169
|
-
end
|
|
170
|
-
end
|
|
171
|
-
candidates << Padrino.root("app", "app.rb")
|
|
172
|
-
candidates.find { |candidate| File.exist?(candidate) }
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
###
|
|
176
|
-
# Raises an exception unless app_file is located properly.
|
|
177
|
-
#
|
|
178
|
-
def ensure_app_file!
|
|
179
|
-
message = "Unable to locate source file for app '#{app_class}', try with :app_file => '/path/app.rb'"
|
|
180
|
-
raise MounterException, message unless @app_file
|
|
181
|
-
end
|
|
182
|
-
|
|
183
|
-
###
|
|
184
|
-
# Raises an exception unless app_obj is defined properly.
|
|
185
|
-
#
|
|
186
|
-
def ensure_app_object!
|
|
187
|
-
message = "Unable to locate app for '#{app_class}', try with :app_class => 'MyAppClass'"
|
|
188
|
-
raise MounterException, message unless @app_obj
|
|
189
|
-
end
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
class << self
|
|
193
|
-
attr_writer :mounted_root # Set root directory where padrino searches mounted apps
|
|
194
|
-
|
|
195
|
-
##
|
|
196
|
-
# @param [Array] args
|
|
197
|
-
#
|
|
198
|
-
# @return [String]
|
|
199
|
-
# the root to the mounted apps base directory.
|
|
200
|
-
#
|
|
201
|
-
def mounted_root(*args)
|
|
202
|
-
Padrino.root(@mounted_root ||= "", *args)
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
##
|
|
206
|
-
# @return [Array]
|
|
207
|
-
# the mounted padrino applications (MountedApp objects)
|
|
208
|
-
#
|
|
209
|
-
def mounted_apps
|
|
210
|
-
@mounted_apps ||= []
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
##
|
|
214
|
-
# Inserts a Mounter object into the mounted applications (avoids duplicates).
|
|
215
|
-
#
|
|
216
|
-
# @param [Padrino::Mounter] mounter
|
|
217
|
-
#
|
|
218
|
-
def insert_mounted_app(mounter)
|
|
219
|
-
Padrino.mounted_apps.push(mounter) unless Padrino.mounted_apps.include?(mounter)
|
|
220
|
-
end
|
|
221
|
-
|
|
222
|
-
##
|
|
223
|
-
# Mounts a new sub-application onto Padrino project.
|
|
224
|
-
#
|
|
225
|
-
# @see Padrino::Mounter#new
|
|
226
|
-
#
|
|
227
|
-
# @example
|
|
228
|
-
# Padrino.mount("blog_app").to("/blog")
|
|
229
|
-
#
|
|
230
|
-
def mount(name, options={})
|
|
231
|
-
Mounter.new(name, options)
|
|
232
|
-
end
|
|
233
|
-
end
|
|
234
|
-
end
|
|
@@ -1,341 +0,0 @@
|
|
|
1
|
-
require 'pathname'
|
|
2
|
-
|
|
3
|
-
module Padrino
|
|
4
|
-
##
|
|
5
|
-
# High performance source code reloader middleware
|
|
6
|
-
#
|
|
7
|
-
module Reloader
|
|
8
|
-
##
|
|
9
|
-
# This reloader is suited for use in a many environments because each file
|
|
10
|
-
# will only be checked once and only one system call to stat(2) is made.
|
|
11
|
-
#
|
|
12
|
-
# Please note that this will not reload files in the background, and does so
|
|
13
|
-
# only when explicitly invoked.
|
|
14
|
-
#
|
|
15
|
-
|
|
16
|
-
# The modification times for every file in a project.
|
|
17
|
-
MTIMES = {}
|
|
18
|
-
# The list of files loaded as part of a project.
|
|
19
|
-
LOADED_FILES = {}
|
|
20
|
-
# The list of object constants and classes loaded as part of the project.
|
|
21
|
-
LOADED_CLASSES = {}
|
|
22
|
-
|
|
23
|
-
class << self
|
|
24
|
-
##
|
|
25
|
-
# Specified folders can be excluded from the code reload detection process.
|
|
26
|
-
# Default excluded directories at Padrino.root are: test, spec, features, tmp, config, db and public
|
|
27
|
-
#
|
|
28
|
-
def exclude
|
|
29
|
-
@_exclude ||= %w(test spec tmp features config public db).map { |path| Padrino.root(path) }
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
##
|
|
33
|
-
# Specified constants can be excluded from the code unloading process.
|
|
34
|
-
#
|
|
35
|
-
def exclude_constants
|
|
36
|
-
@_exclude_constants ||= Set.new
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
##
|
|
40
|
-
# Specified constants can be configured to be reloaded on every request.
|
|
41
|
-
# Default included constants are: [none]
|
|
42
|
-
#
|
|
43
|
-
def include_constants
|
|
44
|
-
@_include_constants ||= Set.new
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
##
|
|
48
|
-
# Reload all files with changes detected.
|
|
49
|
-
#
|
|
50
|
-
def reload!
|
|
51
|
-
# Detect changed files
|
|
52
|
-
rotation do |file, mtime|
|
|
53
|
-
# Retrive the last modified time
|
|
54
|
-
new_file = MTIMES[file].nil?
|
|
55
|
-
previous_mtime = MTIMES[file] ||= mtime
|
|
56
|
-
logger.devel "Detected a new file #{file}" if new_file
|
|
57
|
-
# We skip to next file if it is not new and not modified
|
|
58
|
-
next unless new_file || mtime > previous_mtime
|
|
59
|
-
# Now we can reload our file
|
|
60
|
-
apps = mounted_apps_of(file)
|
|
61
|
-
if apps.present?
|
|
62
|
-
apps.each { |app| app.app_obj.reload! }
|
|
63
|
-
else
|
|
64
|
-
safe_load(file, :force => new_file)
|
|
65
|
-
# Reload also apps
|
|
66
|
-
Padrino.mounted_apps.each do |app|
|
|
67
|
-
app.app_obj.reload! if app.app_obj.dependencies.include?(file)
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
##
|
|
74
|
-
# Remove files and classes loaded with stat
|
|
75
|
-
#
|
|
76
|
-
def clear!
|
|
77
|
-
clear_modification_times
|
|
78
|
-
clear_loaded_classes
|
|
79
|
-
clear_loaded_files_and_features
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
##
|
|
83
|
-
# Returns true if any file changes are detected and populates the MTIMES cache
|
|
84
|
-
#
|
|
85
|
-
def changed?
|
|
86
|
-
changed = false
|
|
87
|
-
rotation do |file, mtime|
|
|
88
|
-
new_file = MTIMES[file].nil?
|
|
89
|
-
previous_mtime = MTIMES[file]
|
|
90
|
-
changed = true if new_file || mtime > previous_mtime
|
|
91
|
-
end
|
|
92
|
-
changed
|
|
93
|
-
end
|
|
94
|
-
alias :run! :changed?
|
|
95
|
-
|
|
96
|
-
##
|
|
97
|
-
# We lock dependencies sets to prevent reloading of protected constants
|
|
98
|
-
#
|
|
99
|
-
def lock!
|
|
100
|
-
klasses = ObjectSpace.classes do |klass|
|
|
101
|
-
klass._orig_klass_name.split('::')[0]
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
klasses = klasses | Padrino.mounted_apps.map { |app| app.app_class }
|
|
105
|
-
Padrino::Reloader.exclude_constants.merge(klasses)
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
##
|
|
109
|
-
# A safe Kernel::require which issues the necessary hooks depending on results
|
|
110
|
-
#
|
|
111
|
-
def safe_load(file, options={})
|
|
112
|
-
began_at = Time.now
|
|
113
|
-
force = options[:force]
|
|
114
|
-
file = figure_path(file)
|
|
115
|
-
reload = should_reload?(file)
|
|
116
|
-
m_time = modification_time(file)
|
|
117
|
-
|
|
118
|
-
return if !force && m_time && !reload
|
|
119
|
-
|
|
120
|
-
remove_loaded_file_classes(file)
|
|
121
|
-
remove_loaded_file_features(file)
|
|
122
|
-
|
|
123
|
-
# Duplicate objects and loaded features before load file
|
|
124
|
-
klasses = ObjectSpace.classes
|
|
125
|
-
files = Set.new($LOADED_FEATURES.dup)
|
|
126
|
-
|
|
127
|
-
reload_deps_of_file(file)
|
|
128
|
-
|
|
129
|
-
# And finally load the specified file
|
|
130
|
-
begin
|
|
131
|
-
logger.devel :loading, began_at, file if !reload
|
|
132
|
-
logger.debug :reload, began_at, file if reload
|
|
133
|
-
|
|
134
|
-
$LOADED_FEATURES.delete(file) if files.include?(file)
|
|
135
|
-
Padrino::Utils.silence_output
|
|
136
|
-
loaded = false
|
|
137
|
-
require(file)
|
|
138
|
-
loaded = true
|
|
139
|
-
update_modification_time(file)
|
|
140
|
-
rescue SyntaxError => e
|
|
141
|
-
logger.error "Cannot require #{file} due to a syntax error: #{e.message}"
|
|
142
|
-
ensure
|
|
143
|
-
Padrino::Utils.unsilence_output
|
|
144
|
-
new_constants = ObjectSpace.new_classes(klasses)
|
|
145
|
-
if loaded
|
|
146
|
-
process_loaded_file(:file => file,
|
|
147
|
-
:constants => new_constants,
|
|
148
|
-
:files => files)
|
|
149
|
-
else
|
|
150
|
-
logger.devel "Failed to load #{file}; removing partially defined constants"
|
|
151
|
-
unload_constants(new_constants)
|
|
152
|
-
end
|
|
153
|
-
end
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
##
|
|
157
|
-
# Returns true if the file is defined in our padrino root.
|
|
158
|
-
#
|
|
159
|
-
def figure_path(file)
|
|
160
|
-
return file if Pathname.new(file).absolute?
|
|
161
|
-
$:.each do |path|
|
|
162
|
-
found = File.join(path, file)
|
|
163
|
-
return File.expand_path(found) if File.exist?(found)
|
|
164
|
-
end
|
|
165
|
-
file
|
|
166
|
-
end
|
|
167
|
-
|
|
168
|
-
##
|
|
169
|
-
# Removes the specified class and constant.
|
|
170
|
-
#
|
|
171
|
-
def remove_constant(const)
|
|
172
|
-
return if exclude_constants.any? { |c| const._orig_klass_name.index(c) == 0 } &&
|
|
173
|
-
!include_constants.any? { |c| const._orig_klass_name.index(c) == 0 }
|
|
174
|
-
begin
|
|
175
|
-
parts = const.to_s.sub(/^::(Object)?/, 'Object::').split('::')
|
|
176
|
-
object = parts.pop
|
|
177
|
-
base = parts.empty? ? Object : Inflector.constantize(parts * '::')
|
|
178
|
-
base.send :remove_const, object
|
|
179
|
-
logger.devel "Removed constant: #{const} from #{base}"
|
|
180
|
-
rescue NameError; end
|
|
181
|
-
end
|
|
182
|
-
|
|
183
|
-
private
|
|
184
|
-
|
|
185
|
-
###
|
|
186
|
-
# Clear instance variables that keep track of # loaded features/files/mtimes.
|
|
187
|
-
#
|
|
188
|
-
def clear_modification_times
|
|
189
|
-
MTIMES.clear
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
def clear_loaded_classes
|
|
193
|
-
LOADED_CLASSES.each do |file, klasses|
|
|
194
|
-
klasses.each { |klass| remove_constant(klass) }
|
|
195
|
-
LOADED_CLASSES.delete(file)
|
|
196
|
-
end
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
def clear_loaded_files_and_features
|
|
200
|
-
LOADED_FILES.each do |file, dependencies|
|
|
201
|
-
dependencies.each { |dependency| $LOADED_FEATURES.delete(dependency) }
|
|
202
|
-
$LOADED_FEATURES.delete(file)
|
|
203
|
-
end
|
|
204
|
-
end
|
|
205
|
-
|
|
206
|
-
###
|
|
207
|
-
# Macro for mtime query.
|
|
208
|
-
#
|
|
209
|
-
def modification_time(file)
|
|
210
|
-
MTIMES[file]
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
###
|
|
214
|
-
# Macro for mtime update.
|
|
215
|
-
#
|
|
216
|
-
def update_modification_time(file)
|
|
217
|
-
MTIMES[file] = File.mtime(file)
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
###
|
|
221
|
-
# Tracks loaded file features/classes/constants:
|
|
222
|
-
#
|
|
223
|
-
def process_loaded_file(*args)
|
|
224
|
-
options = args.extract_options!
|
|
225
|
-
new_constants = options[:constants]
|
|
226
|
-
files = options[:files]
|
|
227
|
-
file = options[:file]
|
|
228
|
-
|
|
229
|
-
# Store the file details
|
|
230
|
-
LOADED_CLASSES[file] = new_constants
|
|
231
|
-
LOADED_FILES[file] = Set.new($LOADED_FEATURES) - files - [file]
|
|
232
|
-
|
|
233
|
-
# Track only features in our Padrino.root
|
|
234
|
-
LOADED_FILES[file].delete_if { |feature| !in_root?(feature) }
|
|
235
|
-
end
|
|
236
|
-
|
|
237
|
-
###
|
|
238
|
-
# Unloads all constants in new_constants.
|
|
239
|
-
#
|
|
240
|
-
def unload_constants(new_constants)
|
|
241
|
-
new_constants.each { |klass| remove_constant(klass) }
|
|
242
|
-
end
|
|
243
|
-
|
|
244
|
-
###
|
|
245
|
-
# Safe load dependencies of a file.
|
|
246
|
-
#
|
|
247
|
-
def reload_deps_of_file(file)
|
|
248
|
-
if features = LOADED_FILES.delete(file)
|
|
249
|
-
features.each { |feature| safe_load(feature, :force => true) }
|
|
250
|
-
end
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
##
|
|
254
|
-
# Check if file was changed or if force a reload.
|
|
255
|
-
#
|
|
256
|
-
def should_reload?(file)
|
|
257
|
-
MTIMES[file] && File.mtime(file) > MTIMES[file]
|
|
258
|
-
end
|
|
259
|
-
|
|
260
|
-
##
|
|
261
|
-
# Removes all classes declared in the specified file.
|
|
262
|
-
#
|
|
263
|
-
def remove_loaded_file_classes(file)
|
|
264
|
-
if klasses = LOADED_CLASSES.delete(file)
|
|
265
|
-
klasses.each { |klass| remove_constant(klass) }
|
|
266
|
-
end
|
|
267
|
-
end
|
|
268
|
-
|
|
269
|
-
##
|
|
270
|
-
# Remove all loaded fatures with our file.
|
|
271
|
-
#
|
|
272
|
-
def remove_loaded_file_features(file)
|
|
273
|
-
if features = LOADED_FILES[file]
|
|
274
|
-
features.each { |feature| $LOADED_FEATURES.delete(feature) }
|
|
275
|
-
end
|
|
276
|
-
end
|
|
277
|
-
|
|
278
|
-
##
|
|
279
|
-
# Return the mounted_apps providing the app location.
|
|
280
|
-
# Can be an array because in one app.rb we can define multiple Padrino::Application.
|
|
281
|
-
#
|
|
282
|
-
def mounted_apps_of(file)
|
|
283
|
-
file = figure_path(file)
|
|
284
|
-
Padrino.mounted_apps.find_all { |app| File.identical?(file, app.app_file) }
|
|
285
|
-
end
|
|
286
|
-
|
|
287
|
-
##
|
|
288
|
-
# Returns true if file is in our Padrino.root.
|
|
289
|
-
#
|
|
290
|
-
def in_root?(file)
|
|
291
|
-
# This is better but slow:
|
|
292
|
-
# Pathname.new(Padrino.root).find { |f| File.identical?(Padrino.root(f), figure_path(file)) }
|
|
293
|
-
figure_path(file).index(Padrino.root) == 0
|
|
294
|
-
end
|
|
295
|
-
|
|
296
|
-
##
|
|
297
|
-
# Searches Ruby files in your +Padrino.load_paths+ , Padrino::Application.load_paths
|
|
298
|
-
# and monitors them for any changes.
|
|
299
|
-
#
|
|
300
|
-
def rotation
|
|
301
|
-
files_for_rotation.uniq.map do |file|
|
|
302
|
-
file = File.expand_path(file)
|
|
303
|
-
next if Padrino::Reloader.exclude.any? { |base| file.index(base) == 0 } || !File.exist?(file)
|
|
304
|
-
yield file, File.mtime(file)
|
|
305
|
-
end.compact
|
|
306
|
-
end
|
|
307
|
-
|
|
308
|
-
##
|
|
309
|
-
# Creates an array of paths for use in #rotation.
|
|
310
|
-
#
|
|
311
|
-
def files_for_rotation
|
|
312
|
-
files = Padrino.load_paths.map { |path| Dir["#{path}/**/*.rb"] }.flatten
|
|
313
|
-
files = files | Padrino.mounted_apps.map { |app| app.app_file }
|
|
314
|
-
files = files | Padrino.mounted_apps.map { |app| app.app_obj.dependencies }.flatten
|
|
315
|
-
end
|
|
316
|
-
end # self
|
|
317
|
-
|
|
318
|
-
##
|
|
319
|
-
# This class acts as a Rack middleware to be added to the application stack.
|
|
320
|
-
# This middleware performs a check and reload for source files at the start
|
|
321
|
-
# of each request, but also respects a specified cool down time
|
|
322
|
-
# during which no further action will be taken.
|
|
323
|
-
#
|
|
324
|
-
class Rack
|
|
325
|
-
def initialize(app, cooldown=1)
|
|
326
|
-
@app = app
|
|
327
|
-
@cooldown = cooldown
|
|
328
|
-
@last = (Time.now - cooldown)
|
|
329
|
-
end
|
|
330
|
-
|
|
331
|
-
# Invoked in order to perform the reload as part of the request stack.
|
|
332
|
-
def call(env)
|
|
333
|
-
if @cooldown && Time.now > @last + @cooldown
|
|
334
|
-
Thread.list.size > 1 ? Thread.exclusive { Padrino.reload! } : Padrino.reload!
|
|
335
|
-
@last = Time.now
|
|
336
|
-
end
|
|
337
|
-
@app.call(env)
|
|
338
|
-
end
|
|
339
|
-
end
|
|
340
|
-
end
|
|
341
|
-
end
|