middleman-core 3.2.2 → 3.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (273) hide show
  1. checksums.yaml +4 -4
  2. data/features/cli_init.feature +18 -8
  3. data/features/helpers_select_tag.feature +1 -1
  4. data/features/layouts_dir.feature +8 -0
  5. data/features/markdown_redcarpet.feature +2 -2
  6. data/fixtures/asciidoc-app/source/layouts/default.erb +0 -1
  7. data/fixtures/capture-html-app/source/capture_html_haml.html.haml +1 -1
  8. data/fixtures/content-for-app/source/content_for_haml.html.haml +1 -1
  9. data/fixtures/frontmatter-settings-app/source/layouts/override.erb +1 -2
  10. data/fixtures/frontmatter-settings-neighbor-app/source/layouts/override.erb +1 -2
  11. data/fixtures/layouts-dir-app/source/ambiguous.html.erb +5 -0
  12. data/fixtures/layouts-dir-app/source/layouts/other.erb +3 -0
  13. data/fixtures/layouts-dir-app/source/other.erb +3 -0
  14. data/fixtures/link-to-app/source/link_to_haml.html.haml +1 -1
  15. data/fixtures/link-to-app/source/link_to_slim.html.slim +1 -1
  16. data/fixtures/nested-layout-app/source/layouts/inner_haml.haml +1 -1
  17. data/fixtures/nested-layout-app/source/layouts/inner_slim.slim +1 -1
  18. data/fixtures/nested-layout-app/source/layouts/outer_haml.haml +1 -1
  19. data/fixtures/nested-layout-app/source/layouts/outer_slim.slim +1 -1
  20. data/lib/middleman-core/application.rb +12 -3
  21. data/lib/middleman-core/cli/build.rb +5 -3
  22. data/lib/middleman-core/cli/console.rb +1 -1
  23. data/lib/middleman-core/cli/init.rb +1 -1
  24. data/lib/middleman-core/core_extensions.rb +0 -1
  25. data/lib/middleman-core/core_extensions/file_watcher.rb +11 -11
  26. data/lib/middleman-core/core_extensions/rendering.rb +40 -66
  27. data/lib/middleman-core/extension.rb +167 -0
  28. data/lib/middleman-core/extensions.rb +2 -151
  29. data/lib/middleman-core/logger.rb +2 -2
  30. data/lib/middleman-core/meta_pages/assets/config.css +13 -0
  31. data/lib/middleman-core/meta_pages/assets/meta.css +19 -3
  32. data/lib/middleman-core/meta_pages/assets/sitemap.css +18 -1
  33. data/lib/middleman-core/meta_pages/config_setting.rb +7 -9
  34. data/lib/middleman-core/meta_pages/sitemap_resource.rb +24 -15
  35. data/lib/middleman-core/meta_pages/sitemap_tree.rb +5 -1
  36. data/lib/middleman-core/meta_pages/templates/config.html.erb +2 -2
  37. data/lib/middleman-core/meta_pages/templates/index.html.erb +18 -8
  38. data/lib/middleman-core/meta_pages/templates/sitemap.html.erb +4 -5
  39. data/lib/middleman-core/preview_server.rb +6 -3
  40. data/lib/middleman-core/renderers/erb.rb +12 -14
  41. data/lib/middleman-core/renderers/haml.rb +10 -0
  42. data/lib/middleman-core/renderers/markdown.rb +5 -1
  43. data/lib/middleman-core/renderers/sass.rb +0 -4
  44. data/lib/middleman-core/renderers/slim.rb +16 -3
  45. data/lib/middleman-core/sitemap/resource.rb +1 -1
  46. data/lib/middleman-core/step_definitions.rb +2 -1
  47. data/lib/middleman-core/templates.rb +3 -1
  48. data/lib/middleman-core/templates/shared/Gemfile.tt +4 -1
  49. data/lib/middleman-core/templates/shared/config.tt +3 -1
  50. data/lib/middleman-core/templates/shared/gitignore +2 -1
  51. data/lib/middleman-core/util.rb +22 -16
  52. data/lib/middleman-core/version.rb +1 -1
  53. data/lib/middleman-more/core_extensions/compass.rb +3 -3
  54. data/lib/middleman-more/core_extensions/default_helpers.rb +18 -15
  55. data/lib/middleman-more/extensions/asset_hash.rb +1 -0
  56. data/middleman-core.gemspec +9 -6
  57. metadata +69 -227
  58. data/features/sass_cache_path.feature +0 -22
  59. data/fixtures/sass-cache-path-custom-app/config.rb +0 -3
  60. data/fixtures/sass-cache-path-custom-app/source/stylesheets/plain.css.sass +0 -4
  61. data/fixtures/sass-cache-path-default-app/config.rb +0 -3
  62. data/fixtures/sass-cache-path-default-app/source/stylesheets/plain.css.sass +0 -4
  63. data/lib/vendored-middleman-deps/hooks-0.2.0/CHANGES.textile +0 -9
  64. data/lib/vendored-middleman-deps/hooks-0.2.0/Gemfile +0 -3
  65. data/lib/vendored-middleman-deps/hooks-0.2.0/README.rdoc +0 -107
  66. data/lib/vendored-middleman-deps/hooks-0.2.0/Rakefile +0 -12
  67. data/lib/vendored-middleman-deps/hooks-0.2.0/hooks.gemspec +0 -22
  68. data/lib/vendored-middleman-deps/hooks-0.2.0/lib/hooks.rb +0 -109
  69. data/lib/vendored-middleman-deps/hooks-0.2.0/lib/hooks/inheritable_attribute.rb +0 -33
  70. data/lib/vendored-middleman-deps/hooks-0.2.0/test/hooks_test.rb +0 -141
  71. data/lib/vendored-middleman-deps/hooks-0.2.0/test/inheritable_attribute_test.rb +0 -55
  72. data/lib/vendored-middleman-deps/hooks-0.2.0/test/test_helper.rb +0 -10
  73. data/lib/vendored-middleman-deps/padrino-core-0.11.4/.document +0 -5
  74. data/lib/vendored-middleman-deps/padrino-core-0.11.4/.gitignore +0 -22
  75. data/lib/vendored-middleman-deps/padrino-core-0.11.4/.yardopts +0 -1
  76. data/lib/vendored-middleman-deps/padrino-core-0.11.4/LICENSE.txt +0 -20
  77. data/lib/vendored-middleman-deps/padrino-core-0.11.4/README.rdoc +0 -294
  78. data/lib/vendored-middleman-deps/padrino-core-0.11.4/Rakefile +0 -5
  79. data/lib/vendored-middleman-deps/padrino-core-0.11.4/bin/padrino +0 -9
  80. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core.rb +0 -200
  81. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application.rb +0 -297
  82. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/flash.rb +0 -229
  83. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/rendering.rb +0 -317
  84. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/rendering/extensions/erubis.rb +0 -64
  85. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/rendering/extensions/haml.rb +0 -28
  86. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/rendering/extensions/slim.rb +0 -14
  87. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/routing.rb +0 -1077
  88. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/showexceptions.rb +0 -21
  89. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/caller.rb +0 -53
  90. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/cli/adapter.rb +0 -24
  91. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/cli/base.rb +0 -159
  92. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/cli/console.rb +0 -20
  93. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/cli/rake.rb +0 -47
  94. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/cli/rake_tasks.rb +0 -52
  95. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/command.rb +0 -38
  96. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/images/404.png +0 -0
  97. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/images/500.png +0 -0
  98. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/loader.rb +0 -224
  99. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/cs.yml +0 -33
  100. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/da.yml +0 -33
  101. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/de.yml +0 -33
  102. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/en.yml +0 -33
  103. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/es.yml +0 -33
  104. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/fr.yml +0 -33
  105. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/hu.yml +0 -33
  106. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/it.yml +0 -39
  107. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/ja.yml +0 -33
  108. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/lv.yml +0 -33
  109. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/nl.yml +0 -33
  110. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/no.yml +0 -33
  111. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/pl.yml +0 -33
  112. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/pt_br.yml +0 -39
  113. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/ro.yml +0 -33
  114. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/ru.yml +0 -34
  115. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/sv.yml +0 -33
  116. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/tr.yml +0 -33
  117. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/uk.yml +0 -33
  118. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/zh_cn.yml +0 -33
  119. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/zh_tw.yml +0 -33
  120. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/logger.rb +0 -438
  121. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/module.rb +0 -58
  122. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/mounter.rb +0 -234
  123. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/reloader.rb +0 -341
  124. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/router.rb +0 -95
  125. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/server.rb +0 -77
  126. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/support_lite.rb +0 -260
  127. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/tasks.rb +0 -21
  128. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/version.rb +0 -20
  129. data/lib/vendored-middleman-deps/padrino-core-0.11.4/padrino-core.gemspec +0 -43
  130. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/app_gem/Gemfile +0 -4
  131. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/app_gem/app/app.rb +0 -3
  132. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/app_gem/app_gem.gemspec +0 -17
  133. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/app_gem/lib/app_gem.rb +0 -7
  134. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/app_gem/lib/app_gem/version.rb +0 -3
  135. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/apps/.components +0 -6
  136. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/apps/.gitignore +0 -7
  137. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/apps/complex.rb +0 -32
  138. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/apps/simple.rb +0 -33
  139. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/a.rb +0 -9
  140. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/b.rb +0 -4
  141. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/c.rb +0 -1
  142. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/circular/e.rb +0 -13
  143. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/circular/f.rb +0 -2
  144. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/circular/g.rb +0 -2
  145. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/d.rb +0 -4
  146. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/helper.rb +0 -83
  147. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/mini_shoulda.rb +0 -45
  148. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_application.rb +0 -125
  149. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_core.rb +0 -77
  150. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_csrf_protection.rb +0 -80
  151. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_dependencies.rb +0 -44
  152. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_filters.rb +0 -348
  153. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_flash.rb +0 -168
  154. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_locale.rb +0 -21
  155. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_logger.rb +0 -210
  156. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_mounter.rb +0 -199
  157. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_reloader_complex.rb +0 -75
  158. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_reloader_simple.rb +0 -98
  159. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_rendering.rb +0 -545
  160. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_rendering_extensions.rb +0 -14
  161. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_restful_routing.rb +0 -33
  162. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_router.rb +0 -146
  163. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_routing.rb +0 -1927
  164. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_support_lite.rb +0 -56
  165. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/.document +0 -5
  166. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/.gitignore +0 -21
  167. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/.yardopts +0 -1
  168. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/LICENSE.txt +0 -20
  169. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/README.rdoc +0 -239
  170. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/Rakefile +0 -5
  171. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers.rb +0 -57
  172. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/asset_tag_helpers.rb +0 -401
  173. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/breadcrumb_helpers.rb +0 -183
  174. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/form_builder/abstract_form_builder.rb +0 -317
  175. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/form_builder/standard_form_builder.rb +0 -40
  176. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/form_helpers.rb +0 -919
  177. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/format_helpers.rb +0 -372
  178. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/cs.yml +0 -103
  179. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/da.yml +0 -91
  180. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/de.yml +0 -81
  181. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/en.yml +0 -103
  182. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/es.yml +0 -103
  183. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/fr.yml +0 -79
  184. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/hu.yml +0 -103
  185. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/it.yml +0 -89
  186. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/ja.yml +0 -103
  187. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/lv.yml +0 -103
  188. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/nl.yml +0 -82
  189. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/no.yml +0 -91
  190. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/pl.yml +0 -95
  191. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/pt_br.yml +0 -103
  192. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/ro.yml +0 -103
  193. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/ru.yml +0 -103
  194. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/sv.yml +0 -103
  195. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/tr.yml +0 -103
  196. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/uk.yml +0 -103
  197. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/zh_cn.yml +0 -103
  198. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/zh_tw.yml +0 -103
  199. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/number_helpers.rb +0 -283
  200. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/output_helpers.rb +0 -207
  201. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/output_helpers/abstract_handler.rb +0 -96
  202. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/output_helpers/erb_handler.rb +0 -78
  203. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/output_helpers/haml_handler.rb +0 -63
  204. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/output_helpers/slim_handler.rb +0 -78
  205. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/render_helpers.rb +0 -59
  206. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/tag_helpers.rb +0 -292
  207. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/translation_helpers.rb +0 -36
  208. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/padrino-helpers.gemspec +0 -27
  209. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/app.rb +0 -84
  210. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/button_to.erb +0 -8
  211. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/button_to.haml +0 -5
  212. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/button_to.slim +0 -6
  213. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/capture_concat.erb +0 -14
  214. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/capture_concat.haml +0 -12
  215. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/capture_concat.slim +0 -12
  216. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_for.erb +0 -14
  217. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_for.haml +0 -12
  218. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_for.slim +0 -12
  219. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_tag.erb +0 -11
  220. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_tag.haml +0 -9
  221. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_tag.slim +0 -9
  222. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/current_engine.erb +0 -5
  223. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/current_engine.haml +0 -5
  224. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/current_engine.slim +0 -5
  225. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/fields_for.erb +0 -20
  226. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/fields_for.haml +0 -15
  227. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/fields_for.slim +0 -15
  228. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_for.erb +0 -72
  229. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_for.haml +0 -59
  230. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_for.slim +0 -59
  231. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_tag.erb +0 -95
  232. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_tag.haml +0 -78
  233. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_tag.slim +0 -79
  234. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/link_to.erb +0 -5
  235. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/link_to.haml +0 -4
  236. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/link_to.slim +0 -4
  237. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/mail_to.erb +0 -3
  238. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/mail_to.haml +0 -3
  239. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/mail_to.slim +0 -3
  240. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/meta_tag.erb +0 -3
  241. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/meta_tag.haml +0 -3
  242. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/meta_tag.slim +0 -3
  243. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/partials/_erb.erb +0 -1
  244. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/partials/_haml.haml +0 -1
  245. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/partials/_slim.slim +0 -1
  246. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/simple_partial.erb +0 -1
  247. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/simple_partial.haml +0 -1
  248. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/simple_partial.slim +0 -1
  249. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/app.rb +0 -58
  250. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/current_engine.haml +0 -5
  251. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/current_engines/_erb.erb +0 -1
  252. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/current_engines/_haml.haml +0 -1
  253. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/current_engines/_slim.slim +0 -1
  254. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/double_capture_erb.erb +0 -3
  255. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/double_capture_haml.haml +0 -2
  256. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/double_capture_slim.slim +0 -2
  257. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/erb/test.erb +0 -1
  258. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/explicit_engine.haml +0 -5
  259. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/haml/test.haml +0 -1
  260. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/template/_user.haml +0 -7
  261. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/template/haml_template.haml +0 -1
  262. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/template/some_template.haml +0 -2
  263. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/helper.rb +0 -67
  264. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_asset_tag_helpers.rb +0 -359
  265. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_breadcrumb_helpers.rb +0 -134
  266. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_form_builder.rb +0 -1178
  267. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_form_helpers.rb +0 -1030
  268. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_format_helpers.rb +0 -241
  269. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_locale.rb +0 -20
  270. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_number_helpers.rb +0 -143
  271. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_output_helpers.rb +0 -154
  272. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_render_helpers.rb +0 -94
  273. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_tag_helpers.rb +0 -117
