middleman 2.0.16.1 → 3.0.0.alpha.2

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 (259) hide show
  1. data/.gitignore +2 -1
  2. data/CHANGELOG +16 -8
  3. data/features/builder.feature +2 -5
  4. data/features/cache_buster.feature +1 -1
  5. data/features/clean_build.feature +0 -1
  6. data/features/coffee-script.feature +3 -3
  7. data/features/custom_layout_engines.feature +10 -0
  8. data/features/directory_index.feature +0 -1
  9. data/features/dynamic_pages.feature +0 -1
  10. data/features/fonts.feature +0 -1
  11. data/features/{padrino_helpers.feature → former_padrino_helpers.feature} +1 -1
  12. data/features/sprockets.feature +34 -5
  13. data/features/sprockets_gems.feature +7 -4
  14. data/features/step_definitions/asset_host_steps.rb +7 -6
  15. data/features/step_definitions/builder_steps.rb +4 -0
  16. data/features/step_definitions/middleman_steps.rb +22 -16
  17. data/features/step_definitions/page_layout_steps.rb +10 -8
  18. data/fixtures/custom-layout-app/config.rb +1 -0
  19. data/fixtures/custom-layout-app/source/index.html.erb +1 -0
  20. data/fixtures/custom-layout-app/source/layout.haml +6 -0
  21. data/fixtures/sprockets-app/config.rb +2 -1
  22. data/fixtures/sprockets-app/source/library/css/bootstrap_include.css.scss +1 -0
  23. data/fixtures/sprockets-app/source/library/css/plain.css +3 -0
  24. data/fixtures/sprockets-app/source/library/css/sprockets_base1.css.scss +1 -0
  25. data/fixtures/sprockets-app/source/library/css/sprockets_base2.css.scss +1 -0
  26. data/fixtures/sprockets-app/source/library/css/sprockets_sub.css.scss +1 -0
  27. data/fixtures/sprockets-app/source/{jquery_include.js → library/js/jquery_include.js} +0 -0
  28. data/fixtures/sprockets-app/source/library/js/plain.js +3 -0
  29. data/fixtures/sprockets-app/source/library/{javascripts → js}/sprockets_base.js +0 -0
  30. data/fixtures/sprockets-app/source/library/{javascripts → js}/sprockets_sub.js +0 -0
  31. data/fixtures/test-app/config.rb +5 -4
  32. data/fixtures/test-app/source/{padrino_test.html.haml → former_padrino_test.html.haml} +0 -0
  33. data/fixtures/test-app/source/stylesheets/sprockets_base1.css.scss +1 -0
  34. data/fixtures/test-app/source/stylesheets/sprockets_base2.css.scss +1 -0
  35. data/fixtures/test-app/source/stylesheets/sprockets_sub.css.scss +1 -0
  36. data/lib/middleman.rb +27 -25
  37. data/lib/middleman/base.rb +408 -166
  38. data/lib/middleman/builder.rb +78 -162
  39. data/lib/middleman/cli.rb +61 -32
  40. data/lib/middleman/core_extensions/assets.rb +4 -44
  41. data/lib/middleman/core_extensions/builder.rb +12 -16
  42. data/lib/middleman/core_extensions/compass.rb +28 -57
  43. data/lib/middleman/core_extensions/data.rb +65 -49
  44. data/lib/middleman/core_extensions/default_helpers.rb +33 -18
  45. data/lib/middleman/core_extensions/features.rb +48 -26
  46. data/lib/middleman/core_extensions/file_watcher.rb +66 -0
  47. data/lib/middleman/core_extensions/front_matter.rb +91 -86
  48. data/lib/middleman/core_extensions/rendering.rb +9 -8
  49. data/lib/middleman/core_extensions/routing.rb +19 -53
  50. data/lib/middleman/core_extensions/sitemap.rb +229 -0
  51. data/lib/middleman/core_extensions/sprockets.rb +53 -37
  52. data/lib/middleman/features/asset_host.rb +20 -10
  53. data/lib/middleman/features/automatic_image_sizes.rb +12 -9
  54. data/lib/middleman/features/cache_buster.rb +38 -25
  55. data/lib/middleman/features/directory_indexes.rb +31 -28
  56. data/lib/middleman/features/minify_css.rb +3 -2
  57. data/lib/middleman/features/minify_css/cssmin.rb +55 -0
  58. data/lib/middleman/features/minify_javascript.rb +12 -5
  59. data/lib/middleman/features/relative_assets.rb +28 -25
  60. data/lib/middleman/features/sitemap_tree.rb +34 -0
  61. data/lib/middleman/guard.rb +57 -23
  62. data/lib/middleman/renderers/erb.rb +29 -0
  63. data/lib/middleman/renderers/liquid.rb +3 -12
  64. data/lib/middleman/renderers/markdown.rb +16 -15
  65. data/lib/middleman/renderers/sass.rb +34 -38
  66. data/lib/middleman/vendor/hooks-0.2.0/CHANGES.textile +9 -0
  67. data/lib/middleman/vendor/hooks-0.2.0/Gemfile +3 -0
  68. data/lib/middleman/vendor/hooks-0.2.0/README.rdoc +107 -0
  69. data/lib/middleman/vendor/hooks-0.2.0/Rakefile +12 -0
  70. data/lib/middleman/vendor/hooks-0.2.0/hooks.gemspec +22 -0
  71. data/lib/middleman/vendor/hooks-0.2.0/lib/hooks.rb +109 -0
  72. data/lib/middleman/vendor/hooks-0.2.0/lib/hooks/inheritable_attribute.rb +33 -0
  73. data/lib/middleman/vendor/hooks-0.2.0/test/hooks_test.rb +141 -0
  74. data/lib/middleman/vendor/hooks-0.2.0/test/inheritable_attribute_test.rb +55 -0
  75. data/lib/middleman/vendor/hooks-0.2.0/test/test_helper.rb +10 -0
  76. data/lib/middleman/vendor/padrino-core-0.10.5/.document +5 -0
  77. data/lib/middleman/vendor/padrino-core-0.10.5/.gitignore +22 -0
  78. data/lib/middleman/vendor/padrino-core-0.10.5/.yardopts +1 -0
  79. data/lib/middleman/vendor/padrino-core-0.10.5/LICENSE.txt +20 -0
  80. data/lib/middleman/vendor/padrino-core-0.10.5/README.rdoc +294 -0
  81. data/lib/middleman/vendor/padrino-core-0.10.5/Rakefile +5 -0
  82. data/lib/middleman/vendor/padrino-core-0.10.5/bin/padrino +9 -0
  83. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core.rb +167 -0
  84. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/application.rb +270 -0
  85. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/application/rendering.rb +292 -0
  86. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/application/routing.rb +934 -0
  87. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/application/showexceptions.rb +20 -0
  88. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/caller.rb +53 -0
  89. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/cli/adapter.rb +24 -0
  90. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/cli/base.rb +151 -0
  91. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/cli/console.rb +20 -0
  92. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/cli/rake.rb +24 -0
  93. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/cli/rake_tasks.rb +59 -0
  94. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/command.rb +38 -0
  95. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/images/404.png +0 -0
  96. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/images/500.png +0 -0
  97. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/loader.rb +210 -0
  98. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/cs.yml +34 -0
  99. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/da.yml +34 -0
  100. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/de.yml +34 -0
  101. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/en.yml +34 -0
  102. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/es.yml +34 -0
  103. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/fr.yml +34 -0
  104. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/hu.yml +34 -0
  105. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/it.yml +40 -0
  106. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/ja.yml +34 -0
  107. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/lv.yml +34 -0
  108. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/nl.yml +34 -0
  109. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/no.yml +35 -0
  110. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/pl.yml +34 -0
  111. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/pt_br.yml +40 -0
  112. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/ru.yml +35 -0
  113. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/tr.yml +34 -0
  114. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/uk.yml +34 -0
  115. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/zh_cn.yml +34 -0
  116. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/zh_tw.yml +34 -0
  117. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/logger.rb +345 -0
  118. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/mounter.rb +224 -0
  119. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/reloader.rb +254 -0
  120. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/router.rb +98 -0
  121. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/server.rb +79 -0
  122. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/support_lite.rb +199 -0
  123. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/tasks.rb +21 -0
  124. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/version.rb +20 -0
  125. data/lib/middleman/vendor/padrino-core-0.10.5/padrino-core.gemspec +38 -0
  126. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/apps/.components +6 -0
  127. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/apps/.gitignore +7 -0
  128. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/apps/complex.rb +32 -0
  129. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/apps/simple.rb +33 -0
  130. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/dependencies/a.rb +9 -0
  131. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/dependencies/b.rb +4 -0
  132. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/dependencies/c.rb +1 -0
  133. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/dependencies/circular/e.rb +13 -0
  134. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/dependencies/circular/f.rb +2 -0
  135. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/dependencies/circular/g.rb +2 -0
  136. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/dependencies/d.rb +4 -0
  137. data/lib/middleman/vendor/padrino-core-0.10.5/test/helper.rb +81 -0
  138. data/lib/middleman/vendor/padrino-core-0.10.5/test/mini_shoulda.rb +45 -0
  139. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_application.rb +108 -0
  140. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_core.rb +79 -0
  141. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_dependencies.rb +44 -0
  142. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_filters.rb +278 -0
  143. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_locale.rb +21 -0
  144. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_logger.rb +100 -0
  145. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_mounter.rb +177 -0
  146. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_reloader_complex.rb +75 -0
  147. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_reloader_simple.rb +98 -0
  148. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_rendering.rb +461 -0
  149. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_restful_routing.rb +33 -0
  150. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_router.rb +146 -0
  151. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_routing.rb +1673 -0
  152. data/lib/middleman/vendor/padrino-helpers-0.10.5/.document +5 -0
  153. data/lib/middleman/vendor/padrino-helpers-0.10.5/.gitignore +21 -0
  154. data/lib/middleman/vendor/padrino-helpers-0.10.5/.yardopts +1 -0
  155. data/lib/middleman/vendor/padrino-helpers-0.10.5/LICENSE.txt +20 -0
  156. data/lib/middleman/vendor/padrino-helpers-0.10.5/README.rdoc +239 -0
  157. data/lib/middleman/vendor/padrino-helpers-0.10.5/Rakefile +5 -0
  158. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers.rb +58 -0
  159. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/asset_tag_helpers.rb +420 -0
  160. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/form_builder/abstract_form_builder.rb +220 -0
  161. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/form_builder/standard_form_builder.rb +43 -0
  162. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/form_helpers.rb +602 -0
  163. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/format_helpers.rb +381 -0
  164. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/cs.yml +103 -0
  165. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/da.yml +91 -0
  166. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/de.yml +81 -0
  167. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/en.yml +103 -0
  168. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/es.yml +103 -0
  169. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/fr.yml +80 -0
  170. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/hu.yml +103 -0
  171. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/it.yml +89 -0
  172. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/ja.yml +103 -0
  173. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/lv.yml +103 -0
  174. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/nl.yml +82 -0
  175. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/no.yml +91 -0
  176. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/pl.yml +95 -0
  177. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/pt_br.yml +103 -0
  178. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/ru.yml +103 -0
  179. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/tr.yml +103 -0
  180. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/uk.yml +103 -0
  181. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/zh_cn.yml +104 -0
  182. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/zh_tw.yml +103 -0
  183. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/number_helpers.rb +288 -0
  184. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/output_helpers.rb +175 -0
  185. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/output_helpers/abstract_handler.rb +98 -0
  186. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/output_helpers/erb_handler.rb +79 -0
  187. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/output_helpers/haml_handler.rb +63 -0
  188. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/output_helpers/slim_handler.rb +81 -0
  189. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/render_helpers.rb +60 -0
  190. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/tag_helpers.rb +103 -0
  191. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/translation_helpers.rb +38 -0
  192. data/lib/middleman/vendor/padrino-helpers-0.10.5/padrino-helpers.gemspec +27 -0
  193. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/app.rb +73 -0
  194. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/capture_concat.erb +14 -0
  195. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/capture_concat.haml +12 -0
  196. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/capture_concat.slim +13 -0
  197. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_for.erb +14 -0
  198. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_for.haml +12 -0
  199. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_for.slim +12 -0
  200. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_tag.erb +11 -0
  201. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_tag.haml +9 -0
  202. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_tag.slim +9 -0
  203. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/current_engine.erb +5 -0
  204. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/current_engine.haml +5 -0
  205. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/current_engine.slim +5 -0
  206. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/fields_for.erb +20 -0
  207. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/fields_for.haml +15 -0
  208. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/fields_for.slim +15 -0
  209. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_for.erb +56 -0
  210. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_for.haml +47 -0
  211. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_for.slim +47 -0
  212. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_tag.erb +56 -0
  213. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_tag.haml +45 -0
  214. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_tag.slim +45 -0
  215. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/link_to.erb +5 -0
  216. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/link_to.haml +4 -0
  217. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/link_to.slim +4 -0
  218. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/mail_to.erb +3 -0
  219. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/mail_to.haml +3 -0
  220. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/mail_to.slim +3 -0
  221. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/meta_tag.erb +3 -0
  222. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/meta_tag.haml +3 -0
  223. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/meta_tag.slim +3 -0
  224. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/partials/_erb.erb +1 -0
  225. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/partials/_haml.haml +1 -0
  226. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/partials/_slim.slim +1 -0
  227. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/simple_partial.erb +1 -0
  228. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/simple_partial.haml +1 -0
  229. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/simple_partial.slim +1 -0
  230. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/app.rb +50 -0
  231. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/current_engine.haml +5 -0
  232. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/current_engines/_erb.erb +1 -0
  233. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/current_engines/_haml.haml +1 -0
  234. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/current_engines/_slim.slim +1 -0
  235. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/erb/test.erb +1 -0
  236. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/explicit_engine.haml +5 -0
  237. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/haml/test.haml +1 -0
  238. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/template/_user.haml +7 -0
  239. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/template/haml_template.haml +1 -0
  240. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/template/some_template.haml +2 -0
  241. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/helper.rb +66 -0
  242. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_asset_tag_helpers.rb +320 -0
  243. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_form_builder.rb +996 -0
  244. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_form_helpers.rb +645 -0
  245. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_format_helpers.rb +227 -0
  246. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_locale.rb +20 -0
  247. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_number_helpers.rb +136 -0
  248. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_output_helpers.rb +153 -0
  249. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_render_helpers.rb +76 -0
  250. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_tag_helpers.rb +105 -0
  251. data/lib/middleman/version.rb +1 -1
  252. data/middleman-x86-mingw32.gemspec +16 -33
  253. data/middleman.gemspec +16 -31
  254. metadata +590 -349
  255. data/features/sinatra.feature +0 -6
  256. data/lib/middleman/core_extensions/rack_map.rb +0 -35
  257. data/lib/middleman/renderers/coffee_script.rb +0 -8
  258. data/lib/middleman/renderers/haml.rb +0 -31
  259. data/lib/middleman/renderers/slim.rb +0 -8
