middleman-core 3.1.0.rc.1 → 3.1.0.rc.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (281) hide show
  1. checksums.yaml +4 -4
  2. data/.simplecov +6 -0
  3. data/features/clean_build.feature +20 -3
  4. data/features/custom-source.feature +7 -0
  5. data/features/data.feature +27 -1
  6. data/features/front-matter-neighbor.feature +2 -2
  7. data/features/front-matter.feature +3 -3
  8. data/features/i18n_builder.feature +5 -1
  9. data/features/i18n_preview.feature +18 -0
  10. data/features/layouts_dir.feature +30 -0
  11. data/features/minify_javascript.feature +3 -3
  12. data/features/support/env.rb +6 -0
  13. data/fixtures/basic-data-app/source/data.html.erb +5 -1
  14. data/fixtures/basic-data-app/source/data3.html.erb +5 -1
  15. data/fixtures/chained-app/source/index.html.str.erb +1 -1
  16. data/fixtures/clean-nested-app/config.rb +1 -3
  17. data/fixtures/clean-nested-app/source/nested/nested.html +1 -0
  18. data/fixtures/custom-src-app/config.rb +1 -0
  19. data/fixtures/custom-src-app/src/index.html +0 -0
  20. data/fixtures/custom-src-app/src/layouts/layout.html.erb +1 -0
  21. data/fixtures/frontmatter-app/source/front-matter-2.php.erb +2 -2
  22. data/fixtures/frontmatter-app/source/front-matter-auto.erb +1 -1
  23. data/fixtures/frontmatter-app/source/front-matter-change.html.erb +1 -1
  24. data/fixtures/frontmatter-app/source/front-matter-encoding.html.erb +1 -1
  25. data/fixtures/frontmatter-app/source/front-matter-line-2.html.erb +1 -1
  26. data/fixtures/frontmatter-app/source/json-front-matter-2.php.erb +2 -2
  27. data/fixtures/frontmatter-app/source/json-front-matter-auto.erb +1 -1
  28. data/fixtures/frontmatter-app/source/json-front-matter-encoding.html.erb +1 -1
  29. data/fixtures/frontmatter-app/source/json-front-matter-line-2.html.erb +1 -1
  30. data/fixtures/frontmatter-app/source/json-front-matter.html.erb +1 -1
  31. data/fixtures/frontmatter-app/source/raw-front-matter.html +1 -1
  32. data/fixtures/frontmatter-neighbor-app/source/front-matter-2.php.erb +2 -2
  33. data/fixtures/frontmatter-neighbor-app/source/front-matter-auto.erb +1 -1
  34. data/fixtures/frontmatter-neighbor-app/source/front-matter-change.html.erb +1 -1
  35. data/fixtures/frontmatter-neighbor-app/source/front-matter-encoding.html.erb +1 -1
  36. data/fixtures/frontmatter-neighbor-app/source/json-front-matter-2.php.erb +2 -2
  37. data/fixtures/frontmatter-neighbor-app/source/json-front-matter-auto.erb +1 -1
  38. data/fixtures/frontmatter-neighbor-app/source/json-front-matter.html.erb +1 -1
  39. data/fixtures/frontmatter-neighbor-app/source/raw-front-matter.html +1 -1
  40. data/fixtures/i18n-nested-app/locales/en/more.yml +3 -0
  41. data/fixtures/i18n-nested-app/locales/en.yml +4 -0
  42. data/fixtures/i18n-nested-app/locales/es/mucho.yml +3 -0
  43. data/fixtures/i18n-nested-app/locales/es.yml +4 -0
  44. data/fixtures/i18n-nested-app/source/localizable/index.html.erb +3 -0
  45. data/fixtures/i18n-test-app/locales/es.yml +1 -0
  46. data/fixtures/i18n-test-app/source/one.en.md +1 -0
  47. data/fixtures/i18n-test-app/source/one.es.md +1 -0
  48. data/fixtures/layouts-dir-app/source/index.html.erb +2 -0
  49. data/fixtures/layouts-dir-app/source/layouts/layout.erb +3 -0
  50. data/fixtures/layouts-dir-app/source/layouts2/layout.erb +3 -0
  51. data/fixtures/layouts-dir-app/source/nested/layouts2/layout.erb +3 -0
  52. data/fixtures/nested-data-app/data/examples/deeper/stuff.yml +1 -0
  53. data/fixtures/nested-data-app/data/examples/more.yml +1 -0
  54. data/fixtures/nested-data-app/source/test.html.erb +3 -1
  55. data/fixtures/nested-layout-app/source/layouts/master.erb +2 -2
  56. data/fixtures/nested-layout-app/source/layouts/master_haml.haml +2 -2
  57. data/fixtures/nested-layout-app/source/layouts/master_slim.slim +2 -2
  58. data/lib/middleman-core/application.rb +20 -3
  59. data/lib/middleman-core/cli/build.rb +5 -8
  60. data/lib/middleman-core/configuration.rb +1 -1
  61. data/lib/middleman-core/core_extensions/extensions.rb +26 -9
  62. data/lib/middleman-core/core_extensions/file_watcher.rb +9 -1
  63. data/lib/middleman-core/core_extensions/front_matter.rb +145 -173
  64. data/lib/middleman-core/core_extensions/rendering.rb +4 -4
  65. data/lib/middleman-core/core_extensions.rb +63 -0
  66. data/lib/middleman-core/extensions.rb +61 -7
  67. data/lib/middleman-core/renderers/redcarpet.rb +2 -15
  68. data/lib/middleman-core/sitemap/extensions/ignores.rb +4 -1
  69. data/lib/middleman-core/sitemap/extensions/on_disk.rb +5 -1
  70. data/lib/middleman-core/sitemap/store.rb +10 -2
  71. data/lib/middleman-core/sitemap.rb +4 -4
  72. data/lib/middleman-core/templates/empty/Gemfile.tt +3 -0
  73. data/lib/middleman-core/templates/empty.rb +23 -0
  74. data/lib/middleman-core/templates/shared/Gemfile.tt +0 -2
  75. data/lib/middleman-core/templates.rb +13 -1
  76. data/lib/middleman-core/util.rb +0 -57
  77. data/lib/middleman-core/version.rb +1 -1
  78. data/lib/middleman-core.rb +0 -1
  79. data/lib/middleman-more/core_extensions/compass.rb +3 -3
  80. data/lib/middleman-more/core_extensions/default_helpers.rb +2 -1
  81. data/lib/middleman-more/core_extensions/i18n.rb +79 -57
  82. data/lib/middleman-more/extensions/asset_hash.rb +43 -30
  83. data/lib/middleman-more/extensions/automatic_image_sizes.rb +1 -1
  84. data/lib/middleman-more/extensions/directory_indexes.rb +1 -1
  85. data/lib/middleman-more/extensions/gzip.rb +17 -19
  86. data/lib/middleman-more/extensions/minify_css.rb +16 -16
  87. data/lib/middleman-more/extensions/minify_javascript.rb +26 -20
  88. data/lib/{middleman-more/extensions/automatic_image_sizes → vendored-middleman-deps}/fastimage.rb +0 -0
  89. data/lib/{middleman-core/vendor → vendored-middleman-deps}/hooks-0.2.0/CHANGES.textile +0 -0
  90. data/lib/{middleman-core/vendor → vendored-middleman-deps}/hooks-0.2.0/Gemfile +0 -0
  91. data/lib/{middleman-core/vendor → vendored-middleman-deps}/hooks-0.2.0/README.rdoc +0 -0
  92. data/lib/{middleman-core/vendor → vendored-middleman-deps}/hooks-0.2.0/Rakefile +0 -0
  93. data/lib/{middleman-core/vendor → vendored-middleman-deps}/hooks-0.2.0/hooks.gemspec +0 -0
  94. data/lib/{middleman-core/vendor → vendored-middleman-deps}/hooks-0.2.0/lib/hooks/inheritable_attribute.rb +0 -0
  95. data/lib/{middleman-core/vendor → vendored-middleman-deps}/hooks-0.2.0/lib/hooks.rb +0 -0
  96. data/lib/{middleman-core/vendor → vendored-middleman-deps}/hooks-0.2.0/test/hooks_test.rb +0 -0
  97. data/lib/{middleman-core/vendor → vendored-middleman-deps}/hooks-0.2.0/test/inheritable_attribute_test.rb +0 -0
  98. data/lib/{middleman-core/vendor → vendored-middleman-deps}/hooks-0.2.0/test/test_helper.rb +0 -0
  99. data/lib/vendored-middleman-deps/padrino-core-0.10.7/.document +5 -0
  100. data/lib/vendored-middleman-deps/padrino-core-0.10.7/.gitignore +22 -0
  101. data/lib/vendored-middleman-deps/padrino-core-0.10.7/.yardopts +1 -0
  102. data/lib/vendored-middleman-deps/padrino-core-0.10.7/LICENSE.txt +20 -0
  103. data/lib/vendored-middleman-deps/padrino-core-0.10.7/README.rdoc +294 -0
  104. data/lib/vendored-middleman-deps/padrino-core-0.10.7/Rakefile +5 -0
  105. data/lib/vendored-middleman-deps/padrino-core-0.10.7/bin/padrino +9 -0
  106. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/application/rendering.rb +292 -0
  107. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/application/routing.rb +943 -0
  108. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/application/showexceptions.rb +20 -0
  109. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/application.rb +269 -0
  110. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/caller.rb +53 -0
  111. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/cli/adapter.rb +24 -0
  112. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/cli/base.rb +155 -0
  113. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/cli/console.rb +20 -0
  114. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/cli/rake.rb +25 -0
  115. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/cli/rake_tasks.rb +59 -0
  116. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/command.rb +38 -0
  117. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/images/404.png +0 -0
  118. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/images/500.png +0 -0
  119. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/loader.rb +211 -0
  120. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/cs.yml +34 -0
  121. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/da.yml +34 -0
  122. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/de.yml +34 -0
  123. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/en.yml +34 -0
  124. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/es.yml +34 -0
  125. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/fr.yml +34 -0
  126. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/hu.yml +34 -0
  127. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/it.yml +40 -0
  128. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/ja.yml +34 -0
  129. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/lv.yml +34 -0
  130. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/nl.yml +34 -0
  131. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/no.yml +35 -0
  132. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/pl.yml +34 -0
  133. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/pt_br.yml +40 -0
  134. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/ro.yml +34 -0
  135. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/ru.yml +35 -0
  136. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/sv.yml +34 -0
  137. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/tr.yml +34 -0
  138. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/uk.yml +34 -0
  139. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/zh_cn.yml +34 -0
  140. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/zh_tw.yml +34 -0
  141. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/logger.rb +428 -0
  142. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/mounter.rb +224 -0
  143. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/reloader.rb +254 -0
  144. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/router.rb +98 -0
  145. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/server.rb +79 -0
  146. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/support_lite.rb +207 -0
  147. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/tasks.rb +21 -0
  148. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/version.rb +20 -0
  149. data/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core.rb +152 -0
  150. data/lib/vendored-middleman-deps/padrino-core-0.10.7/padrino-core.gemspec +38 -0
  151. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/apps/.components +6 -0
  152. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/apps/.gitignore +7 -0
  153. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/apps/complex.rb +32 -0
  154. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/apps/simple.rb +33 -0
  155. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/dependencies/a.rb +9 -0
  156. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/dependencies/b.rb +4 -0
  157. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/dependencies/c.rb +1 -0
  158. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/dependencies/circular/e.rb +13 -0
  159. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/dependencies/circular/f.rb +2 -0
  160. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/dependencies/circular/g.rb +2 -0
  161. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/dependencies/d.rb +4 -0
  162. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/helper.rb +83 -0
  163. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/mini_shoulda.rb +45 -0
  164. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_application.rb +108 -0
  165. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_core.rb +77 -0
  166. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_dependencies.rb +44 -0
  167. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_filters.rb +278 -0
  168. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_locale.rb +21 -0
  169. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_logger.rb +154 -0
  170. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_mounter.rb +177 -0
  171. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_reloader_complex.rb +75 -0
  172. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_reloader_simple.rb +98 -0
  173. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_rendering.rb +461 -0
  174. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_restful_routing.rb +33 -0
  175. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_router.rb +146 -0
  176. data/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_routing.rb +1695 -0
  177. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/.document +5 -0
  178. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/.gitignore +21 -0
  179. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/.yardopts +1 -0
  180. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/LICENSE.txt +20 -0
  181. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/README.rdoc +239 -0
  182. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/Rakefile +5 -0
  183. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/asset_tag_helpers.rb +417 -0
  184. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/form_builder/abstract_form_builder.rb +251 -0
  185. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/form_builder/standard_form_builder.rb +43 -0
  186. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/form_helpers.rb +787 -0
  187. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/format_helpers.rb +381 -0
  188. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/cs.yml +103 -0
  189. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/da.yml +91 -0
  190. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/de.yml +81 -0
  191. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/en.yml +103 -0
  192. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/es.yml +103 -0
  193. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/fr.yml +80 -0
  194. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/hu.yml +103 -0
  195. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/it.yml +89 -0
  196. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/ja.yml +103 -0
  197. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/lv.yml +103 -0
  198. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/nl.yml +82 -0
  199. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/no.yml +91 -0
  200. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/pl.yml +95 -0
  201. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/pt_br.yml +103 -0
  202. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/ro.yml +103 -0
  203. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/ru.yml +103 -0
  204. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/sv.yml +103 -0
  205. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/tr.yml +103 -0
  206. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/uk.yml +103 -0
  207. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/zh_cn.yml +104 -0
  208. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/zh_tw.yml +103 -0
  209. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/number_helpers.rb +288 -0
  210. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/output_helpers/abstract_handler.rb +98 -0
  211. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/output_helpers/erb_handler.rb +79 -0
  212. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/output_helpers/haml_handler.rb +63 -0
  213. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/output_helpers/slim_handler.rb +81 -0
  214. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/output_helpers.rb +175 -0
  215. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/render_helpers.rb +60 -0
  216. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/tag_helpers.rb +260 -0
  217. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/translation_helpers.rb +38 -0
  218. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers.rb +59 -0
  219. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/padrino-helpers.gemspec +27 -0
  220. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/app.rb +73 -0
  221. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/capture_concat.erb +14 -0
  222. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/capture_concat.haml +12 -0
  223. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/capture_concat.slim +13 -0
  224. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/content_for.erb +14 -0
  225. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/content_for.haml +12 -0
  226. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/content_for.slim +12 -0
  227. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/content_tag.erb +11 -0
  228. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/content_tag.haml +9 -0
  229. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/content_tag.slim +9 -0
  230. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/current_engine.erb +5 -0
  231. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/current_engine.haml +5 -0
  232. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/current_engine.slim +5 -0
  233. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/fields_for.erb +20 -0
  234. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/fields_for.haml +15 -0
  235. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/fields_for.slim +15 -0
  236. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/form_for.erb +72 -0
  237. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/form_for.haml +59 -0
  238. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/form_for.slim +59 -0
  239. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/form_tag.erb +86 -0
  240. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/form_tag.haml +70 -0
  241. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/form_tag.slim +70 -0
  242. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/link_to.erb +5 -0
  243. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/link_to.haml +4 -0
  244. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/link_to.slim +4 -0
  245. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/mail_to.erb +3 -0
  246. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/mail_to.haml +3 -0
  247. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/mail_to.slim +3 -0
  248. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/meta_tag.erb +3 -0
  249. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/meta_tag.haml +3 -0
  250. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/meta_tag.slim +3 -0
  251. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/partials/_erb.erb +1 -0
  252. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/partials/_haml.haml +1 -0
  253. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/partials/_slim.slim +1 -0
  254. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/simple_partial.erb +1 -0
  255. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/simple_partial.haml +1 -0
  256. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/simple_partial.slim +1 -0
  257. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/app.rb +50 -0
  258. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/current_engine.haml +5 -0
  259. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/current_engines/_erb.erb +1 -0
  260. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/current_engines/_haml.haml +1 -0
  261. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/current_engines/_slim.slim +1 -0
  262. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/erb/test.erb +1 -0
  263. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/explicit_engine.haml +5 -0
  264. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/haml/test.haml +1 -0
  265. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/template/_user.haml +7 -0
  266. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/template/haml_template.haml +1 -0
  267. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/template/some_template.haml +2 -0
  268. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/helper.rb +66 -0
  269. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_asset_tag_helpers.rb +334 -0
  270. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_form_builder.rb +1106 -0
  271. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_form_helpers.rb +776 -0
  272. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_format_helpers.rb +227 -0
  273. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_locale.rb +20 -0
  274. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_number_helpers.rb +139 -0
  275. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_output_helpers.rb +152 -0
  276. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_render_helpers.rb +76 -0
  277. data/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_tag_helpers.rb +106 -0
  278. data/middleman-core.gemspec +2 -2
  279. data/spec/spec_helper.rb +5 -0
  280. metadata +243 -18
  281. data/lib/middleman-more.rb +0 -102
