middleman 2.0.7 → 2.0.8

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