@@ -0,0 +1,75 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+ require File.expand_path(File.dirname(__FILE__) + '/fixtures/apps/complex')
3
+
4
+ describe "ComplexReloader" do
5
+
6
+ context 'for complex reload functionality' do
7
+ setup do
8
+ Padrino.clear!
9
+ Padrino.mount("complex_1_demo").to("/complex_1_demo")
10
+ Padrino.mount("complex_2_demo").to("/complex_2_demo")
11
+ end
12
+
13
+ should 'correctly instantiate Complex(1-2)Demo fixture' do
14
+ assert_equal ["/complex_1_demo", "/complex_2_demo"], Padrino.mounted_apps.map(&:uri_root)
15
+ assert_equal ["complex_1_demo", "complex_2_demo"], Padrino.mounted_apps.map(&:name)
16
+ assert Complex1Demo.reload?
17
+ assert Complex2Demo.reload?
18
+ assert_match %r{fixtures/apps/complex.rb}, Complex1Demo.app_file
19
+ assert_match %r{fixtures/apps/complex.rb}, Complex2Demo.app_file
20
+ end
21
+
22
+ should 'correctly reload Complex(1-2)Demo fixture' do
23
+ assert_match %r{fixtures/apps/complex.rb}, Complex1Demo.app_file
24
+ @app = Padrino.application
25
+
26
+ get "/"
27
+ assert_equal 404, status
28
+
29
+ get "/complex_1_demo"
30
+ assert_equal "Given random #{LibDemo.give_me_a_random}", body
31
+
32
+ get "/complex_2_demo"
33
+ assert_equal 200, status
34
+
35
+ get "/complex_1_demo/old"
36
+ assert_equal 200, status
37
+
38
+ get "/complex_2_demo/old"
39
+ assert_equal 200, status
40
+
41
+ get "/complex_2_demo/var/destroy"
42
+ assert_equal '{}', body
43
+
44
+ new_phrase = "The magick number is: #{rand(2**255)}!"
45
+ buffer = File.read(Complex1Demo.app_file)
46
+ new_buffer = buffer.gsub(/The magick number is: \d+!/, new_phrase)
47
+ new_buffer.gsub!(/get\(:destroy\)/, 'get(:destroy, :with => :id)')
48
+ begin
49
+ File.open(Complex1Demo.app_file, "w") { |f| f.write(new_buffer) }
50
+ sleep 1.2 # We need at least a cooldown of 1 sec.
51
+ get "/complex_2_demo"
52
+ assert_equal new_phrase, body
53
+
54
+ # Re-Check that we didn't forget any route
55
+ get "/complex_1_demo"
56
+ assert_equal "Given random #{LibDemo.give_me_a_random}", body
57
+
58
+ get "/complex_2_demo"
59
+ assert_equal 200, status
60
+
61
+ get "/complex_1_demo/old"
62
+ assert_equal 200, status
63
+
64
+ get "/complex_2_demo/old"
65
+ assert_equal 200, status
66
+
67
+ get "/complex_2_demo/var/destroy/variable"
68
+ assert_equal '{:id=>"variable"}', body
69
+ ensure
70
+ # Now we need to prevent to commit a new changed file so we revert it
71
+ File.open(Complex1Demo.app_file, "w") { |f| f.write(buffer) }
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,98 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+ require File.expand_path(File.dirname(__FILE__) + '/fixtures/apps/simple')
3
+
4
+ describe "SimpleReloader" do
5
+
6
+ context 'for simple reset functionality' do
7
+
8
+ should 'reset routes' do
9
+ mock_app do
10
+ (1..10).each do |i|
11
+ get("/#{i}") { "Foo #{i}" }
12
+ end
13
+ end
14
+ (1..10).each do |i|
15
+ get "/#{i}"
16
+ assert_equal "Foo #{i}", body
17
+ end
18
+ @app.reset_routes!
19
+ (1..10).each do |i|
20
+ get "/#{i}"
21
+ assert_equal 404, status
22
+ end
23
+ end
24
+
25
+ should 'keep sinatra routes on development' do
26
+ mock_app do
27
+ set :environment, :development
28
+ get("/"){ "ok" }
29
+ end
30
+ assert_equal :development, @app.environment
31
+ get "/"
32
+ assert_equal 200, status
33
+ get "/__sinatra__/404.png"
34
+ assert_equal 200, status
35
+ assert_match /image\/png/, response["Content-Type"]
36
+ @app.reset_routes!
37
+ get "/"
38
+ assert_equal 404, status
39
+ get "/__sinatra__/404.png"
40
+ assert_equal 200, status
41
+ assert_match /image\/png/, response["Content-Type"]
42
+ end
43
+ end
44
+
45
+ context 'for simple reload functionality' do
46
+
47
+ should 'correctly instantiate SimpleDemo fixture' do
48
+ Padrino.clear!
49
+ Padrino.mount("simple_demo").to("/")
50
+ assert_equal ["simple_demo"], Padrino.mounted_apps.map(&:name)
51
+ assert SimpleDemo.reload?
52
+ assert_match %r{fixtures/apps/simple.rb}, SimpleDemo.app_file
53
+ end
54
+
55
+ should_eventually 'correctly reload SimpleDemo fixture' do
56
+ # TODO fix this test
57
+ @app = SimpleDemo
58
+ get "/"
59
+ assert ok?
60
+ new_phrase = "The magick number is: #{rand(2**255)}!"
61
+ buffer = File.read(SimpleDemo.app_file)
62
+ new_buffer = buffer.gsub(/The magick number is: \d+!/, new_phrase)
63
+ File.open(SimpleDemo.app_file, "w") { |f| f.write(new_buffer) }
64
+ sleep 2 # We need at least a cooldown of 1 sec.
65
+ get "/"
66
+ assert_equal new_phrase, body
67
+
68
+ # Now we need to prevent to commit a new changed file so we revert it
69
+ File.open(SimpleDemo.app_file, "w") { |f| f.write(buffer) }
70
+ Padrino.reload!
71
+ end
72
+
73
+ should 'correctly reset SimpleDemo fixture' do
74
+ @app = SimpleDemo
75
+ @app.reload!
76
+ get "/rand"
77
+ assert ok?
78
+ last_body = body
79
+ assert_equal 2, @app.filters[:before].size # one is ours the other is default_filter for content type
80
+ assert_equal 1, @app.errors.size
81
+ assert_equal 1, @app.filters[:after].size
82
+ assert_equal 0, @app.middleware.size
83
+ assert_equal 4, @app.routes.size # GET+HEAD of "/" + GET+HEAD of "/rand" = 4
84
+ assert_equal 2, @app.extensions.size # [Padrino::Routing, Padrino::Rendering]
85
+ assert_equal 0, @app.templates.size
86
+ @app.reload!
87
+ get "/rand"
88
+ assert_not_equal last_body, body
89
+ assert_equal 2, @app.filters[:before].size # one is ours the other is default_filter for content type
90
+ assert_equal 1, @app.errors.size
91
+ assert_equal 1, @app.filters[:after].size
92
+ assert_equal 0, @app.middleware.size
93
+ assert_equal 4, @app.routes.size # GET+HEAD of "/" = 2
94
+ assert_equal 2, @app.extensions.size # [Padrino::Routing, Padrino::Rendering]
95
+ assert_equal 0, @app.templates.size
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,461 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+ require 'i18n'
3
+
4
+ describe "Rendering" do
5
+ def setup
6
+ Padrino::Application.send(:register, Padrino::Rendering)
7
+ Padrino::Rendering::DEFAULT_RENDERING_OPTIONS[:strict_format] = false
8
+ end
9
+
10
+ def teardown
11
+ remove_views
12
+ end
13
+
14
+ context 'for application layout functionality' do
15
+
16
+ should 'get no layout' do
17
+ mock_app do
18
+ get("/"){ "no layout" }
19
+ end
20
+
21
+ get "/"
22
+ assert_equal "no layout", body
23
+ end
24
+
25
+ should 'be compatible with sinatra layout' do
26
+ mock_app do
27
+ layout do
28
+ "this is a <%= yield %>"
29
+ end
30
+
31
+ get("/"){ render :erb, "sinatra layout" }
32
+ end
33
+
34
+ get "/"
35
+ assert_equal "this is a sinatra layout", body
36
+ end
37
+
38
+ should 'use rails way layout' do
39
+ with_layout :application, "this is a <%= yield %>" do
40
+ mock_app do
41
+ get("/"){ render :erb, "rails way layout" }
42
+ end
43
+
44
+ get "/"
45
+ assert_equal "this is a rails way layout", body
46
+ end
47
+ end
48
+
49
+ should 'use rails way for a custom layout' do
50
+ with_layout "layouts/custom", "this is a <%= yield %>" do
51
+ mock_app do
52
+ layout :custom
53
+ get("/"){ render :erb, "rails way custom layout" }
54
+ end
55
+
56
+ get "/"
57
+ assert_equal "this is a rails way custom layout", body
58
+ end
59
+ end
60
+
61
+ should 'not use layout' do
62
+ with_layout :application, "this is a <%= yield %>" do
63
+ with_view :index, "index" do
64
+ mock_app do
65
+ get("/with/layout"){ render :index }
66
+ get("/without/layout"){ render :index, :layout => false }
67
+ end
68
+ get "/with/layout"
69
+ assert_equal "this is a index", body
70
+ get "/without/layout"
71
+ assert_equal "index", body
72
+ end
73
+ end
74
+ end
75
+
76
+ should 'not use layout with js format' do
77
+ create_layout :application, "this is an <%= yield %>"
78
+ create_view :foo, "erb file"
79
+ create_view :foo, "js file", :format => :js
80
+ mock_app do
81
+ get('/layout_test', :provides => [:html, :js]){ render :foo }
82
+ end
83
+ get "/layout_test"
84
+ assert_equal "this is an erb file", body
85
+ get "/layout_test.js"
86
+ assert_equal "js file", body
87
+ end
88
+
89
+ should 'use correct layout for each format' do
90
+ create_layout :application, "this is an <%= yield %>"
91
+ create_layout :application, "document start <%= yield %> end", :format => :xml
92
+ create_view :foo, "erb file"
93
+ create_view :foo, "xml file", :format => :xml
94
+ mock_app do
95
+ get('/layout_test', :provides => [:html, :xml]){ render :foo }
96
+ end
97
+ get "/layout_test"
98
+ assert_equal "this is an erb file", body
99
+ get "/layout_test.xml"
100
+ assert_equal "document start xml file end", body
101
+ end
102
+
103
+ should 'by default use html file when no other is given' do
104
+ create_layout :baz, "html file", :format => :html
105
+
106
+ mock_app do
107
+ get('/content_type_test', :provides => [:html, :xml]) { render :baz }
108
+ end
109
+
110
+ get "/content_type_test"
111
+ assert_equal "html file", body
112
+ get "/content_type_test.html"
113
+ assert_equal "html file", body
114
+ get "/content_type_test.xml"
115
+ assert_equal "html file", body
116
+ end
117
+
118
+ should 'not use html file when DEFAULT_RENDERING_OPTIONS[:strict_format] == true' do
119
+ create_layout :foo, "html file", :format => :html
120
+
121
+ mock_app do
122
+ get('/default_rendering_test', :provides => [:html, :xml]) { render :foo }
123
+ end
124
+
125
+ @save = Padrino::Rendering::DEFAULT_RENDERING_OPTIONS
126
+ Padrino::Rendering::DEFAULT_RENDERING_OPTIONS[:strict_format] = true
127
+
128
+ get "/default_rendering_test"
129
+ assert_equal "html file", body
130
+ assert_raises Padrino::Rendering::TemplateNotFound do
131
+ get "/default_rendering_test.xml"
132
+ end
133
+
134
+ Padrino::Rendering::DEFAULT_RENDERING_OPTIONS.merge!(@save)
135
+ end
136
+
137
+ should 'use correct layout with each controller' do
138
+ create_layout :foo, "foo layout at <%= yield %>"
139
+ create_layout :bar, "bar layout at <%= yield %>"
140
+ create_layout :application, "default layout at <%= yield %>"
141
+ mock_app do
142
+ get("/"){ render :erb, "application" }
143
+ controller :foo do
144
+ layout :foo
145
+ get("/"){ render :erb, "foo" }
146
+ end
147
+ controller :bar do
148
+ layout :bar
149
+ get("/"){ render :erb, "bar" }
150
+ end
151
+ controller :none do
152
+ get("/") { render :erb, "none" }
153
+ get("/with_foo_layout") { render :erb, "none with layout", :layout => :foo }
154
+ end
155
+ end
156
+ get "/foo"
157
+ assert_equal "foo layout at foo", body
158
+ get "/bar"
159
+ assert_equal "bar layout at bar", body
160
+ get "/none"
161
+ assert_equal "default layout at none", body
162
+ get "/none/with_foo_layout"
163
+ assert_equal "foo layout at none with layout", body
164
+ get "/"
165
+ assert_equal "default layout at application", body
166
+ end
167
+ end
168
+
169
+ should 'solve layout in layouts paths' do
170
+ create_layout :foo, "foo layout <%= yield %>"
171
+ create_layout :"layouts/bar", "bar layout <%= yield %>"
172
+ mock_app do
173
+ get("/") { render :erb, "none" }
174
+ get("/foo") { render :erb, "foo", :layout => :foo }
175
+ get("/bar") { render :erb, "bar", :layout => :bar }
176
+ end
177
+ get "/"
178
+ assert_equal "none", body
179
+ get "/foo"
180
+ assert_equal "foo layout foo", body
181
+ get "/bar"
182
+ assert_equal "bar layout bar", body
183
+ end
184
+
185
+ should 'render correctly if layout was not found or not exist' do
186
+ create_layout :application, "application layout for <%= yield %>"
187
+ create_view :foo, "index", :format => :html
188
+ create_view :foo, "xml.rss", :format => :rss
189
+ mock_app do
190
+ get("/foo", :provides => [:html, :rss]) { render('foo') }
191
+ get("/baz", :provides => :js) { render(:erb, 'baz') }
192
+ get("/bar") { render :haml, "haml" }
193
+ end
194
+ get "/foo"
195
+ assert_equal "application layout for index", body
196
+ get "/foo.rss"
197
+ assert_equal "<rss/>", body.chomp
198
+ get "/baz.js"
199
+ assert_equal "baz", body
200
+ get "/bar"
201
+ assert_equal "haml", body.chomp
202
+ end
203
+
204
+ context 'for application render functionality' do
205
+
206
+ should "work properly with logging and missing layout" do
207
+ create_view :index, "<%= foo %>"
208
+ mock_app do
209
+ enable :logging
210
+ get("/") { render "index", { :layout => true }, { :foo => "bar" } }
211
+ end
212
+ get "/"
213
+ assert_equal "bar", body
214
+ end
215
+
216
+ should "work properly with logging and layout" do
217
+ create_layout :application, "layout <%= yield %>"
218
+ create_view :index, "<%= foo %>"
219
+ mock_app do
220
+ enable :logging
221
+ get("/") { render "index", { :layout => true }, { :foo => "bar" } }
222
+ end
223
+ get "/"
224
+ assert_equal "layout bar", body
225
+ end
226
+
227
+ should 'be compatible with sinatra render' do
228
+ mock_app do
229
+ get("/"){ render :erb, "<%= 1+2 %>" }
230
+ end
231
+ get "/"
232
+ assert_equal "3", body
233
+ end
234
+
235
+ should "support passing locals into render" do
236
+ create_layout :application, "layout <%= yield %>"
237
+ create_view :index, "<%= foo %>"
238
+ mock_app do
239
+ get("/") { render "index", { :layout => true }, { :foo => "bar" } }
240
+ end
241
+ get "/"
242
+ assert_equal "layout bar", body
243
+ end
244
+
245
+ should "support passing locals into sinatra render" do
246
+ create_layout :application, "layout <%= yield %>"
247
+ create_view :index, "<%= foo %>"
248
+ mock_app do
249
+ get("/") { render :erb, :index, { :layout => true }, { :foo => "bar" } }
250
+ end
251
+ get "/"
252
+ assert_equal "layout bar", body
253
+ end
254
+
255
+ should "support passing locals into special nil engine render" do
256
+ create_layout :application, "layout <%= yield %>"
257
+ create_view :index, "<%= foo %>"
258
+ mock_app do
259
+ get("/") { render nil, :index, { :layout => true }, { :foo => "bar" } }
260
+ end
261
+ get "/"
262
+ assert_equal "layout bar", body
263
+ end
264
+
265
+ should 'be compatible with sinatra views' do
266
+ with_view :index, "<%= 1+2 %>" do
267
+ mock_app do
268
+ get("/foo") { render :erb, :index }
269
+ get("/bar") { erb :index }
270
+ get("/dir") { "3" }
271
+ get("/inj") { erb "<%= 2+1 %>" }
272
+ get("/rnj") { render :erb, "<%= 2+1 %>" }
273
+ end
274
+ get "/foo"
275
+ assert_equal "3", body
276
+ get "/bar"
277
+ assert_equal "3", body
278
+ get "/dir"
279
+ assert_equal "3", body
280
+ get "/inj"
281
+ assert_equal "3", body
282
+ get "/rnj"
283
+ assert_equal "3", body
284
+ end
285
+ end
286
+
287
+ should 'resolve template engine' do
288
+ with_view :index, "<%= 1+2 %>" do
289
+ mock_app do
290
+ get("/foo") { render :index }
291
+ get("/bar") { render "/index" }
292
+ end
293
+ get "/foo"
294
+ assert_equal "3", body
295
+ get "/bar"
296
+ assert_equal "3", body
297
+ end
298
+ end
299
+
300
+ should 'resolve template content type' do
301
+ create_view :foo, "Im Js", :format => :js
302
+ create_view :foo, "Im Erb"
303
+ mock_app do
304
+ get("/foo", :provides => :js) { render :foo }
305
+ get("/bar.js") { render :foo }
306
+ end
307
+ get "/foo.js"
308
+ assert_equal "Im Js", body
309
+ # TODO: implement this!
310
+ # get "/bar.js"
311
+ # assert_equal "Im Js", body
312
+ end
313
+
314
+ should 'resolve with explicit template format' do
315
+ create_view :foo, "Im Js", :format => :js
316
+ create_view :foo, "Im Haml", :format => :haml
317
+ create_view :foo, "Im Xml", :format => :xml
318
+ mock_app do
319
+ get("/foo_normal", :provides => :js) { render 'foo' }
320
+ get("/foo_haml", :provides => :js) { render 'foo.haml' }
321
+ get("/foo_xml", :provides => :js) { render 'foo.xml' }
322
+ end
323
+ get "/foo_normal.js"
324
+ assert_equal "Im Js", body
325
+ get "/foo_haml.js"
326
+ assert_equal "Im Haml\n", body
327
+ get "/foo_xml.js"
328
+ assert_equal "Im Xml", body
329
+ end
330
+
331
+ should 'resolve without explict template format' do
332
+ create_view :foo, "Im Html"
333
+ create_view :foo, "xml.rss", :format => :rss
334
+ mock_app do
335
+ get(:index, :map => "/", :provides => [:html, :rss]){ render 'foo' }
336
+ end
337
+ get "/", {}, { 'HTTP_ACCEPT' => 'text/html;q=0.9' }
338
+ assert_equal "Im Html", body
339
+ get ".rss"
340
+ assert_equal "<rss/>\n", body
341
+ end
342
+
343
+ should "ignore files ending in tilde and not render them" do
344
+ create_view :foo, "Im Wrong", :format => 'haml~'
345
+ create_view :foo, "Im Haml", :format => :haml
346
+ create_view :bar, "Im Haml backup", :format => 'haml~'
347
+ mock_app do
348
+ get('/foo') { render 'foo' }
349
+ get('/bar') { render 'bar' }
350
+ end
351
+ get '/foo'
352
+ assert_equal "Im Haml\n", body
353
+ assert_raises(Padrino::Rendering::TemplateNotFound) { get '/bar' }
354
+ end
355
+
356
+ should 'resolve template locale' do
357
+ create_view :foo, "Im English", :locale => :en
358
+ create_view :foo, "Im Italian", :locale => :it
359
+ mock_app do
360
+ get("/foo") { render :foo }
361
+ end
362
+ I18n.locale = :en
363
+ get "/foo"
364
+ assert_equal "Im English", body
365
+ I18n.locale = :it
366
+ get "/foo"
367
+ assert_equal "Im Italian", body
368
+ end
369
+
370
+ should 'resolve template content_type and locale' do
371
+ create_view :foo, "Im Js", :format => :js
372
+ create_view :foo, "Im Erb"
373
+ create_view :foo, "Im English Erb", :locale => :en
374
+ create_view :foo, "Im Italian Erb", :locale => :it
375
+ create_view :foo, "Im English Js", :format => :js, :locale => :en
376
+ create_view :foo, "Im Italian Js", :format => :js, :locale => :it
377
+ mock_app do
378
+ get("/foo", :provides => [:html, :js]) { render :foo }
379
+ end
380
+ I18n.locale = :none
381
+ get "/foo.js"
382
+ assert_equal "Im Js", body
383
+ get "/foo"
384
+ assert_equal "Im Erb", body
385
+ I18n.locale = :en
386
+ get "/foo"
387
+ assert_equal "Im English Erb", body
388
+ I18n.locale = :it
389
+ get "/foo"
390
+ assert_equal "Im Italian Erb", body
391
+ I18n.locale = :en
392
+ get "/foo.js"
393
+ assert_equal "Im English Js", body
394
+ I18n.locale = :it
395
+ get "/foo.js"
396
+ assert_equal "Im Italian Js", body
397
+ I18n.locale = :en
398
+ get "/foo.pk"
399
+ assert_equal 405, status
400
+ end
401
+
402
+ should 'resolve template content_type and locale with layout' do
403
+ create_layout :foo, "Hello <%= yield %> in a Js layout", :format => :js
404
+ create_layout :foo, "Hello <%= yield %> in a Js-En layout", :format => :js, :locale => :en
405
+ create_layout :foo, "Hello <%= yield %> in a Js-It layout", :format => :js, :locale => :it
406
+ create_layout :foo, "Hello <%= yield %> in a Erb-En layout", :locale => :en
407
+ create_layout :foo, "Hello <%= yield %> in a Erb-It layout", :locale => :it
408
+ create_layout :foo, "Hello <%= yield %> in a Erb layout"
409
+ create_view :bar, "Im Js", :format => :js
410
+ create_view :bar, "Im Erb"
411
+ create_view :bar, "Im English Erb", :locale => :en
412
+ create_view :bar, "Im Italian Erb", :locale => :it
413
+ create_view :bar, "Im English Js", :format => :js, :locale => :en
414
+ create_view :bar, "Im Italian Js", :format => :js, :locale => :it
415
+ create_view :bar, "Im a json", :format => :json
416
+ mock_app do
417
+ layout :foo
418
+ get("/bar", :provides => [:html, :js, :json]) { render :bar }
419
+ end
420
+ I18n.locale = :none
421
+ get "/bar.js"
422
+ assert_equal "Hello Im Js in a Js layout", body
423
+ get "/bar"
424
+ assert_equal "Hello Im Erb in a Erb layout", body
425
+ I18n.locale = :en
426
+ get "/bar"
427
+ assert_equal "Hello Im English Erb in a Erb-En layout", body
428
+ I18n.locale = :it
429
+ get "/bar"
430
+ assert_equal "Hello Im Italian Erb in a Erb-It layout", body
431
+ I18n.locale = :en
432
+ get "/bar.js"
433
+ assert_equal "Hello Im English Js in a Js-En layout", body
434
+ I18n.locale = :it
435
+ get "/bar.js"
436
+ assert_equal "Hello Im Italian Js in a Js-It layout", body
437
+ I18n.locale = :en
438
+ get "/bar.json"
439
+ assert_equal "Im a json", body
440
+ get "/bar.pk"
441
+ assert_equal 405, status
442
+ end
443
+
444
+ should 'renders erb with blocks' do
445
+ mock_app do
446
+ def container
447
+ @_out_buf << "THIS."
448
+ yield
449
+ @_out_buf << "SPARTA!"
450
+ end
451
+ def is; "IS."; end
452
+ get '/' do
453
+ render :erb, '<% container do %> <%= is %> <% end %>'
454
+ end
455
+ end
456
+ get '/'
457
+ assert ok?
458
+ assert_equal 'THIS. IS. SPARTA!', body
459
+ end
460
+ end
461
+ end