@@ -38,6 +38,7 @@ module Middleman
38
38
  # @private
39
39
  def registered(app)
40
40
  app.define_hook :initialized
41
+ app.define_hook :instance_available
41
42
  app.define_hook :after_configuration
42
43
  app.define_hook :before_configuration
43
44
  app.define_hook :build_config
@@ -69,15 +70,19 @@ module Middleman
69
70
  # @param [Hash] options Per-extension options hash
70
71
  # @return [void]
71
72
  def register(extension, options={}, &block)
72
- extend extension
73
- if extension.respond_to?(:registered)
74
- if extension.method(:registered).arity === 1
75
- extension.registered(self, &block)
76
- else
77
- extension.registered(self, options, &block)
73
+ if extension.instance_of?(Class) && extension.ancestors.include?(::Middleman::Extension)
74
+ extension.new(self, options, &block)
75
+ else
76
+ extend extension
77
+ if extension.respond_to?(:registered)
78
+ if extension.method(:registered).arity === 1
79
+ extension.registered(self, &block)
80
+ else
81
+ extension.registered(self, options, &block)
82
+ end
78
83
  end
84
+ extension
79
85
  end
80
- extension
81
86
  end
82
87
  end
83
88
 
@@ -133,11 +138,12 @@ module Middleman
133
138
  super
