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