middleman-core 3.2.2 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. checksums.yaml +4 -4
  2. data/features/cli_init.feature +18 -8
  3. data/features/helpers_select_tag.feature +1 -1
  4. data/features/layouts_dir.feature +8 -0
  5. data/features/markdown_redcarpet.feature +2 -2
  6. data/fixtures/asciidoc-app/source/layouts/default.erb +0 -1
  7. data/fixtures/capture-html-app/source/capture_html_haml.html.haml +1 -1
  8. data/fixtures/content-for-app/source/content_for_haml.html.haml +1 -1
  9. data/fixtures/frontmatter-settings-app/source/layouts/override.erb +1 -2
  10. data/fixtures/frontmatter-settings-neighbor-app/source/layouts/override.erb +1 -2
  11. data/fixtures/layouts-dir-app/source/ambiguous.html.erb +5 -0
  12. data/fixtures/layouts-dir-app/source/layouts/other.erb +3 -0
  13. data/fixtures/layouts-dir-app/source/other.erb +3 -0
  14. data/fixtures/link-to-app/source/link_to_haml.html.haml +1 -1
  15. data/fixtures/link-to-app/source/link_to_slim.html.slim +1 -1
  16. data/fixtures/nested-layout-app/source/layouts/inner_haml.haml +1 -1
  17. data/fixtures/nested-layout-app/source/layouts/inner_slim.slim +1 -1
  18. data/fixtures/nested-layout-app/source/layouts/outer_haml.haml +1 -1
  19. data/fixtures/nested-layout-app/source/layouts/outer_slim.slim +1 -1
  20. data/lib/middleman-core/application.rb +12 -3
  21. data/lib/middleman-core/cli/build.rb +5 -3
  22. data/lib/middleman-core/cli/console.rb +1 -1
  23. data/lib/middleman-core/cli/init.rb +1 -1
  24. data/lib/middleman-core/core_extensions.rb +0 -1
  25. data/lib/middleman-core/core_extensions/file_watcher.rb +11 -11
  26. data/lib/middleman-core/core_extensions/rendering.rb +40 -66
  27. data/lib/middleman-core/extension.rb +167 -0
  28. data/lib/middleman-core/extensions.rb +2 -151
  29. data/lib/middleman-core/logger.rb +2 -2
  30. data/lib/middleman-core/meta_pages/assets/config.css +13 -0
  31. data/lib/middleman-core/meta_pages/assets/meta.css +19 -3
  32. data/lib/middleman-core/meta_pages/assets/sitemap.css +18 -1
  33. data/lib/middleman-core/meta_pages/config_setting.rb +7 -9
  34. data/lib/middleman-core/meta_pages/sitemap_resource.rb +24 -15
  35. data/lib/middleman-core/meta_pages/sitemap_tree.rb +5 -1
  36. data/lib/middleman-core/meta_pages/templates/config.html.erb +2 -2
  37. data/lib/middleman-core/meta_pages/templates/index.html.erb +18 -8
  38. data/lib/middleman-core/meta_pages/templates/sitemap.html.erb +4 -5
  39. data/lib/middleman-core/preview_server.rb +6 -3
  40. data/lib/middleman-core/renderers/erb.rb +12 -14
  41. data/lib/middleman-core/renderers/haml.rb +10 -0
  42. data/lib/middleman-core/renderers/markdown.rb +5 -1
  43. data/lib/middleman-core/renderers/sass.rb +0 -4
  44. data/lib/middleman-core/renderers/slim.rb +16 -3
  45. data/lib/middleman-core/sitemap/resource.rb +1 -1
  46. data/lib/middleman-core/step_definitions.rb +2 -1
  47. data/lib/middleman-core/templates.rb +3 -1
  48. data/lib/middleman-core/templates/shared/Gemfile.tt +4 -1
  49. data/lib/middleman-core/templates/shared/config.tt +3 -1
  50. data/lib/middleman-core/templates/shared/gitignore +2 -1
  51. data/lib/middleman-core/util.rb +22 -16
  52. data/lib/middleman-core/version.rb +1 -1
  53. data/lib/middleman-more/core_extensions/compass.rb +3 -3
  54. data/lib/middleman-more/core_extensions/default_helpers.rb +18 -15
  55. data/lib/middleman-more/extensions/asset_hash.rb +1 -0
  56. data/middleman-core.gemspec +9 -6
  57. metadata +69 -227
  58. data/features/sass_cache_path.feature +0 -22
  59. data/fixtures/sass-cache-path-custom-app/config.rb +0 -3
  60. data/fixtures/sass-cache-path-custom-app/source/stylesheets/plain.css.sass +0 -4
  61. data/fixtures/sass-cache-path-default-app/config.rb +0 -3
  62. data/fixtures/sass-cache-path-default-app/source/stylesheets/plain.css.sass +0 -4
  63. data/lib/vendored-middleman-deps/hooks-0.2.0/CHANGES.textile +0 -9
  64. data/lib/vendored-middleman-deps/hooks-0.2.0/Gemfile +0 -3
  65. data/lib/vendored-middleman-deps/hooks-0.2.0/README.rdoc +0 -107
  66. data/lib/vendored-middleman-deps/hooks-0.2.0/Rakefile +0 -12
  67. data/lib/vendored-middleman-deps/hooks-0.2.0/hooks.gemspec +0 -22
  68. data/lib/vendored-middleman-deps/hooks-0.2.0/lib/hooks.rb +0 -109
  69. data/lib/vendored-middleman-deps/hooks-0.2.0/lib/hooks/inheritable_attribute.rb +0 -33
  70. data/lib/vendored-middleman-deps/hooks-0.2.0/test/hooks_test.rb +0 -141
  71. data/lib/vendored-middleman-deps/hooks-0.2.0/test/inheritable_attribute_test.rb +0 -55
  72. data/lib/vendored-middleman-deps/hooks-0.2.0/test/test_helper.rb +0 -10
  73. data/lib/vendored-middleman-deps/padrino-core-0.11.4/.document +0 -5
  74. data/lib/vendored-middleman-deps/padrino-core-0.11.4/.gitignore +0 -22
  75. data/lib/vendored-middleman-deps/padrino-core-0.11.4/.yardopts +0 -1
  76. data/lib/vendored-middleman-deps/padrino-core-0.11.4/LICENSE.txt +0 -20
  77. data/lib/vendored-middleman-deps/padrino-core-0.11.4/README.rdoc +0 -294
  78. data/lib/vendored-middleman-deps/padrino-core-0.11.4/Rakefile +0 -5
  79. data/lib/vendored-middleman-deps/padrino-core-0.11.4/bin/padrino +0 -9
  80. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core.rb +0 -200
  81. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application.rb +0 -297
  82. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/flash.rb +0 -229
  83. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/rendering.rb +0 -317
  84. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/rendering/extensions/erubis.rb +0 -64
  85. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/rendering/extensions/haml.rb +0 -28
  86. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/rendering/extensions/slim.rb +0 -14
  87. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/routing.rb +0 -1077
  88. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/showexceptions.rb +0 -21
  89. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/caller.rb +0 -53
  90. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/cli/adapter.rb +0 -24
  91. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/cli/base.rb +0 -159
  92. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/cli/console.rb +0 -20
  93. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/cli/rake.rb +0 -47
  94. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/cli/rake_tasks.rb +0 -52
  95. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/command.rb +0 -38
  96. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/images/404.png +0 -0
  97. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/images/500.png +0 -0
  98. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/loader.rb +0 -224
  99. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/cs.yml +0 -33
  100. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/da.yml +0 -33
  101. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/de.yml +0 -33
  102. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/en.yml +0 -33
  103. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/es.yml +0 -33
  104. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/fr.yml +0 -33
  105. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/hu.yml +0 -33
  106. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/it.yml +0 -39
  107. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/ja.yml +0 -33
  108. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/lv.yml +0 -33
  109. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/nl.yml +0 -33
  110. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/no.yml +0 -33
  111. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/pl.yml +0 -33
  112. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/pt_br.yml +0 -39
  113. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/ro.yml +0 -33
  114. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/ru.yml +0 -34
  115. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/sv.yml +0 -33
  116. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/tr.yml +0 -33
  117. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/uk.yml +0 -33
  118. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/zh_cn.yml +0 -33
  119. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/locale/zh_tw.yml +0 -33
  120. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/logger.rb +0 -438
  121. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/module.rb +0 -58
  122. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/mounter.rb +0 -234
  123. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/reloader.rb +0 -341
  124. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/router.rb +0 -95
  125. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/server.rb +0 -77
  126. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/support_lite.rb +0 -260
  127. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/tasks.rb +0 -21
  128. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/version.rb +0 -20
  129. data/lib/vendored-middleman-deps/padrino-core-0.11.4/padrino-core.gemspec +0 -43
  130. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/app_gem/Gemfile +0 -4
  131. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/app_gem/app/app.rb +0 -3
  132. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/app_gem/app_gem.gemspec +0 -17
  133. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/app_gem/lib/app_gem.rb +0 -7
  134. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/app_gem/lib/app_gem/version.rb +0 -3
  135. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/apps/.components +0 -6
  136. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/apps/.gitignore +0 -7
  137. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/apps/complex.rb +0 -32
  138. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/apps/simple.rb +0 -33
  139. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/a.rb +0 -9
  140. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/b.rb +0 -4
  141. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/c.rb +0 -1
  142. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/circular/e.rb +0 -13
  143. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/circular/f.rb +0 -2
  144. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/circular/g.rb +0 -2
  145. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/fixtures/dependencies/d.rb +0 -4
  146. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/helper.rb +0 -83
  147. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/mini_shoulda.rb +0 -45
  148. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_application.rb +0 -125
  149. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_core.rb +0 -77
  150. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_csrf_protection.rb +0 -80
  151. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_dependencies.rb +0 -44
  152. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_filters.rb +0 -348
  153. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_flash.rb +0 -168
  154. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_locale.rb +0 -21
  155. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_logger.rb +0 -210
  156. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_mounter.rb +0 -199
  157. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_reloader_complex.rb +0 -75
  158. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_reloader_simple.rb +0 -98
  159. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_rendering.rb +0 -545
  160. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_rendering_extensions.rb +0 -14
  161. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_restful_routing.rb +0 -33
  162. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_router.rb +0 -146
  163. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_routing.rb +0 -1927
  164. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_support_lite.rb +0 -56
  165. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/.document +0 -5
  166. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/.gitignore +0 -21
  167. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/.yardopts +0 -1
  168. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/LICENSE.txt +0 -20
  169. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/README.rdoc +0 -239
  170. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/Rakefile +0 -5
  171. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers.rb +0 -57
  172. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/asset_tag_helpers.rb +0 -401
  173. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/breadcrumb_helpers.rb +0 -183
  174. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/form_builder/abstract_form_builder.rb +0 -317
  175. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/form_builder/standard_form_builder.rb +0 -40
  176. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/form_helpers.rb +0 -919
  177. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/format_helpers.rb +0 -372
  178. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/cs.yml +0 -103
  179. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/da.yml +0 -91
  180. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/de.yml +0 -81
  181. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/en.yml +0 -103
  182. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/es.yml +0 -103
  183. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/fr.yml +0 -79
  184. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/hu.yml +0 -103
  185. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/it.yml +0 -89
  186. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/ja.yml +0 -103
  187. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/lv.yml +0 -103
  188. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/nl.yml +0 -82
  189. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/no.yml +0 -91
  190. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/pl.yml +0 -95
  191. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/pt_br.yml +0 -103
  192. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/ro.yml +0 -103
  193. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/ru.yml +0 -103
  194. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/sv.yml +0 -103
  195. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/tr.yml +0 -103
  196. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/uk.yml +0 -103
  197. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/zh_cn.yml +0 -103
  198. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/locale/zh_tw.yml +0 -103
  199. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/number_helpers.rb +0 -283
  200. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/output_helpers.rb +0 -207
  201. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/output_helpers/abstract_handler.rb +0 -96
  202. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/output_helpers/erb_handler.rb +0 -78
  203. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/output_helpers/haml_handler.rb +0 -63
  204. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/output_helpers/slim_handler.rb +0 -78
  205. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/render_helpers.rb +0 -59
  206. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/tag_helpers.rb +0 -292
  207. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/translation_helpers.rb +0 -36
  208. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/padrino-helpers.gemspec +0 -27
  209. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/app.rb +0 -84
  210. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/button_to.erb +0 -8
  211. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/button_to.haml +0 -5
  212. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/button_to.slim +0 -6
  213. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/capture_concat.erb +0 -14
  214. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/capture_concat.haml +0 -12
  215. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/capture_concat.slim +0 -12
  216. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_for.erb +0 -14
  217. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_for.haml +0 -12
  218. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_for.slim +0 -12
  219. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_tag.erb +0 -11
  220. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_tag.haml +0 -9
  221. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/content_tag.slim +0 -9
  222. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/current_engine.erb +0 -5
  223. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/current_engine.haml +0 -5
  224. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/current_engine.slim +0 -5
  225. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/fields_for.erb +0 -20
  226. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/fields_for.haml +0 -15
  227. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/fields_for.slim +0 -15
  228. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_for.erb +0 -72
  229. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_for.haml +0 -59
  230. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_for.slim +0 -59
  231. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_tag.erb +0 -95
  232. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_tag.haml +0 -78
  233. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/form_tag.slim +0 -79
  234. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/link_to.erb +0 -5
  235. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/link_to.haml +0 -4
  236. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/link_to.slim +0 -4
  237. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/mail_to.erb +0 -3
  238. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/mail_to.haml +0 -3
  239. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/mail_to.slim +0 -3
  240. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/meta_tag.erb +0 -3
  241. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/meta_tag.haml +0 -3
  242. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/meta_tag.slim +0 -3
  243. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/partials/_erb.erb +0 -1
  244. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/partials/_haml.haml +0 -1
  245. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/partials/_slim.slim +0 -1
  246. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/simple_partial.erb +0 -1
  247. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/simple_partial.haml +0 -1
  248. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/simple_partial.slim +0 -1
  249. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/app.rb +0 -58
  250. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/current_engine.haml +0 -5
  251. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/current_engines/_erb.erb +0 -1
  252. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/current_engines/_haml.haml +0 -1
  253. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/current_engines/_slim.slim +0 -1
  254. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/double_capture_erb.erb +0 -3
  255. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/double_capture_haml.haml +0 -2
  256. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/double_capture_slim.slim +0 -2
  257. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/erb/test.erb +0 -1
  258. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/explicit_engine.haml +0 -5
  259. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/haml/test.haml +0 -1
  260. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/template/_user.haml +0 -7
  261. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/template/haml_template.haml +0 -1
  262. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/render_app/views/template/some_template.haml +0 -2
  263. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/helper.rb +0 -67
  264. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_asset_tag_helpers.rb +0 -359
  265. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_breadcrumb_helpers.rb +0 -134
  266. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_form_builder.rb +0 -1178
  267. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_form_helpers.rb +0 -1030
  268. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_format_helpers.rb +0 -241
  269. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_locale.rb +0 -20
  270. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_number_helpers.rb +0 -143
  271. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_output_helpers.rb +0 -154
  272. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_render_helpers.rb +0 -94
  273. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_tag_helpers.rb +0 -117
@@ -1,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