134
139
 
135
140
  self.class.inst = self
136
- run_hook :before_configuration
137
141
 
138
142
  # Search the root of the project for required files
139
143
  $LOAD_PATH.unshift(root)
140
144
 
145
+ run_hook :initialized
146
+
141
147
  if config[:autoload_sprockets]
142
148
  begin
143
149
  require "middleman-sprockets"
@@ -146,6 +152,8 @@ module Middleman
146
152
  end
147
153
  end
148
154
 
155
+ run_hook :before_configuration
156
+
149
157
  # Check for and evaluate local configuration
150
158
  local_config = File.join(root, "config.rb")
151
159
  if File.exists? local_config
@@ -156,7 +164,16 @@ module Middleman
156
164
  run_hook :build_config if build?
157
165
  run_hook :development_config if development?
158
166
 
159
- run_hook :initialized
167
+ run_hook :instance_available
168
+
169
+ # This is for making the tests work - since the tests
170
+ # don't completely reload middleman, I18n.load_path can get
171
+ # polluted with paths from other test app directories that don't
172
+ # exist anymore.
173
+ if ENV["TEST"]
174
+ ::I18n.load_path.delete_if {|path| path =~ %r{tmp/aruba}}
175
+ ::I18n.reload!
176
+ end
160
177
 