@@ -1,14 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/helper')
2
-
3
- describe "Rendering Extensions" do
4
- context 'for haml' do
5
- should 'render haml_tag correctly' do
6
- mock_app do
7
- get('/') { render :haml, '-haml_tag :div'}
8
- end
9
-
10
- get '/'
11
- assert_match '<div></div>', last_response.body
12
- end
13
- end
14
- end
@@ -1,33 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/helper')
2
-
3
- describe "Routing" do
4
- should 'perform restul routing' do
5
- mock_app do
6
- controller :parent => :parents do
7
- get :index do
8
- "#{url_for(:index, params[:parent_id])} get"
9
- end
10
-
11
- put :index, :with => :asset_id do
12
- "#{url_for(:index, params[:parent_id], :asset_id => params[:asset_id])} put"
13
- end
14
-
15
- post :index, :with => :asset_id do
16
- "#{url_for(:index, :parent_id => params[:parent_id], :asset_id => params[:asset_id])} post"
17
- end
18
-
19
- delete :index, :with => :asset_id do
20
- "#{url_for(:index, params[:parent_id], :asset_id => params[:asset_id])} delete"
21
- end
22
- end
23
- end
24
- get "/parents/1"
25
- assert_equal "/parents/1 get", body
26
- put "/parents/1/hi"
27
- assert_equal "/parents/1/hi put", body
28
- post "/parents/1/hi"
29
- assert_equal "/parents/1/hi post", body
30
- delete "/parents/1/hi"
31
- assert_equal "/parents/1/hi delete", body
32
- end
33
- end
@@ -1,146 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/helper')
2
- require File.expand_path(File.dirname(__FILE__) + '/fixtures/apps/simple')
3
-
4
- describe "Router" do
5
-
6
- def setup
7
- Padrino.clear!
8
- end
9
-
10
- should "dispatch paths correctly" do
11
- app = lambda { |env|
12
- [200, {
13
- 'X-ScriptName' => env['SCRIPT_NAME'],
14
- 'X-PathInfo' => env['PATH_INFO'],
15
- 'Content-Type' => 'text/plain'
16
- }, [""]]
17
- }
18
- map = Padrino::Router.new(
19
- { :path => '/bar', :to => app },
20
- { :path => '/foo', :to => app },
21
- { :path => '/foo/bar', :to => app }
22
- )
23
-
24
- res = Rack::MockRequest.new(map).get("/")
25
- assert res.not_found?
26
-
27
- res = Rack::MockRequest.new(map).get("/qux")
28
- assert res.not_found?
29
-
30
- res = Rack::MockRequest.new(map).get("/foo")
31
- assert res.ok?
32
- assert_equal "/foo", res["X-ScriptName"]
33
- assert_equal "/", res["X-PathInfo"]
34
-
35
- res = Rack::MockRequest.new(map).get("/foo/")
36
- assert res.ok?
37
- assert_equal "/foo", res["X-ScriptName"]
38
- assert_equal "/", res["X-PathInfo"]
39
-
40
- res = Rack::MockRequest.new(map).get("/foo/bar")
41
- assert res.ok?
42
- assert_equal "/foo/bar", res["X-ScriptName"]
43
- assert_equal "/", res["X-PathInfo"]
44
-
45
- res = Rack::MockRequest.new(map).get("/foo/bar/")
46
- assert res.ok?
47
- assert_equal "/foo/bar", res["X-ScriptName"]
48
- assert_equal "/", res["X-PathInfo"]
49
-
50
- res = Rack::MockRequest.new(map).get("/foo///bar//quux")
51
- assert_equal 200, res.status
52
- assert res.ok?
53
- assert_equal "/foo/bar", res["X-ScriptName"]
54
- assert_equal "//quux", res["X-PathInfo"]
55
-
56
- res = Rack::MockRequest.new(map).get("/foo/quux", "SCRIPT_NAME" => "/bleh")
57
- assert res.ok?
58
- assert_equal "/bleh/foo", res["X-ScriptName"]
59
- assert_equal "/quux", res["X-PathInfo"]
60
-
61
- res = Rack::MockRequest.new(map).get("/bar", 'HTTP_HOST' => 'foo.org')
62
- assert res.ok?
63
- assert_equal "/bar", res["X-ScriptName"]
64
- assert_equal "/", res["X-PathInfo"]
65
-
66
- res = Rack::MockRequest.new(map).get("/bar/", 'HTTP_HOST' => 'foo.org')
67
- assert res.ok?
68
- assert_equal "/bar", res["X-ScriptName"]
69
- assert_equal "/", res["X-PathInfo"]
70
- end
71
-
72
- should "dispatches hosts correctly" do
73
- map = Padrino::Router.new(
74
- { :host => "foo.org", :to => lambda { |env|
75
- [200,
76
- { "Content-Type" => "text/plain",
77
- "X-Position" => "foo.org",
78
- "X-Host" => env["HTTP_HOST"] || env["SERVER_NAME"],
79
- }, [""]]}},
80
- { :host => "subdomain.foo.org", :to => lambda { |env|
81
- [200,
82
- { "Content-Type" => "text/plain",
83
- "X-Position" => "subdomain.foo.org",
84
- "X-Host" => env["HTTP_HOST"] || env["SERVER_NAME"],
85
- }, [""]]}},
86
- { :host => /.*\.bar.org/, :to => lambda { |env|
87
- [200,
88
- { "Content-Type" => "text/plain",
89
- "X-Position" => "bar.org",
90
- "X-Host" => env["HTTP_HOST"] || env["SERVER_NAME"],
91
- }, [""]]}}
92
- )
93
-
94
- res = Rack::MockRequest.new(map).get("/", "HTTP_HOST" => "bar.org")
95
- assert res.not_found?
96
-
97
- res = Rack::MockRequest.new(map).get("/", "HTTP_HOST" => "at.bar.org")
98
- assert res.ok?
99
- assert_equal "bar.org", res["X-Position"]
100
-
101
- res = Rack::MockRequest.new(map).get("/", "HTTP_HOST" => "foo.org")
102
- assert res.ok?
103
- assert_equal "foo.org", res["X-Position"]
104
-
105
- res = Rack::MockRequest.new(map).get("/", "HTTP_HOST" => "subdomain.foo.org", "SERVER_NAME" => "foo.org")
106
- assert res.ok?
107
- assert_equal "subdomain.foo.org", res["X-Position"]
108
- end
109
-
110
- should "works with padrino core applications" do
111
- Padrino.mount("simple_demo").host("padrino.org")
112
- assert_equal ["simple_demo"], Padrino.mounted_apps.map(&:name)
113
- assert_equal ["padrino.org"], Padrino.mounted_apps.map(&:app_host)
114
-
115
- res = Rack::MockRequest.new(Padrino.application).get("/")
116
- assert res.not_found?
117
-
118
- res = Rack::MockRequest.new(Padrino.application).get("/", "HTTP_HOST" => "bar.org")
119
- assert res.not_found?
120
-
121
- res = Rack::MockRequest.new(Padrino.application).get("/", "HTTP_HOST" => "padrino.org")
122
- assert res.ok?
123
- end
124
-
125
- should "works with padrino applications" do
126
- Padrino.mount("simple_demo").to("/foo").host(/.*\.padrino.org/)
127
-
128
- res = Rack::MockRequest.new(Padrino.application).get("/")
129
- assert res.not_found?
130
-
131
- res = Rack::MockRequest.new(Padrino.application).get("/", "HTTP_HOST" => "bar.org")
132
- assert res.not_found?
133
-
134
- res = Rack::MockRequest.new(Padrino.application).get("/", "HTTP_HOST" => "padrino.org")
135
- assert res.not_found?
136
-
137
- res = Rack::MockRequest.new(Padrino.application).get("/none", "HTTP_HOST" => "foo.padrino.org")
138
- assert res.not_found?
139
-
140
- res = Rack::MockRequest.new(Padrino.application).get("/foo", "HTTP_HOST" => "bar.padrino.org")
141
- assert res.ok?
142
-
143
- res = Rack::MockRequest.new(Padrino.application).get("/foo/", "HTTP_HOST" => "bar.padrino.org")
144
- assert res.ok?
145
- end
146
- end
@@ -1,1927 +0,0 @@
1
- #encoding: utf-8
2
- require File.expand_path(File.dirname(__FILE__) + '/helper')
3
-
4
- class FooError < RuntimeError; end
5
-
6
-
7
- describe "Routing" do
8
- setup do
9
- Padrino::Application.send(:register, Padrino::Rendering)
10
- Padrino::Rendering::DEFAULT_RENDERING_OPTIONS[:strict_format] = false
11
- end
12
-
13
- should "serve static files with simple cache control" do
14
- mock_app do
15
- set :static_cache_control, :public
16
- set :public_folder, File.dirname(__FILE__)
17
- end
18
- get "/#{File.basename(__FILE__)}"
19
- assert headers.has_key?('Cache-Control')
20
- assert_equal headers['Cache-Control'], 'public'
21
- end # static simple
22
-
23
- should "serve static files with cache control and max_age" do
24
- mock_app do
25
- set :static_cache_control, [:public, :must_revalidate, {:max_age => 300}]
26
- set :public_folder, File.dirname(__FILE__)
27
- end
28
- get "/#{File.basename(__FILE__)}"
29
- assert headers.has_key?('Cache-Control')
30
- assert_equal headers['Cache-Control'], 'public, must-revalidate, max-age=300'
31
- end # static max_age
32
-
33
- should 'ignore trailing delimiters for basic route' do
34
- mock_app do
35
- get("/foo"){ "okey" }
36
- get(:test) { "tester" }
37
- end
38
- get "/foo"
39
- assert_equal "okey", body
40
- get "/foo/"
41
- assert_equal "okey", body
42
- get "/test"
43
- assert_equal "tester", body
44
- get "/test/"
45
- assert_equal "tester", body
46
- end
47
-
48
- should 'fail with unrecognized route exception when not found' do
49
- mock_app do
50
- get(:index){ "okey" }
51
- end
52
- get @app.url_for(:index)
53
- assert_equal "okey", body
54
- assert_raises(Padrino::Routing::UnrecognizedException) {
55
- get @app.url_for(:fake)
56
- }
57
- end
58
-
59
- should 'accept regexp routes' do
60
- mock_app do
61
- get(%r./fob|/baz.) { "regexp" }
62
- get("/foo") { "str" }
63
- get %r./([0-9]+)/. do |num|
64
- "Your lucky number: #{num} #{params[:captures].first}"
65
- end
66
- get %r./page/([0-9]+)|/. do |num|
67
- "My lucky number: #{num} #{params[:captures].first}"
68
- end
69
- end
70
- get "/foo"
71
- assert_equal "str", body
72
- get "/fob"
73
- assert_equal "regexp", body
74
- get "/baz"
75
- assert_equal "regexp", body
76
- get "/321/"
77
- assert_equal "Your lucky number: 321 321", body
78
- get "/page/99"
79
- assert_equal "My lucky number: 99 99", body
80
- end
81
-
82
- should 'accept regexp routes with generate with :generate_with' do
83
- mock_app do
84
- get(%r{/fob|/baz}, :name => :foo, :generate_with => '/fob') { "regexp" }
85
- end
86
- assert_equal "/fob", @app.url(:foo)
87
- end
88
-
89
- should "parse routes with question marks" do
90
- mock_app do
91
- get("/foo/?"){ "okey" }
92
- post('/unauthenticated/?') { "no access" }
93
- end
94
- get "/foo"
95
- assert_equal "okey", body
96
- get "/foo/"
97
- assert_equal "okey", body
98
- post "/unauthenticated"
99
- assert_equal "no access", body
100
- post "/unauthenticated/"
101
- assert_equal "no access", body
102
- end
103
-
104
- should 'parse routes that are encoded' do
105
- mock_app do
106
- get('/щч') { 'success!' }
107
- end
108
- get(URI.escape('/щч'))
109
- assert_equal 'success!', body
110
- end
111
-
112
- should 'parse routes that include encoded slash' do
113
- mock_app do
114
- get('/:drive_alias/:path', :path => /.*/){
115
- "Show #{params[:drive_alias]} and #{params[:path]}"
116
- }
117
- end
118
- get("/drive%2Ffoo/some/path")
119
- assert_equal "Show drive/foo and some/path", body
120
- end
121
-
122
- should 'encode params using UTF-8' do
123
- skip unless ''.respond_to?(:encoding) # for 1.8.7
124
-
125
- mock_app do
126
- get('/:foo') { params[:foo].encoding.name }
127
- end
128
- get '/bar'
129
- assert_equal 'UTF-8', body
130
- end
131
-
132
- should 'match correctly similar paths' do
133
- mock_app do
134
- get("/my/:foo_id"){ params[:foo_id] }
135
- get("/my/:bar_id/bar"){ params[:bar_id] }
136
- end
137
- get "/my/1"
138
- assert_equal "1", body
139
- get "/my/2/bar"
140
- assert_equal "2", body
141
- end
142
-
143
- should "match user agents" do
144
- app = mock_app do
145
- get("/main", :agent => /IE/){ "hello IE" }
146
- get("/main"){ "hello" }
147
- end
148
- get "/main"
149
- assert_equal "hello", body
150
- get "/main", {}, {'HTTP_USER_AGENT' => 'This is IE'}
151
- assert_equal "hello IE", body
152
- end
153
-
154
- should "use regex for parts of a route" do
155
- app = mock_app do
156
- get("/main/:id", :id => /\d+/){ "hello #{params[:id]}" }
157
- end
158
- get "/main/123"
159
- assert_equal "hello 123", body
160
- get "/main/asd"
161
- assert_equal 404, status
162
- end
163
-
164
- should "parse params when use regex for parts of a route" do
165
- mock_app do
166
- post :index, :with => [:foo, :bar], :bar => /.+/ do
167
- "show #{params[:foo]}"
168
- end
169
-
170
- get :index, :map => '/mystuff/:a_id/boing/:boing_id' do
171
- "show #{params[:a_id]} and #{params[:boing_id]}"
172
- end
173
- end
174
- get "/mystuff/5/boing/2"
175
- assert_equal "show 5 and 2", body
176
- end
177
-
178
- should "not generate overlapping head urls" do
179
- app = mock_app do
180
- get("/main"){ "hello" }
181
- post("/main"){ "hello" }
182
- end
183
- assert_equal 3, app.routes.size, "should generate GET, HEAD and PUT"
184
- assert_equal "GET", app.routes[0].request_methods.first
185
- assert_equal "HEAD", app.routes[1].request_methods.first
186
- assert_equal "POST", app.routes[2].request_methods.first
187
- end
188
-
189
- should 'generate basic urls' do
190
- mock_app do
191
- get(:foo){ "/foo" }
192
- get(:foo, :with => :id){ |id| "/foo/#{id}" }
193
- get([:foo, :id]){ |id| "/foo/#{id}" }
194
- get(:hash, :with => :id){ url(:hash, :id => 1) }
195
- get([:hash, :id]){ url(:hash, :id => 1) }
196
- get(:array, :with => :id){ url(:array, 23) }
197
- get([:array, :id]){ url(:array, 23) }
198
- get(:hash_with_extra, :with => :id){ url(:hash_with_extra, :id => 1, :query => 'string') }
199
- get([:hash_with_extra, :id]){ url(:hash_with_extra, :id => 1, :query => 'string') }
200
- get(:array_with_extra, :with => :id){ url(:array_with_extra, 23, :query => 'string') }
201
- get([:array_with_extra, :id]){ url(:array_with_extra, 23, :query => 'string') }
202
- get("/old-bar/:id"){ params[:id] }
203
- post(:mix, :map => "/mix-bar/:id"){ params[:id] }
204
- get(:mix, :map => "/mix-bar/:id"){ params[:id] }
205
- end
206
- get "/foo"
207
- assert_equal "/foo", body
208
- get "/foo/123"
209
- assert_equal "/foo/123", body
210
- get "/hash/2"
211
- assert_equal "/hash/1", body
212
- get "/array/23"
213
- assert_equal "/array/23", body
214
- get "/hash_with_extra/1"
215
- assert_equal "/hash_with_extra/1?query=string", body
216
- get "/array_with_extra/23"
217
- assert_equal "/array_with_extra/23?query=string", body
218
- get "/old-bar/3"
219
- assert_equal "3", body
220
- post "/mix-bar/4"
221
- assert_equal "4", body
222
- get "/mix-bar/4"
223
- assert_equal "4", body
224
- end
225
-
226
- should 'generate url with format' do
227
- mock_app do
228
- get(:a, :provides => :any){ url(:a, :format => :json) }
229
- get(:b, :provides => :js){ url(:b, :format => :js) }
230
- get(:c, :provides => [:js, :json]){ url(:c, :format => :json) }
231
- get(:d, :provides => [:html, :js]){ url(:d, :format => :js, :foo => :bar) }
232
- end
233
- get "/a.js"
234
- assert_equal "/a.json", body
235
- get "/b.js"
236
- assert_equal "/b.js", body
237
- get "/b.ru"
238
- assert_equal 404, status
239
- get "/c.js"
240
- assert_equal "/c.json", body
241
- get "/c.json"
242
- assert_equal "/c.json", body
243
- get "/c.ru"
244
- assert_equal 404, status
245
- get "/d"
246
- assert_equal "/d.js?foo=bar", body
247
- get "/d.js"
248
- assert_equal "/d.js?foo=bar", body
249
- get "/e.xml"
250
- assert_equal 404, status
251
- end
252
-
253
- should 'generate absolute urls' do
254
- mock_app do
255
- get(:hash, :with => :id){ absolute_url(:hash, :id => 1) }
256
- end
257
- get "/hash/2"
258
- assert_equal "http://example.org/hash/1", body
259
- get "https://example.org/hash/2"
260
- assert_equal "https://example.org/hash/1", body
261
- end
262
-
263
- should 'generate proper absolute urls for mounted apps' do
264
- class Test < Padrino::Application
265
- get :foo do
266
- absolute_url(:foo, :id => 1)
267
- end
268
- end
269
- Padrino.mount("Test").to("/test")
270
- @app = Padrino.application
271
- get('/test/foo')
272
- assert_equal 'http://example.org/test/foo?id=1', body
273
- end
274
-
275
- should 'allow regex url with format' do
276
- mock_app do
277
- get(/.*/, :provides => :any) { "regexp" }
278
- end
279
- get "/anything"
280
- assert_equal "regexp", body
281
- end
282
-
283
- should 'use padrino url method' do
284
- mock_app do
285
- end
286
-
287
- assert_equal @app.method(:url).owner, Padrino::Routing::ClassMethods
288
- end
289
-
290
- should 'work correctly with sinatra redirects' do
291
- mock_app do
292
- get(:index) { redirect url(:index) }
293
- get(:google) { redirect "http://google.com" }
294
- get("/foo") { redirect "/bar" }
295
- get("/bar") { "Bar" }
296
- end
297
-
298
- get "/"
299
- assert_equal "http://example.org/", headers['Location']
300
- get "/google"
301
- assert_equal "http://google.com", headers['Location']
302
- get "/foo"
303
- assert_equal "http://example.org/bar", headers['Location']
304
- end
305
-
306
- should "return 406 on Accept-Headers it does not provide" do
307
- mock_app do
308
- get(:a, :provides => [:html, :js]){ content_type }
309
- end
310
-
311
- get "/a", {}, {"HTTP_ACCEPT" => "application/yaml"}
312
- assert_equal 406, status
313
- end
314
-
315
- should "return 406 on file extensions it does not provide and flag is set" do
316
- mock_app do
317
- enable :treat_format_as_accept
318
- get(:a, :provides => [:html, :js]){ content_type }
319
- end
320
-
321
- get "/a.xml", {}, {}
322
- assert_equal 406, status
323
- end
324
-
325
- should "return 404 on file extensions it does not provide and flag is not set" do
326
- mock_app do
327
- get(:a, :provides => [:html, :js]){ content_type }
328
- end
329
-
330
- get "/a.xml", {}, {}
331
- assert_equal 404, status
332
- end
333
-
334
- should "not set content_type to :html if Accept */* and html not in provides" do
335
- mock_app do
336
- get("/foo", :provides => [:json, :xml]) { content_type.to_s }
337
- end
338
-
339
- get '/foo', {}, { 'HTTP_ACCEPT' => '*/*;q=0.5' }
340
- assert_equal 'json', body
341
- end
342
-
343
- should "set content_type to :json if Accept contains */*" do
344
- mock_app do
345
- get("/foo", :provides => [:json]) { content_type.to_s }
346
- end
347
-
348
- get '/foo', {}, { 'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' }
349
- assert_equal 'json', body
350
- end
351
-
352
- should 'set and get content_type' do
353
- mock_app do
354
- get("/foo"){ content_type(:json); content_type.to_s }
355
- end
356
- get "/foo"
357
- assert_equal 'application/json;charset=utf-8', content_type
358
- assert_equal 'json', body
359
- end
360
-
361
- should "send the appropriate number of params" do
362
- mock_app do
363
- get('/id/:user_id', :provides => [:json]) { |user_id, format| user_id}
364
- end
365
- get '/id/5.json'
366
- assert_equal '5', body
367
- end
368
-
369
- should "allow .'s in param values" do
370
- skip
371
- mock_app do
372
- get('/id/:email', :provides => [:json]) { |email, format| [email, format] * '/' }
373
- end
374
- get '/id/foo@bar.com.json'
375
- assert_equal 'foo@bar.com/json', body
376
- end
377
-
378
- should "set correct content_type for Accept not equal to */* even if */* also provided" do
379
- mock_app do
380
- get("/foo", :provides => [:html, :js, :xml]) { content_type.to_s }
381
- end
382
-
383
- get '/foo', {}, { 'HTTP_ACCEPT' => 'application/javascript, */*;q=0.5' }
384
- assert_equal 'js', body
385
- end
386
-
387
- should "return the first content type in provides if accept header is empty" do
388
- mock_app do
389
- get(:a, :provides => [:js]){ content_type.to_s }
390
- end
391
-
392
- get "/a", {}, {}
393
- assert_equal "js", body
394
- end
395
-
396
- should "not default to HTML if HTML is not provided and no type is given" do
397
- mock_app do
398
- get(:a, :provides => [:js]){ content_type }
399
- end
400
-
401
- get "/a", {}, {}
402
- assert_equal "application/javascript;charset=utf-8", content_type
403
- end
404
-
405
- should "not match routes if url_format and http_accept is provided but not included" do
406
- mock_app do
407
- get(:a, :provides => [:js, :html]){ content_type }
408
- end
409
-
410
- get "/a.xml", {}, {"HTTP_ACCEPT" => "text/html"}
411
- assert_equal 404, status
412
- end
413
-
414
- should "generate routes for format simple" do
415
- mock_app do
416
- get(:foo, :provides => [:html, :rss]) { render :haml, "Test" }
417
- end
418
- get "/foo"
419
- assert_equal "Test\n", body
420
- get "/foo.rss"
421
- assert_equal "Test\n", body
422
- end
423
-
424
- should "should inject the controller name into the request" do
425
- mock_app do
426
- controller :posts do
427
- get(:index) { request.controller }
428
- controller :mini do
429
- get(:index) { request.controller }
430
- end
431
- end
432
- end
433
- get "/posts"
434
- assert_equal "posts", body
435
- get "/mini"
436
- assert_equal "mini", body
437
- end
438
-
439
- should "should inject the action name into the request" do
440
- mock_app do
441
- controller :posts do
442
- get('/omnomnom(/:id)') { request.action.inspect }
443
- controller :mini do
444
- get([:a, :b, :c]) { request.action.inspect }
445
- end
446
- end
447
- end
448
- get "/posts/omnomnom"
449
- assert_equal "\"/omnomnom(/:id)\"", body
450
- get "/mini/a/b/c"
451
- assert_equal ":a", body
452
- end
453
-
454
- should "support not_found" do
455
- mock_app do
456
- not_found { 'whatever' }
457
-
458
- get :index, :map => "/" do
459
- 'index'
460
- end
461
- end
462
- get '/wrong'
463
- assert_equal 404, status
464
- assert_equal 'whatever', body
465
- get '/'
466
- assert_equal 'index', body
467
- assert_equal 200, status
468
- end
469
-
470
- should "should inject the route into the request" do
471
- mock_app do
472
- controller :posts do
473
- get(:index) { request.route_obj.name.to_s }
474
- end
475
- end
476
- get "/posts"
477
- assert_equal "posts_index", body
478
- end
479
-
480
- should "preserve the format if you set it manually" do
481
- mock_app do
482
- before do
483
- params[:format] = "json"
484
- end
485
-
486
- get "test", :provides => [:html, :json] do
487
- content_type.inspect
488
- end
489
- end
490
- get "/test"
491
- assert_equal ":json", body
492
- get "/test.html"
493
- assert_equal ":json", body
494
- get "/test.php"
495
- assert_equal ":json", body
496
- end
497
-
498
- should "correctly accept '.' in the route" do
499
- mock_app do
500
- get "test.php", :provides => [:html, :json] do
501
- content_type.inspect
502
- end
503
- end
504
- get "/test.php"
505
- assert_equal ":html", body
506
- get "/test.php.json"
507
- assert_equal ":json", body
508
- end
509
-
510
- should "correctly accept priority of format" do
511
- mock_app do
512
- get "test.php", :provides => [:html, :json, :xml] do
513
- content_type.inspect
514
- end
515
- end
516
-
517
- get "/test.php"
518
- assert_equal ":html", body
519
- get "/test.php", {}, { 'HTTP_ACCEPT' => 'application/xml' }
520
- assert_equal ":xml", body
521
- get "/test.php?format=json", { 'HTTP_ACCEPT' => 'application/xml' }
522
- assert_equal ":json", body
523
- get "/test.php.json?format=html", { 'HTTP_ACCEPT' => 'application/xml' }
524
- assert_equal ":json", body
525
- end
526
-
527
- should "generate routes for format with controller" do
528
- mock_app do
529
- controller :posts do
530
- get(:index, :provides => [:html, :rss, :atom, :js]) { render :haml, "Index.#{content_type}" }
531
- get(:show, :with => :id, :provides => [:html, :rss, :atom]) { render :haml, "Show.#{content_type}" }
532
- end
533
- end
534
- get "/posts"
535
- assert_equal "Index.html\n", body
536
- get "/posts.rss"
537
- assert_equal "Index.rss\n", body
538
- get "/posts.atom"
539
- assert_equal "Index.atom\n", body
540
- get "/posts.js"
541
- assert_equal "Index.js\n", body
542
- get "/posts/show/5"
543
- assert_equal "Show.html\n", body
544
- get "/posts/show/5.rss"
545
- assert_equal "Show.rss\n", body
546
- get "/posts/show/10.atom"
547
- assert_equal "Show.atom\n", body
548
- end
549
-
550
- should 'map routes' do
551
- mock_app do
552
- get(:bar){ "bar" }
553
- end
554
- get "/bar"
555
- assert_equal "bar", body
556
- assert_equal "/bar", @app.url(:bar)
557
- end
558
-
559
- should 'remove index from path' do
560
- mock_app do
561
- get(:index){ "index" }
562
- get("/accounts/index"){ "accounts" }
563
- end
564
- get "/"
565
- assert_equal "index", body
566
- assert_equal "/", @app.url(:index)
567
- get "/accounts/index"
568
- assert_equal "accounts", body
569
- end
570
-
571
- should 'remove index from path with params' do
572
- mock_app do
573
- get(:index, :with => :name){ "index with #{params[:name]}" }
574
- end
575
- get "/bobby"
576
- assert_equal "index with bobby", body
577
- assert_equal "/john", @app.url(:index, :name => "john")
578
- end
579
-
580
- should 'parse named params' do
581
- mock_app do
582
- get(:print, :with => :id){ "Im #{params[:id]}" }
583
- end
584
- get "/print/9"
585
- assert_equal "Im 9", body
586
- assert_equal "/print/9", @app.url(:print, :id => 9)
587
- end
588
-
589
- should '405 on wrong request_method' do
590
- mock_app do
591
- post('/bar'){ "bar" }
592
- end
593
- get "/bar"
594
- assert_equal 405, status
595
- end
596
-
597
- should 'respond to' do
598
- mock_app do
599
- get(:a, :provides => :js){ "js" }
600
- get(:b, :provides => :any){ "any" }
601
- get(:c, :provides => [:js, :json]){ "js,json" }
602
- get(:d, :provides => [:html, :js]){ "html,js"}
603
- end
604
- get "/a"
605
- assert_equal 200, status
606
- assert_equal "js", body
607
- get "/a.js"
608
- assert_equal "js", body
609
- get "/b"
610
- assert_equal "any", body
611
- # TODO randomly fails in minitest :(
612
- # assert_raises(RuntimeError) { get "/b.foo" }
613
- get "/c"
614
- assert_equal 200, status
615
- assert_equal "js,json", body
616
- get "/c.js"
617
- assert_equal "js,json", body
618
- get "/c.json"
619
- assert_equal "js,json", body
620
- get "/d"
621
- assert_equal "html,js", body
622
- get "/d.js"
623
- assert_equal "html,js", body
624
- end
625
-
626
- should 'respond_to and set content_type' do
627
- Rack::Mime::MIME_TYPES['.foo'] = 'application/foo'
628
- mock_app do
629
- get :a, :provides => :any do
630
- case content_type
631
- when :js then "js"
632
- when :json then "json"
633
- when :foo then "foo"
634
- when :html then "html"
635
- end
636
- end
637
- end
638
- get "/a.js"
639
- assert_equal "js", body
640
- assert_equal 'application/javascript;charset=utf-8', response["Content-Type"]
641
- get "/a.json"
642
- assert_equal "json", body
643
- assert_equal 'application/json;charset=utf-8', response["Content-Type"]
644
- get "/a.foo"
645
- assert_equal "foo", body
646
- assert_equal 'application/foo;charset=utf-8', response["Content-Type"]
647
- get "/a"
648
- assert_equal "html", body
649
- assert_equal 'text/html;charset=utf-8', response["Content-Type"]
650
- end
651
-
652
- should 'use controllers' do
653
- mock_app do
654
- controller "/admin" do
655
- get("/"){ "index" }
656
- get("/show/:id"){ "show #{params[:id]}" }
657
- end
658
- end
659
- get "/admin"
660
- assert_equal "index", body
661
- get "/admin/show/1"
662
- assert_equal "show 1", body
663
- end
664
-
665
- should 'use named controllers' do
666
- mock_app do
667
- controller :admin do
668
- get(:index, :with => :id){ params[:id] }
669
- get(:show, :with => :id){ "show #{params[:id]}" }
670
- end
671
- controllers :foo, :bar do
672
- get(:index){ "foo_bar_index" }
673
- end
674
- end
675
- get "/admin/1"
676
- assert_equal "1", body
677
- get "/admin/show/1"
678
- assert_equal "show 1", body
679
- assert_equal "/admin/1", @app.url(:admin_index, :id => 1)
680
- assert_equal "/admin/show/1", @app.url(:admin_show, :id => 1)
681
- get "/foo/bar"
682
- assert_equal "foo_bar_index", body
683
- end
684
-
685
- should 'use map and with' do
686
- mock_app do
687
- get :index, :map => '/bugs', :with => :id do
688
- params[:id]
689
- end
690
- end
691
- get '/bugs/4'
692
- assert_equal '4', body
693
- assert_equal "/bugs/4", @app.url(:index, :id => 4)
694
- end
695
-
696
- should "ignore trailing delimiters within a named controller" do
697
- mock_app do
698
- controller :posts do
699
- get(:index, :provides => [:html, :js]){ "index" }
700
- get(:new) { "new" }
701
- get(:show, :with => :id){ "show #{params[:id]}" }
702
- end
703
- end
704
- get "/posts"
705
- assert_equal "index", body
706
- get "/posts/"
707
- assert_equal "index", body
708
- get "/posts.js"
709
- assert_equal "index", body
710
- get "/posts.js/"
711
- assert_equal "index", body
712
- get "/posts/new"
713
- assert_equal "new", body
714
- get "/posts/new/"
715
- assert_equal "new", body
716
- end
717
-
718
- should "ignore trailing delimiters within a named controller for unnamed actions" do
719
- mock_app do
720
- controller :accounts do
721
- get("/") { "account_index" }
722
- get("/new") { "new" }
723
- end
724
- controller :votes do
725
- get("/") { "vote_index" }
726
- end
727
- end
728
- get "/accounts"
729
- assert_equal "account_index", body
730
- get "/accounts/"
731
- assert_equal "account_index", body
732
- get "/accounts/new"
733
- assert_equal "new", body
734
- get "/accounts/new/"
735
- assert_equal "new", body
736
- get "/votes"
737
- assert_equal "vote_index", body
738
- get "/votes/"
739
- assert_equal "vote_index", body
740
- end
741
-
742
- should 'use named controllers with array routes' do
743
- mock_app do
744
- controller :admin do
745
- get(:index){ "index" }
746
- get(:show, :with => :id){ "show #{params[:id]}" }
747
- end
748
- controllers :foo, :bar do
749
- get(:index){ "foo_bar_index" }
750
- end
751
- end
752
- get "/admin"
753
- assert_equal "index", body
754
- get "/admin/show/1"
755
- assert_equal "show 1", body
756
- assert_equal "/admin", @app.url(:admin, :index)
757
- assert_equal "/admin/show/1", @app.url(:admin, :show, :id => 1)
758
- get "/foo/bar"
759
- assert_equal "foo_bar_index", body
760
- end
761
-
762
- should "support a reindex action and remove index inside controller" do
763
- mock_app do
764
- controller :posts do
765
- get(:index){ "index" }
766
- get(:reindex){ "reindex" }
767
- end
768
- end
769
- get "/posts"
770
- assert_equal "index", body
771
- get "/posts/reindex"
772
- assert_equal "/posts/reindex", @app.url(:posts, :reindex)
773
- assert_equal "reindex", body
774
- end
775
-
776
- should 'use uri_root' do
777
- mock_app do
778
- get(:foo){ "foo" }
779
- end
780
- @app.uri_root = '/'
781
- assert_equal "/foo", @app.url(:foo)
782
- @app.uri_root = '/testing'
783
- assert_equal "/testing/foo", @app.url(:foo)
784
- @app.uri_root = '/testing/'
785
- assert_equal "/testing/foo", @app.url(:foo)
786
- @app.uri_root = 'testing/bar///'
787
- assert_equal "/testing/bar/foo", @app.url(:foo)
788
- end
789
-
790
- should 'use uri_root with controllers' do
791
- mock_app do
792
- controller :foo do
793
- get(:bar){ "bar" }
794
- end
795
- end
796
- @app.uri_root = '/testing'
797
- assert_equal "/testing/foo/bar", @app.url(:foo, :bar)
798
- end
799
-
800
- should 'use RACK_BASE_URI' do
801
- mock_app do
802
- get(:foo){ "foo" }
803
- end
804
- # Wish there was a side-effect free way to test this...
805
- ENV['RACK_BASE_URI'] = '/'
806
- assert_equal "/foo", @app.url(:foo)
807
- ENV['RACK_BASE_URI'] = '/testing'
808
- assert_equal "/testing/foo", @app.url(:foo)
809
- ENV['RACK_BASE_URI'] = nil
810
- end
811
-
812
- should 'reset routes' do
813
- mock_app do
814
- get("/"){ "foo" }
815
- reset_router!
816
- end
817
- get "/"
818
- assert_equal 404, status
819
- end
820
-
821
- should "match params and format" do
822
- app = mock_app do
823
- get '/:id', :provides => [:json, :html] do |id, _|
824
- id
825
- end
826
-
827
- get 'format/:id', :provides => [:json, :html] do |id, format|
828
- format
829
- end
830
- end
831
-
832
- get '/123.html'
833
- assert_equal '123', body
834
-
835
- get 'format/123.html'
836
- assert_equal 'html', body
837
- end
838
-
839
-
840
- should 'respect priorities' do
841
- route_order = []
842
- mock_app do
843
- get(:index, :priority => :normal) { route_order << :normal; pass }
844
- get(:index, :priority => :low) { route_order << :low; "hello" }
845
- get(:index, :priority => :high) { route_order << :high; pass }
846
- end
847
- get '/'
848
- assert_equal [:high, :normal, :low], route_order
849
- assert_equal "hello", body
850
- end
851
-
852
- should 'catch all after controllers' do
853
- mock_app do
854
- get(:index, :with => :slug, :priority => :low) { "catch all" }
855
- controllers :contact do
856
- get(:index) { "contact"}
857
- end
858
- end
859
- get "/contact"
860
- assert_equal "contact", body
861
- get "/foo"
862
- assert_equal "catch all", body
863
- end
864
-
865
- should 'allow optionals' do
866
- mock_app do
867
- get(:show, :map => "/stories/:type(/:category)") do
868
- "#{params[:type]}/#{params[:category]}"
869
- end
870
- end
871
- get "/stories/foo"
872
- assert_equal "foo/", body
873
- get "/stories/foo/bar"
874
- assert_equal "foo/bar", body
875
- end
876
-
877
- should 'apply maps' do
878
- mock_app do
879
- controllers :admin do
880
- get(:index, :map => "/"){ "index" }
881
- get(:show, :with => :id, :map => "/show"){ "show #{params[:id]}" }
882
- get(:edit, :map => "/edit/:id/product"){ "edit #{params[:id]}" }
883
- get(:wacky, :map => "/wacky-:id-:product_id"){ "wacky #{params[:id]}-#{params[:product_id]}" }
884
- end
885
- end
886
- get "/"
887
- assert_equal "index", body
888
- get @app.url(:admin, :index)
889
- assert_equal "index", body
890
- get "/show/1"
891
- assert_equal "show 1", body
892
- get "/edit/1/product"
893
- assert_equal "edit 1", body
894
- get "/wacky-1-2"
895
- assert_equal "wacky 1-2", body
896
- end
897
-
898
- should 'apply maps when given path is kind of hash' do
899
- mock_app do
900
- controllers :admin do
901
- get(:foobar, "/foo/bar"){ "foobar" }
902
- end
903
- end
904
- get "/foo/bar"
905
- assert_equal "foobar", body
906
- end
907
-
908
- should "apply parent to route" do
909
- mock_app do
910
- controllers :project do
911
- get(:index, :parent => :user) { "index #{params[:user_id]}" }
912
- get(:index, :parent => [:user, :section]) { "index #{params[:user_id]} #{params[:section_id]}" }
913
- get(:edit, :with => :id, :parent => :user) { "edit #{params[:id]} #{params[:user_id]}"}
914
- get(:show, :with => :id, :parent => [:user, :product]) { "show #{params[:id]} #{params[:user_id]} #{params[:product_id]}"}
915
- end
916
- end
917
- get "/user/1/project"
918
- assert_equal "index 1", body
919
- get "/user/1/section/3/project"
920
- assert_equal "index 1 3", body
921
- get "/user/1/project/edit/2"
922
- assert_equal "edit 2 1", body
923
- get "/user/1/product/2/project/show/3"
924
- assert_equal "show 3 1 2", body
925
- end
926
-
927
- should "respect parent precedence: controllers parents go before route parents" do
928
- mock_app do
929
- controllers :project do
930
- get(:index, :parent => :user) { "index #{params[:user_id]}" }
931
- end
932
-
933
- controllers :bar, :parent => :foo do
934
- get(:index) { "index on foo #{params[:foo_id]} @ bar" }
935
- get(:index, :parent => :baz) { "index on foo #{params[:foo_id]} @ baz #{params[:baz_id]} @ bar" }
936
- end
937
- end
938
-
939
- get "/user/1/project"
940
- assert_equal "index 1", body
941
- get "/foo/1/bar"
942
- assert_equal "index on foo 1 @ bar", body
943
- get "/foo/1/baz/2/bar"
944
- assert_equal "index on foo 1 @ baz 2 @ bar", body
945
- end
946
-
947
- should "keep a reference to the parent on the route" do
948
- mock_app do
949
- controllers :project do
950
- get(:index, :parent => :user) { "index #{params[:user_id]}" }
951
- get(:index, :parent => [:user, :section]) { "index #{params[:user_id]} #{params[:section_id]}" }
952
- get(:edit, :with => :id, :parent => :user) { "edit #{params[:id]} #{params[:user_id]}"}
953
- get(:show, :with => :id, :parent => [:user, :product]) { "show #{params[:id]} #{params[:user_id]} #{params[:product_id]}"}
954
- end
955
-
956
- controllers :bar, :parent => :foo do
957
- get(:index) { "index on foo/bar" }
958
- get(:index, :parent => :baz) { "index on foo/baz/bar" }
959
- end
960
- end
961
-
962
- # get "/user/1/project"
963
- assert_equal :user, @app.routes[0].parent
964
- # get "/user/1/section/3/project"
965
- assert_equal [:user, :section], @app.routes[2].parent
966
- # get "/user/1/project/edit/2"
967
- assert_equal :user, @app.routes[4].parent
968
- # get "/user/1/product/2/project/show/3"
969
- assert_equal [:user, :product], @app.routes[6].parent
970
- # get "/foo/1/bar"
971
- assert_equal :foo, @app.routes[8].parent
972
- # get "/foo/1/baz/2/bar"
973
- assert_equal [:foo, :baz], @app.routes[10].parent
974
- end
975
-
976
- should "apply parent to controller" do
977
- mock_app do
978
- controller :project, :parent => :user do
979
- get(:index) { "index #{params[:user_id]}"}
980
- get(:edit, :with => :id, :parent => :user) { "edit #{params[:id]} #{params[:user_id]}"}
981
- get(:show, :with => :id, :parent => :product) { "show #{params[:id]} #{params[:user_id]} #{params[:product_id]}"}
982
- end
983
- end
984
-
985
- user_project_url = "/user/1/project"
986
- get user_project_url
987
- assert_equal "index 1", body
988
- assert_equal user_project_url, @app.url(:project, :index, :user_id => 1)
989
-
990
- user_project_edit_url = "/user/1/project/edit/2"
991
- get user_project_edit_url
992
- assert_equal "edit 2 1", body
993
- assert_equal user_project_edit_url, @app.url(:project, :edit, :user_id => 1, :id => 2)
994
-
995
- user_product_project_url = "/user/1/product/2/project/show/3"
996
- get user_product_project_url
997
- assert_equal "show 3 1 2", body
998
- assert_equal user_product_project_url, @app.url(:project, :show, :user_id => 1, :product_id => 2, :id => 3)
999
- end
1000
-
1001
- should "apply parent with shallowing to controller" do
1002
- mock_app do
1003
- controller :project do
1004
- parent :user
1005
- parent :shop, :optional => true
1006
- get(:index) { "index #{params[:user_id]} #{params[:shop_id]}" }
1007
- get(:edit, :with => :id) { "edit #{params[:id]} #{params[:user_id]} #{params[:shop_id]}" }
1008
- get(:show, :with => :id, :parent => :product) { "show #{params[:id]} #{params[:user_id]} #{params[:product_id]} #{params[:shop_id]}" }
1009
- end
1010
- end
1011
-
1012
- assert_equal "/user/1/project", @app.url(:project, :index, :user_id => 1, :shop_id => nil)
1013
- assert_equal "/user/1/shop/23/project", @app.url(:project, :index, :user_id => 1, :shop_id => 23)
1014
-
1015
- user_project_url = "/user/1/project"
1016
- get user_project_url
1017
- assert_equal "index 1 ", body
1018
- assert_equal user_project_url, @app.url(:project, :index, :user_id => 1)
1019
-
1020
- user_project_edit_url = "/user/1/project/edit/2"
1021
- get user_project_edit_url
1022
- assert_equal "edit 2 1 ", body
1023
- assert_equal user_project_edit_url, @app.url(:project, :edit, :user_id => 1, :id => 2)
1024
-
1025
- user_product_project_url = "/user/1/product/2/project/show/3"
1026
- get user_product_project_url
1027
- assert_equal "show 3 1 2 ", body
1028
- assert_equal user_product_project_url, @app.url(:project, :show, :user_id => 1, :product_id => 2, :id => 3)
1029
-
1030
- user_project_url = "/user/1/shop/1/project"
1031
- get user_project_url
1032
- assert_equal "index 1 1", body
1033
- assert_equal user_project_url, @app.url(:project, :index, :user_id => 1, :shop_id => 1)
1034
-
1035
- user_project_edit_url = "/user/1/shop/1/project/edit/2"
1036
- get user_project_edit_url
1037
- assert_equal "edit 2 1 1", body
1038
- assert_equal user_project_edit_url, @app.url(:project, :edit, :user_id => 1, :id => 2, :shop_id => 1)
1039
-
1040
- user_product_project_url = "/user/1/shop/1/product/2/project/show/3"
1041
- get user_product_project_url
1042
- assert_equal "show 3 1 2 1", body
1043
- assert_equal user_product_project_url, @app.url(:project, :show, :user_id => 1, :product_id => 2, :id => 3, :shop_id => 1)
1044
- end
1045
-
1046
- should "respect map in parents with shallowing" do
1047
- mock_app do
1048
- controller :project do
1049
- parent :shop, :map => "/foo/bar"
1050
- get(:index) { "index #{params[:shop_id]}" }
1051
- end
1052
- end
1053
-
1054
- shop_project_url = "/foo/bar/1/project"
1055
- get shop_project_url
1056
- assert_equal "index 1", body
1057
- assert_equal shop_project_url, @app.url(:project, :index, :shop_id => 1)
1058
- end
1059
-
1060
- should "use default values" do
1061
- mock_app do
1062
- controller :lang => :it do
1063
- get(:index, :map => "/:lang") { "lang is #{params[:lang]}" }
1064
- end
1065
- # This is only for be sure that default values
1066
- # work only for the given controller
1067
- get(:foo, :map => "/foo") {}
1068
- end
1069
- assert_equal "/it", @app.url(:index)
1070
- assert_equal "/foo", @app.url(:foo)
1071
- get "/en"
1072
- assert_equal "lang is en", body
1073
- end
1074
-
1075
- should "transitions to the next matching route on pass" do
1076
- mock_app do
1077
- get '/:foo' do
1078
- pass
1079
- 'Hello Foo'
1080
- end
1081
- get '/:bar' do
1082
- 'Hello World'
1083
- end
1084
- end
1085
-
1086
- get '/za'
1087
- assert_equal 'Hello World', body
1088
- end
1089
-
1090
- should "filters by accept header" do
1091
- mock_app do
1092
- get '/foo', :provides => [:xml, :js] do
1093
- request.env['HTTP_ACCEPT']
1094
- end
1095
- end
1096
-
1097
- get '/foo', {}, { 'HTTP_ACCEPT' => 'application/xml' }
1098
- assert ok?
1099
- assert_equal 'application/xml', body
1100
- assert_equal 'application/xml;charset=utf-8', response.headers['Content-Type']
1101
-
1102
- get '/foo.xml'
1103
- assert ok?
1104
- assert_equal 'application/xml;charset=utf-8', response.headers['Content-Type']
1105
-
1106
- get '/foo', {}, { 'HTTP_ACCEPT' => 'application/javascript' }
1107
- assert ok?
1108
- assert_equal 'application/javascript', body
1109
- assert_equal 'application/javascript;charset=utf-8', response.headers['Content-Type']
1110
-
1111
- get '/foo.js'
1112
- assert ok?
1113
- assert_equal 'application/javascript;charset=utf-8', response.headers['Content-Type']
1114
-
1115
- get '/foo', {}, { "HTTP_ACCEPT" => 'text/html' }
1116
- assert_equal 406, status
1117
- end
1118
-
1119
- should "does not allow global provides" do
1120
- mock_app do
1121
- provides :xml
1122
-
1123
- get("/foo"){ "Foo in #{content_type.inspect}" }
1124
- get("/bar"){ "Bar in #{content_type.inspect}" }
1125
- end
1126
-
1127
- get '/foo', {}, { 'HTTP_ACCEPT' => 'application/xml' }
1128
- assert_equal 'Foo in :xml', body
1129
- get '/foo'
1130
- assert_equal 'Foo in :xml', body
1131
-
1132
- get '/bar', {}, { 'HTTP_ACCEPT' => 'application/xml' }
1133
- assert_equal 'Bar in nil', body
1134
- end
1135
-
1136
- should "does not allow global provides in controller" do
1137
- mock_app do
1138
- controller :base do
1139
- provides :xml
1140
-
1141
- get(:foo, "/foo"){ "Foo in #{content_type.inspect}" }
1142
- get(:bar, "/bar"){ "Bar in #{content_type.inspect}" }
1143
- end
1144
- end
1145
-
1146
- get '/foo', {}, { 'HTTP_ACCEPT' => 'application/xml' }
1147
- assert_equal 'Foo in :xml', body
1148
- get '/foo'
1149
- assert_equal 'Foo in :xml', body
1150
-
1151
- get '/bar', {}, { 'HTTP_ACCEPT' => 'application/xml' }
1152
- assert_equal 'Bar in nil', body
1153
- end
1154
-
1155
- should "map non named routes in controllers" do
1156
- mock_app do
1157
- controller :base do
1158
- get("/foo") { "ok" }
1159
- get("/bar") { "ok" }
1160
- end
1161
- end
1162
-
1163
- get "/base/foo"
1164
- assert ok?
1165
- get "/base/bar"
1166
- assert ok?
1167
- end
1168
-
1169
- should "set content_type to :html for both empty Accept as well as Accept text/html" do
1170
- mock_app do
1171
- provides :html
1172
-
1173
- get("/foo"){ content_type.to_s }
1174
- end
1175
-
1176
- get '/foo', {}, {}
1177
- assert_equal 'html', body
1178
-
1179
- get '/foo', {}, { 'HTTP_ACCEPT' => 'text/html' }
1180
- assert_equal 'html', body
1181
- end
1182
-
1183
- should "set content_type to :html if Accept */*" do
1184
- mock_app do
1185
- get("/foo", :provides => [:html, :js]) { content_type.to_s }
1186
- end
1187
- get '/foo', {}, {}
1188
- assert_equal 'html', body
1189
-
1190
- get '/foo', {}, { 'HTTP_ACCEPT' => '*/*;q=0.5' }
1191
- assert_equal 'html', body
1192
- end
1193
-
1194
- should "set content_type to :js if Accept includes both application/javascript and */*;q=0.5" do
1195
- mock_app do
1196
- get("/foo", :provides => [:html, :js]) { content_type.to_s }
1197
- end
1198
- get '/foo', {}, { 'HTTP_ACCEPT' => 'application/javascript, */*;q=0.5' }
1199
- assert_equal 'js', body
1200
- end
1201
-
1202
- should "set content_type to :html if Accept */* and provides of :any" do
1203
- mock_app do
1204
- get("/foo", :provides => :any) { content_type.to_s }
1205
- end
1206
-
1207
- get '/foo', {}, { 'HTTP_ACCEPT' => '*/*' }
1208
- assert_equal 'html', body
1209
- end
1210
-
1211
- should "set content_type to :js if Accept includes both application/javascript, */*;q=0.5 and provides of :any" do
1212
- mock_app do
1213
- get("/foo", :provides => :any) { content_type.to_s }
1214
- end
1215
-
1216
- get '/foo', {}, { 'HTTP_ACCEPT' => 'application/javascript, */*;q=0.5' }
1217
- assert_equal 'js', body
1218
- end
1219
-
1220
- should 'allows custom route-conditions to be set via route options and halt' do
1221
- protector = Module.new do
1222
- def protect(*args)
1223
- condition {
1224
- unless authorize(params["user"], params["password"])
1225
- halt 403, "go away"
1226
- end
1227
- }
1228
- end
1229
- end
1230
-
1231
- mock_app do
1232
- register protector
1233
-
1234
- helpers do
1235
- def authorize(username, password)
1236
- username == "foo" && password == "bar"
1237
- end
1238
- end
1239
-
1240
- get "/", :protect => true do
1241
- "hey"
1242
- end
1243
- end
1244
-
1245
- get "/"
1246
- assert forbidden?
1247
- assert_equal "go away", body
1248
-
1249
- get "/", :user => "foo", :password => "bar"
1250
- assert ok?
1251
- assert_equal "hey", body
1252
- end
1253
-
1254
- should 'allows custom route-conditions to be set via route options using two routes' do
1255
- protector = Module.new do
1256
- def protect(*args)
1257
- condition { authorize(params["user"], params["password"]) }
1258
- end
1259
- end
1260
-
1261
- mock_app do
1262
- register protector
1263
-
1264
- helpers do
1265
- def authorize(username, password)
1266
- username == "foo" && password == "bar"
1267
- end
1268
- end
1269
-
1270
- get "/", :protect => true do
1271
- "hey"
1272
- end
1273
-
1274
- get "/" do
1275
- "go away"
1276
- end
1277
- end
1278
-
1279
- get "/"
1280
- assert_equal "go away", body
1281
-
1282
- get "/", :user => "foo", :password => "bar"
1283
- assert ok?
1284
- assert_equal "hey", body
1285
- end
1286
-
1287
- should "allow concise routing" do
1288
- mock_app do
1289
- get :index, ":id" do
1290
- params[:id]
1291
- end
1292
-
1293
- get :map, "route/:id" do
1294
- params[:id]
1295
- end
1296
- end
1297
-
1298
- get "/123"
1299
- assert_equal "123", body
1300
-
1301
- get "/route/123"
1302
- assert_equal "123", body
1303
- end
1304
-
1305
- should "support halting with 404 and message" do
1306
- mock_app do
1307
- controller do
1308
- get :index do
1309
- halt 404, "not found"
1310
- end
1311
- end
1312
- end
1313
-
1314
- get "/"
1315
- assert_equal 404, status
1316
- assert_equal "not found", body
1317
- end
1318
-
1319
- should "allow passing & halting in before filters" do
1320
- mock_app do
1321
- controller do
1322
- before { env['QUERY_STRING'] == 'secret' or pass }
1323
- get :index do
1324
- "secret index"
1325
- end
1326
- end
1327
-
1328
- controller do
1329
- before { env['QUERY_STRING'] == 'halt' and halt 401, 'go away!' }
1330
- get :index do
1331
- "index"
1332
- end
1333
- end
1334
- end
1335
-
1336
- get "/?secret"
1337
- assert_equal "secret index", body
1338
-
1339
- get "/?halt"
1340
- assert_equal "go away!", body
1341
- assert_equal 401, status
1342
-
1343
- get "/"
1344
- assert_equal "index", body
1345
- end
1346
-
1347
- should 'scope filters in the given controller' do
1348
- mock_app do
1349
- before { @global = 'global' }
1350
- after { @global = nil }
1351
-
1352
- controller :foo do
1353
- before { @foo = :foo }
1354
- after { @foo = nil }
1355
- get("/") { [@foo, @bar, @global].compact.join(" ") }
1356
- end
1357
-
1358
- get("/") { [@foo, @bar, @global].compact.join(" ") }
1359
-
1360
- controller :bar do
1361
- before { @bar = :bar }
1362
- after { @bar = nil }
1363
- get("/") { [@foo, @bar, @global].compact.join(" ") }
1364
- end
1365
- end
1366
-
1367
- get "/bar"
1368
- assert_equal "bar global", body
1369
-
1370
- get "/foo"
1371
- assert_equal "foo global", body
1372
-
1373
- get "/"
1374
- assert_equal "global", body
1375
- end
1376
-
1377
- should 'works with optionals params' do
1378
- mock_app do
1379
- get("/foo(/:bar)") { params[:bar] }
1380
- end
1381
-
1382
- get "/foo/bar"
1383
- assert_equal "bar", body
1384
-
1385
- get "/foo"
1386
- assert_equal "", body
1387
- end
1388
-
1389
- should 'work with multiple dashed params' do
1390
- mock_app do
1391
- get "/route/:foo/:bar/:baz", :provides => :html do
1392
- "#{params[:foo]};#{params[:bar]};#{params[:baz]}"
1393
- end
1394
- end
1395
-
1396
- get "/route/foo/bar/baz"
1397
- assert_equal 'foo;bar;baz', body
1398
-
1399
- get "/route/foo/bar-whatever/baz"
1400
- assert_equal 'foo;bar-whatever;baz', body
1401
- end
1402
-
1403
- should 'work with arbitrary params' do
1404
- mock_app do
1405
- get(:testing) { params[:foo] }
1406
- end
1407
-
1408
- url = @app.url(:testing, :foo => 'bar')
1409
- assert_equal "/testing?foo=bar", url
1410
- get url
1411
- assert_equal "bar", body
1412
- end
1413
-
1414
- should 'ignore nil params' do
1415
- mock_app do
1416
- get(:testing, :provides => [:html, :json]) do
1417
- end
1418
- end
1419
- assert_equal '/testing.html', @app.url(:testing, :format => :html)
1420
- assert_equal '/testing', @app.url(:testing, :format => nil)
1421
- end
1422
-
1423
- should 'be able to access params in a before filter' do
1424
- username_from_before_filter = nil
1425
-
1426
- mock_app do
1427
- before do
1428
- username_from_before_filter = params[:username]
1429
- end
1430
-
1431
- get :users, :with => :username do
1432
- end
1433
- end
1434
- get '/users/josh'
1435
- assert_equal 'josh', username_from_before_filter
1436
- end
1437
-
1438
- should "be able to access params normally when a before filter is specified" do
1439
- mock_app do
1440
- before { }
1441
- get :index do
1442
- params.inspect
1443
- end
1444
- end
1445
- get '/?test=what'
1446
- assert_equal '{"test"=>"what"}', body
1447
- end
1448
-
1449
- should 'work with controller and arbitrary params' do
1450
- mock_app do
1451
- get(:testing) { params[:foo] }
1452
- controller :test1 do
1453
- get(:url1) { params[:foo] }
1454
- get(:url2, :provides => [:html, :json]) { params[:foo] }
1455
- end
1456
- end
1457
-
1458
- url = @app.url(:test1, :url1, :foo => 'bar1')
1459
- assert_equal "/test1/url1?foo=bar1", url
1460
- get url
1461
- assert_equal "bar1", body
1462
-
1463
- url = @app.url(:test1, :url2, :foo => 'bar2')
1464
- assert_equal "/test1/url2?foo=bar2", url
1465
- get url
1466
- assert_equal "bar2", body
1467
- end
1468
-
1469
- should "parse two routes with the same path but different http verbs" do
1470
- mock_app do
1471
- get(:index) { "This is the get index" }
1472
- post(:index) { "This is the post index" }
1473
- end
1474
- get "/"
1475
- assert_equal "This is the get index", body
1476
- post "/"
1477
- assert_equal "This is the post index", body
1478
- end
1479
-
1480
- should "use optionals params" do
1481
- mock_app do
1482
- get(:index, :map => "/(:foo(/:bar))") { "#{params[:foo]}-#{params[:bar]}" }
1483
- end
1484
- get "/foo"
1485
- assert_equal "foo-", body
1486
- get "/foo/bar"
1487
- assert_equal "foo-bar", body
1488
- end
1489
-
1490
- should "parse two routes with the same path but different http verbs and provides" do
1491
- mock_app do
1492
- get(:index, :provides => [:html, :json]) { "This is the get index.#{content_type}" }
1493
- post(:index, :provides => [:html, :json]) { "This is the post index.#{content_type}" }
1494
- end
1495
- get "/"
1496
- assert_equal "This is the get index.html", body
1497
- post "/"
1498
- assert_equal "This is the post index.html", body
1499
- get "/.json"
1500
- assert_equal "This is the get index.json", body
1501
- get "/.js"
1502
- assert_equal 404, status
1503
- post "/.json"
1504
- assert_equal "This is the post index.json", body
1505
- post "/.js"
1506
- assert_equal 404, status
1507
- end
1508
-
1509
- should "allow controller level mapping" do
1510
- mock_app do
1511
- controller :map => "controller-:id" do
1512
- get(:url3) { "#{params[:id]}" }
1513
- get(:url4, :map => 'test-:id2') { "#{params[:id]}, #{params[:id2]}" }
1514
- end
1515
- end
1516
-
1517
- url = @app.url(:url3, :id => 1)
1518
- assert_equal "/controller-1/url3", url
1519
- get url
1520
- assert_equal "1", body
1521
-
1522
- url = @app.url(:url4, 1, 2)
1523
- assert_equal "/controller-1/test-2", url
1524
- get url
1525
- assert_equal "1, 2", body
1526
- end
1527
-
1528
- should "replace name of named controller with mapping path" do
1529
- mock_app do
1530
- controller :ugly, :map => "/pretty/:id" do
1531
- get(:url3) { "#{params[:id]}" }
1532
- get(:url4, :map => 'test-:id2') { "#{params[:id]}, #{params[:id2]}" }
1533
- end
1534
- controller :voldemort, :map => "" do
1535
- get(:url5) { "okay" }
1536
- end
1537
- end
1538
-
1539
- url = @app.url(:ugly, :url3, :id => 1)
1540
- assert_equal "/pretty/1/url3", url
1541
- get url
1542
- assert_equal "1", body
1543
-
1544
- url = @app.url(:ugly, :url4, 3, 5)
1545
- assert_equal "/pretty/3/test-5", url
1546
- get url
1547
- assert_equal "3, 5", body
1548
-
1549
- url = @app.url(:voldemort, :url5)
1550
- assert_equal "/url5", url
1551
- get url
1552
- assert_equal 'okay', body
1553
- end
1554
-
1555
- should 'use absolute and relative maps' do
1556
- mock_app do
1557
- controller :one do
1558
- parent :three
1559
- get :index, :map => 'one' do; end
1560
- get :index2, :map => '/one' do; end
1561
- end
1562
-
1563
- controller :two, :map => 'two' do
1564
- parent :three
1565
- get :index, :map => 'two' do; end
1566
- get :index2, :map => '/two', :with => :id do; end
1567
- end
1568
- end
1569
- assert_equal "/three/three_id/one", @app.url(:one, :index, 'three_id')
1570
- assert_equal "/one", @app.url(:one, :index2)
1571
- assert_equal "/two/three/three_id/two", @app.url(:two, :index, 'three_id')
1572
- assert_equal "/two/four_id", @app.url(:two, :index2, 'four_id')
1573
- end
1574
-
1575
- should "work with params and parent options" do
1576
- mock_app do
1577
- controller :test2, :parent => :parent1, :parent1_id => 1 do
1578
- get(:url3) { params[:foo] }
1579
- get(:url4, :with => :with1) { params[:foo] }
1580
- get(:url5, :with => :with2, :provides => [:html]) { params[:foo] }
1581
- end
1582
- end
1583
-
1584
- url = @app.url(:test2, :url3, :foo => 'bar3')
1585
- assert_equal "/parent1/1/test2/url3?foo=bar3", url
1586
- get url
1587
- assert_equal "bar3", body
1588
-
1589
- url = @app.url(:test2, :url4, :with1 => 'awith1', :foo => 'bar4')
1590
- assert_equal "/parent1/1/test2/url4/awith1?foo=bar4", url
1591
- get url
1592
- assert_equal "bar4", body
1593
-
1594
- url = @app.url(:test2, :url5, :with2 => 'awith1', :foo => 'bar5')
1595
- assert_equal "/parent1/1/test2/url5/awith1?foo=bar5", url
1596
- get url
1597
- assert_equal "bar5", body
1598
- end
1599
-
1600
- should "parse params without explicit provides for every matching route" do
1601
- mock_app do
1602
- get(:index, :map => "/foos/:bar") { "get bar = #{params[:bar]}" }
1603
- post :create, :map => "/foos/:bar", :provides => [:html, :js] do
1604
- "post bar = #{params[:bar]}"
1605
- end
1606
- end
1607
-
1608
- get "/foos/hello"
1609
- assert_equal "get bar = hello", body
1610
- post "/foos/hello"
1611
- assert_equal "post bar = hello", body
1612
- post "/foos/hello.js"
1613
- assert_equal "post bar = hello", body
1614
- end
1615
-
1616
- should "properly route to first foo with two similar routes" do
1617
- mock_app do
1618
- controllers do
1619
- get('/foo/') { "this is foo" }
1620
- get(:show, :map => "/foo/:bar/:id") { "/foo/#{params[:bar]}/#{params[:id]}" }
1621
- end
1622
- end
1623
- get "/foo"
1624
- assert_equal "this is foo", body
1625
- get "/foo/"
1626
- assert_equal "this is foo", body
1627
- get '/foo/5/10'
1628
- assert_equal "/foo/5/10", body
1629
- end
1630
-
1631
- should "index routes should be optional when nested" do
1632
- mock_app do
1633
- controller '/users', :provides => [:json] do
1634
- get '/' do
1635
- "foo"
1636
- end
1637
- end
1638
- end
1639
- get "/users.json"
1640
- assert_equal "foo", body
1641
- end
1642
-
1643
- should "use provides as conditional" do
1644
- mock_app do
1645
- provides :json
1646
- get "/" do
1647
- "foo"
1648
- end
1649
- end
1650
- get "/.json"
1651
- assert_equal "foo", body
1652
- end
1653
-
1654
- should_eventually "reset provides for routes that didn't use it" do
1655
- mock_app do
1656
- get('/foo', :provides => :js){}
1657
- get('/bar'){}
1658
- end
1659
- get '/foo'
1660
- assert ok?
1661
- get '/foo.js'
1662
- assert ok?
1663
- get '/bar'
1664
- assert ok?
1665
- get '/bar.js'
1666
- assert_equal 404, status
1667
- end
1668
-
1669
- should "pass controller conditions to each route" do
1670
- counter = 0
1671
-
1672
- mock_app do
1673
- self.class.send(:define_method, :increment!) do |*args|
1674
- condition { counter += 1 }
1675
- end
1676
-
1677
- controller :posts, :conditions => {:increment! => true} do
1678
- get("/foo") { "foo" }
1679
- get("/bar") { "bar" }
1680
- end
1681
-
1682
- end
1683
-
1684
- get "/posts/foo"
1685
- get "/posts/bar"
1686
- assert_equal 2, counter
1687
- end
1688
-
1689
- should "allow controller conditions to be overridden" do
1690
- counter = 0
1691
-
1692
- mock_app do
1693
- self.class.send(:define_method, :increment!) do |increment|
1694
- condition { counter += 1 } if increment
1695
- end
1696
-
1697
- controller :posts, :conditions => {:increment! => true} do
1698
- get("/foo") { "foo" }
1699
- get("/bar", :increment! => false) { "bar" }
1700
- end
1701
-
1702
- end
1703
-
1704
- get "/posts/foo"
1705
- get "/posts/bar"
1706
- assert_equal 1, counter
1707
- end
1708
-
1709
- should "parse params with class level provides" do
1710
- mock_app do
1711
- controllers :posts, :provides => [:html, :js] do
1712
- post(:create, :map => "/foo/:bar/:baz/:id") {
1713
- "POST CREATE #{params[:bar]} - #{params[:baz]} - #{params[:id]}"
1714
- }
1715
- end
1716
- controllers :topics, :provides => [:js, :html] do
1717
- get(:show, :map => "/foo/:bar/:baz/:id") { render "topics/show" }
1718
- post(:create, :map => "/foo/:bar/:baz") { "TOPICS CREATE #{params[:bar]} - #{params[:baz]}" }
1719
- end
1720
- end
1721
- post "/foo/bar/baz.js"
1722
- assert_equal "TOPICS CREATE bar - baz", body, "should parse params with explicit .js"
1723
- post @app.url(:topics, :create, :format => :js, :bar => 'bar', :baz => 'baz')
1724
- assert_equal "TOPICS CREATE bar - baz", body, "should parse params from generated url"
1725
- post "/foo/bar/baz/5.js"
1726
- assert_equal "POST CREATE bar - baz - 5", body
1727
- post @app.url(:posts, :create, :format => :js, :bar => 'bar', :baz => 'baz', :id => 5)
1728
- assert_equal "POST CREATE bar - baz - 5", body
1729
- end
1730
-
1731
- should "parse params properly with inline provides" do
1732
- mock_app do
1733
- controllers :posts do
1734
- post(:create, :map => "/foo/:bar/:baz/:id", :provides => [:html, :js]) {
1735
- "POST CREATE #{params[:bar]} - #{params[:baz]} - #{params[:id]}"
1736
- }
1737
- end
1738
- controllers :topics do
1739
- get(:show, :map => "/foo/:bar/:baz/:id", :provides => [:html, :js]) { render "topics/show" }
1740
- post(:create, :map => "/foo/:bar/:baz", :provides => [:html, :js]) { "TOPICS CREATE #{params[:bar]} - #{params[:baz]}" }
1741
- end
1742
- end
1743
- post @app.url(:topics, :create, :format => :js, :bar => 'bar', :baz => 'baz')
1744
- assert_equal "TOPICS CREATE bar - baz", body, "should properly post to topics create action"
1745
- post @app.url(:posts, :create, :format => :js, :bar => 'bar', :baz => 'baz', :id => 5)
1746
- assert_equal "POST CREATE bar - baz - 5", body, "should properly post to create action"
1747
- end
1748
-
1749
- should "have overideable format" do
1750
- ::Rack::Mime::MIME_TYPES[".other"] = "text/html"
1751
- mock_app do
1752
- before do
1753
- params[:format] ||= :other
1754
- end
1755
- get("/format_test", :provides => [:html, :other]){ content_type.to_s }
1756
- end
1757
- get "/format_test"
1758
- assert_equal "other", body
1759
- ::Rack::Mime::MIME_TYPES.delete('.other')
1760
- end
1761
-
1762
- should 'invokes handlers registered with ::error when raised' do
1763
- mock_app do
1764
- set :raise_errors, false
1765
- error(FooError) { 'Foo!' }
1766
- get '/' do
1767
- raise FooError
1768
- end
1769
- end
1770
- get '/'
1771
- assert_equal 500, status
1772
- assert_equal 'Foo!', body
1773
- end
1774
-
1775
- should 'have MethodOverride middleware' do
1776
- mock_app do
1777
- put('/') { 'okay' }
1778
- end
1779
- assert @app.method_override?
1780
- post '/', {'_method'=>'PUT'}, {}
1781
- assert_equal 200, status
1782
- assert_equal 'okay', body
1783
- end
1784
-
1785
- should 'return value from params' do
1786
- mock_app do
1787
- get("/foo/:bar"){ raise "'bar' should be a string" unless params[:bar].kind_of? String}
1788
- end
1789
- get "/foo/50"
1790
- assert ok?
1791
- end
1792
-
1793
- should 'have MethodOverride middleware with more options' do
1794
- mock_app do
1795
- put('/hi', :provides => [:json]) { 'hi' }
1796
- end
1797
- post '/hi', {'_method'=>'PUT'}
1798
- assert_equal 200, status
1799
- assert_equal 'hi', body
1800
- post '/hi.json', {'_method'=>'PUT'}
1801
- assert_equal 200, status
1802
- assert_equal 'hi', body
1803
- post '/hi.json'
1804
- assert_equal 405, status
1805
- end
1806
-
1807
- should 'parse nested params' do
1808
- mock_app do
1809
- get(:index) { "%s %s" % [params[:account][:name], params[:account][:surname]] }
1810
- end
1811
- get "/?account[name]=foo&account[surname]=bar"
1812
- assert_equal 'foo bar', body
1813
- get @app.url(:index, "account[name]" => "foo", "account[surname]" => "bar")
1814
- assert_equal 'foo bar', body
1815
- end
1816
-
1817
- should 'render sinatra NotFound page' do
1818
- mock_app { set :environment, :development }
1819
- get "/"
1820
- assert_equal 404, status
1821
- assert_match %r{(Sinatra doesn&rsquo;t know this ditty.|<h1>Not Found</h1>)}, body
1822
- end
1823
-
1824
- should 'render a custom NotFound page' do
1825
- mock_app do
1826
- error(Sinatra::NotFound) { "not found" }
1827
- end
1828
- get "/"
1829
- assert_equal 404, status
1830
- assert_match /not found/, body
1831
- end
1832
-
1833
- should 'render a custom 404 page using not_found' do
1834
- mock_app do
1835
- not_found { "custom 404 not found" }
1836
- end
1837
- get "/"
1838
- assert_equal 404, status
1839
- assert_equal "custom 404 not found", body
1840
- end
1841
-
1842
- should 'render a custom error page using error method' do
1843
- skip
1844
- mock_app do
1845
- error(404) { "custom 404 error" }
1846
- end
1847
- get "/"
1848
- assert_equal 404, status
1849
- assert_equal "custom 404 error", body
1850
- end
1851
-
1852
- should 'render a custom 403 page' do
1853
- mock_app do
1854
- error(403) { "custom 403 not found" }
1855
- get("/") { status 403 }
1856
- end
1857
- get "/"
1858
- assert_equal 403, status
1859
- assert_equal "custom 403 not found", body
1860
- end
1861
-
1862
- should 'recognize paths' do
1863
- mock_app do
1864
- controller :foo do
1865
- get(:bar, :map => "/my/:id/custom-route") { }
1866
- end
1867
- get(:simple, :map => "/simple/:id") { }
1868
- get(:with_format, :with => :id, :provides => :js) { }
1869
- end
1870
- assert_equal [:foo_bar, { :id => "fantastic" }], @app.recognize_path(@app.url(:foo, :bar, :id => :fantastic))
1871
- assert_equal [:foo_bar, { :id => "18" }], @app.recognize_path(@app.url(:foo, :bar, :id => 18))
1872
- assert_equal [:simple, { :id => "bar" }], @app.recognize_path(@app.url(:simple, :id => "bar"))
1873
- assert_equal [:simple, { :id => "true" }], @app.recognize_path(@app.url(:simple, :id => true))
1874
- assert_equal [:simple, { :id => "9" }], @app.recognize_path(@app.url(:simple, :id => 9))
1875
- assert_equal [:with_format, { :id => "bar", :format => "js" }], @app.recognize_path(@app.url(:with_format, :id => "bar", :format => :js))
1876
- assert_equal [:with_format, { :id => "true", :format => "js" }], @app.recognize_path(@app.url(:with_format, :id => true, :format => "js"))
1877
- assert_equal [:with_format, { :id => "9", :format => "js" }], @app.recognize_path(@app.url(:with_format, :id => 9, :format => :js))
1878
- end
1879
-
1880
- should 'have current_path' do
1881
- mock_app do
1882
- controller :foo do
1883
- get(:index) { current_path }
1884
- get :bar, :map => "/paginate/:page" do
1885
- current_path
1886
- end
1887
- get(:after) { current_path }
1888
- end
1889
- end
1890
- get "/paginate/10"
1891
- assert_equal "/paginate/10", body
1892
- get "/foo/after"
1893
- assert_equal "/foo/after", body
1894
- get "/foo"
1895
- assert_equal "/foo", body
1896
- end
1897
-
1898
- should 'accept :map and :parent' do
1899
- mock_app do
1900
- controller :posts do
1901
- get :show, :parent => :users, :map => "posts/:id" do
1902
- "#{params[:user_id]}-#{params[:id]}"
1903
- end
1904
- end
1905
- end
1906
- get '/users/123/posts/321'
1907
- assert_equal "123-321", body
1908
- end
1909
-
1910
- should 'change params in current_path' do
1911
- mock_app do
1912
- get :index, :map => "/paginate/:page" do
1913
- current_path(:page => 66)
1914
- end
1915
- end
1916
- get @app.url(:index, :page => 10)
1917
- assert_equal "/paginate/66", body
1918
- end
1919
-
1920
- should 'not route get :users, :with => :id to /users//' do
1921
- mock_app do
1922
- get(:users, :with => :id) { 'boo' }
1923
- end
1924
- get '/users//'
1925
- assert_equal 404, status
1926
- end
1927
- end