middleman 2.0.7 → 2.0.8

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 (190) hide show
  1. data/.gitignore +1 -0
  2. data/.travis.yml +0 -1
  3. data/CHANGELOG +8 -0
  4. data/Gemfile +1 -1
  5. data/features/data.feature +6 -1
  6. data/features/markdown.feature +7 -0
  7. data/features/sprockets.feature +11 -1
  8. data/features/sprockets_gems.feature +3 -3
  9. data/fixtures/sprockets-app/source/jquery_include.js +1 -0
  10. data/fixtures/test-app/config.rb +2 -0
  11. data/fixtures/test-app/source/data2.html.liquid +1 -0
  12. data/fixtures/test-app/source/javascripts/multiple_engines.js.coffee.erb +1 -0
  13. data/fixtures/test-app/source/markdown.html.markdown +1 -0
  14. data/lib/middleman.rb +0 -6
  15. data/lib/middleman/base.rb +6 -1
  16. data/lib/middleman/builder.rb +6 -4
  17. data/lib/middleman/core_extensions/data.rb +35 -5
  18. data/lib/middleman/core_extensions/front_matter.rb +9 -2
  19. data/lib/middleman/core_extensions/sprockets.rb +25 -1
  20. data/lib/middleman/renderers/markdown.rb +25 -2
  21. data/lib/middleman/version.rb +1 -1
  22. data/middleman.gemspec +7 -6
  23. metadata +112 -251
  24. data/lib/middleman/vendor/padrino-core-0.10.0/.document +0 -5
  25. data/lib/middleman/vendor/padrino-core-0.10.0/.gitignore +0 -22
  26. data/lib/middleman/vendor/padrino-core-0.10.0/LICENSE +0 -20
  27. data/lib/middleman/vendor/padrino-core-0.10.0/README.rdoc +0 -294
  28. data/lib/middleman/vendor/padrino-core-0.10.0/Rakefile +0 -5
  29. data/lib/middleman/vendor/padrino-core-0.10.0/bin/padrino +0 -9
  30. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core.rb +0 -119
  31. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/application.rb +0 -259
  32. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/application/rendering.rb +0 -228
  33. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/application/routing.rb +0 -821
  34. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/application/showexceptions.rb +0 -18
  35. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/caller.rb +0 -45
  36. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/cli/adapter.rb +0 -24
  37. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/cli/base.rb +0 -152
  38. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/cli/console.rb +0 -20
  39. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/cli/rake.rb +0 -24
  40. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/cli/rake_tasks.rb +0 -59
  41. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/command.rb +0 -27
  42. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/images/404.png +0 -0
  43. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/images/500.png +0 -0
  44. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/loader.rb +0 -182
  45. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/cz.yml +0 -30
  46. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/da.yml +0 -30
  47. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/de.yml +0 -30
  48. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/en.yml +0 -30
  49. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/es.yml +0 -30
  50. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/fr.yml +0 -30
  51. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/hu.yml +0 -30
  52. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/it.yml +0 -37
  53. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/ja.yml +0 -30
  54. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/nl.yml +0 -30
  55. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/no.yml +0 -31
  56. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/pl.yml +0 -30
  57. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/pt_br.yml +0 -37
  58. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/ru.yml +0 -30
  59. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/tr.yml +0 -30
  60. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/uk.yml +0 -30
  61. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/zh_cn.yml +0 -30
  62. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/zh_tw.yml +0 -30
  63. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/logger.rb +0 -344
  64. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/mounter.rb +0 -192
  65. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/reloader.rb +0 -247
  66. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/router.rb +0 -79
  67. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/server.rb +0 -70
  68. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/support_lite.rb +0 -135
  69. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/tasks.rb +0 -23
  70. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/version.rb +0 -15
  71. data/lib/middleman/vendor/padrino-core-0.10.0/padrino-core.gemspec +0 -38
  72. data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/apps/.components +0 -6
  73. data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/apps/.gitignore +0 -7
  74. data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/apps/complex.rb +0 -27
  75. data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/apps/simple.rb +0 -33
  76. data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/a.rb +0 -9
  77. data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/b.rb +0 -4
  78. data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/c.rb +0 -1
  79. data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/circular/e.rb +0 -13
  80. data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/circular/f.rb +0 -2
  81. data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/circular/g.rb +0 -2
  82. data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/d.rb +0 -4
  83. data/lib/middleman/vendor/padrino-core-0.10.0/test/helper.rb +0 -101
  84. data/lib/middleman/vendor/padrino-core-0.10.0/test/test_application.rb +0 -83
  85. data/lib/middleman/vendor/padrino-core-0.10.0/test/test_core.rb +0 -79
  86. data/lib/middleman/vendor/padrino-core-0.10.0/test/test_dependencies.rb +0 -44
  87. data/lib/middleman/vendor/padrino-core-0.10.0/test/test_filters.rb +0 -266
  88. data/lib/middleman/vendor/padrino-core-0.10.0/test/test_logger.rb +0 -91
  89. data/lib/middleman/vendor/padrino-core-0.10.0/test/test_mounter.rb +0 -176
  90. data/lib/middleman/vendor/padrino-core-0.10.0/test/test_reloader_complex.rb +0 -66
  91. data/lib/middleman/vendor/padrino-core-0.10.0/test/test_reloader_simple.rb +0 -97
  92. data/lib/middleman/vendor/padrino-core-0.10.0/test/test_rendering.rb +0 -437
  93. data/lib/middleman/vendor/padrino-core-0.10.0/test/test_router.rb +0 -146
  94. data/lib/middleman/vendor/padrino-core-0.10.0/test/test_routing.rb +0 -1491
  95. data/lib/middleman/vendor/padrino-helpers-0.10.0/.document +0 -5
  96. data/lib/middleman/vendor/padrino-helpers-0.10.0/.gitignore +0 -21
  97. data/lib/middleman/vendor/padrino-helpers-0.10.0/LICENSE +0 -20
  98. data/lib/middleman/vendor/padrino-helpers-0.10.0/README.rdoc +0 -239
  99. data/lib/middleman/vendor/padrino-helpers-0.10.0/Rakefile +0 -5
  100. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers.rb +0 -51
  101. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/asset_tag_helpers.rb +0 -288
  102. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/form_builder/abstract_form_builder.rb +0 -220
  103. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/form_builder/standard_form_builder.rb +0 -43
  104. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/form_helpers.rb +0 -446
  105. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/format_helpers.rb +0 -260
  106. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/cz.yml +0 -103
  107. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/da.yml +0 -91
  108. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/de.yml +0 -78
  109. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/en.yml +0 -103
  110. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/es.yml +0 -103
  111. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/fr.yml +0 -79
  112. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/hu.yml +0 -103
  113. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/it.yml +0 -85
  114. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/ja.yml +0 -103
  115. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/nl.yml +0 -78
  116. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/no.yml +0 -91
  117. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/pl.yml +0 -95
  118. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/pt_br.yml +0 -103
  119. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/ru.yml +0 -103
  120. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/tr.yml +0 -103
  121. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/uk.yml +0 -103
  122. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/zh_cn.yml +0 -103
  123. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/zh_tw.yml +0 -103
  124. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/number_helpers.rb +0 -273
  125. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/output_helpers.rb +0 -128
  126. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/output_helpers/abstract_handler.rb +0 -103
  127. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/output_helpers/erb_handler.rb +0 -79
  128. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/output_helpers/haml_handler.rb +0 -64
  129. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/output_helpers/slim_handler.rb +0 -82
  130. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/render_helpers.rb +0 -40
  131. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/tag_helpers.rb +0 -59
  132. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/translation_helpers.rb +0 -21
  133. data/lib/middleman/vendor/padrino-helpers-0.10.0/padrino-helpers.gemspec +0 -27
  134. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/app.rb +0 -73
  135. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/capture_concat.erb +0 -14
  136. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/capture_concat.haml +0 -12
  137. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/capture_concat.slim +0 -13
  138. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_for.erb +0 -11
  139. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_for.haml +0 -9
  140. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_for.slim +0 -9
  141. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_tag.erb +0 -11
  142. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_tag.haml +0 -9
  143. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_tag.slim +0 -9
  144. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/current_engine.erb +0 -5
  145. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/current_engine.haml +0 -5
  146. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/current_engine.slim +0 -5
  147. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/fields_for.erb +0 -20
  148. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/fields_for.haml +0 -15
  149. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/fields_for.slim +0 -15
  150. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_for.erb +0 -56
  151. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_for.haml +0 -47
  152. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_for.slim +0 -47
  153. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_tag.erb +0 -56
  154. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_tag.haml +0 -45
  155. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_tag.slim +0 -45
  156. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/link_to.erb +0 -5
  157. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/link_to.haml +0 -4
  158. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/link_to.slim +0 -4
  159. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/mail_to.erb +0 -3
  160. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/mail_to.haml +0 -3
  161. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/mail_to.slim +0 -3
  162. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/meta_tag.erb +0 -3
  163. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/meta_tag.haml +0 -3
  164. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/meta_tag.slim +0 -3
  165. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/partials/_erb.erb +0 -1
  166. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/partials/_haml.haml +0 -1
  167. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/partials/_slim.slim +0 -1
  168. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/simple_partial.erb +0 -1
  169. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/simple_partial.haml +0 -1
  170. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/simple_partial.slim +0 -1
  171. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/app.rb +0 -45
  172. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/current_engine.haml +0 -5
  173. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/current_engines/_erb.erb +0 -1
  174. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/current_engines/_haml.haml +0 -1
  175. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/current_engines/_slim.slim +0 -1
  176. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/erb/test.erb +0 -1
  177. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/explicit_engine.haml +0 -5
  178. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/haml/test.haml +0 -1
  179. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/template/_user.haml +0 -7
  180. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/template/haml_template.haml +0 -1
  181. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/template/some_template.haml +0 -2
  182. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/helper.rb +0 -78
  183. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_asset_tag_helpers.rb +0 -320
  184. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_form_builder.rb +0 -998
  185. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_form_helpers.rb +0 -645
  186. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_format_helpers.rb +0 -227
  187. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_number_helpers.rb +0 -136
  188. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_output_helpers.rb +0 -133
  189. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_render_helpers.rb +0 -69
  190. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_tag_helpers.rb +0 -100