161
178
  run_hook :after_configuration
162
179
 
@@ -17,7 +17,8 @@ module Middleman
17
17
  /^Gemfile$/,
18
18
  /^Gemfile\.lock$/,
19
19
  /~$/,
20
- /(^|\/)\.?#/
20
+ /(^|\/)\.?#/,
21
+ /^tmp\//
21
22
  ]
22
23
 
23
24
  # Setup extension
@@ -56,6 +57,7 @@ module Middleman
56
57
  class API
57
58
 
58
59
  attr_reader :app
60
+ attr_reader :known_paths
59
61
  delegate :logger, :to => :app
60
62
 
61
63
  # Initialize api and internal path cache
@@ -142,6 +144,12 @@ module Middleman
142
144
  reload_path(path, true)
143
145
  end
144
146
 
147
+ def exists?(path)
148
+ p = Pathname(path)
149
+ p = p.relative_path_from(Pathname(@app.root)) if !p.relative?
150
+ @known_paths.include?(p)
151
+ end
152
+
145
153
  protected
146
154
  # Whether this path is ignored
147
155
  # @param [Pathname] path
@@ -1,230 +1,202 @@
1
1
  require "active_support/core_ext/hash/keys"
2
2
  require 'pathname'
3
3
 
4
+ # Parsing YAML frontmatter
5
+ require "yaml"
6
+
7
+ # Parsing JSON frontmatter
8
+ require "active_support/json"
9
+
4
10
  # Extensions namespace
