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.
- data/.gitignore +1 -0
- data/.travis.yml +0 -1
- data/CHANGELOG +8 -0
- data/Gemfile +1 -1
- data/features/data.feature +6 -1
- data/features/markdown.feature +7 -0
- data/features/sprockets.feature +11 -1
- data/features/sprockets_gems.feature +3 -3
- data/fixtures/sprockets-app/source/jquery_include.js +1 -0
- data/fixtures/test-app/config.rb +2 -0
- data/fixtures/test-app/source/data2.html.liquid +1 -0
- data/fixtures/test-app/source/javascripts/multiple_engines.js.coffee.erb +1 -0
- data/fixtures/test-app/source/markdown.html.markdown +1 -0
- data/lib/middleman.rb +0 -6
- data/lib/middleman/base.rb +6 -1
- data/lib/middleman/builder.rb +6 -4
- data/lib/middleman/core_extensions/data.rb +35 -5
- data/lib/middleman/core_extensions/front_matter.rb +9 -2
- data/lib/middleman/core_extensions/sprockets.rb +25 -1
- data/lib/middleman/renderers/markdown.rb +25 -2
- data/lib/middleman/version.rb +1 -1
- data/middleman.gemspec +7 -6
- metadata +112 -251
- data/lib/middleman/vendor/padrino-core-0.10.0/.document +0 -5
- data/lib/middleman/vendor/padrino-core-0.10.0/.gitignore +0 -22
- data/lib/middleman/vendor/padrino-core-0.10.0/LICENSE +0 -20
- data/lib/middleman/vendor/padrino-core-0.10.0/README.rdoc +0 -294
- data/lib/middleman/vendor/padrino-core-0.10.0/Rakefile +0 -5
- data/lib/middleman/vendor/padrino-core-0.10.0/bin/padrino +0 -9
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core.rb +0 -119
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/application.rb +0 -259
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/application/rendering.rb +0 -228
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/application/routing.rb +0 -821
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/application/showexceptions.rb +0 -18
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/caller.rb +0 -45
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/cli/adapter.rb +0 -24
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/cli/base.rb +0 -152
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/cli/console.rb +0 -20
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/cli/rake.rb +0 -24
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/cli/rake_tasks.rb +0 -59
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/command.rb +0 -27
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/images/404.png +0 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/images/500.png +0 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/loader.rb +0 -182
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/cz.yml +0 -30
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/da.yml +0 -30
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/de.yml +0 -30
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/en.yml +0 -30
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/es.yml +0 -30
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/fr.yml +0 -30
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/hu.yml +0 -30
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/it.yml +0 -37
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/ja.yml +0 -30
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/nl.yml +0 -30
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/no.yml +0 -31
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/pl.yml +0 -30
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/pt_br.yml +0 -37
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/ru.yml +0 -30
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/tr.yml +0 -30
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/uk.yml +0 -30
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/zh_cn.yml +0 -30
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/zh_tw.yml +0 -30
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/logger.rb +0 -344
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/mounter.rb +0 -192
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/reloader.rb +0 -247
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/router.rb +0 -79
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/server.rb +0 -70
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/support_lite.rb +0 -135
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/tasks.rb +0 -23
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/version.rb +0 -15
- data/lib/middleman/vendor/padrino-core-0.10.0/padrino-core.gemspec +0 -38
- data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/apps/.components +0 -6
- data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/apps/.gitignore +0 -7
- data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/apps/complex.rb +0 -27
- data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/apps/simple.rb +0 -33
- data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/a.rb +0 -9
- data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/b.rb +0 -4
- data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/c.rb +0 -1
- data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/circular/e.rb +0 -13
- data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/circular/f.rb +0 -2
- data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/circular/g.rb +0 -2
- data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/d.rb +0 -4
- data/lib/middleman/vendor/padrino-core-0.10.0/test/helper.rb +0 -101
- data/lib/middleman/vendor/padrino-core-0.10.0/test/test_application.rb +0 -83
- data/lib/middleman/vendor/padrino-core-0.10.0/test/test_core.rb +0 -79
- data/lib/middleman/vendor/padrino-core-0.10.0/test/test_dependencies.rb +0 -44
- data/lib/middleman/vendor/padrino-core-0.10.0/test/test_filters.rb +0 -266
- data/lib/middleman/vendor/padrino-core-0.10.0/test/test_logger.rb +0 -91
- data/lib/middleman/vendor/padrino-core-0.10.0/test/test_mounter.rb +0 -176
- data/lib/middleman/vendor/padrino-core-0.10.0/test/test_reloader_complex.rb +0 -66
- data/lib/middleman/vendor/padrino-core-0.10.0/test/test_reloader_simple.rb +0 -97
- data/lib/middleman/vendor/padrino-core-0.10.0/test/test_rendering.rb +0 -437
- data/lib/middleman/vendor/padrino-core-0.10.0/test/test_router.rb +0 -146
- data/lib/middleman/vendor/padrino-core-0.10.0/test/test_routing.rb +0 -1491
- data/lib/middleman/vendor/padrino-helpers-0.10.0/.document +0 -5
- data/lib/middleman/vendor/padrino-helpers-0.10.0/.gitignore +0 -21
- data/lib/middleman/vendor/padrino-helpers-0.10.0/LICENSE +0 -20
- data/lib/middleman/vendor/padrino-helpers-0.10.0/README.rdoc +0 -239
- data/lib/middleman/vendor/padrino-helpers-0.10.0/Rakefile +0 -5
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers.rb +0 -51
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/asset_tag_helpers.rb +0 -288
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/form_builder/abstract_form_builder.rb +0 -220
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/form_builder/standard_form_builder.rb +0 -43
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/form_helpers.rb +0 -446
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/format_helpers.rb +0 -260
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/cz.yml +0 -103
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/da.yml +0 -91
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/de.yml +0 -78
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/en.yml +0 -103
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/es.yml +0 -103
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/fr.yml +0 -79
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/hu.yml +0 -103
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/it.yml +0 -85
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/ja.yml +0 -103
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/nl.yml +0 -78
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/no.yml +0 -91
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/pl.yml +0 -95
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/pt_br.yml +0 -103
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/ru.yml +0 -103
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/tr.yml +0 -103
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/uk.yml +0 -103
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/zh_cn.yml +0 -103
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/zh_tw.yml +0 -103
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/number_helpers.rb +0 -273
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/output_helpers.rb +0 -128
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/output_helpers/abstract_handler.rb +0 -103
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/output_helpers/erb_handler.rb +0 -79
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/output_helpers/haml_handler.rb +0 -64
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/output_helpers/slim_handler.rb +0 -82
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/render_helpers.rb +0 -40
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/tag_helpers.rb +0 -59
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/translation_helpers.rb +0 -21
- data/lib/middleman/vendor/padrino-helpers-0.10.0/padrino-helpers.gemspec +0 -27
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/app.rb +0 -73
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/capture_concat.erb +0 -14
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/capture_concat.haml +0 -12
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/capture_concat.slim +0 -13
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_for.erb +0 -11
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_for.haml +0 -9
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_for.slim +0 -9
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_tag.erb +0 -11
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_tag.haml +0 -9
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_tag.slim +0 -9
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/current_engine.erb +0 -5
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/current_engine.haml +0 -5
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/current_engine.slim +0 -5
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/fields_for.erb +0 -20
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/fields_for.haml +0 -15
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/fields_for.slim +0 -15
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_for.erb +0 -56
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_for.haml +0 -47
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_for.slim +0 -47
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_tag.erb +0 -56
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_tag.haml +0 -45
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_tag.slim +0 -45
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/link_to.erb +0 -5
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/link_to.haml +0 -4
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/link_to.slim +0 -4
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/mail_to.erb +0 -3
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/mail_to.haml +0 -3
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/mail_to.slim +0 -3
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/meta_tag.erb +0 -3
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/meta_tag.haml +0 -3
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/meta_tag.slim +0 -3
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/partials/_erb.erb +0 -1
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/partials/_haml.haml +0 -1
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/partials/_slim.slim +0 -1
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/simple_partial.erb +0 -1
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/simple_partial.haml +0 -1
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/simple_partial.slim +0 -1
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/app.rb +0 -45
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/current_engine.haml +0 -5
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/current_engines/_erb.erb +0 -1
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/current_engines/_haml.haml +0 -1
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/current_engines/_slim.slim +0 -1
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/erb/test.erb +0 -1
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/explicit_engine.haml +0 -5
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/haml/test.haml +0 -1
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/template/_user.haml +0 -7
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/template/haml_template.haml +0 -1
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/template/some_template.haml +0 -2
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/helper.rb +0 -78
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_asset_tag_helpers.rb +0 -320
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_form_builder.rb +0 -998
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_form_helpers.rb +0 -645
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_format_helpers.rb +0 -227
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_number_helpers.rb +0 -136
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_output_helpers.rb +0 -133
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_render_helpers.rb +0 -69
- 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’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
|