middleman-core 3.2.2 → 3.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (273) hide show
  1. checksums.yaml +4 -4
  2. data/features/cli_init.feature +18 -8
  3. data/features/helpers_select_tag.feature +1 -1
  4. data/features/layouts_dir.feature +8 -0
  5. data/features/markdown_redcarpet.feature +2 -2
  6. data/fixtures/asciidoc-app/source/layouts/default.erb +0 -1
  7. data/fixtures/capture-html-app/source/capture_html_haml.html.haml +1 -1
  8. data/fixtures/content-for-app/source/content_for_haml.html.haml +1 -1
  9. data/fixtures/frontmatter-settings-app/source/layouts/override.erb +1 -2
  10. data/fixtures/frontmatter-settings-neighbor-app/source/layouts/override.erb +1 -2
  11. data/fixtures/layouts-dir-app/source/ambiguous.html.erb +5 -0
  12. data/fixtures/layouts-dir-app/source/layouts/other.erb +3 -0
  13. data/fixtures/layouts-dir-app/source/other.erb +3 -0
  14. data/fixtures/link-to-app/source/link_to_haml.html.haml +1 -1
  15. data/fixtures/link-to-app/source/link_to_slim.html.slim +1 -1
  16. data/fixtures/nested-layout-app/source/layouts/inner_haml.haml +1 -1
  17. data/fixtures/nested-layout-app/source/layouts/inner_slim.slim +1 -1
  18. data/fixtures/nested-layout-app/source/layouts/outer_haml.haml +1 -1
  19. data/fixtures/nested-layout-app/source/layouts/outer_slim.slim +1 -1
  20. data/lib/middleman-core/application.rb +12 -3
  21. data/lib/middleman-core/cli/build.rb +5 -3
  22. data/lib/middleman-core/cli/console.rb +1 -1
  23. data/lib/middleman-core/cli/init.rb +1 -1
  24. data/lib/middleman-core/core_extensions.rb +0 -1
  25. data/lib/middleman-core/core_extensions/file_watcher.rb +11 -11
  26. data/lib/middleman-core/core_extensions/rendering.rb +40 -66
  27. data/lib/middleman-core/extension.rb +167 -0
  28. data/lib/middleman-core/extensions.rb +2 -151
  29. data/lib/middleman-core/logger.rb +2 -2
  30. data/lib/middleman-core/meta_pages/assets/config.css +13 -0
  31. data/lib/middleman-core/meta_pages/assets/meta.css +19 -3
  32. data/lib/middleman-core/meta_pages/assets/sitemap.css +18 -1
  33. data/lib/middleman-core/meta_pages/config_setting.rb +7 -9
  34. data/lib/middleman-core/meta_pages/sitemap_resource.rb +24 -15
  35. data/lib/middleman-core/meta_pages/sitemap_tree.rb +5 -1
  36. data/lib/middleman-core/meta_pages/templates/config.html.erb +2 -2
  37. data/lib/middleman-core/meta_pages/templates/index.html.erb +18 -8
  38. data/lib/middleman-core/meta_pages/templates/sitemap.html.erb +4 -5
  39. data/lib/middleman-core/preview_server.rb +6 -3
  40. data/lib/middleman-core/renderers/erb.rb +12 -14
  41. data/lib/middleman-core/renderers/haml.rb +10 -0
  42. data/lib/middleman-core/renderers/markdown.rb +5 -1
  43. data/lib/middleman-core/renderers/sass.rb +0 -4
  44. data/lib/middleman-core/renderers/slim.rb +16 -3
  45. data/lib/middleman-core/sitemap/resource.rb +1 -1
  46. data/lib/middleman-core/step_definitions.rb +2 -1
  47. data/lib/middleman-core/templates.rb +3 -1
  48. data/lib/middleman-core/templates/shared/Gemfile.tt +4 -1
  49. data/lib/middleman-core/templates/shared/config.tt +3 -1
  50. data/lib/middleman-core/templates/shared/gitignore +2 -1
  51. data/lib/middleman-core/util.rb +22 -16
  52. data/lib/middleman-core/version.rb +1 -1
  53. data/lib/middleman-more/core_extensions/compass.rb +3 -3
  54. data/lib/middleman-more/core_extensions/default_helpers.rb +18 -15
  55. data/lib/middleman-more/extensions/asset_hash.rb +1 -0
  56. data/middleman-core.gemspec +9 -6
  57. metadata +69 -227
  58. data/features/sass_cache_path.feature +0 -22
  59. data/fixtures/sass-cache-path-custom-app/config.rb +0 -3
  60. data/fixtures/sass-cache-path-custom-app/source/stylesheets/plain.css.sass +0 -4
  61. data/fixtures/sass-cache-path-default-app/config.rb +0 -3
  62. data/fixtures/sass-cache-path-default-app/source/stylesheets/plain.css.sass +0 -4
  63. data/lib/vendored-middleman-deps/hooks-0.2.0/CHANGES.textile +0 -9
  64. data/lib/vendored-middleman-deps/hooks-0.2.0/Gemfile +0 -3
  65. data/lib/vendored-middleman-deps/hooks-0.2.0/README.rdoc +0 -107
  66. data/lib/vendored-middleman-deps/hooks-0.2.0/Rakefile +0 -12
  67. data/lib/vendored-middleman-deps/hooks-0.2.0/hooks.gemspec +0 -22
  68. data/lib/vendored-middleman-deps/hooks-0.2.0/lib/hooks.rb +0 -109
  69. data/lib/vendored-middleman-deps/hooks-0.2.0/lib/hooks/inheritable_attribute.rb +0 -33
  70. data/lib/vendored-middleman-deps/hooks-0.2.0/test/hooks_test.rb +0 -141
  71. data/lib/vendored-middleman-deps/hooks-0.2.0/test/inheritable_attribute_test.rb +0 -55
  72. data/lib/vendored-middleman-deps/hooks-0.2.0/test/test_helper.rb +0 -10
  73. data/lib/vendored-middleman-deps/padrino-core-0.11.4/.document +0 -5
  74. data/lib/vendored-middleman-deps/padrino-core-0.11.4/.gitignore +0 -22
  75. data/lib/vendored-middleman-deps/padrino-core-0.11.4/.yardopts +0 -1
  76. data/lib/vendored-middleman-deps/padrino-core-0.11.4/LICENSE.txt +0 -20
  77. data/lib/vendored-middleman-deps/padrino-core-0.11.4/README.rdoc +0 -294
  78. data/lib/vendored-middleman-deps/padrino-core-0.11.4/Rakefile +0 -5
  79. data/lib/vendored-middleman-deps/padrino-core-0.11.4/bin/padrino +0 -9
  80. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core.rb +0 -200
  81. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application.rb +0 -297
  82. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/flash.rb +0 -229
  83. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/rendering.rb +0 -317
  84. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/rendering/extensions/erubis.rb +0 -64
  85. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/rendering/extensions/haml.rb +0 -28
  86. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/rendering/extensions/slim.rb +0 -14
  87. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/routing.rb +0 -1077
  88. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/showexceptions.rb +0 -21
  89. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/caller.rb +0 -53
  90. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/cli/adapter.rb +0 -24
  91. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/cli/base.rb +0 -159
  92. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/cli/console.rb +0 -20
  93. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/cli/rake.rb +0 -47
  94. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/cli/rake_tasks.rb +0 -52
  95. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/command.rb +0 -38
  96. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/images/404.png +0 -0
  97. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/images/500.png +0 -0
  98. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/loader.rb +0 -224
  99. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/cs.yml +0 -33
  100. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/da.yml +0 -33
  101. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/de.yml +0 -33
  102. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/en.yml +0 -33
  103. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/es.yml +0 -33
  104. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/fr.yml +0 -33
  105. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/hu.yml +0 -33
  106. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/it.yml +0 -39
  107. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/ja.yml +0 -33
  108. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/lv.yml +0 -33
  109. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/nl.yml +0 -33
  110. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/no.yml +0 -33
  111. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/pl.yml +0 -33
  112. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/pt_br.yml +0 -39
  113. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/ro.yml +0 -33
  114. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/ru.yml +0 -34
  115. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/sv.yml +0 -33
  116. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/tr.yml +0 -33
  117. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/uk.yml +0 -33
  118. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/zh_cn.yml +0 -33
  119. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/zh_tw.yml +0 -33
  120. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/logger.rb +0 -438
  121. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/module.rb +0 -58
  122. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/mounter.rb +0 -234
  123. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/reloader.rb +0 -341
  124. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/router.rb +0 -95
  125. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/server.rb +0 -77
  126. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/support_lite.rb +0 -260
  127. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/tasks.rb +0 -21
  128. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/version.rb +0 -20
  129. data/lib/vendored-middleman-deps/padrino-core-0.11.4/padrino-core.gemspec +0 -43
  130. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/app_gem/Gemfile +0 -4
  131. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/app_gem/app/app.rb +0 -3
  132. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/app_gem/app_gem.gemspec +0 -17
  133. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/app_gem/lib/app_gem.rb +0 -7
  134. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/app_gem/lib/app_gem/version.rb +0 -3
  135. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/apps/.components +0 -6
  136. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/apps/.gitignore +0 -7
  137. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/apps/complex.rb +0 -32
  138. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/apps/simple.rb +0 -33
  139. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/a.rb +0 -9
  140. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/b.rb +0 -4
  141. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/c.rb +0 -1
  142. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/circular/e.rb +0 -13
  143. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/circular/f.rb +0 -2
  144. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/circular/g.rb +0 -2
  145. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/d.rb +0 -4
  146. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/helper.rb +0 -83
  147. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/mini_shoulda.rb +0 -45
  148. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_application.rb +0 -125
  149. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_core.rb +0 -77
  150. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_csrf_protection.rb +0 -80
  151. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_dependencies.rb +0 -44
  152. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_filters.rb +0 -348
  153. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_flash.rb +0 -168
  154. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_locale.rb +0 -21
  155. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_logger.rb +0 -210
  156. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_mounter.rb +0 -199
  157. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_reloader_complex.rb +0 -75
  158. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_reloader_simple.rb +0 -98
  159. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_rendering.rb +0 -545
  160. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_rendering_extensions.rb +0 -14
  161. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_restful_routing.rb +0 -33
  162. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_router.rb +0 -146
  163. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_routing.rb +0 -1927
  164. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_support_lite.rb +0 -56
  165. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/.document +0 -5
  166. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/.gitignore +0 -21
  167. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/.yardopts +0 -1
  168. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/LICENSE.txt +0 -20
  169. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/README.rdoc +0 -239
  170. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/Rakefile +0 -5
  171. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers.rb +0 -57
  172. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/asset_tag_helpers.rb +0 -401
  173. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/breadcrumb_helpers.rb +0 -183
  174. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/form_builder/abstract_form_builder.rb +0 -317
  175. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/form_builder/standard_form_builder.rb +0 -40
  176. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/form_helpers.rb +0 -919
  177. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/format_helpers.rb +0 -372
  178. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/cs.yml +0 -103
  179. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/da.yml +0 -91
  180. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/de.yml +0 -81
  181. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/en.yml +0 -103
  182. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/es.yml +0 -103
  183. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/fr.yml +0 -79
  184. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/hu.yml +0 -103
  185. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/it.yml +0 -89
  186. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/ja.yml +0 -103
  187. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/lv.yml +0 -103
  188. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/nl.yml +0 -82
  189. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/no.yml +0 -91
  190. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/pl.yml +0 -95
  191. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/pt_br.yml +0 -103
  192. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/ro.yml +0 -103
  193. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/ru.yml +0 -103
  194. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/sv.yml +0 -103
  195. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/tr.yml +0 -103
  196. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/uk.yml +0 -103
  197. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/zh_cn.yml +0 -103
  198. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/zh_tw.yml +0 -103
  199. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/number_helpers.rb +0 -283
  200. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/output_helpers.rb +0 -207
  201. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/output_helpers/abstract_handler.rb +0 -96
  202. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/output_helpers/erb_handler.rb +0 -78
  203. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/output_helpers/haml_handler.rb +0 -63
  204. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/output_helpers/slim_handler.rb +0 -78
  205. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/render_helpers.rb +0 -59
  206. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/tag_helpers.rb +0 -292
  207. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/translation_helpers.rb +0 -36
  208. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/padrino-helpers.gemspec +0 -27
  209. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/app.rb +0 -84
  210. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/button_to.erb +0 -8
  211. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/button_to.haml +0 -5
  212. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/button_to.slim +0 -6
  213. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/capture_concat.erb +0 -14
  214. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/capture_concat.haml +0 -12
  215. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/capture_concat.slim +0 -12
  216. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_for.erb +0 -14
  217. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_for.haml +0 -12
  218. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_for.slim +0 -12
  219. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_tag.erb +0 -11
  220. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_tag.haml +0 -9
  221. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_tag.slim +0 -9
  222. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/current_engine.erb +0 -5
  223. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/current_engine.haml +0 -5
  224. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/current_engine.slim +0 -5
  225. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/fields_for.erb +0 -20
  226. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/fields_for.haml +0 -15
  227. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/fields_for.slim +0 -15
  228. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_for.erb +0 -72
  229. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_for.haml +0 -59
  230. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_for.slim +0 -59
  231. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_tag.erb +0 -95
  232. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_tag.haml +0 -78
  233. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_tag.slim +0 -79
  234. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/link_to.erb +0 -5
  235. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/link_to.haml +0 -4
  236. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/link_to.slim +0 -4
  237. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/mail_to.erb +0 -3
  238. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/mail_to.haml +0 -3
  239. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/mail_to.slim +0 -3
  240. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/meta_tag.erb +0 -3
  241. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/meta_tag.haml +0 -3
  242. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/meta_tag.slim +0 -3
  243. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/partials/_erb.erb +0 -1
  244. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/partials/_haml.haml +0 -1
  245. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/partials/_slim.slim +0 -1
  246. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/simple_partial.erb +0 -1
  247. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/simple_partial.haml +0 -1
  248. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/simple_partial.slim +0 -1
  249. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/app.rb +0 -58
  250. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/current_engine.haml +0 -5
  251. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/current_engines/_erb.erb +0 -1
  252. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/current_engines/_haml.haml +0 -1
  253. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/current_engines/_slim.slim +0 -1
  254. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/double_capture_erb.erb +0 -3
  255. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/double_capture_haml.haml +0 -2
  256. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/double_capture_slim.slim +0 -2
  257. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/erb/test.erb +0 -1
  258. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/explicit_engine.haml +0 -5
  259. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/haml/test.haml +0 -1
  260. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/template/_user.haml +0 -7
  261. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/template/haml_template.haml +0 -1
  262. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/template/some_template.haml +0 -2
  263. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/helper.rb +0 -67
  264. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_asset_tag_helpers.rb +0 -359
  265. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_breadcrumb_helpers.rb +0 -134
  266. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_form_builder.rb +0 -1178
  267. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_form_helpers.rb +0 -1030
  268. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_format_helpers.rb +0 -241
  269. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_locale.rb +0 -20
  270. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_number_helpers.rb +0 -143
  271. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_output_helpers.rb +0 -154
  272. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_render_helpers.rb +0 -94
  273. 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