5
11
  module Middleman::CoreExtensions
6
12
 
7
- # Frontmatter namespace
8
- module FrontMatter
9
-
10
- # Setup extension
11
- class << self
13
+ class FrontMatter < ::Middleman::Extension
12
14
 
13
- # Once registered
14
- def registered(app)
15
- # Parsing YAML frontmatter
16
- require "yaml"
15
+ YAML_ERRORS = [ StandardError ]
17
16
 
18
- # Parsing JSON frontmatter
19
- require "active_support/json"
17
+ # https://github.com/tenderlove/psych/issues/23
18
+ if defined?(Psych) && defined?(Psych::SyntaxError)
19
+ YAML_ERRORS << Psych::SyntaxError
20
+ end
20
21
 
21
- app.send :include, InstanceMethods
22
+ def initialize(app, options_hash={}, &block)
23
+ super
22
24
 
23
- app.before_configuration do
24
- files.changed { |file| frontmatter_manager.clear_data(file) }
25
- files.deleted { |file| frontmatter_manager.clear_data(file) }
26
- end
25
+ @cache = {}
26
+ end
27
27
 
28
- app.after_configuration do
29
- ::Middleman::Sitemap::Resource.send :include, ResourceInstanceMethods
28
+ def before_configuration
29
+ ext = self
30
+ app.files.changed { |file| ext.clear_data(file) }
31
+ app.files.deleted { |file| ext.clear_data(file) }
32
+ end
30
33
 
31
- ignore %r{\.frontmatter$}
34
+ def after_configuration
35
+ app.extensions[:frontmatter] = self
36
+ app.ignore %r{\.frontmatter$}
32
37
 
33
- sitemap.provides_metadata do |path|
34
- fmdata = frontmatter_manager.data(path).first || {}
38
+ ::Middleman::Sitemap::Resource.send :include, ResourceInstanceMethods
35
39
 
36
- data = {}
37
- [:layout, :layout_engine].each do |opt|
38
- data[opt] = fmdata[opt] unless fmdata[opt].nil?
39
- end
40
+ app.sitemap.provides_metadata do |path|
41
+ fmdata = data(path).first
40
42
 
41
- { :options => data, :page => ::Middleman::Util.recursively_enhance(fmdata).freeze }
42
- end
43
+ data = {}
44
+ [:layout, :layout_engine].each do |opt|
45
+ data[opt] = fmdata[opt] unless fmdata[opt].nil?
43
46
  end
47
+
48
+ { :options => data, :page => ::Middleman::Util.recursively_enhance(fmdata).freeze }
44
49
  end
45
- alias :included :registered
46
50
  end
47
-
48
- class FrontmatterManager
49
- attr_reader :app
50
- delegate :logger, :to => :app
51
-
52
- def initialize(app)
53
- @app = app
54
- @cache = {}
51
+
52
+ module ResourceInstanceMethods
53
+ def ignored?
54
+ if !proxy? && raw_data[:ignored] == true
55
+ true
56
+ else
57
+ super
58
+ end
55
59
  end
56
60
 
57
- def data(path)
58
- p = normalize_path(path)
59
- @cache[p] ||= begin
60
- in_file = frontmatter_and_content(p)
61
+ # This page's frontmatter without being enhanced for access by either symbols or strings.
62
+ # Used internally
63
+ # @private
64
+ # @return [Hash]
65
+ def raw_data
66
+ app.extensions[:frontmatter].data(source_file).first
67
+ end
61
68
 
62
- external_file = frontmatter_and_content("#{p}.frontmatter")
63
-
64
- return in_file if external_file.nil?
69
+ # This page's frontmatter
70
+ # @return [Hash]
71
+ def data
72
+ @enhanced_data ||= ::Middleman::Util.recursively_enhance(raw_data).freeze
73
+ end
65
74
 
66
- [
67
- external_file[0].deep_merge(in_file[0]),
68
- in_file[1]
69
- ]
75
+ # Override Resource#content_type to take into account frontmatter
76
+ def content_type
77
+ # Allow setting content type in frontmatter too
78
+ raw_data.fetch :content_type do
79
+ super
70
80
  end
71
81
  end
82
+ end
72
83
 
