actionpack 2.0.5 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +149 -7
- data/MIT-LICENSE +1 -1
- data/README +1 -1
- data/Rakefile +5 -6
- data/lib/action_controller.rb +2 -2
- data/lib/action_controller/assertions/model_assertions.rb +2 -1
- data/lib/action_controller/assertions/response_assertions.rb +4 -2
- data/lib/action_controller/assertions/routing_assertions.rb +3 -3
- data/lib/action_controller/assertions/selector_assertions.rb +30 -27
- data/lib/action_controller/assertions/tag_assertions.rb +3 -3
- data/lib/action_controller/base.rb +103 -129
- data/lib/action_controller/benchmarking.rb +3 -3
- data/lib/action_controller/caching.rb +41 -652
- data/lib/action_controller/caching/actions.rb +144 -0
- data/lib/action_controller/caching/fragments.rb +138 -0
- data/lib/action_controller/caching/pages.rb +154 -0
- data/lib/action_controller/caching/sql_cache.rb +18 -0
- data/lib/action_controller/caching/sweeping.rb +97 -0
- data/lib/action_controller/cgi_ext/cookie.rb +27 -23
- data/lib/action_controller/cgi_ext/stdinput.rb +1 -0
- data/lib/action_controller/cgi_process.rb +6 -4
- data/lib/action_controller/components.rb +7 -6
- data/lib/action_controller/cookies.rb +31 -19
- data/lib/action_controller/dispatcher.rb +51 -84
- data/lib/action_controller/filters.rb +295 -421
- data/lib/action_controller/flash.rb +1 -6
- data/lib/action_controller/headers.rb +31 -0
- data/lib/action_controller/helpers.rb +26 -9
- data/lib/action_controller/http_authentication.rb +1 -1
- data/lib/action_controller/integration.rb +65 -13
- data/lib/action_controller/layout.rb +24 -39
- data/lib/action_controller/mime_responds.rb +7 -3
- data/lib/action_controller/mime_type.rb +25 -9
- data/lib/action_controller/mime_types.rb +1 -1
- data/lib/action_controller/polymorphic_routes.rb +32 -17
- data/lib/action_controller/record_identifier.rb +10 -4
- data/lib/action_controller/request.rb +46 -30
- data/lib/action_controller/request_forgery_protection.rb +10 -9
- data/lib/action_controller/request_profiler.rb +29 -8
- data/lib/action_controller/rescue.rb +24 -24
- data/lib/action_controller/resources.rb +66 -23
- data/lib/action_controller/response.rb +2 -2
- data/lib/action_controller/routing.rb +113 -1229
- data/lib/action_controller/routing/builder.rb +204 -0
- data/lib/action_controller/{routing_optimisation.rb → routing/optimisations.rb} +13 -12
- data/lib/action_controller/routing/recognition_optimisation.rb +158 -0
- data/lib/action_controller/routing/route.rb +240 -0
- data/lib/action_controller/routing/route_set.rb +435 -0
- data/lib/action_controller/routing/routing_ext.rb +46 -0
- data/lib/action_controller/routing/segments.rb +283 -0
- data/lib/action_controller/session/active_record_store.rb +13 -8
- data/lib/action_controller/session/cookie_store.rb +20 -17
- data/lib/action_controller/session_management.rb +10 -3
- data/lib/action_controller/streaming.rb +45 -31
- data/lib/action_controller/test_case.rb +33 -23
- data/lib/action_controller/test_process.rb +39 -35
- data/lib/action_controller/url_rewriter.rb +18 -12
- data/lib/action_controller/vendor/html-scanner/html/tokenizer.rb +1 -1
- data/lib/action_pack.rb +1 -1
- data/lib/action_pack/version.rb +2 -2
- data/lib/action_view.rb +11 -3
- data/lib/action_view/base.rb +73 -390
- data/lib/action_view/helpers/active_record_helper.rb +83 -62
- data/lib/action_view/helpers/asset_tag_helper.rb +101 -44
- data/lib/action_view/helpers/atom_feed_helper.rb +35 -7
- data/lib/action_view/helpers/benchmark_helper.rb +5 -3
- data/lib/action_view/helpers/cache_helper.rb +3 -2
- data/lib/action_view/helpers/capture_helper.rb +1 -2
- data/lib/action_view/helpers/date_helper.rb +104 -82
- data/lib/action_view/helpers/form_helper.rb +148 -75
- data/lib/action_view/helpers/form_options_helper.rb +44 -23
- data/lib/action_view/helpers/form_tag_helper.rb +22 -13
- data/lib/action_view/helpers/javascripts/controls.js +1 -1
- data/lib/action_view/helpers/javascripts/dragdrop.js +1 -1
- data/lib/action_view/helpers/javascripts/effects.js +1 -1
- data/lib/action_view/helpers/number_helper.rb +10 -3
- data/lib/action_view/helpers/prototype_helper.rb +61 -29
- data/lib/action_view/helpers/record_tag_helper.rb +3 -3
- data/lib/action_view/helpers/sanitize_helper.rb +23 -17
- data/lib/action_view/helpers/scriptaculous_helper.rb +86 -60
- data/lib/action_view/helpers/text_helper.rb +153 -125
- data/lib/action_view/helpers/url_helper.rb +83 -28
- data/lib/action_view/inline_template.rb +20 -0
- data/lib/action_view/partial_template.rb +70 -0
- data/lib/action_view/partials.rb +31 -73
- data/lib/action_view/template.rb +127 -0
- data/lib/action_view/template_error.rb +8 -7
- data/lib/action_view/template_finder.rb +177 -0
- data/lib/action_view/template_handler.rb +18 -1
- data/lib/action_view/template_handlers/builder.rb +10 -2
- data/lib/action_view/template_handlers/compilable.rb +128 -0
- data/lib/action_view/template_handlers/erb.rb +37 -2
- data/lib/action_view/template_handlers/rjs.rb +14 -1
- data/lib/action_view/test_case.rb +58 -0
- data/test/abstract_unit.rb +1 -1
- data/test/active_record_unit.rb +3 -6
- data/test/activerecord/active_record_store_test.rb +1 -2
- data/test/activerecord/render_partial_with_record_identification_test.rb +158 -41
- data/test/adv_attr_test.rb +20 -0
- data/test/controller/action_pack_assertions_test.rb +16 -19
- data/test/controller/addresses_render_test.rb +1 -1
- data/test/controller/assert_select_test.rb +13 -6
- data/test/controller/base_test.rb +48 -2
- data/test/controller/benchmark_test.rb +1 -2
- data/test/controller/caching_test.rb +282 -21
- data/test/controller/capture_test.rb +1 -1
- data/test/controller/cgi_test.rb +1 -1
- data/test/controller/components_test.rb +1 -1
- data/test/controller/content_type_test.rb +2 -2
- data/test/controller/cookie_test.rb +13 -2
- data/test/controller/custom_handler_test.rb +14 -10
- data/test/controller/deprecation/deprecated_base_methods_test.rb +1 -1
- data/test/controller/dispatcher_test.rb +31 -49
- data/test/controller/fake_controllers.rb +17 -0
- data/test/controller/fake_models.rb +6 -0
- data/test/controller/filter_params_test.rb +14 -8
- data/test/controller/filters_test.rb +44 -16
- data/test/controller/flash_test.rb +2 -2
- data/test/controller/header_test.rb +14 -0
- data/test/controller/helper_test.rb +19 -15
- data/test/controller/html-scanner/document_test.rb +1 -2
- data/test/controller/html-scanner/node_test.rb +1 -2
- data/test/controller/html-scanner/sanitizer_test.rb +8 -5
- data/test/controller/html-scanner/tag_node_test.rb +1 -2
- data/test/controller/html-scanner/text_node_test.rb +2 -3
- data/test/controller/html-scanner/tokenizer_test.rb +8 -2
- data/test/controller/http_authentication_test.rb +1 -1
- data/test/controller/integration_test.rb +14 -16
- data/test/controller/integration_upload_test.rb +43 -0
- data/test/controller/layout_test.rb +26 -6
- data/test/controller/mime_responds_test.rb +39 -7
- data/test/controller/mime_type_test.rb +29 -5
- data/test/controller/new_render_test.rb +105 -34
- data/test/controller/polymorphic_routes_test.rb +32 -20
- data/test/controller/record_identifier_test.rb +38 -2
- data/test/controller/redirect_test.rb +21 -1
- data/test/controller/render_test.rb +59 -15
- data/test/controller/request_forgery_protection_test.rb +92 -5
- data/test/controller/request_test.rb +64 -6
- data/test/controller/rescue_test.rb +22 -6
- data/test/controller/resources_test.rb +102 -14
- data/test/controller/routing_test.rb +231 -19
- data/test/controller/selector_test.rb +2 -2
- data/test/controller/send_file_test.rb +14 -3
- data/test/controller/session/cookie_store_test.rb +16 -4
- data/test/controller/session/mem_cache_store_test.rb +3 -4
- data/test/controller/session_fixation_test.rb +1 -1
- data/test/controller/session_management_test.rb +23 -1
- data/test/controller/test_test.rb +39 -18
- data/test/controller/url_rewriter_test.rb +35 -1
- data/test/controller/verification_test.rb +1 -1
- data/test/controller/view_paths_test.rb +15 -12
- data/test/controller/webservice_test.rb +48 -3
- data/test/fixtures/bad_customers/_bad_customer.html.erb +1 -0
- data/test/fixtures/company.rb +1 -0
- data/test/fixtures/customers/_customer.html.erb +1 -0
- data/test/fixtures/db_definitions/sqlite.sql +6 -0
- data/test/fixtures/functional_caching/_partial.erb +3 -0
- data/test/fixtures/functional_caching/fragment_cached.html.erb +2 -0
- data/test/fixtures/functional_caching/html_fragment_cached_with_partial.html.erb +1 -0
- data/test/fixtures/functional_caching/js_fragment_cached_with_partial.js.rjs +1 -0
- data/test/fixtures/good_customers/_good_customer.html.erb +1 -0
- data/test/fixtures/mascot.rb +3 -0
- data/test/fixtures/mascots.yml +4 -0
- data/test/fixtures/mascots/_mascot.html.erb +1 -0
- data/test/fixtures/multipart/boundary_problem_file +10 -0
- data/test/fixtures/public/javascripts/application.js +1 -0
- data/test/fixtures/public/javascripts/controls.js +1 -0
- data/test/fixtures/public/javascripts/dragdrop.js +1 -0
- data/test/fixtures/public/javascripts/effects.js +1 -0
- data/test/fixtures/public/javascripts/prototype.js +1 -0
- data/test/fixtures/public/javascripts/version.1.0.js +1 -0
- data/test/fixtures/public/stylesheets/version.1.0.css +1 -0
- data/test/fixtures/reply.rb +1 -0
- data/test/fixtures/shared.html.erb +1 -0
- data/test/fixtures/symlink_parent/symlinked_layout.erb +5 -0
- data/test/fixtures/test/_customer_counter.erb +1 -0
- data/test/fixtures/test/_form.erb +1 -0
- data/test/fixtures/test/_labelling_form.erb +1 -0
- data/test/fixtures/test/_raise.html.erb +1 -0
- data/test/fixtures/test/greeting.js.rjs +1 -0
- data/test/fixtures/topics/_topic.html.erb +1 -0
- data/test/template/active_record_helper_test.rb +25 -8
- data/test/template/asset_tag_helper_test.rb +100 -17
- data/test/template/atom_feed_helper_test.rb +29 -1
- data/test/template/benchmark_helper_test.rb +10 -22
- data/test/template/date_helper_test.rb +455 -153
- data/test/template/erb_util_test.rb +10 -42
- data/test/template/form_helper_test.rb +192 -66
- data/test/template/form_options_helper_test.rb +19 -8
- data/test/template/form_tag_helper_test.rb +11 -8
- data/test/template/javascript_helper_test.rb +3 -9
- data/test/template/number_helper_test.rb +6 -3
- data/test/template/prototype_helper_test.rb +27 -40
- data/test/template/record_tag_helper_test.rb +54 -0
- data/test/template/sanitize_helper_test.rb +5 -6
- data/test/template/scriptaculous_helper_test.rb +7 -13
- data/test/template/tag_helper_test.rb +3 -6
- data/test/template/template_finder_test.rb +73 -0
- data/test/template/template_object_test.rb +95 -0
- data/test/template/test_test.rb +56 -0
- data/test/template/text_helper_test.rb +46 -33
- data/test/template/url_helper_test.rb +8 -10
- metadata +65 -12
- data/lib/action_view/compiled_templates.rb +0 -69
- data/test/action_view_test.rb +0 -44
- data/test/activerecord/fixtures_test.rb +0 -24
- data/test/controller/fragment_store_setting_test.rb +0 -47
- data/test/template/compiled_templates_test.rb +0 -197
- data/test/template/deprecate_ivars_test.rb +0 -51
data/test/controller/cgi_test.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require
|
|
1
|
+
require 'abstract_unit'
|
|
2
2
|
|
|
3
3
|
class ContentTypeController < ActionController::Base
|
|
4
4
|
def render_content_type_from_body
|
|
@@ -136,4 +136,4 @@ class ContentTypeTest < Test::Unit::TestCase
|
|
|
136
136
|
get :render_default_content_types_for_respond_to
|
|
137
137
|
assert_equal Mime::XML, @response.content_type
|
|
138
138
|
end
|
|
139
|
-
end
|
|
139
|
+
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require
|
|
1
|
+
require 'abstract_unit'
|
|
2
2
|
|
|
3
3
|
class CookieTest < Test::Unit::TestCase
|
|
4
4
|
class TestController < ActionController::Base
|
|
@@ -37,7 +37,7 @@ class CookieTest < Test::Unit::TestCase
|
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
def rescue_action(e)
|
|
40
|
-
raise unless
|
|
40
|
+
raise unless ActionView::MissingTemplate # No templates here, and we don't care about the output
|
|
41
41
|
end
|
|
42
42
|
end
|
|
43
43
|
|
|
@@ -82,6 +82,7 @@ class CookieTest < Test::Unit::TestCase
|
|
|
82
82
|
def test_expiring_cookie
|
|
83
83
|
get :logout
|
|
84
84
|
assert_equal [ CGI::Cookie::new("name" => "user_name", "value" => "", "expires" => Time.at(0)) ], @response.headers["cookie"]
|
|
85
|
+
assert_equal CGI::Cookie::new("name" => "user_name", "value" => "", "expires" => Time.at(0)).value, []
|
|
85
86
|
end
|
|
86
87
|
|
|
87
88
|
def test_cookiejar_accessor
|
|
@@ -132,4 +133,14 @@ class CookieTest < Test::Unit::TestCase
|
|
|
132
133
|
assert cookie_str !~ /secure/
|
|
133
134
|
assert cookie_str !~ /HttpOnly/
|
|
134
135
|
end
|
|
136
|
+
|
|
137
|
+
def test_cookies_should_not_be_split_on_ampersand_values
|
|
138
|
+
cookies = CGI::Cookie.parse('return_to=http://rubyonrails.org/search?term=api&scope=all&global=true')
|
|
139
|
+
assert_equal({"return_to" => ["http://rubyonrails.org/search?term=api&scope=all&global=true"]}, cookies)
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def test_cookies_should_not_be_split_on_values_with_newlines
|
|
143
|
+
cookies = CGI::Cookie.new("name" => "val", "value" => "this\nis\na\ntest")
|
|
144
|
+
assert cookies.size == 1
|
|
145
|
+
end
|
|
135
146
|
end
|
|
@@ -1,33 +1,36 @@
|
|
|
1
|
-
require
|
|
1
|
+
require 'abstract_unit'
|
|
2
2
|
|
|
3
|
-
class CustomHandler
|
|
3
|
+
class CustomHandler < ActionView::TemplateHandler
|
|
4
4
|
def initialize( view )
|
|
5
5
|
@view = view
|
|
6
6
|
end
|
|
7
7
|
|
|
8
|
-
def render( template
|
|
9
|
-
[ template,
|
|
10
|
-
|
|
8
|
+
def render( template )
|
|
9
|
+
[ template.source,
|
|
10
|
+
template.locals,
|
|
11
11
|
@view ]
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
class CustomHandlerTest < Test::Unit::TestCase
|
|
16
16
|
def setup
|
|
17
|
-
ActionView::
|
|
18
|
-
ActionView::
|
|
17
|
+
ActionView::Template.register_template_handler "foo", CustomHandler
|
|
18
|
+
ActionView::Template.register_template_handler :foo2, CustomHandler
|
|
19
19
|
@view = ActionView::Base.new
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def test_custom_render
|
|
23
|
-
|
|
23
|
+
template = ActionView::InlineTemplate.new(@view, "hello <%= one %>", { :one => "two" }, "foo")
|
|
24
|
+
|
|
25
|
+
result = @view.render_template(template)
|
|
24
26
|
assert_equal(
|
|
25
27
|
[ "hello <%= one %>", { :one => "two" }, @view ],
|
|
26
28
|
result )
|
|
27
29
|
end
|
|
28
30
|
|
|
29
31
|
def test_custom_render2
|
|
30
|
-
|
|
32
|
+
template = ActionView::InlineTemplate.new(@view, "hello <%= one %>", { :one => "two" }, "foo2")
|
|
33
|
+
result = @view.render_template(template)
|
|
31
34
|
assert_equal(
|
|
32
35
|
[ "hello <%= one %>", { :one => "two" }, @view ],
|
|
33
36
|
result )
|
|
@@ -35,7 +38,8 @@ class CustomHandlerTest < Test::Unit::TestCase
|
|
|
35
38
|
|
|
36
39
|
def test_unhandled_extension
|
|
37
40
|
# uses the ERb handler by default if the extension isn't recognized
|
|
38
|
-
|
|
41
|
+
template = ActionView::InlineTemplate.new(@view, "hello <%= one %>", { :one => "two" }, "bar")
|
|
42
|
+
result = @view.render_template(template)
|
|
39
43
|
assert_equal "hello two", result
|
|
40
44
|
end
|
|
41
45
|
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require
|
|
1
|
+
require 'abstract_unit'
|
|
2
2
|
|
|
3
3
|
uses_mocha 'dispatcher tests' do
|
|
4
4
|
|
|
@@ -11,107 +11,89 @@ class DispatcherTest < Test::Unit::TestCase
|
|
|
11
11
|
@output = StringIO.new
|
|
12
12
|
ENV['REQUEST_METHOD'] = 'GET'
|
|
13
13
|
|
|
14
|
-
Dispatcher
|
|
14
|
+
# Clear callbacks as they are redefined by Dispatcher#define_dispatcher_callbacks
|
|
15
|
+
Dispatcher.instance_variable_set("@prepare_dispatch_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
|
|
16
|
+
Dispatcher.instance_variable_set("@before_dispatch_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
|
|
17
|
+
Dispatcher.instance_variable_set("@after_dispatch_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
|
|
18
|
+
|
|
19
|
+
Dispatcher.stubs(:require_dependency)
|
|
20
|
+
|
|
15
21
|
@dispatcher = Dispatcher.new(@output)
|
|
16
22
|
end
|
|
17
23
|
|
|
18
24
|
def teardown
|
|
19
|
-
ENV
|
|
25
|
+
ENV.delete 'REQUEST_METHOD'
|
|
20
26
|
end
|
|
21
27
|
|
|
22
28
|
def test_clears_dependencies_after_dispatch_if_in_loading_mode
|
|
23
|
-
Dependencies.stubs(:load?).returns(true)
|
|
24
|
-
|
|
25
29
|
ActionController::Routing::Routes.expects(:reload).once
|
|
26
30
|
Dependencies.expects(:clear).once
|
|
27
31
|
|
|
28
|
-
dispatch
|
|
32
|
+
dispatch(@output, false)
|
|
29
33
|
end
|
|
30
34
|
|
|
31
35
|
def test_leaves_dependencies_after_dispatch_if_not_in_loading_mode
|
|
32
|
-
Dependencies.stubs(:load?).returns(false)
|
|
33
|
-
|
|
34
36
|
ActionController::Routing::Routes.expects(:reload).never
|
|
35
37
|
Dependencies.expects(:clear).never
|
|
36
38
|
|
|
37
39
|
dispatch
|
|
38
40
|
end
|
|
39
41
|
|
|
42
|
+
# Stub out dispatch error logger
|
|
43
|
+
class << Dispatcher
|
|
44
|
+
def log_failsafe_exception(status, exception); end
|
|
45
|
+
end
|
|
46
|
+
|
|
40
47
|
def test_failsafe_response
|
|
41
48
|
CGI.expects(:new).raises('some multipart parsing failure')
|
|
42
|
-
|
|
43
|
-
ActionController::Routing::Routes.stubs(:reload)
|
|
44
|
-
Dispatcher.stubs(:log_failsafe_exception)
|
|
49
|
+
Dispatcher.expects(:log_failsafe_exception)
|
|
45
50
|
|
|
46
51
|
assert_nothing_raised { dispatch }
|
|
47
52
|
|
|
48
53
|
assert_equal "Status: 400 Bad Request\r\nContent-Type: text/html\r\n\r\n<html><body><h1>400 Bad Request</h1></body></html>", @output.string
|
|
49
54
|
end
|
|
50
55
|
|
|
51
|
-
def
|
|
52
|
-
Dependencies.stubs(:load?).returns(false)
|
|
53
|
-
ActionController::Routing::Routes.expects(:reload).never
|
|
54
|
-
@dispatcher.unprepared = false
|
|
55
|
-
@dispatcher.send!(:reload_application)
|
|
56
|
-
assert !@dispatcher.unprepared
|
|
57
|
-
|
|
58
|
-
Dependencies.stubs(:load?).returns(true)
|
|
59
|
-
ActionController::Routing::Routes.expects(:reload).once
|
|
60
|
-
@dispatcher.send!(:reload_application)
|
|
61
|
-
assert @dispatcher.unprepared
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def test_prepare_application_runs_callbacks_if_unprepared
|
|
56
|
+
def test_prepare_callbacks
|
|
65
57
|
a = b = c = nil
|
|
66
|
-
Dispatcher.to_prepare { a = b = c = 1 }
|
|
67
|
-
Dispatcher.to_prepare { b = c = 2 }
|
|
68
|
-
Dispatcher.to_prepare { c = 3 }
|
|
58
|
+
Dispatcher.to_prepare { |*args| a = b = c = 1 }
|
|
59
|
+
Dispatcher.to_prepare { |*args| b = c = 2 }
|
|
60
|
+
Dispatcher.to_prepare { |*args| c = 3 }
|
|
69
61
|
|
|
70
|
-
#
|
|
71
|
-
@dispatcher.unprepared = false
|
|
72
|
-
@dispatcher.send! :prepare_application
|
|
62
|
+
# Ensure to_prepare callbacks are not run when defined
|
|
73
63
|
assert_nil a || b || c
|
|
74
64
|
|
|
75
|
-
#
|
|
76
|
-
@dispatcher.
|
|
77
|
-
|
|
65
|
+
# Run callbacks
|
|
66
|
+
@dispatcher.send :run_callbacks, :prepare_dispatch
|
|
67
|
+
|
|
78
68
|
assert_equal 1, a
|
|
79
69
|
assert_equal 2, b
|
|
80
70
|
assert_equal 3, c
|
|
81
71
|
|
|
82
|
-
#
|
|
72
|
+
# Make sure they are only run once
|
|
83
73
|
a = b = c = nil
|
|
84
|
-
@dispatcher.send
|
|
74
|
+
@dispatcher.send :dispatch
|
|
85
75
|
assert_nil a || b || c
|
|
86
76
|
end
|
|
87
77
|
|
|
88
78
|
def test_to_prepare_with_identifier_replaces
|
|
89
79
|
a = b = nil
|
|
90
|
-
Dispatcher.to_prepare(:unique_id) { a = b = 1 }
|
|
91
|
-
Dispatcher.to_prepare(:unique_id) { a = 2 }
|
|
80
|
+
Dispatcher.to_prepare(:unique_id) { |*args| a = b = 1 }
|
|
81
|
+
Dispatcher.to_prepare(:unique_id) { |*args| a = 2 }
|
|
92
82
|
|
|
93
|
-
@dispatcher.
|
|
94
|
-
@dispatcher.send! :prepare_application
|
|
83
|
+
@dispatcher.send :run_callbacks, :prepare_dispatch
|
|
95
84
|
assert_equal 2, a
|
|
96
85
|
assert_equal nil, b
|
|
97
86
|
end
|
|
98
87
|
|
|
99
|
-
def test_to_prepare_only_runs_once_if_not_loading_dependencies
|
|
100
|
-
Dependencies.stubs(:load?).returns(false)
|
|
101
|
-
called = 0
|
|
102
|
-
Dispatcher.to_prepare(:unprepared_test) { called += 1 }
|
|
103
|
-
2.times { dispatch }
|
|
104
|
-
assert_equal 1, called
|
|
105
|
-
end
|
|
106
|
-
|
|
107
88
|
private
|
|
108
|
-
def dispatch(output = @output)
|
|
89
|
+
def dispatch(output = @output, cache_classes = true)
|
|
109
90
|
controller = mock
|
|
110
91
|
controller.stubs(:process).returns(controller)
|
|
111
92
|
controller.stubs(:out).with(output).returns('response')
|
|
112
93
|
|
|
113
94
|
ActionController::Routing::Routes.stubs(:recognize).returns(controller)
|
|
114
95
|
|
|
96
|
+
Dispatcher.define_dispatcher_callbacks(cache_classes)
|
|
115
97
|
Dispatcher.dispatch(nil, {}, output)
|
|
116
98
|
end
|
|
117
99
|
|
|
@@ -10,6 +10,23 @@ module Admin
|
|
|
10
10
|
class NewsFeedController < Class.new(ActionController::Base); end
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
+
# For speed test
|
|
14
|
+
class SpeedController < ActionController::Base; end
|
|
15
|
+
class SearchController < SpeedController; end
|
|
16
|
+
class VideosController < SpeedController; end
|
|
17
|
+
class VideoFileController < SpeedController; end
|
|
18
|
+
class VideoSharesController < SpeedController; end
|
|
19
|
+
class VideoAbusesController < SpeedController; end
|
|
20
|
+
class VideoUploadsController < SpeedController; end
|
|
21
|
+
class VideoVisitsController < SpeedController; end
|
|
22
|
+
class UsersController < SpeedController; end
|
|
23
|
+
class SettingsController < SpeedController; end
|
|
24
|
+
class ChannelsController < SpeedController; end
|
|
25
|
+
class ChannelVideosController < SpeedController; end
|
|
26
|
+
class SessionsController < SpeedController; end
|
|
27
|
+
class LostPasswordsController < SpeedController; end
|
|
28
|
+
class PagesController < SpeedController; end
|
|
29
|
+
|
|
13
30
|
ActionController::Routing::Routes.draw do |map|
|
|
14
31
|
map.route_one 'route_one', :controller => 'elsewhere', :action => 'flash_me'
|
|
15
32
|
map.connect ':controller/:action/:id'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require
|
|
1
|
+
require 'abstract_unit'
|
|
2
2
|
|
|
3
3
|
class FilterParamController < ActionController::Base
|
|
4
4
|
end
|
|
@@ -7,14 +7,14 @@ class FilterParamTest < Test::Unit::TestCase
|
|
|
7
7
|
def setup
|
|
8
8
|
@controller = FilterParamController.new
|
|
9
9
|
end
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
def test_filter_parameters
|
|
12
12
|
assert FilterParamController.respond_to?(:filter_parameter_logging)
|
|
13
13
|
assert !@controller.respond_to?(:filter_parameters)
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
FilterParamController.filter_parameter_logging
|
|
16
16
|
assert @controller.respond_to?(:filter_parameters)
|
|
17
|
-
|
|
17
|
+
|
|
18
18
|
test_hashes = [[{},{},[]],
|
|
19
19
|
[{'foo'=>nil},{'foo'=>nil},[]],
|
|
20
20
|
[{'foo'=>'bar'},{'foo'=>'bar'},[]],
|
|
@@ -24,11 +24,11 @@ class FilterParamTest < Test::Unit::TestCase
|
|
|
24
24
|
[{'foo'=>'bar', 'baz'=>'foo'},{'foo'=>'[FILTERED]', 'baz'=>'[FILTERED]'},%w'foo baz'],
|
|
25
25
|
[{'bar'=>{'foo'=>'bar','bar'=>'foo'}},{'bar'=>{'foo'=>'[FILTERED]','bar'=>'foo'}},%w'fo'],
|
|
26
26
|
[{'foo'=>{'foo'=>'bar','bar'=>'foo'}},{'foo'=>'[FILTERED]'},%w'f banana']]
|
|
27
|
-
|
|
27
|
+
|
|
28
28
|
test_hashes.each do |before_filter, after_filter, filter_words|
|
|
29
29
|
FilterParamController.filter_parameter_logging(*filter_words)
|
|
30
|
-
assert_equal after_filter, @controller.filter_parameters
|
|
31
|
-
|
|
30
|
+
assert_equal after_filter, @controller.send!(:filter_parameters, before_filter)
|
|
31
|
+
|
|
32
32
|
filter_words.push('blah')
|
|
33
33
|
FilterParamController.filter_parameter_logging(*filter_words) do |key, value|
|
|
34
34
|
value.reverse! if key =~ /bargain/
|
|
@@ -37,7 +37,13 @@ class FilterParamTest < Test::Unit::TestCase
|
|
|
37
37
|
before_filter['barg'] = {'bargain'=>'gain', 'blah'=>'bar', 'bar'=>{'bargain'=>{'blah'=>'foo'}}}
|
|
38
38
|
after_filter['barg'] = {'bargain'=>'niag', 'blah'=>'[FILTERED]', 'bar'=>{'bargain'=>{'blah'=>'[FILTERED]'}}}
|
|
39
39
|
|
|
40
|
-
assert_equal after_filter, @controller.filter_parameters
|
|
40
|
+
assert_equal after_filter, @controller.send!(:filter_parameters, before_filter)
|
|
41
41
|
end
|
|
42
42
|
end
|
|
43
|
+
|
|
44
|
+
def test_filter_parameters_is_protected
|
|
45
|
+
FilterParamController.filter_parameter_logging(:foo)
|
|
46
|
+
assert !FilterParamController.action_methods.include?('filter_parameters')
|
|
47
|
+
assert_raise(NoMethodError) { @controller.filter_parameters([{'password' => '[FILTERED]'}]) }
|
|
48
|
+
end
|
|
43
49
|
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require
|
|
1
|
+
require 'abstract_unit'
|
|
2
2
|
|
|
3
3
|
# FIXME: crashes Ruby 1.9
|
|
4
4
|
class FilterTest < Test::Unit::TestCase
|
|
@@ -134,6 +134,11 @@ class FilterTest < Test::Unit::TestCase
|
|
|
134
134
|
before_filter(ConditionalClassFilter, :ensure_login, Proc.new {|c| c.assigns["ran_proc_filter1"] = true }, :except => :show_without_filter) { |c| c.assigns["ran_proc_filter2"] = true}
|
|
135
135
|
end
|
|
136
136
|
|
|
137
|
+
class ConditionalOptionsFilter < ConditionalFilterController
|
|
138
|
+
before_filter :ensure_login, :if => Proc.new { |c| true }
|
|
139
|
+
before_filter :clean_up_tmp, :if => Proc.new { |c| false }
|
|
140
|
+
end
|
|
141
|
+
|
|
137
142
|
class EmptyFilterChainController < TestController
|
|
138
143
|
self.filter_chain.clear
|
|
139
144
|
def show
|
|
@@ -153,6 +158,30 @@ class FilterTest < Test::Unit::TestCase
|
|
|
153
158
|
end
|
|
154
159
|
end
|
|
155
160
|
|
|
161
|
+
class SkippingAndLimitedController < TestController
|
|
162
|
+
skip_before_filter :ensure_login
|
|
163
|
+
before_filter :ensure_login, :only => :index
|
|
164
|
+
|
|
165
|
+
def index
|
|
166
|
+
render :text => 'ok'
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def public
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
class SkippingAndReorderingController < TestController
|
|
174
|
+
skip_before_filter :ensure_login
|
|
175
|
+
before_filter :find_record
|
|
176
|
+
before_filter :ensure_login
|
|
177
|
+
|
|
178
|
+
private
|
|
179
|
+
def find_record
|
|
180
|
+
@ran_filter ||= []
|
|
181
|
+
@ran_filter << "find_record"
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
|
|
156
185
|
class ConditionalSkippingController < TestController
|
|
157
186
|
skip_before_filter :ensure_login, :only => [ :login ]
|
|
158
187
|
skip_after_filter :clean_up, :only => [ :login ]
|
|
@@ -466,6 +495,11 @@ class FilterTest < Test::Unit::TestCase
|
|
|
466
495
|
assert !response.template.assigns["ran_proc_filter2"]
|
|
467
496
|
end
|
|
468
497
|
|
|
498
|
+
def test_running_conditional_options
|
|
499
|
+
response = test_process(ConditionalOptionsFilter)
|
|
500
|
+
assert_equal %w( ensure_login ), response.template.assigns["ran_filter"]
|
|
501
|
+
end
|
|
502
|
+
|
|
469
503
|
def test_running_collection_condition_filters
|
|
470
504
|
assert_equal %w( ensure_login ), test_process(ConditionalCollectionFilterController).template.assigns["ran_filter"]
|
|
471
505
|
assert_equal nil, test_process(ConditionalCollectionFilterController, "show_without_filter").template.assigns["ran_filter"]
|
|
@@ -499,13 +533,6 @@ class FilterTest < Test::Unit::TestCase
|
|
|
499
533
|
assert_equal nil, test_process(BeforeAndAfterConditionController, "show_without_filter").template.assigns["ran_filter"]
|
|
500
534
|
end
|
|
501
535
|
|
|
502
|
-
def test_bad_filter
|
|
503
|
-
bad_filter_controller = Class.new(ActionController::Base)
|
|
504
|
-
assert_raises(ActionController::ActionControllerError) do
|
|
505
|
-
bad_filter_controller.before_filter 2
|
|
506
|
-
end
|
|
507
|
-
end
|
|
508
|
-
|
|
509
536
|
def test_around_filter
|
|
510
537
|
controller = test_process(AroundFilterController)
|
|
511
538
|
assert controller.template.assigns["before_ran"]
|
|
@@ -562,6 +589,15 @@ class FilterTest < Test::Unit::TestCase
|
|
|
562
589
|
response = test_process(PrependingBeforeAndAfterController)
|
|
563
590
|
assert_equal %w( before_all between_before_all_and_after_all after_all ), response.template.assigns["ran_filter"]
|
|
564
591
|
end
|
|
592
|
+
|
|
593
|
+
def test_skipping_and_limiting_controller
|
|
594
|
+
assert_equal %w( ensure_login ), test_process(SkippingAndLimitedController, "index").template.assigns["ran_filter"]
|
|
595
|
+
assert_nil test_process(SkippingAndLimitedController, "public").template.assigns["ran_filter"]
|
|
596
|
+
end
|
|
597
|
+
|
|
598
|
+
def test_skipping_and_reordering_controller
|
|
599
|
+
assert_equal %w( find_record ensure_login ), test_process(SkippingAndReorderingController, "index").template.assigns["ran_filter"]
|
|
600
|
+
end
|
|
565
601
|
|
|
566
602
|
def test_conditional_skipping_of_filters
|
|
567
603
|
assert_nil test_process(ConditionalSkippingController, "login").template.assigns["ran_filter"]
|
|
@@ -746,14 +782,6 @@ class YieldingAroundFiltersTest < Test::Unit::TestCase
|
|
|
746
782
|
assert_equal 4, ControllerWithAllTypesOfFilters.filter_chain.size
|
|
747
783
|
end
|
|
748
784
|
|
|
749
|
-
def test_wrong_filter_type
|
|
750
|
-
assert_raise ArgumentError do
|
|
751
|
-
Class.new PostsController do
|
|
752
|
-
around_filter lambda { yield }
|
|
753
|
-
end
|
|
754
|
-
end
|
|
755
|
-
end
|
|
756
|
-
|
|
757
785
|
def test_base
|
|
758
786
|
controller = PostsController
|
|
759
787
|
assert_nothing_raised { test_process(controller,'no_raise') }
|