middleman 2.0.16.1 → 3.0.0.alpha.2

Sign up to get free protection for your applications and to get access to all the features.
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