73
- def clear_data(file)
74
- # Copied from Sitemap::Store#file_to_path, but without
75
- # removing the file extension
76
- file = File.join(@app.root, file)
77
- prefix = @app.source_dir.sub(/\/$/, "") + "/"
78
- return unless file.include?(prefix)
79
- path = file.sub(prefix, "").sub(/\.frontmatter$/, "")
80
-
81
- @cache.delete(path)
84
+ helpers do
85
+ # Get the template data from a path
86
+ # @param [String] path
87
+ # @return [String]
88
+ def template_data_for_file(path)
89
+ extensions[:frontmatter].data(path).last
82
90
  end
91
+ end
83
92
 
84
- YAML_ERRORS = [ StandardError ]
85
-
86
- # https://github.com/tenderlove/psych/issues/23
87
- if defined?(Psych) && defined?(Psych::SyntaxError)
88
- YAML_ERRORS << Psych::SyntaxError
89
- end
93
+ def data(path)
94
+ p = normalize_path(path)
95
+ @cache[p] ||= begin
96
+ data, content = frontmatter_and_content(p)
90
97
 
91
- # Parse YAML frontmatter out of a string
92
- # @param [String] content
93
- # @return [Array<Hash, String>]
94
- def parse_yaml_front_matter(content)
95
- yaml_regex = /\A(---\s*\n.*?\n?)^(---\s*$\n?)/m
96
- if content =~ yaml_regex
97
- content = content.sub(yaml_regex, "")
98
-
99
- begin
100
- data = YAML.load($1) || {}
101
- data = data.symbolize_keys
102
- rescue *YAML_ERRORS => e
103
- logger.error "YAML Exception: #{e.message}"
104
- return false
105
- end
106
- else
107
- return false
98
+ if app.files.exists?("#{path}.frontmatter")
99
+ external_data, _ = frontmatter_and_content("#{p}.frontmatter")
100
+ data = external_data.deep_merge(data)
108
101
  end
109
102
 
110
103
  [data, content]
111
- rescue
112
- [{}, content]
113
104
  end
105
+ end
114
106
 
115
- def parse_json_front_matter(content)
116
- json_regex = /\A(;;;\s*\n.*?\n?)^(;;;\s*$\n?)/m
117
-
118
- if content =~ json_regex
119
- content = content.sub(json_regex, "")
107
+ def clear_data(file)
108
+ # Copied from Sitemap::Store#file_to_path, but without
109
+ # removing the file extension
110
+ file = File.join(app.root, file)
111
+ prefix = app.source_dir.sub(/\/$/, "") + "/"
112
+ return unless file.include?(prefix)
113
+ path = file.sub(prefix, "").sub(/\.frontmatter$/, "")
120
114
 
121
- begin
122
- json = ($1+$2).sub(";;;", "{").sub(";;;", "}")
123
- data = ActiveSupport::JSON.decode(json).symbolize_keys
124
- rescue => e
125
- logger.error "JSON Exception: #{e.message}"
126
- return false
127
- end
115
+ @cache.delete(path)
116
+ end
128
117
 
129
- else
118
+ private
119
+ # Parse YAML frontmatter out of a string
120
+ # @param [String] content
121
+ # @return [Array<Hash, String>]
122
+ def parse_yaml_front_matter(content)
123
+ yaml_regex = /\A(---\s*\n.*?\n?)^(---\s*$\n?)/m
124
+ if content =~ yaml_regex
125
+ content = content.sub(yaml_regex, "")
126
+
127
+ begin
128
+ data = YAML.load($1) || {}
129
+ data = data.symbolize_keys
130
+ rescue *YAML_ERRORS => e
131
+ app.logger.error "YAML Exception: #{e.message}"
130
132
  return false
131
133
  end
132
-
133
- [data, content]
134
- rescue
135
- [{}, content]
134
+ else
135
+ return false
136
136
  end
137
137
 
138
- # Get the frontmatter and plain content from a file
139
- # @param [String] path
140
- # @return [Array<Thor::CoreExt::HashWithIndifferentAccess, String>]
141
- def frontmatter_and_content(path)
142
- full_path = if Pathname(path).relative?
143
- File.join(@app.source_dir, path)
144
- else
145
- path
146
- end
138
+ [data, content]
139
+ rescue
140
+ [{}, content]
141
+ end
147
142
 
148
- return nil unless File.exists?(full_path)
149
-
150
- data = {}
151
- content = nil
152
-
153
- if !::Middleman::Util.binary?(full_path)
154
- content = File.read(full_path)
155
-
156
- begin
157
- if content =~ /\A.*coding:/
158
- lines = content.split(/\n/)
159
- lines.shift
160
- content = lines.join("\n")
161
- end
162
-
163
- if result = parse_yaml_front_matter(content)
164
- data, content = result
165
- elsif result = parse_json_front_matter(content)
166
- data, content = result
167
- end
168
- rescue
169
- # Probably a binary file, move on
170
- end
143
+ def parse_json_front_matter(content)
144
+ json_regex = /\A(;;;\s*\n.*?\n?)^(;;;\s*$\n?)/m
145
+
146
+ if content =~ json_regex
147
+ content = content.sub(json_regex, "")
148
+
149
+ begin
150
+ json = ($1+$2).sub(";;;", "{").sub(";;;", "}")
151
+ data = ActiveSupport::JSON.decode(json).symbolize_keys
152
+ rescue => e
153
+ app.logger.error "JSON Exception: #{e.message}"
154
+ return false
171
155
  end