@@ -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
- class TestRouter < Test::Unit::TestCase
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,1491 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/helper')
2
-
3
- class FooError < RuntimeError; end
4
-
5
-
6
- class TestRouting < Test::Unit::TestCase
7
- should 'ignore trailing delimiters for basic route' do
8
- mock_app do
9
- get("/foo"){ "okey" }
10
- get(:test) { "tester" }
11
- end
12
- get "/foo"
13
- assert_equal "okey", body
14
- get "/foo/"
15
- assert_equal "okey", body
16
- get "/test"
17
- assert_equal "tester", body
18
- get "/test/"
19
- assert_equal "tester", body
20
- end
21
-
22
- should 'fail with unrecognized route exception when not found' do
23
- mock_app do
24
- get(:index){ "okey" }
25
- end
26
- assert_nothing_raised { get @app.url_for(:index) }
27
- assert_equal "okey", body
28
- assert_raises(Padrino::Routing::UnrecognizedException) {
29
- get @app.url_for(:fake)
30
- }
31
- end
32
-
33
- should 'accept regexp routes' do
34
- mock_app do
35
- get(%r{/fob|/baz}) { "regexp" }
36
- get("/foo") { "str" }
37
- get %r{/([0-9]+)/} do |num|
38
- "Your lucky number: #{num} #{params[:captures].first}"
39
- end
40
- end
41
- get "/foo"
42
- assert_equal "str", body
43
- get "/fob"
44
- assert_equal "regexp", body
45
- get "/baz"
46
- assert_equal "regexp", body
47
- get "/1234/"
48
- assert_equal "Your lucky number: 1234 1234", body
49
- end
50
-
51
- should "parse routes with question marks" do
52
- mock_app do
53
- get("/foo/?"){ "okey" }
54
- post('/unauthenticated/?') { "no access" }
55
- end
56
- get "/foo"
57
- assert_equal "okey", body
58
- get "/foo/"
59
- assert_equal "okey", body
60
- post "/unauthenticated"
61
- assert_equal "no access", body
62
- post "/unauthenticated/"
63
- assert_equal "no access", body
64
- end
65
-
66
- should 'match correctly similar paths' do
67
- mock_app do
68
- get("/my/:foo_id"){ params[:foo_id] }
69
- get("/my/:bar_id/bar"){ params[:bar_id] }
70
- end
71
- get "/my/1"
72
- assert_equal "1", body
73
- get "/my/2/bar"
74
- assert_equal "2", body
75
- end
76
-
77
- should "match user agents" do
78
- app = mock_app do
79
- get("/main", :agent => /IE/){ "hello IE" }
80
- get("/main"){ "hello" }
81
- end
82
- get "/main"
83
- assert_equal "hello", body
84
- get "/main", {}, {'HTTP_USER_AGENT' => 'This is IE'}
85
- assert_equal "hello IE", body
86
- end
87
-
88
- should "use regex for parts of a route" do
89
- app = mock_app do
90
- get("/main/:id", :id => /\d+/){ "hello #{params[:id]}" }
91
- end
92
- get "/main/123"
93
- assert_equal "hello 123", body
94
- get "/main/asd"
95
- assert_equal 404, status
96
- end
97
-
98
- should "not generate overlapping head urls" do
99
- app = mock_app do
100
- get("/main"){ "hello" }
101
- post("/main"){ "hello" }
102
- end
103
- assert_equal 3, app.routes.size, "should generate GET, HEAD and PUT"
104
- assert_equal ["GET"], app.routes[0].conditions[:request_method]
105
- assert_equal ["HEAD"], app.routes[1].conditions[:request_method]
106
- assert_equal ["POST"], app.routes[2].conditions[:request_method]
107
- end
108
-
109
- should 'generate basic urls' do
110
- mock_app do
111
- get(:foo){ "/foo" }
112
- get(:foo, :with => :id){ |id| "/foo/#{id}" }
113
- get([:foo, :id]){ |id| "/foo/#{id}" }
114
- get(:hash, :with => :id){ url(:hash, :id => 1) }
115
- get([:hash, :id]){ url(:hash, :id => 1) }
116
- get(:array, :with => :id){ url(:array, 23) }
117
- get([:array, :id]){ url(:array, 23) }
118
- get(:hash_with_extra, :with => :id){ url(:hash_with_extra, :id => 1, :query => 'string') }
119
- get([:hash_with_extra, :id]){ url(:hash_with_extra, :id => 1, :query => 'string') }
120
- get(:array_with_extra, :with => :id){ url(:array_with_extra, 23, :query => 'string') }
121
- get([:array_with_extra, :id]){ url(:array_with_extra, 23, :query => 'string') }
122
- get("/old-bar/:id"){ params[:id] }
123
- post(:mix, :map => "/mix-bar/:id"){ params[:id] }
124
- get(:mix, :map => "/mix-bar/:id"){ params[:id] }
125
- end
126
- get "/foo"
127
- assert_equal "/foo", body
128
- get "/foo/123"
129
- assert_equal "/foo/123", body
130
- get "/hash/2"
131
- assert_equal "/hash/1", body
132
- get "/array/23"
133
- assert_equal "/array/23", body
134
- get "/hash_with_extra/1"
135
- assert_equal "/hash_with_extra/1?query=string", body
136
- get "/array_with_extra/23"
137
- assert_equal "/array_with_extra/23?query=string", body
138
- get "/old-bar/3"
139
- assert_equal "3", body
140
- post "/mix-bar/4"
141
- assert_equal "4", body
142
- get "/mix-bar/4"
143
- assert_equal "4", body
144
- end
145
-
146
- should 'generate url with format' do
147
- mock_app do
148
- get(:a, :provides => :any){ url(:a, :format => :json) }
149
- get(:b, :provides => :js){ url(:b, :format => :js) }
150
- get(:c, :provides => [:js, :json]){ url(:c, :format => :json) }
151
- get(:d, :provides => [:html, :js]){ url(:d, :format => :js, :foo => :bar) }
152
- end
153
- get "/a.js"
154
- assert_equal "/a.json", body
155
- get "/b.js"
156
- assert_equal "/b.js", body
157
- get "/b.ru"
158
- assert_equal 405, status
159
- get "/c.js"
160
- assert_equal "/c.json", body
161
- get "/c.json"
162
- assert_equal "/c.json", body
163
- get "/c.ru"
164
- assert_equal 405, status
165
- get "/d"
166
- assert_equal "/d.js?foo=bar", body
167
- get "/d.js"
168
- assert_equal "/d.js?foo=bar", body
169
- get "/e.xml"
170
- assert_equal 404, status
171
- end
172
-
173
- should 'use padrino url method' do
174
- mock_app do
175
- end
176
-
177
- assert_equal @app.method(:url).owner, Padrino::Routing::ClassMethods
178
- end
179
-
180
- should 'work correctly with sinatra redirects' do
181
- mock_app do
182
- get(:index) { redirect url(:index) }
183
- get(:google) { redirect "http://google.com" }
184
- get("/foo") { redirect "/bar" }
185
- get("/bar") { "Bar" }
186
- end
187
-
188
- get "/"
189
- assert_equal "http://example.org/", headers['Location']
190
- get "/google"
191
- assert_equal "http://google.com", headers['Location']
192
- get "/foo"
193
- assert_equal "http://example.org/bar", headers['Location']
194
- end
195
-
196
- should "return 406 on Accept-Headers it does not provide" do
197
- mock_app do
198
- get(:a, :provides => [:html, :js]){ content_type }
199
- end
200
-
201
- get "/a", {}, {"HTTP_ACCEPT" => "application/yaml"}
202
- assert_equal 406, status
203
- end
204
-
205
- should "return 406 on file extensions it does not provide and flag is set" do
206
- mock_app do
207
- enable :treat_format_as_accept
208
- get(:a, :provides => [:html, :js]){ content_type }
209
- end
210
-
211
- get "/a.xml", {}, {}
212
- assert_equal 406, status
213
- end
214
-
215
- should "return 404 on file extensions it does not provide and flag is not set" do
216
- mock_app do
217
- get(:a, :provides => [:html, :js]){ content_type }
218
- end
219
-
220
- get "/a.xml", {}, {}
221
- assert_equal 405, status
222
- end
223
-
224
- should "not set content_type to :html if Accept */* and html not in provides" do
225
- mock_app do
226
- get("/foo", :provides => [:json, :xml]) { content_type.to_s }
227
- end
228
-
229
- get '/foo', {}, { 'HTTP_ACCEPT' => '*/*;q=0.5' }
230
- assert_equal 'json', body
231
- end
232
-
233
- should "set content_type to :json if Accept contains */*" do
234
- mock_app do
235
- get("/foo", :provides => [:json]) { content_type.to_s }
236
- end
237
-
238
- get '/foo', {}, { 'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' }
239
- assert_equal 'json', body
240
- end
241
-
242
- should "send the appropriate number of params" do
243
- mock_app do
244
- get('/id/:user_id', :provides => [:json]) { |user_id| user_id}
245
- end
246
- get '/id/5.json'
247
- assert_equal '5', body
248
- end
249
-
250
- should "allow .'s in param values" do
251
- mock_app do
252
- get('/id/:email', :provides => [:json]) { |email, format| [email, format] * '/' }
253
- end
254
- get '/id/foo@bar.com.json'
255
- assert_equal 'foo@bar.com/json', body
256
- end
257
-
258
- should "set correct content_type for Accept not equal to */* even if */* also provided" do
259
- mock_app do
260
- get("/foo", :provides => [:html, :js, :xml]) { content_type.to_s }
261
- end
262
-
263
- get '/foo', {}, { 'HTTP_ACCEPT' => 'application/javascript, */*;q=0.5' }
264
- assert_equal 'js', body
265
- end
266
-
267
- should "return the first content type in provides if accept header is empty" do
268
- mock_app do
269
- get(:a, :provides => [:js]){ content_type.to_s }
270
- end
271
-
272
- get "/a", {}, {}
273
- assert_equal "js", body
274
- end
275
-
276
- should "not default to HTML if HTML is not provided and no type is given" do
277
- mock_app do
278
- get(:a, :provides => [:js]){ content_type }
279
- end
280
-
281
- get "/a", {}, {}
282
- assert_equal "application/javascript;charset=utf-8", content_type
283
- end
284
-
285
- should "not match routes if url_format and http_accept is provided but not included" do
286
- mock_app do
287
- get(:a, :provides => [:js, :html]){ content_type }
288
- end
289
-
290
- get "/a.xml", {}, {"HTTP_ACCEPT" => "text/html"}
291
- assert_equal 405, status
292
- end
293
-
294
- should "generate routes for format simple" do
295
- mock_app do
296
- get(:foo, :provides => [:html, :rss]) { render :haml, "Test" }
297
- end
298
- get "/foo"
299
- assert_equal "Test\n", body
300
- get "/foo.rss"
301
- assert_equal "Test\n", body
302
- end
303
-
304
- should "should inject the controller name into the request" do
305
- mock_app do
306
- controller :posts do
307
- get(:index) { request.controller }
308
- controller :mini do
309
- get(:index) { request.controller }
310
- end
311
- end
312
- end
313
- get "/posts"
314
- assert_equal "posts", body
315
- get "/mini"
316
- assert_equal "mini", body
317
- end
318
-
319
- should "support not_found" do
320
- mock_app do
321
- not_found do
322
- response.status = 404
323
- 'whatever'
324
- end
325
-
326
- get :index, :map => "/" do
327
- 'index'
328
- end
329
- end
330
- get '/something'
331
- assert_equal 'whatever', body
332
- assert_equal 404, status
333
- get '/'
334
- assert_equal 'index', body
335
- assert_equal 200, status
336
- end
337
-
338
- should "should inject the route into the request" do
339
- mock_app do
340
- controller :posts do
341
- get(:index) { request.route_obj.named.to_s }
342
- end
343
- end
344
- get "/posts"
345
- assert_equal "posts_index", body
346
- end
347
-
348
- should "preserve the format if you set it manually" do
349
- mock_app do
350
- before do
351
- params[:format] = :json
352
- end
353
-
354
- get "test", :provides => [:html, :json] do
355
- params[:format].inspect
356
- end
357
- end
358
- get "/test"
359
- assert_equal ":json", body
360
- get "/test.html"
361
- assert_equal ":json", body
362
- end
363
-
364
- should "generate routes for format with controller" do
365
- mock_app do
366
- controller :posts do
367
- get(:index, :provides => [:html, :rss, :atom, :js]) { render :haml, "Index.#{content_type}" }
368
- get(:show, :with => :id, :provides => [:html, :rss, :atom]) { render :haml, "Show.#{content_type}" }
369
- end
370
- end
371
- get "/posts"
372
- assert_equal "Index.html\n", body
373
- get "/posts.rss"
374
- assert_equal "Index.rss\n", body
375
- get "/posts.atom"
376
- assert_equal "Index.atom\n", body
377
- get "/posts.js"
378
- assert_equal "Index.js\n", body
379
- get "/posts/show/5"
380
- assert_equal "Show.html\n", body
381
- get "/posts/show/5.rss"
382
- assert_equal "Show.rss\n", body
383
- get "/posts/show/10.atom"
384
- assert_equal "Show.atom\n", body
385
- end
386
-
387
- should 'map routes' do
388
- mock_app do
389
- get(:bar){ "bar" }
390
- end
391
- get "/bar"
392
- assert_equal "bar", body
393
- assert_equal "/bar", @app.url(:bar)
394
- end
395
-
396
- should 'remove index from path' do
397
- mock_app do
398
- get(:index){ "index" }
399
- get("/accounts/index"){ "accounts" }
400
- end
401
- get "/"
402
- assert_equal "index", body
403
- assert_equal "/", @app.url(:index)
404
- get "/accounts"
405
- assert_equal "accounts", body
406
- end
407
-
408
- should 'remove index from path with params' do
409
- mock_app do
410
- get(:index, :with => :name){ "index with #{params[:name]}" }
411
- end
412
- get "/bobby"
413
- assert_equal "index with bobby", body
414
- assert_equal "/john", @app.url(:index, :name => "john")
415
- end
416
-
417
- should 'parse named params' do
418
- mock_app do
419
- get(:print, :with => :id){ "Im #{params[:id]}" }
420
- end
421
- get "/print/9"
422
- assert_equal "Im 9", body
423
- assert_equal "/print/9", @app.url(:print, :id => 9)
424
- end
425
-
426
- should '405 on wrong request_method' do
427
- mock_app do
428
- post('/bar'){ "bar" }
429
- end
430
- get "/bar"
431
- assert_equal 405, status
432
- end
433
-
434
- should 'respond to' do
435
- mock_app do
436
- get(:a, :provides => :js){ "js" }
437
- get(:b, :provides => :any){ "any" }
438
- get(:c, :provides => [:js, :json]){ "js,json" }
439
- get(:d, :provides => [:html, :js]){ "html,js"}
440
- end
441
- get "/a"
442
- assert_equal 200, status
443
- assert_equal "js", body
444
- get "/a.js"
445
- assert_equal "js", body
446
- get "/b"
447
- assert_equal "any", body
448
- assert_raise(RuntimeError) { get "/b.foo" }
449
- get "/c"
450
- assert_equal 200, status
451
- assert_equal "js,json", body
452
- get "/c.js"
453
- assert_equal "js,json", body
454
- get "/c.json"
455
- assert_equal "js,json", body
456
- get "/d"
457
- assert_equal "html,js", body
458
- get "/d.js"
459
- assert_equal "html,js", body
460
- end
461
-
462
- should 'respond_to and set content_type' do
463
- Rack::Mime::MIME_TYPES['.foo'] = 'application/foo'
464
- mock_app do
465
- get :a, :provides => :any do
466
- case content_type
467
- when :js then "js"
468
- when :json then "json"
469
- when :foo then "foo"
470
- when :html then "html"
471
- end
472
- end
473
- end
474
- get "/a.js"
475
- assert_equal "js", body
476
- assert_equal 'application/javascript;charset=utf-8', response["Content-Type"]
477
- get "/a.json"
478
- assert_equal "json", body
479
- assert_equal 'application/json;charset=utf-8', response["Content-Type"]
480
- get "/a.foo"
481
- assert_equal "foo", body
482
- assert_equal 'application/foo;charset=utf-8', response["Content-Type"]
483
- get "/a"
484
- assert_equal "html", body
485
- assert_equal 'text/html;charset=utf-8', response["Content-Type"]
486
- end
487
-
488
- should 'use controllers' do
489
- mock_app do
490
- controller "/admin" do
491
- get("/"){ "index" }
492
- get("/show/:id"){ "show #{params[:id]}" }
493
- end
494
- end
495
- get "/admin"
496
- assert_equal "index", body
497
- get "/admin/show/1"
498
- assert_equal "show 1", body
499
- end
500
-
501
- should 'use named controllers' do
502
- mock_app do
503
- controller :admin do
504
- get(:index, :with => :id){ params[:id] }
505
- get(:show, :with => :id){ "show #{params[:id]}" }
506
- end
507
- controllers :foo, :bar do
508
- get(:index){ "foo_bar_index" }
509
- end
510
- end
511
- get "/admin/1"
512
- assert_equal "1", body
513
- get "/admin/show/1"
514
- assert_equal "show 1", body
515
- assert_equal "/admin/1", @app.url(:admin_index, :id => 1)
516
- assert_equal "/admin/show/1", @app.url(:admin_show, :id => 1)
517
- get "/foo/bar"
518
- assert_equal "foo_bar_index", body
519
- end
520
-
521
- should 'use map and with' do
522
- mock_app do
523
- get :index, :map => '/bugs', :with => :id do
524
- params[:id]
525
- end
526
- end
527
- get '/bugs/4'
528
- assert_equal '4', body
529
- assert_equal "/bugs/4", @app.url(:index, :id => 4)
530
- end
531
-
532
- should "ignore trailing delimiters within a named controller" do
533
- mock_app do
534
- controller :posts do
535
- get(:index, :provides => [:html, :js]){ "index" }
536
- get(:new) { "new" }
537
- get(:show, :with => :id){ "show #{params[:id]}" }
538
- end
539
- end
540
- get "/posts"
541
- assert_equal "index", body
542
- get "/posts/"
543
- assert_equal "index", body
544
- get "/posts.js"
545
- assert_equal "index", body
546
- get "/posts.js/"
547
- assert_equal "index", body
548
- get "/posts/new"
549
- assert_equal "new", body
550
- get "/posts/new/"
551
- assert_equal "new", body
552
- end
553
-
554
- should "ignore trailing delimiters within a named controller for unnamed actions" do
555
- mock_app do
556
- controller :accounts do
557
- get("/") { "account_index" }
558
- get("/new") { "new" }
559
- end
560
- controller :votes do
561
- get("/") { "vote_index" }
562
- end
563
- end
564
- get "/accounts"
565
- assert_equal "account_index", body
566
- get "/accounts/"
567
- assert_equal "account_index", body
568
- get "/accounts/new"
569
- assert_equal "new", body
570
- get "/accounts/new/"
571
- assert_equal "new", body
572
- get "/votes"
573
- assert_equal "vote_index", body
574
- get "/votes/"
575
- assert_equal "vote_index", body
576
- end
577
-
578
- should 'use named controllers with array routes' do
579
- mock_app do
580
- controller :admin do
581
- get(:index){ "index" }
582
- get(:show, :with => :id){ "show #{params[:id]}" }
583
- end
584
- controllers :foo, :bar do
585
- get(:index){ "foo_bar_index" }
586
- end
587
- end
588
- get "/admin"
589
- assert_equal "index", body
590
- get "/admin/show/1"
591
- assert_equal "show 1", body
592
- assert_equal "/admin", @app.url(:admin, :index)
593
- assert_equal "/admin/show/1", @app.url(:admin, :show, :id => 1)
594
- get "/foo/bar"
595
- assert_equal "foo_bar_index", body
596
- end
597
-
598
- should 'use uri_root' do
599
- mock_app do
600
- get(:foo){ "foo" }
601
- end
602
- @app.uri_root = '/'
603
- assert_equal "/foo", @app.url(:foo)
604
- @app.uri_root = '/testing'
605
- assert_equal "/testing/foo", @app.url(:foo)
606
- @app.uri_root = '/testing/'
607
- assert_equal "/testing/foo", @app.url(:foo)
608
- @app.uri_root = 'testing/bar///'
609
- assert_equal "/testing/bar/foo", @app.url(:foo)
610
- end
611
-
612
- should 'use uri_root with controllers' do
613
- mock_app do
614
- controller :foo do
615
- get(:bar){ "bar" }
616
- end
617
- end
618
- @app.uri_root = '/testing'
619
- assert_equal "/testing/foo/bar", @app.url(:foo, :bar)
620
- end
621
-
622
- should 'use RACK_BASE_URI' do
623
- mock_app do
624
- get(:foo){ "foo" }
625
- end
626
- # Wish there was a side-effect free way to test this...
627
- ENV['RACK_BASE_URI'] = '/'
628
- assert_equal "/foo", @app.url(:foo)
629
- ENV['RACK_BASE_URI'] = '/testing'
630
- assert_equal "/testing/foo", @app.url(:foo)
631
- ENV['RACK_BASE_URI'] = nil
632
- end
633
-
634
- should 'reset routes' do
635
- mock_app do
636
- get("/"){ "foo" }
637
- reset_router!
638
- end
639
- get "/"
640
- assert_equal 404, status
641
- end
642
-
643
- should 'respect priorities' do
644
- route_order = []
645
- mock_app do
646
- get(:index, :priority => :normal) { route_order << :normal; pass }
647
- get(:index, :priority => :low) { route_order << :low; "hello" }
648
- get(:index, :priority => :high) { route_order << :high; pass }
649
- end
650
- get '/'
651
- assert_equal [:high, :normal, :low], route_order
652
- assert_equal "hello", body
653
- end
654
-
655
- should 'allow optionals' do
656
- mock_app do
657
- get(:show, :map => "/stories/:type(/:category)") do
658
- "#{params[:type]}/#{params[:category]}"
659
- end
660
- end
661
- get "/stories/foo"
662
- assert_equal "foo/", body
663
- get "/stories/foo/bar"
664
- assert_equal "foo/bar", body
665
- end
666
-
667
- should 'apply maps' do
668
- mock_app do
669
- controllers :admin do
670
- get(:index, :map => "/"){ "index" }
671
- get(:show, :with => :id, :map => "/show"){ "show #{params[:id]}" }
672
- get(:edit, :map => "/edit/:id/product"){ "edit #{params[:id]}" }
673
- get(:wacky, :map => "/wacky-:id-:product_id"){ "wacky #{params[:id]}-#{params[:product_id]}" }
674
- end
675
- end
676
- get "/"
677
- assert_equal "index", body
678
- get @app.url(:admin, :index)
679
- assert_equal "index", body
680
- get "/show/1"
681
- assert_equal "show 1", body
682
- get "/edit/1/product"
683
- assert_equal "edit 1", body
684
- get "/wacky-1-2"
685
- assert_equal "wacky 1-2", body
686
- end
687
-
688
- should 'apply maps when given path is kind of hash' do
689
- mock_app do
690
- controllers :admin do
691
- get(:foobar, "/foo/bar"){ "foobar" }
692
- end
693
- end
694
- get "/foo/bar"
695
- assert_equal "foobar", body
696
- end
697
-
698
- should "apply parent to route" do
699
- mock_app do
700
- controllers :project do
701
- get(:index, :parent => :user) { "index #{params[:user_id]}" }
702
- get(:index, :parent => [:user, :section]) { "index #{params[:user_id]} #{params[:section_id]}" }
703
- get(:edit, :with => :id, :parent => :user) { "edit #{params[:id]} #{params[:user_id]}"}
704
- get(:show, :with => :id, :parent => [:user, :product]) { "show #{params[:id]} #{params[:user_id]} #{params[:product_id]}"}
705
- end
706
- end
707
- get "/user/1/project"
708
- assert_equal "index 1", body
709
- get "/user/1/section/3/project"
710
- assert_equal "index 1 3", body
711
- get "/user/1/project/edit/2"
712
- assert_equal "edit 2 1", body
713
- get "/user/1/product/2/project/show/3"
714
- assert_equal "show 3 1 2", body
715
- end
716
-
717
- should "apply parent to controller" do
718
- mock_app do
719
- controller :project, :parent => :user do
720
- get(:index) { "index #{params[:user_id]}"}
721
- get(:edit, :with => :id, :parent => :user) { "edit #{params[:id]} #{params[:user_id]}"}
722
- get(:show, :with => :id, :parent => :product) { "show #{params[:id]} #{params[:user_id]} #{params[:product_id]}"}
723
- end
724
- end
725
-
726
- user_project_url = "/user/1/project"
727
- get user_project_url
728
- assert_equal "index 1", body
729
- assert_equal user_project_url, @app.url(:project, :index, :user_id => 1)
730
-
731
- user_project_edit_url = "/user/1/project/edit/2"
732
- get user_project_edit_url
733
- assert_equal "edit 2 1", body
734
- assert_equal user_project_edit_url, @app.url(:project, :edit, :user_id => 1, :id => 2)
735
-
736
- user_product_project_url = "/user/1/product/2/project/show/3"
737
- get user_product_project_url
738
- assert_equal "show 3 1 2", body
739
- assert_equal user_product_project_url, @app.url(:project, :show, :user_id => 1, :product_id => 2, :id => 3)
740
- end
741
-
742
- should "apply parent with shallowing to controller" do
743
- mock_app do
744
- controller :project do
745
- parent :user
746
- parent :shop, :optional => true
747
- get(:index) { "index #{params[:user_id]} #{params[:shop_id]}" }
748
- get(:edit, :with => :id) { "edit #{params[:id]} #{params[:user_id]} #{params[:shop_id]}" }
749
- get(:show, :with => :id, :parent => :product) { "show #{params[:id]} #{params[:user_id]} #{params[:product_id]} #{params[:shop_id]}" }
750
- end
751
- end
752
-
753
- assert_equal "/user/1/project", @app.url(:project, :index, :user_id => 1, :shop_id => nil)
754
- assert_equal "/user/1/shop/23/project", @app.url(:project, :index, :user_id => 1, :shop_id => 23)
755
-
756
- user_project_url = "/user/1/project"
757
- get user_project_url
758
- assert_equal "index 1 ", body
759
- assert_equal user_project_url, @app.url(:project, :index, :user_id => 1)
760
-
761
- user_project_edit_url = "/user/1/project/edit/2"
762
- get user_project_edit_url
763
- assert_equal "edit 2 1 ", body
764
- assert_equal user_project_edit_url, @app.url(:project, :edit, :user_id => 1, :id => 2)
765
-
766
- user_product_project_url = "/user/1/product/2/project/show/3"
767
- get user_product_project_url
768
- assert_equal "show 3 1 2 ", body
769
- assert_equal user_product_project_url, @app.url(:project, :show, :user_id => 1, :product_id => 2, :id => 3)
770
-
771
- user_project_url = "/user/1/shop/1/project"
772
- get user_project_url
773
- assert_equal "index 1 1", body
774
- assert_equal user_project_url, @app.url(:project, :index, :user_id => 1, :shop_id => 1)
775
-
776
- user_project_edit_url = "/user/1/shop/1/project/edit/2"
777
- get user_project_edit_url
778
- assert_equal "edit 2 1 1", body
779
- assert_equal user_project_edit_url, @app.url(:project, :edit, :user_id => 1, :id => 2, :shop_id => 1)
780
-
781
- user_product_project_url = "/user/1/shop/1/product/2/project/show/3"
782
- get user_product_project_url
783
- assert_equal "show 3 1 2 1", body
784
- assert_equal user_product_project_url, @app.url(:project, :show, :user_id => 1, :product_id => 2, :id => 3, :shop_id => 1)
785
- end
786
-
787
- should "respect map in parents with shallowing" do
788
- mock_app do
789
- controller :project do
790
- parent :shop, :map => "/foo/bar"
791
- get(:index) { "index #{params[:shop_id]}" }
792
- end
793
- end
794
-
795
- shop_project_url = "/foo/bar/1/project"
796
- get shop_project_url
797
- assert_equal "index 1", body
798
- assert_equal shop_project_url, @app.url(:project, :index, :shop_id => 1)
799
- end
800
-
801
- should "use default values" do
802
- mock_app do
803
- controller :lang => :it do
804
- get(:index, :map => "/:lang") { "lang is #{params[:lang]}" }
805
- end
806
- assert_equal "/it", url(:index)
807
- # This is only for be sure that default values
808
- # work only for the given controller
809
- get(:foo, :map => "/foo") {}
810
- assert_equal "/foo", url(:foo)
811
- end
812
- get "/en"
813
- assert_equal "lang is en", body
814
- end
815
-
816
- should "transitions to the next matching route on pass" do
817
- mock_app do
818
- get '/:foo' do
819
- pass
820
- 'Hello Foo'
821
- end
822
- get '/:bar' do
823
- 'Hello World'
824
- end
825
- end
826
-
827
- get '/za'
828
- assert_equal 'Hello World', body
829
- end
830
-
831
- should "filters by accept header" do
832
- mock_app do
833
- get '/foo', :provides => [:xml, :js] do
834
- request.env['HTTP_ACCEPT']
835
- end
836
- end
837
-
838
- get '/foo', {}, { 'HTTP_ACCEPT' => 'application/xml' }
839
- assert ok?
840
- assert_equal 'application/xml', body
841
- assert_equal 'application/xml;charset=utf-8', response.headers['Content-Type']
842
-
843
- get '/foo.xml'
844
- assert ok?
845
- assert_equal 'application/xml;charset=utf-8', response.headers['Content-Type']
846
-
847
- get '/foo', {}, { 'HTTP_ACCEPT' => 'application/javascript' }
848
- assert ok?
849
- assert_equal 'application/javascript', body
850
- assert_equal 'application/javascript;charset=utf-8', response.headers['Content-Type']
851
-
852
- get '/foo.js'
853
- assert ok?
854
- assert_equal 'application/javascript;charset=utf-8', response.headers['Content-Type']
855
-
856
- get '/foo', {}, { "HTTP_ACCEPT" => 'text/html' }
857
- assert_equal 406, status
858
- end
859
-
860
- should "works allow global provides" do
861
- mock_app do
862
- provides :xml
863
-
864
- get("/foo"){ "Foo in #{content_type}" }
865
- get("/bar"){ "Bar in #{content_type}" }
866
- end
867
-
868
- get '/foo', {}, { 'HTTP_ACCEPT' => 'application/xml' }
869
- assert_equal 'Foo in xml', body
870
- get '/foo'
871
- assert_equal 'Foo in xml', body
872
-
873
- get '/bar', {}, { 'HTTP_ACCEPT' => 'application/xml' }
874
- assert_equal 'Bar in html', body
875
- end
876
-
877
- should "set content_type to :html for both empty Accept as well as Accept text/html" do
878
- mock_app do
879
- provides :html
880
-
881
- get("/foo"){ content_type.to_s }
882
- end
883
-
884
- get '/foo', {}, {}
885
- assert_equal 'html', body
886
-
887
- get '/foo', {}, { 'HTTP_ACCEPT' => 'text/html' }
888
- assert_equal 'html', body
889
- end
890
-
891
- should "set content_type to :html if Accept */*" do
892
- mock_app do
893
- get("/foo", :provides => [:html, :js]) { content_type.to_s }
894
- end
895
- get '/foo', {}, {}
896
- assert_equal 'html', body
897
-
898
- get '/foo', {}, { 'HTTP_ACCEPT' => '*/*;q=0.5' }
899
- assert_equal 'html', body
900
- end
901
-
902
- should "set content_type to :js if Accept includes both application/javascript and */*;q=0.5" do
903
- mock_app do
904
- get("/foo", :provides => [:html, :js]) { content_type.to_s }
905
- end
906
- get '/foo', {}, { 'HTTP_ACCEPT' => 'application/javascript, */*;q=0.5' }
907
- assert_equal 'js', body
908
- end
909
-
910
- should 'allows custom route-conditions to be set via route options and halt' do
911
- protector = Module.new do
912
- def protect(*args)
913
- condition {
914
- unless authorize(params["user"], params["password"])
915
- halt 403, "go away"
916
- end
917
- }
918
- end
919
- end
920
-
921
- mock_app do
922
- register protector
923
-
924
- helpers do
925
- def authorize(username, password)
926
- username == "foo" && password == "bar"
927
- end
928
- end
929
-
930
- get "/", :protect => true do
931
- "hey"
932
- end
933
- end
934
-
935
- get "/"
936
- assert forbidden?
937
- assert_equal "go away", body
938
-
939
- get "/", :user => "foo", :password => "bar"
940
- assert ok?
941
- assert_equal "hey", body
942
- end
943
-
944
- should 'allows custom route-conditions to be set via route options using two routes' do
945
- protector = Module.new do
946
- def protect(*args)
947
- condition { authorize(params["user"], params["password"]) }
948
- end
949
- end
950
-
951
- mock_app do
952
- register protector
953
-
954
- helpers do
955
- def authorize(username, password)
956
- username == "foo" && password == "bar"
957
- end
958
- end
959
-
960
- get "/", :protect => true do
961
- "hey"
962
- end
963
-
964
- get "/" do
965
- "go away"
966
- end
967
- end
968
-
969
- get "/"
970
- assert_equal "go away", body
971
-
972
- get "/", :user => "foo", :password => "bar"
973
- assert ok?
974
- assert_equal "hey", body
975
- end
976
-
977
- should "allow concise routing" do
978
- mock_app do
979
- get :index, ":id" do
980
- params[:id]
981
- end
982
-
983
- get :map, "route/:id" do
984
- params[:id]
985
- end
986
- end
987
-
988
- get "/123"
989
- assert_equal "123", body
990
-
991
- get "/route/123"
992
- assert_equal "123", body
993
- end
994
-
995
- should "allow passing & halting in before filters" do
996
- mock_app do
997
- controller do
998
- before { env['QUERY_STRING'] == 'secret' or pass }
999
- get :index do
1000
- "secret index"
1001
- end
1002
- end
1003
-
1004
- controller do
1005
- before { env['QUERY_STRING'] == 'halt' and halt 401, 'go away!' }
1006
- get :index do
1007
- "index"
1008
- end
1009
- end
1010
- end
1011
-
1012
- get "/?secret"
1013
- assert_equal "secret index", body
1014
-
1015
- get "/?halt"
1016
- assert_equal "go away!", body
1017
- assert_equal 401, status
1018
-
1019
- get "/"
1020
- assert_equal "index", body
1021
- end
1022
-
1023
- should 'scope filters in the given controller' do
1024
- mock_app do
1025
- before { @global = 'global' }
1026
- after { @global = nil }
1027
-
1028
- controller :foo do
1029
- before { @foo = :foo }
1030
- after { @foo = nil }
1031
- get("/") { [@foo, @bar, @global].compact.join(" ") }
1032
- end
1033
-
1034
- get("/") { [@foo, @bar, @global].compact.join(" ") }
1035
-
1036
- controller :bar do
1037
- before { @bar = :bar }
1038
- after { @bar = nil }
1039
- get("/") { [@foo, @bar, @global].compact.join(" ") }
1040
- end
1041
- end
1042
-
1043
- get "/bar"
1044
- assert_equal "bar global", body
1045
-
1046
- get "/foo"
1047
- assert_equal "foo global", body
1048
-
1049
- get "/"
1050
- assert_equal "global", body
1051
- end
1052
-
1053
- should 'works with optionals params' do
1054
- mock_app do
1055
- get("/foo(/:bar)") { params[:bar] }
1056
- end
1057
-
1058
- get "/foo/bar"
1059
- assert_equal "bar", body
1060
-
1061
- get "/foo"
1062
- assert_equal "", body
1063
- end
1064
-
1065
- should 'work with multiple dashed params' do
1066
- mock_app do
1067
- get "/route/:foo/:bar/:baz", :provides => :html do
1068
- "#{params[:foo]};#{params[:bar]};#{params[:baz]}"
1069
- end
1070
- end
1071
-
1072
- get "/route/foo/bar/baz"
1073
- assert_equal 'foo;bar;baz', body
1074
-
1075
- get "/route/foo/bar-whatever/baz"
1076
- assert_equal 'foo;bar-whatever;baz', body
1077
- end
1078
-
1079
- should 'work with arbitrary params' do
1080
- mock_app do
1081
- get(:testing) { params[:foo] }
1082
- end
1083
-
1084
- url = @app.url(:testing, :foo => 'bar')
1085
- assert_equal "/testing?foo=bar", url
1086
- get url
1087
- assert_equal "bar", body
1088
- end
1089
-
1090
- should 'ignore nil params' do
1091
- mock_app do
1092
- get(:testing, :provides => [:html, :json]) do
1093
- end
1094
- end
1095
- assert_equal '/testing.html', @app.url(:testing, :format => :html)
1096
- assert_equal '/testing', @app.url(:testing, :format => nil)
1097
- end
1098
-
1099
- should 'be able to access params in a before filter' do
1100
- username_from_before_filter = nil
1101
-
1102
- mock_app do
1103
- before do
1104
- username_from_before_filter = params[:username]
1105
- end
1106
-
1107
- get :users, :with => :username do
1108
- end
1109
- end
1110
- get '/users/josh'
1111
- assert_equal 'josh', username_from_before_filter
1112
- end
1113
-
1114
- should "be able to access params normally when a before filter is specified" do
1115
- mock_app do
1116
- before { }
1117
- get :index do
1118
- params.inspect
1119
- end
1120
- end
1121
- get '/?test=what'
1122
- assert_equal '{"test"=>"what"}', body
1123
- end
1124
-
1125
- should 'work with controller and arbitrary params' do
1126
- mock_app do
1127
- get(:testing) { params[:foo] }
1128
- controller :test1 do
1129
- get(:url1) { params[:foo] }
1130
- get(:url2, :provides => [:html, :json]) { params[:foo] }
1131
- end
1132
- end
1133
-
1134
- url = @app.url(:test1, :url1, :foo => 'bar1')
1135
- assert_equal "/test1/url1?foo=bar1", url
1136
- get url
1137
- assert_equal "bar1", body
1138
-
1139
- url = @app.url(:test1, :url2, :foo => 'bar2')
1140
- assert_equal "/test1/url2?foo=bar2", url
1141
- get url
1142
- assert_equal "bar2", body
1143
- end
1144
-
1145
- should "parse two routes with the same path but different http verbs" do
1146
- mock_app do
1147
- get(:index) { "This is the get index" }
1148
- post(:index) { "This is the post index" }
1149
- end
1150
- get "/"
1151
- assert_equal "This is the get index", body
1152
- post "/"
1153
- assert_equal "This is the post index", body
1154
- end
1155
-
1156
- should "use optionals params" do
1157
- mock_app do
1158
- get(:index, :map => "/(:foo(/:bar))") { "#{params[:foo]}-#{params[:bar]}" }
1159
- end
1160
- get "/foo"
1161
- assert_equal "foo-", body
1162
- get "/foo/bar"
1163
- assert_equal "foo-bar", body
1164
- end
1165
-
1166
- should "parse two routes with the same path but different http verbs and provides" do
1167
- mock_app do
1168
- get(:index, :provides => [:html, :json]) { "This is the get index.#{content_type}" }
1169
- post(:index, :provides => [:html, :json]) { "This is the post index.#{content_type}" }
1170
- end
1171
- get "/"
1172
- assert_equal "This is the get index.html", body
1173
- post "/"
1174
- assert_equal "This is the post index.html", body
1175
- get "/.json"
1176
- assert_equal "This is the get index.json", body
1177
- get "/.js"
1178
- assert_equal 405, status
1179
- post "/.json"
1180
- assert_equal "This is the post index.json", body
1181
- post "/.js"
1182
- assert_equal 405, status
1183
- end
1184
-
1185
- should "allow controller level mapping" do
1186
- mock_app do
1187
- controller :map => "controller-:id" do
1188
- get(:url3) { "#{params[:id]}" }
1189
- get(:url4, :map => 'test-:id2') { "#{params[:id]}, #{params[:id2]}" }
1190
- end
1191
- end
1192
-
1193
- url = @app.url(:url3, :id => 1)
1194
- assert_equal "/controller-1/url3", url
1195
- get url
1196
- assert_equal "1", body
1197
-
1198
- url = @app.url(:url4, 1, 2)
1199
- assert_equal "/controller-1/test-2", url
1200
- get url
1201
- assert_equal "1, 2", body
1202
- end
1203
-
1204
- should 'use absolute and relative maps' do
1205
- mock_app do
1206
- controller :one do
1207
- parent :three
1208
- get :index, :map => 'one' do; end
1209
- get :index2, :map => '/one' do; end
1210
- end
1211
-
1212
- controller :two, :map => 'two' do
1213
- parent :three
1214
- get :index, :map => 'two' do; end
1215
- get :index2, :map => '/two', :with => :id do; end
1216
- end
1217
- end
1218
- assert_equal "/three/three_id/one", @app.url(:one, :index, 'three_id')
1219
- assert_equal "/one", @app.url(:one, :index2)
1220
- assert_equal "/two/three/three_id/two", @app.url(:two, :index, 'three_id')
1221
- assert_equal "/two/four_id", @app.url(:two, :index2, 'four_id')
1222
- end
1223
-
1224
- should "work with params and parent options" do
1225
- mock_app do
1226
- controller :test2, :parent => :parent1, :parent1_id => 1 do
1227
- get(:url3) { params[:foo] }
1228
- get(:url4, :with => :with1) { params[:foo] }
1229
- get(:url5, :with => :with2, :provides => [:html]) { params[:foo] }
1230
- end
1231
- end
1232
-
1233
- url = @app.url(:test2, :url3, :foo => 'bar3')
1234
- assert_equal "/parent1/1/test2/url3?foo=bar3", url
1235
- get url
1236
- assert_equal "bar3", body
1237
-
1238
- url = @app.url(:test2, :url4, :with1 => 'awith1', :foo => 'bar4')
1239
- assert_equal "/parent1/1/test2/url4/awith1?foo=bar4", url
1240
- get url
1241
- assert_equal "bar4", body
1242
-
1243
- url = @app.url(:test2, :url5, :with2 => 'awith1', :foo => 'bar5')
1244
- assert_equal "/parent1/1/test2/url5/awith1?foo=bar5", url
1245
- get url
1246
- assert_equal "bar5", body
1247
- end
1248
-
1249
- should "parse params without explicit provides for every matching route" do
1250
- mock_app do
1251
- get(:index, :map => "/foos/:bar") { "get bar = #{params[:bar]}" }
1252
- post :create, :map => "/foos/:bar", :provides => [:html, :js] do
1253
- "post bar = #{params[:bar]}"
1254
- end
1255
- end
1256
-
1257
- get "/foos/hello"
1258
- assert_equal "get bar = hello", body
1259
- post "/foos/hello"
1260
- assert_equal "post bar = hello", body
1261
- post "/foos/hello.js"
1262
- assert_equal "post bar = hello", body
1263
- end
1264
-
1265
- should "properly route to first foo with two similar routes" do
1266
- mock_app do
1267
- controllers do
1268
- get('/foo/') { "this is foo" }
1269
- get(:show, :map => "/foo/:bar/:id") { "/foo/#{params[:bar]}/#{params[:id]}" }
1270
- end
1271
- end
1272
- get "/foo"
1273
- assert_equal "this is foo", body
1274
- get "/foo/"
1275
- assert_equal "this is foo", body
1276
- get '/foo/5/10'
1277
- assert_equal "/foo/5/10", body
1278
- end
1279
-
1280
- should "index routes should be optional when nested" do
1281
- mock_app do
1282
- controller '/users', :provides => [:json] do
1283
- get '/' do
1284
- "foo"
1285
- end
1286
- end
1287
- end
1288
- get "/users.json"
1289
- assert_equal "foo", body
1290
- end
1291
-
1292
- should "use provides as conditional" do
1293
- mock_app do
1294
- provides :json
1295
- get "/" do
1296
- "foo"
1297
- end
1298
- end
1299
- get "/.json"
1300
- assert_equal "foo", body
1301
- end
1302
-
1303
- should "pass controller conditions to each route" do
1304
- counter = 0
1305
-
1306
- mock_app do
1307
- self.class.send(:define_method, :increment!) do |*args|
1308
- condition { counter += 1 }
1309
- end
1310
-
1311
- controller :posts, :conditions => {:increment! => true} do
1312
- get("/foo") { "foo" }
1313
- get("/bar") { "bar" }
1314
- end
1315
-
1316
- end
1317
-
1318
- get "/posts/foo"
1319
- get "/posts/bar"
1320
- assert_equal 2, counter
1321
- end
1322
-
1323
- should "allow controller conditions to be overridden" do
1324
- counter = 0
1325
-
1326
- mock_app do
1327
- self.class.send(:define_method, :increment!) do |increment|
1328
- condition { counter += 1 } if increment
1329
- end
1330
-
1331
- controller :posts, :conditions => {:increment! => true} do
1332
- get("/foo") { "foo" }
1333
- get("/bar", :increment! => false) { "bar" }
1334
- end
1335
-
1336
- end
1337
-
1338
- get "/posts/foo"
1339
- get "/posts/bar"
1340
- assert_equal 1, counter
1341
- end
1342
-
1343
- should "parse params with class level provides" do
1344
- mock_app do
1345
- controllers :posts, :provides => [:html, :js] do
1346
- post(:create, :map => "/foo/:bar/:baz/:id") {
1347
- "POST CREATE #{params[:bar]} - #{params[:baz]} - #{params[:id]}"
1348
- }
1349
- end
1350
- controllers :topics, :provides => [:js, :html] do
1351
- get(:show, :map => "/foo/:bar/:baz/:id") { render "topics/show" }
1352
- post(:create, :map => "/foo/:bar/:baz") { "TOPICS CREATE #{params[:bar]} - #{params[:baz]}" }
1353
- end
1354
- end
1355
- post "/foo/bar/baz.js"
1356
- assert_equal "TOPICS CREATE bar - baz", body, "should parse params with explicit .js"
1357
- post @app.url(:topics, :create, :format => :js, :bar => 'bar', :baz => 'baz')
1358
- assert_equal "TOPICS CREATE bar - baz", body, "should parse params from generated url"
1359
- post "/foo/bar/baz/5.js"
1360
- assert_equal "POST CREATE bar - baz - 5", body
1361
- post @app.url(:posts, :create, :format => :js, :bar => 'bar', :baz => 'baz', :id => 5)
1362
- assert_equal "POST CREATE bar - baz - 5", body
1363
- end
1364
-
1365
- should "parse params properly with inline provides" do
1366
- mock_app do
1367
- controllers :posts do
1368
- post(:create, :map => "/foo/:bar/:baz/:id", :provides => [:html, :js]) {
1369
- "POST CREATE #{params[:bar]} - #{params[:baz]} - #{params[:id]}"
1370
- }
1371
- end
1372
- controllers :topics do
1373
- get(:show, :map => "/foo/:bar/:baz/:id", :provides => [:html, :js]) { render "topics/show" }
1374
- post(:create, :map => "/foo/:bar/:baz", :provides => [:html, :js]) { "TOPICS CREATE #{params[:bar]} - #{params[:baz]}" }
1375
- end
1376
- end
1377
- post @app.url(:topics, :create, :format => :js, :bar => 'bar', :baz => 'baz')
1378
- assert_equal "TOPICS CREATE bar - baz", body, "should properly post to topics create action"
1379
- post @app.url(:posts, :create, :format => :js, :bar => 'bar', :baz => 'baz', :id => 5)
1380
- assert_equal "POST CREATE bar - baz - 5", body, "should properly post to create action"
1381
- end
1382
-
1383
- should "have overideable format" do
1384
- mock_app do
1385
- ::Rack::Mime::MIME_TYPES[".other"] = "text/html"
1386
- before do
1387
- params[:format] ||= :other
1388
- end
1389
- get("/format_test", :provides => [:html, :other]){ content_type.to_s }
1390
- end
1391
- get "/format_test"
1392
- assert_equal "other", body
1393
- end
1394
-
1395
- should 'invokes handlers registered with ::error when raised' do
1396
- mock_app do
1397
- set :raise_errors, false
1398
- error(FooError) { 'Foo!' }
1399
- get '/' do
1400
- raise FooError
1401
- end
1402
- end
1403
- get '/'
1404
- assert_equal 500, status
1405
- assert_equal 'Foo!', body
1406
- end
1407
-
1408
- should 'have MethodOverride middleware' do
1409
- mock_app do
1410
- put('/') { 'okay' }
1411
- end
1412
- post '/', {'_method'=>'PUT'}, {}
1413
- assert_equal 200, status
1414
- assert_equal 'okay', body
1415
- end
1416
-
1417
- should 'parse nested params' do
1418
- mock_app do
1419
- get(:index) { "%s %s" % [params[:account][:name], params[:account][:surname]] }
1420
- end
1421
- get "/?account[name]=foo&account[surname]=bar"
1422
- assert_equal 'foo bar', body
1423
- get @app.url(:index, "account[name]" => "foo", "account[surname]" => "bar")
1424
- assert_equal 'foo bar', body
1425
- end
1426
-
1427
- should 'render sinatra NotFound page' do
1428
- mock_app { set :environment, :development }
1429
- get "/"
1430
- assert_equal 404, status
1431
- assert_match /Sinatra doesn&rsquo;t know this ditty./, body
1432
- end
1433
-
1434
- should 'render a custom NotFound page' do
1435
- mock_app do
1436
- error(Sinatra::NotFound) { "not found" }
1437
- end
1438
- get "/"
1439
- assert_equal 404, status
1440
- assert_match /not found/, body
1441
- end
1442
-
1443
- should 'render a custom 404 page' do
1444
- mock_app do
1445
- error(404) { "not found" }
1446
- end
1447
- get "/"
1448
- assert_equal 404, status
1449
- assert_match /not found/, body
1450
- end
1451
-
1452
- should 'recognize paths' do
1453
- mock_app do
1454
- controller :foo do
1455
- get(:bar, :map => "/my/:id/custom-route") { }
1456
- end
1457
- get(:simple, :map => "/simple/:id") { }
1458
- get(:with_format, :with => :id, :provides => :js) { }
1459
- end
1460
- assert_equal [:foo_bar, { :id => "fantastic" }], @app.recognize_path(@app.url(:foo, :bar, :id => :fantastic))
1461
- assert_equal [:foo_bar, { :id => "18" }], @app.recognize_path(@app.url(:foo, :bar, :id => 18))
1462
- assert_equal [:simple, { :id => "bar" }], @app.recognize_path(@app.url(:simple, :id => "bar"))
1463
- assert_equal [:simple, { :id => "true" }], @app.recognize_path(@app.url(:simple, :id => true))
1464
- assert_equal [:simple, { :id => "9" }], @app.recognize_path(@app.url(:simple, :id => 9))
1465
- assert_equal [:with_format, { :id => "bar", :format => "js" }], @app.recognize_path(@app.url(:with_format, :id => "bar", :format => :js))
1466
- assert_equal [:with_format, { :id => "true", :format => "js" }], @app.recognize_path(@app.url(:with_format, :id => true, :format => "js"))
1467
- assert_equal [:with_format, { :id => "9", :format => "js" }], @app.recognize_path(@app.url(:with_format, :id => 9, :format => :js))
1468
- end
1469
-
1470
- should 'have current_path' do
1471
- mock_app do
1472
- controller :foo do
1473
- get :bar, :map => "/paginate/:page" do
1474
- current_path
1475
- end
1476
- end
1477
- end
1478
- get @app.url(:foo, :bar, :page => 10)
1479
- assert_equal "/paginate/10", body
1480
- end
1481
-
1482
- should 'change params in current_path' do
1483
- mock_app do
1484
- get :index, :map => "/paginate/:page" do
1485
- current_path(:page => 66)
1486
- end
1487
- end
1488
- get @app.url(:index, :page => 10)
1489
- assert_equal "/paginate/66", body
1490
- end
1491
- end