172
156
 
173
- [data, content]
157
+ else
158
+ return false
174
159
  end
175
160
 
176
- def normalize_path(path)
177
- path.sub(%r{^#{@app.source_dir}\/}, "")
178
- end
161
+ [data, content]
162
+ rescue
163
+ [{}, content]
179
164
  end
180
165
 
181
- module ResourceInstanceMethods
182
-
183
- def ignored?
184
- if !proxy? && data["ignored"] == true
185
- true
186
- else
187
- super
188
- end
166
+ # Get the frontmatter and plain content from a file
167
+ # @param [String] path
168
+ # @return [Array<Thor::CoreExt::HashWithIndifferentAccess, String>]
169
+ def frontmatter_and_content(path)
170
+ full_path = if Pathname(path).relative?
171
+ File.join(app.source_dir, path)
172
+ else
173
+ path
189
174
  end
190
175
 
191
- # This page's frontmatter without being enhanced for access by either symbols or strings.
192
- # Used internally
193
- # @private
194
- # @return [Hash]
195
- def raw_data
196
- app.frontmatter_manager.data(source_file).first
197
- end
176
+ data = {}
198
177
 
199
- # This page's frontmatter
200
- # @return [Hash]
201
- def data
202
- ::Middleman::Util.recursively_enhance(raw_data).freeze
203
- end
178
+ return [data, nil] if !app.files.exists?(full_path) || ::Middleman::Util.binary?(full_path)
204
179
 
205
- # Override Resource#content_type to take into account frontmatter
206
- def content_type
207
- # Allow setting content type in frontmatter too
208
- fm_type = data[:content_type]
209
- return fm_type if fm_type
180
+ content = File.read(full_path)
181
+
182
+ begin
183
+ if content =~ /\A.*coding:/
184
+ lines = content.split(/\n/)
185
+ lines.shift
186
+ content = lines.join("\n")
187
+ end
210
188
 
211
- super
189
+ result = parse_yaml_front_matter(content) || parse_json_front_matter(content)
190
+ return result if result
191
+ rescue
192
+ # Probably a binary file, move on
212
193
  end
213
- end
214
194
 
215
- module InstanceMethods
216
-
217
- # Access the Frontmatter API
218
- def frontmatter_manager
219
- @_frontmatter_manager ||= FrontmatterManager.new(self)
220
- end
195
+ [data, content]
196
+ end
221
197
 
222
- # Get the template data from a path
223
- # @param [String] path
224
- # @return [String]
225
- def template_data_for_file(path)
226
- frontmatter_manager.data(path).last
227
- end
198
+ def normalize_path(path)
199
+ path.sub(%r{^#{app.source_dir}\/}, "")
228
200
  end
229
201
  end
230
202
  end
@@ -153,7 +153,7 @@ module Middleman
153
153
  content = render_individual_file(path, locs, opts, context)
154
154
  path = File.basename(path, File.extname(path))
155
155
  rescue LocalJumpError
156
- raise "Tried to render a layout (calls yield) at #{path} like it was a template. Non-default layouts need to be in #{source}/layouts."
156
+ raise "Tried to render a layout (calls yield) at #{path} like it was a template. Non-default layouts need to be in #{source}/#{layout_dir}."
157
157
  end
158
158
  end
159
159
 
@@ -369,7 +369,7 @@ module Middleman
369
369
 
370
370
  # Check layouts folder
371
371
  if !layout_path
372
- layout_path, layout_engine = resolve_template(File.join("layouts", name.to_s), :preferred_engine => preferred_engine)
372
+ layout_path, layout_engine = resolve_template(File.join(config[:layouts_dir], name.to_s), :preferred_engine => preferred_engine)
373
373
  end
374
374
  end
375
375
 
@@ -380,7 +380,7 @@ module Middleman
380
380
 
381
381
  # Check layouts folder, no preference
382
382
  if !layout_path
383
- layout_path, layout_engine = resolve_template(File.join("layouts", name.to_s))
383
+ layout_path, layout_engine = resolve_template(File.join(config[:layouts_dir], name.to_s))
384
384
  end
385
385
 
386
386
  # Return the path
@@ -476,7 +476,7 @@ module Middleman
476
476
  end
477
477
 
478
478
  # If we found one, return it and the found engine
479
- if found_path || (File.exists?(on_disk_path) && !File.directory?(on_disk_path))
479
+ if found_path || files.exists?(on_disk_path)
480
480
  engine = found_path ? File.extname(found_path)[1..-1].to_sym : nil
481
481
  [ found_path || on_disk_path, engine ]
482
482
  else
@@ -25,3 +25,66 @@ require "middleman-core/core_extensions/routing"
25
25
 
26
26
  # Catch and show exceptions at the Rack level
27
27
  require "middleman-core/core_extensions/show_exceptions"
28
+
29
+ # Setup default helpers
30
+ require "middleman-more/core_extensions/default_helpers"
31
+
32
+ require "middleman-more/core_extensions/i18n"
33
+
34
+ # Compass framework
35
+ begin
36
+ require "middleman-more/core_extensions/compass"
37
+ rescue LoadError
38
+ $stderr.puts "Compass not installed: #{$!}"
39
+ end
40
+
41
+ ###
42
+ # Setup Optional Extensions
43
+ ###
44
+
45
+ # CacheBuster adds a query string to assets in dynamic templates to
46
+ # avoid browser caches failing to update to your new content.
47
+ require "middleman-more/extensions/cache_buster"
48
+ Middleman::Extensions::CacheBuster.register
49
+
50
+ # RelativeAssets allow any asset path in dynamic templates to be either
51
+ # relative to the root of the project or use an absolute URL.
52
+ require "middleman-more/extensions/relative_assets"
53
+ Middleman::Extensions::RelativeAssets.register
54
+
55
+ # AssetHost allows you to setup multiple domains to host your static
56
+ # assets. Calls to asset paths in dynamic templates will then rotate
57
+ # through each of the asset servers to better spread the load.
58
+ require "middleman-more/extensions/asset_host"
59
+ Middleman::Extensions::AssetHost.register
60
+
61
+ # MinifyCss compresses CSS
62
+ require "middleman-more/extensions/minify_css"
63
+ Middleman::Extensions::MinifyCss.register
64
+
65
+ # MinifyJavascript compresses JS
66
+ require "middleman-more/extensions/minify_javascript"
67
+ Middleman::Extensions::MinifyJavascript.register
68
+
69
+ # GZIP assets and pages during build
70
+ require "middleman-more/extensions/gzip"
71
+ Middleman::Extensions::Gzip.register
72
+
73
+ # AssetHash appends a hash of the file contents to the assets filename
74
+ # to avoid browser caches failing to update to your new content.
75
+ require "middleman-more/extensions/asset_hash"
76
+ Middleman::Extensions::AssetHash.register
77
+
78
+ # Provide Apache-style index.html files for directories
79
+ require "middleman-more/extensions/directory_indexes"
80
+ Middleman::Extensions::DirectoryIndexes.register
81
+
82
+ # Lorem provides a handful of helpful prototyping methods to generate
83
+ # words, paragraphs, fake images, names and email addresses.
84
+ require "middleman-more/extensions/lorem"
85
+
86
+ # AutomaticImageSizes inspects the images used in your dynamic templates
87
+ # and automatically adds width and height attributes to their HTML
88
+ # elements.
89
+ require "middleman-more/extensions/automatic_image_sizes"
90
+ Middleman::Extensions::AutomaticImageSizes.register
@@ -127,13 +127,39 @@ module Middleman
127
127
  def register(n=self.extension_name)
128
128
  ::Middleman::Extensions.register(n, self)
129
129
  end
130
+
131
+ def activate
132
+ new(::Middleman::Application)
133
+ end
130
134
  end
131
135
 
132
- attr_accessor :app, :options
136
+ attr_accessor :options
137
+ attr_reader :app
133
138
 
134
- def initialize(klass, options_hash={})
139
+ def initialize(klass, options_hash={}, &block)
135
140
  @_helpers = []
141
+ @klass = klass
142
+
143
+ setup_options(options_hash, &block)
144
+ setup_app_reference_when_available
145
+
146
+ # Bind app hooks to local methods
147
+ bind_before_configuration
148
+ bind_after_configuration
149
+ bind_after_build
150
+ end
151
+
152
+ def app=(app)
153
+ @app = app
154
+
155
+ (self.class.defined_helpers || []).each do |m|
156
+ app.class.send(:include, m)
157
+ end
158
+ end
159
+
160
+ protected
136
161
 
162
+ def setup_options(options_hash, &block)
137
163
  @options = self.class.config.dup
138
164
  @options.finalize!
139
165
 
@@ -142,17 +168,32 @@ module Middleman
142
168
  end
143
169
 
144
170
  yield @options if block_given?
171
+ end
145
172
 
173
+ def setup_app_reference_when_available
146
174
  ext = self
147
- klass.initialized do
175
+
176
+ @klass.initialized do
148
177
  ext.app = self
149
-
150
- (ext.class.defined_helpers || []).each do |m|
151
- ext.app.class.send(:include, m)
178
+ end
179
+
180
+ @klass.instance_available do
181
+ ext.app ||= self
182
+ end
183
+ end
184
+
185
+ def bind_before_configuration
186
+ ext = self
187
+ if ext.respond_to?(:before_configuration)
188
+ @klass.before_configuration do
189
+ ext.before_configuration
152
190
  end
153
191
  end
192
+ end
154
193
 
155
- klass.after_configuration do
194
+ def bind_after_configuration
195
+ ext = self
196
+ @klass.after_configuration do
156
197
  if ext.respond_to?(:after_configuration)
157
198
  ext.after_configuration
158
199
  end
@@ -162,5 +203,18 @@ module Middleman
162
203
  end
163
204
  end
164
205
  end
206
+
207
+ def bind_after_build
208
+ ext = self
209
+ if ext.respond_to?(:after_build)
210
+ @klass.after_build do |builder|
211
+ if ext.method(:after_build).arity === 1
212
+ ext.after_build(builder)
213
+ else
214
+ ext.after_build
215
+ end
216
+ end
217
+ end
218
+ end
165
219
  end
166
220
  end