actionpack 1.13.6 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of actionpack might be problematic. Click here for more details.
- data/CHANGELOG +1400 -20
- data/MIT-LICENSE +1 -1
- data/README +5 -5
- data/RUNNING_UNIT_TESTS +4 -5
- data/Rakefile +5 -6
- data/install.rb +2 -2
- data/lib/action_controller.rb +11 -15
- data/lib/action_controller/assertions.rb +12 -25
- data/lib/action_controller/assertions/dom_assertions.rb +18 -4
- data/lib/action_controller/assertions/model_assertions.rb +8 -1
- data/lib/action_controller/assertions/response_assertions.rb +35 -12
- data/lib/action_controller/assertions/routing_assertions.rb +56 -12
- data/lib/action_controller/assertions/selector_assertions.rb +105 -38
- data/lib/action_controller/assertions/tag_assertions.rb +28 -15
- data/lib/action_controller/base.rb +318 -250
- data/lib/action_controller/benchmarking.rb +33 -29
- data/lib/action_controller/caching.rb +130 -64
- data/lib/action_controller/cgi_ext.rb +16 -0
- data/lib/action_controller/cgi_ext/{cookie_performance_fix.rb → cookie.rb} +25 -40
- data/lib/action_controller/cgi_ext/query_extension.rb +22 -0
- data/lib/action_controller/cgi_ext/session.rb +73 -0
- data/lib/action_controller/cgi_ext/stdinput.rb +23 -0
- data/lib/action_controller/cgi_process.rb +34 -57
- data/lib/action_controller/components.rb +19 -36
- data/lib/action_controller/cookies.rb +10 -9
- data/lib/action_controller/dispatcher.rb +195 -0
- data/lib/action_controller/filters.rb +35 -34
- data/lib/action_controller/flash.rb +30 -35
- data/lib/action_controller/helpers.rb +121 -47
- data/lib/action_controller/http_authentication.rb +126 -0
- data/lib/action_controller/integration.rb +105 -101
- data/lib/action_controller/layout.rb +59 -47
- data/lib/action_controller/mime_responds.rb +57 -68
- data/lib/action_controller/mime_type.rb +43 -80
- data/lib/action_controller/mime_types.rb +20 -0
- data/lib/action_controller/polymorphic_routes.rb +88 -0
- data/lib/action_controller/record_identifier.rb +91 -0
- data/lib/action_controller/request.rb +553 -88
- data/lib/action_controller/request_forgery_protection.rb +126 -0
- data/lib/action_controller/request_profiler.rb +138 -0
- data/lib/action_controller/rescue.rb +185 -69
- data/lib/action_controller/resources.rb +211 -172
- data/lib/action_controller/response.rb +49 -8
- data/lib/action_controller/routing.rb +359 -236
- data/lib/action_controller/routing_optimisation.rb +119 -0
- data/lib/action_controller/session/active_record_store.rb +3 -2
- data/lib/action_controller/session/cookie_store.rb +161 -0
- data/lib/action_controller/session/mem_cache_store.rb +9 -16
- data/lib/action_controller/session_management.rb +17 -8
- data/lib/action_controller/streaming.rb +6 -3
- data/lib/action_controller/templates/rescues/_request_and_response.erb +24 -0
- data/lib/action_controller/templates/rescues/{_trace.rhtml → _trace.erb} +0 -0
- data/lib/action_controller/templates/rescues/{diagnostics.rhtml → diagnostics.erb} +2 -2
- data/lib/action_controller/templates/rescues/{layout.rhtml → layout.erb} +0 -0
- data/lib/action_controller/templates/rescues/{missing_template.rhtml → missing_template.erb} +0 -0
- data/lib/action_controller/templates/rescues/{routing_error.rhtml → routing_error.erb} +0 -0
- data/lib/action_controller/templates/rescues/{template_error.rhtml → template_error.erb} +2 -2
- data/lib/action_controller/templates/rescues/{unknown_action.rhtml → unknown_action.erb} +0 -0
- data/lib/action_controller/test_case.rb +53 -0
- data/lib/action_controller/test_process.rb +59 -46
- data/lib/action_controller/url_rewriter.rb +48 -24
- data/lib/action_controller/vendor/html-scanner/html/document.rb +7 -4
- data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +173 -0
- data/lib/action_controller/vendor/html-scanner/html/selector.rb +11 -6
- data/lib/action_controller/verification.rb +27 -21
- data/lib/action_pack.rb +1 -1
- data/lib/action_pack/version.rb +4 -4
- data/lib/action_view.rb +2 -3
- data/lib/action_view/base.rb +218 -63
- data/lib/action_view/compiled_templates.rb +1 -2
- data/lib/action_view/helpers/active_record_helper.rb +35 -17
- data/lib/action_view/helpers/asset_tag_helper.rb +395 -87
- data/lib/action_view/helpers/atom_feed_helper.rb +111 -0
- data/lib/action_view/helpers/benchmark_helper.rb +12 -5
- data/lib/action_view/helpers/cache_helper.rb +29 -0
- data/lib/action_view/helpers/capture_helper.rb +97 -63
- data/lib/action_view/helpers/date_helper.rb +295 -35
- data/lib/action_view/helpers/debug_helper.rb +6 -2
- data/lib/action_view/helpers/form_helper.rb +354 -111
- data/lib/action_view/helpers/form_options_helper.rb +171 -109
- data/lib/action_view/helpers/form_tag_helper.rb +332 -76
- data/lib/action_view/helpers/javascript_helper.rb +35 -11
- data/lib/action_view/helpers/javascripts/controls.js +484 -354
- data/lib/action_view/helpers/javascripts/dragdrop.js +88 -58
- data/lib/action_view/helpers/javascripts/effects.js +396 -364
- data/lib/action_view/helpers/javascripts/prototype.js +2817 -1107
- data/lib/action_view/helpers/number_helper.rb +84 -60
- data/lib/action_view/helpers/prototype_helper.rb +419 -43
- data/lib/action_view/helpers/record_identification_helper.rb +20 -0
- data/lib/action_view/helpers/record_tag_helper.rb +59 -0
- data/lib/action_view/helpers/sanitize_helper.rb +223 -0
- data/lib/action_view/helpers/scriptaculous_helper.rb +63 -4
- data/lib/action_view/helpers/tag_helper.rb +69 -39
- data/lib/action_view/helpers/text_helper.rb +221 -148
- data/lib/action_view/helpers/url_helper.rb +283 -165
- data/lib/action_view/partials.rb +134 -62
- data/lib/action_view/template_error.rb +4 -12
- data/lib/actionpack.rb +1 -0
- data/test/abstract_unit.rb +21 -1
- data/test/action_view_test.rb +26 -0
- data/test/active_record_unit.rb +12 -20
- data/test/activerecord/active_record_store_test.rb +2 -2
- data/test/activerecord/render_partial_with_record_identification_test.rb +74 -0
- data/test/controller/action_pack_assertions_test.rb +21 -152
- data/test/controller/addresses_render_test.rb +2 -7
- data/test/controller/assert_select_test.rb +120 -14
- data/test/controller/base_test.rb +11 -13
- data/test/controller/caching_test.rb +125 -5
- data/test/controller/capture_test.rb +23 -16
- data/test/controller/cgi_test.rb +66 -391
- data/test/controller/components_test.rb +31 -42
- data/test/controller/content_type_test.rb +1 -1
- data/test/controller/cookie_test.rb +42 -14
- data/test/controller/deprecation/deprecated_base_methods_test.rb +1 -42
- data/test/controller/dispatcher_test.rb +123 -0
- data/test/controller/fake_models.rb +5 -0
- data/test/controller/filters_test.rb +44 -7
- data/test/controller/flash_test.rb +46 -2
- data/test/controller/fragment_store_setting_test.rb +10 -8
- data/test/controller/helper_test.rb +19 -2
- data/test/controller/html-scanner/document_test.rb +124 -0
- data/test/controller/html-scanner/node_test.rb +69 -0
- data/test/controller/html-scanner/sanitizer_test.rb +250 -0
- data/test/controller/html-scanner/tag_node_test.rb +239 -0
- data/test/controller/html-scanner/text_node_test.rb +51 -0
- data/test/controller/html-scanner/tokenizer_test.rb +125 -0
- data/test/controller/http_authentication_test.rb +54 -0
- data/test/controller/integration_test.rb +12 -26
- data/test/controller/layout_test.rb +64 -12
- data/test/controller/mime_responds_test.rb +193 -38
- data/test/controller/mime_type_test.rb +30 -8
- data/test/controller/new_render_test.rb +104 -22
- data/test/controller/polymorphic_routes_test.rb +98 -0
- data/test/controller/record_identifier_test.rb +103 -0
- data/test/controller/redirect_test.rb +120 -18
- data/test/controller/render_test.rb +195 -45
- data/test/controller/request_forgery_protection_test.rb +217 -0
- data/test/controller/request_test.rb +545 -27
- data/test/controller/rescue_test.rb +501 -0
- data/test/controller/resources_test.rb +258 -132
- data/test/controller/routing_test.rb +502 -106
- data/test/controller/selector_test.rb +5 -5
- data/test/controller/send_file_test.rb +17 -7
- data/test/controller/session/cookie_store_test.rb +246 -0
- data/test/controller/session/mem_cache_store_test.rb +182 -0
- data/test/controller/session_fixation_test.rb +8 -11
- data/test/controller/session_management_test.rb +7 -7
- data/test/controller/test_test.rb +150 -38
- data/test/controller/url_rewriter_test.rb +87 -12
- data/test/controller/verification_test.rb +11 -0
- data/test/controller/view_paths_test.rb +137 -0
- data/test/controller/webservice_test.rb +11 -75
- data/test/fixtures/addresses/{list.rhtml → list.erb} +0 -0
- data/test/fixtures/db_definitions/sqlite.sql +2 -1
- data/test/fixtures/developer.rb +2 -0
- data/test/fixtures/fun/games/{hello_world.rhtml → hello_world.erb} +0 -0
- data/test/fixtures/helpers/fun/pdf_helper.rb +1 -1
- data/test/fixtures/layout_tests/alt/hello.rhtml +1 -0
- data/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb +1 -0
- data/test/fixtures/layouts/{builder.rxml → builder.builder} +0 -0
- data/test/fixtures/layouts/{standard.rhtml → standard.erb} +0 -0
- data/test/fixtures/layouts/{talk_from_action.rhtml → talk_from_action.erb} +0 -0
- data/test/fixtures/layouts/{yield.rhtml → yield.erb} +0 -0
- data/test/fixtures/multipart/binary_file +0 -0
- data/test/fixtures/multipart/bracketed_param +5 -0
- data/test/fixtures/override/test/hello_world.erb +1 -0
- data/test/fixtures/override2/layouts/test/sub.erb +1 -0
- data/test/fixtures/post_test/layouts/post.html.erb +1 -0
- data/test/fixtures/post_test/layouts/super_post.iphone.erb +1 -0
- data/test/fixtures/post_test/post/index.html.erb +1 -0
- data/test/fixtures/post_test/post/index.iphone.erb +1 -0
- data/test/fixtures/post_test/super_post/index.html.erb +1 -0
- data/test/fixtures/post_test/super_post/index.iphone.erb +1 -0
- data/test/fixtures/public/404.html +1 -0
- data/test/fixtures/public/500.html +1 -0
- data/test/fixtures/public/javascripts/application.js +0 -1
- data/test/fixtures/public/javascripts/bank.js +1 -0
- data/test/fixtures/public/javascripts/robber.js +1 -0
- data/test/fixtures/public/stylesheets/bank.css +1 -0
- data/test/fixtures/public/stylesheets/robber.css +1 -0
- data/test/fixtures/replies.yml +2 -0
- data/test/fixtures/reply.rb +2 -1
- data/test/fixtures/respond_to/{all_types_with_layout.rhtml → all_types_with_layout.html.erb} +0 -0
- data/test/fixtures/respond_to/{all_types_with_layout.rjs → all_types_with_layout.js.rjs} +0 -0
- data/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +1 -0
- data/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +1 -0
- data/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +1 -0
- data/test/fixtures/respond_to/layouts/missing.html.erb +1 -0
- data/test/fixtures/respond_to/layouts/standard.html.erb +1 -0
- data/test/fixtures/respond_to/layouts/standard.iphone.erb +1 -0
- data/test/fixtures/respond_to/{using_defaults.rhtml → using_defaults.html.erb} +0 -0
- data/test/fixtures/respond_to/{using_defaults.rjs → using_defaults.js.rjs} +0 -0
- data/test/fixtures/respond_to/{using_defaults.rxml → using_defaults.xml.builder} +0 -0
- data/test/fixtures/respond_to/{using_defaults_with_type_list.rhtml → using_defaults_with_type_list.html.erb} +0 -0
- data/test/fixtures/respond_to/{using_defaults_with_type_list.rjs → using_defaults_with_type_list.js.rjs} +0 -0
- data/test/fixtures/respond_to/{using_defaults_with_type_list.rxml → using_defaults_with_type_list.xml.builder} +0 -0
- data/test/fixtures/scope/test/{modgreet.rhtml → modgreet.erb} +0 -0
- data/test/fixtures/test/{_customer.rhtml → _customer.erb} +0 -0
- data/test/fixtures/test/{_customer_greeting.rhtml → _customer_greeting.erb} +0 -0
- data/test/fixtures/test/_hash_greeting.erb +1 -0
- data/test/fixtures/test/_hash_object.erb +2 -0
- data/test/fixtures/test/{_hello.rxml → _hello.builder} +0 -0
- data/test/fixtures/test/_layout_for_partial.html.erb +3 -0
- data/test/fixtures/test/_partial.erb +1 -0
- data/test/fixtures/test/_partial.html.erb +1 -0
- data/test/fixtures/test/_partial.js.erb +1 -0
- data/test/fixtures/test/_partial_for_use_in_layout.html.erb +1 -0
- data/test/fixtures/test/{_partial_only.rhtml → _partial_only.erb} +0 -0
- data/test/fixtures/test/{_person.rhtml → _person.erb} +0 -0
- data/test/fixtures/test/{action_talk_to_layout.rhtml → action_talk_to_layout.erb} +0 -0
- data/test/fixtures/test/{block_content_for.rhtml → block_content_for.erb} +0 -0
- data/test/fixtures/test/calling_partial_with_layout.html.erb +1 -0
- data/test/fixtures/test/{capturing.rhtml → capturing.erb} +0 -0
- data/test/fixtures/test/{content_for.rhtml → content_for.erb} +0 -0
- data/test/fixtures/test/content_for_concatenated.erb +3 -0
- data/test/fixtures/test/content_for_with_parameter.erb +2 -0
- data/test/fixtures/test/dot.directory/{render_file_with_ivar.rhtml → render_file_with_ivar.erb} +0 -0
- data/test/fixtures/test/{erb_content_for.rhtml → erb_content_for.erb} +0 -0
- data/test/fixtures/test/formatted_html_erb.html.erb +1 -0
- data/test/fixtures/test/formatted_xml_erb.builder +1 -0
- data/test/fixtures/test/formatted_xml_erb.html.erb +1 -0
- data/test/fixtures/test/formatted_xml_erb.xml.erb +1 -0
- data/test/fixtures/test/{greeting.rhtml → greeting.erb} +0 -0
- data/test/fixtures/test/{hello.rxml → hello.builder} +0 -0
- data/test/fixtures/test/{hello_world.rxml → hello_world.builder} +0 -0
- data/test/fixtures/test/{hello_world.rhtml → hello_world.erb} +0 -0
- data/test/fixtures/test/{hello_world_container.rxml → hello_world_container.builder} +0 -0
- data/test/fixtures/test/{hello_world_with_layout_false.rhtml → hello_world_with_layout_false.erb} +0 -0
- data/test/fixtures/test/{hello_xml_world.rxml → hello_xml_world.builder} +0 -0
- data/test/fixtures/test/list.erb +1 -0
- data/test/fixtures/test/{non_erb_block_content_for.rxml → non_erb_block_content_for.builder} +0 -0
- data/test/fixtures/test/{potential_conflicts.rhtml → potential_conflicts.erb} +0 -0
- data/test/fixtures/test/{render_file_with_ivar.rhtml → render_file_with_ivar.erb} +0 -0
- data/test/fixtures/test/{render_file_with_locals.rhtml → render_file_with_locals.erb} +0 -0
- data/test/fixtures/test/{render_to_string_test.rhtml → render_to_string_test.erb} +0 -0
- data/test/fixtures/test/{update_element_with_capture.rhtml → update_element_with_capture.erb} +0 -0
- data/test/fixtures/test/using_layout_around_block.html.erb +1 -0
- data/test/fixtures/topic.rb +1 -1
- data/test/template/active_record_helper_test.rb +67 -20
- data/test/template/asset_tag_helper_test.rb +222 -54
- data/test/template/atom_feed_helper_test.rb +101 -0
- data/test/template/benchmark_helper_test.rb +2 -2
- data/test/template/compiled_templates_test.rb +76 -32
- data/test/template/date_helper_test.rb +125 -9
- data/test/template/form_helper_test.rb +326 -33
- data/test/template/form_options_helper_test.rb +822 -15
- data/test/template/form_tag_helper_test.rb +96 -30
- data/test/template/javascript_helper_test.rb +61 -13
- data/test/template/number_helper_test.rb +12 -11
- data/test/template/prototype_helper_test.rb +185 -24
- data/test/template/sanitize_helper_test.rb +49 -0
- data/test/template/scriptaculous_helper_test.rb +9 -3
- data/test/template/tag_helper_test.rb +13 -2
- data/test/template/text_helper_test.rb +38 -52
- data/test/template/url_helper_test.rb +216 -46
- metadata +144 -116
- data/examples/.htaccess +0 -24
- data/examples/address_book/index.rhtml +0 -33
- data/examples/address_book/layout.rhtml +0 -8
- data/examples/address_book_controller.cgi +0 -9
- data/examples/address_book_controller.fcgi +0 -6
- data/examples/address_book_controller.rb +0 -52
- data/examples/address_book_controller.rbx +0 -4
- data/examples/benchmark.rb +0 -52
- data/examples/benchmark_with_ar.fcgi +0 -89
- data/examples/blog_controller.cgi +0 -53
- data/examples/debate/index.rhtml +0 -14
- data/examples/debate/new_topic.rhtml +0 -22
- data/examples/debate/topic.rhtml +0 -32
- data/examples/debate_controller.cgi +0 -57
- data/lib/action_controller/assertions/deprecated_assertions.rb +0 -228
- data/lib/action_controller/cgi_ext/cgi_ext.rb +0 -36
- data/lib/action_controller/cgi_ext/cgi_methods.rb +0 -211
- data/lib/action_controller/cgi_ext/pstore_performance_fix.rb +0 -30
- data/lib/action_controller/cgi_ext/raw_post_data_fix.rb +0 -95
- data/lib/action_controller/cgi_ext/session_performance_fix.rb +0 -30
- data/lib/action_controller/deprecated_dependencies.rb +0 -65
- data/lib/action_controller/deprecated_redirects.rb +0 -17
- data/lib/action_controller/deprecated_request_methods.rb +0 -34
- data/lib/action_controller/macros/auto_complete.rb +0 -53
- data/lib/action_controller/macros/in_place_editing.rb +0 -33
- data/lib/action_controller/pagination.rb +0 -408
- data/lib/action_controller/scaffolding.rb +0 -189
- data/lib/action_controller/templates/rescues/_request_and_response.rhtml +0 -44
- data/lib/action_controller/templates/scaffolds/edit.rhtml +0 -7
- data/lib/action_controller/templates/scaffolds/layout.rhtml +0 -69
- data/lib/action_controller/templates/scaffolds/list.rhtml +0 -27
- data/lib/action_controller/templates/scaffolds/new.rhtml +0 -6
- data/lib/action_controller/templates/scaffolds/show.rhtml +0 -9
- data/lib/action_controller/vendor/xml_node.rb +0 -97
- data/lib/action_view/helpers/deprecated_helper.rb +0 -37
- data/lib/action_view/helpers/java_script_macros_helper.rb +0 -233
- data/lib/action_view/helpers/pagination_helper.rb +0 -86
- data/test/activerecord/active_record_assertions_test.rb +0 -92
- data/test/activerecord/pagination_test.rb +0 -165
- data/test/controller/deprecated_instance_variables_test.rb +0 -48
- data/test/controller/raw_post_test.rb +0 -68
- data/test/fixtures/deprecated_instance_variables/_cookies_ivar.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_cookies_method.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_flash_ivar.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_flash_method.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_headers_ivar.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_headers_method.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_params_ivar.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_params_method.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_request_ivar.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_request_method.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_response_ivar.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_response_method.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_session_ivar.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_session_method.rhtml +0 -1
- data/test/fixtures/respond_to/layouts/standard.rhtml +0 -1
- data/test/fixtures/test/_hash_object.rhtml +0 -1
- data/test/fixtures/test/list.rhtml +0 -1
- data/test/template/deprecated_helper_test.rb +0 -36
- data/test/template/deprecated_instance_variables_test.rb +0 -43
- data/test/template/java_script_macros_helper_test.rb +0 -109
@@ -14,15 +14,15 @@ class CallerController < ActionController::Base
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def calling_from_template
|
17
|
-
|
17
|
+
render :inline => "Ring, ring: <%= render_component(:controller => 'callee', :action => 'being_called') %>"
|
18
18
|
end
|
19
19
|
|
20
20
|
def internal_caller
|
21
|
-
|
21
|
+
render :inline => "Are you there? <%= render_component(:action => 'internal_callee') %>"
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
def internal_callee
|
25
|
-
|
25
|
+
render :text => "Yes, ma'am"
|
26
26
|
end
|
27
27
|
|
28
28
|
def set_flash
|
@@ -32,13 +32,13 @@ class CallerController < ActionController::Base
|
|
32
32
|
def use_flash
|
33
33
|
render_component(:controller => "callee", :action => "use_flash")
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
def calling_redirected
|
37
37
|
render_component(:controller => "callee", :action => "redirected")
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
def calling_redirected_as_string
|
41
|
-
|
41
|
+
render :inline => "<%= render_component(:controller => 'callee', :action => 'redirected') %>"
|
42
42
|
end
|
43
43
|
|
44
44
|
def rescue_action(e) raise end
|
@@ -46,22 +46,22 @@ end
|
|
46
46
|
|
47
47
|
class CalleeController < ActionController::Base
|
48
48
|
def being_called
|
49
|
-
|
49
|
+
render :text => "#{params[:name] || "Lady"} of the House, speaking"
|
50
50
|
end
|
51
|
-
|
51
|
+
|
52
52
|
def blowing_up
|
53
|
-
|
53
|
+
render :text => "It's game over, man, just game over, man!", :status => 500
|
54
54
|
end
|
55
|
-
|
55
|
+
|
56
56
|
def set_flash
|
57
57
|
flash[:notice] = 'My stoney baby'
|
58
58
|
render :text => 'flash is set'
|
59
59
|
end
|
60
|
-
|
60
|
+
|
61
61
|
def use_flash
|
62
62
|
render :text => flash[:notice] || 'no flash'
|
63
63
|
end
|
64
|
-
|
64
|
+
|
65
65
|
def redirected
|
66
66
|
redirect_to :controller => "callee", :action => "being_called"
|
67
67
|
end
|
@@ -85,7 +85,7 @@ class ComponentsTest < Test::Unit::TestCase
|
|
85
85
|
get :calling_from_controller_with_params
|
86
86
|
assert_equal "David of the House, speaking", @response.body
|
87
87
|
end
|
88
|
-
|
88
|
+
|
89
89
|
def test_calling_from_controller_with_different_status_code
|
90
90
|
get :calling_from_controller_with_different_status_code
|
91
91
|
assert_equal 500, @response.response_code
|
@@ -95,12 +95,18 @@ class ComponentsTest < Test::Unit::TestCase
|
|
95
95
|
get :calling_from_template
|
96
96
|
assert_equal "Ring, ring: Lady of the House, speaking", @response.body
|
97
97
|
end
|
98
|
-
|
98
|
+
|
99
|
+
def test_etag_is_set_for_parent_template_when_calling_from_template
|
100
|
+
get :calling_from_template
|
101
|
+
expected_etag = etag_for("Ring, ring: Lady of the House, speaking")
|
102
|
+
assert_equal expected_etag, @response.headers['ETag']
|
103
|
+
end
|
104
|
+
|
99
105
|
def test_internal_calling
|
100
106
|
get :internal_caller
|
101
107
|
assert_equal "Are you there? Yes, ma'am", @response.body
|
102
108
|
end
|
103
|
-
|
109
|
+
|
104
110
|
def test_flash
|
105
111
|
get :set_flash
|
106
112
|
assert_equal 'My stoney baby', flash[:notice]
|
@@ -109,43 +115,26 @@ class ComponentsTest < Test::Unit::TestCase
|
|
109
115
|
get :use_flash
|
110
116
|
assert_equal 'no flash', @response.body
|
111
117
|
end
|
112
|
-
|
118
|
+
|
113
119
|
def test_component_redirect_redirects
|
114
120
|
get :calling_redirected
|
115
|
-
|
121
|
+
|
116
122
|
assert_redirected_to :action => "being_called"
|
117
123
|
end
|
118
|
-
|
124
|
+
|
119
125
|
def test_component_multiple_redirect_redirects
|
120
126
|
test_component_redirect_redirects
|
121
127
|
test_internal_calling
|
122
128
|
end
|
123
|
-
|
124
|
-
def
|
129
|
+
|
130
|
+
def test_component_as_string_redirect_renders_redirected_action
|
125
131
|
get :calling_redirected_as_string
|
126
|
-
|
127
|
-
assert_equal "Lady of the House, speaking", @response.body
|
128
|
-
end
|
129
|
-
end
|
130
132
|
|
131
|
-
|
132
|
-
module B
|
133
|
-
module C
|
134
|
-
class NestedController < ActionController::Base
|
135
|
-
# Stub for uses_component_template_root
|
136
|
-
def self.caller
|
137
|
-
[ '/path/to/active_support/deprecation.rb:93:in `uses_component_template_root',
|
138
|
-
'./test/fixtures/a/b/c/nested_controller.rb' ]
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
133
|
+
assert_equal "Lady of the House, speaking", @response.body
|
142
134
|
end
|
143
|
-
end
|
144
135
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
assert_equal './test/fixtures/', A::B::C::NestedController.uses_component_template_root
|
136
|
+
protected
|
137
|
+
def etag_for(text)
|
138
|
+
%("#{Digest::MD5.hexdigest(text)}")
|
149
139
|
end
|
150
|
-
end
|
151
140
|
end
|
@@ -45,7 +45,7 @@ class ContentTypeController < ActionController::Base
|
|
45
45
|
def rescue_action(e) raise end
|
46
46
|
end
|
47
47
|
|
48
|
-
ContentTypeController.
|
48
|
+
ContentTypeController.view_paths = [ File.dirname(__FILE__) + "/../fixtures/" ]
|
49
49
|
|
50
50
|
class ContentTypeTest < Test::Unit::TestCase
|
51
51
|
def setup
|
@@ -2,19 +2,15 @@ require File.dirname(__FILE__) + '/../abstract_unit'
|
|
2
2
|
|
3
3
|
class CookieTest < Test::Unit::TestCase
|
4
4
|
class TestController < ActionController::Base
|
5
|
-
def authenticate_with_deprecated_writer
|
6
|
-
cookie "name" => "user_name", "value" => "david"
|
7
|
-
end
|
8
|
-
|
9
5
|
def authenticate
|
10
6
|
cookies["user_name"] = "david"
|
11
7
|
end
|
12
8
|
|
13
|
-
def
|
9
|
+
def authenticate_for_fourteen_days
|
14
10
|
cookies["user_name"] = { "value" => "david", "expires" => Time.local(2005, 10, 10) }
|
15
11
|
end
|
16
12
|
|
17
|
-
def
|
13
|
+
def authenticate_for_fourteen_days_with_symbols
|
18
14
|
cookies[:user_name] = { :value => "david", :expires => Time.local(2005, 10, 10) }
|
19
15
|
end
|
20
16
|
|
@@ -33,7 +29,11 @@ class CookieTest < Test::Unit::TestCase
|
|
33
29
|
|
34
30
|
def delete_cookie_with_path
|
35
31
|
cookies.delete("user_name", :path => '/beaten')
|
36
|
-
|
32
|
+
render :text => "hello world"
|
33
|
+
end
|
34
|
+
|
35
|
+
def authenticate_with_http_only
|
36
|
+
cookies["user_name"] = { :value => "david", :http_only => true }
|
37
37
|
end
|
38
38
|
|
39
39
|
def rescue_action(e)
|
@@ -49,26 +49,27 @@ class CookieTest < Test::Unit::TestCase
|
|
49
49
|
@request.host = "www.nextangle.com"
|
50
50
|
end
|
51
51
|
|
52
|
-
def test_setting_cookie_with_deprecated_writer
|
53
|
-
get :authenticate_with_deprecated_writer
|
54
|
-
assert_equal [ CGI::Cookie::new("name" => "user_name", "value" => "david") ], @response.headers["cookie"]
|
55
|
-
end
|
56
|
-
|
57
52
|
def test_setting_cookie
|
58
53
|
get :authenticate
|
59
54
|
assert_equal [ CGI::Cookie::new("name" => "user_name", "value" => "david") ], @response.headers["cookie"]
|
60
55
|
end
|
61
56
|
|
62
57
|
def test_setting_cookie_for_fourteen_days
|
63
|
-
get :
|
58
|
+
get :authenticate_for_fourteen_days
|
64
59
|
assert_equal [ CGI::Cookie::new("name" => "user_name", "value" => "david", "expires" => Time.local(2005, 10, 10)) ], @response.headers["cookie"]
|
65
60
|
end
|
66
61
|
|
67
62
|
def test_setting_cookie_for_fourteen_days_with_symbols
|
68
|
-
get :
|
63
|
+
get :authenticate_for_fourteen_days
|
69
64
|
assert_equal [ CGI::Cookie::new("name" => "user_name", "value" => "david", "expires" => Time.local(2005, 10, 10)) ], @response.headers["cookie"]
|
70
65
|
end
|
71
66
|
|
67
|
+
def test_setting_cookie_with_http_only
|
68
|
+
get :authenticate_with_http_only
|
69
|
+
assert_equal [ CGI::Cookie::new("name" => "user_name", "value" => "david", "http_only" => true) ], @response.headers["cookie"]
|
70
|
+
assert_equal CGI::Cookie::new("name" => "user_name", "value" => "david", "path" => "/", "http_only" => true).to_s, @response.headers["cookie"].to_s
|
71
|
+
end
|
72
|
+
|
72
73
|
def test_multiple_cookies
|
73
74
|
get :set_multiple_cookies
|
74
75
|
assert_equal 2, @response.cookies.size
|
@@ -104,4 +105,31 @@ class CookieTest < Test::Unit::TestCase
|
|
104
105
|
assert_equal "/beaten", @response.headers["cookie"].first.path
|
105
106
|
assert_not_equal "/", @response.headers["cookie"].first.path
|
106
107
|
end
|
108
|
+
|
109
|
+
def test_cookie_to_s_simple_values
|
110
|
+
assert_equal 'myname=myvalue; path=', CGI::Cookie.new('myname', 'myvalue').to_s
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_cookie_to_s_hash
|
114
|
+
cookie_str = CGI::Cookie.new(
|
115
|
+
'name' => 'myname',
|
116
|
+
'value' => 'myvalue',
|
117
|
+
'domain' => 'mydomain',
|
118
|
+
'path' => 'mypath',
|
119
|
+
'expires' => Time.utc(2007, 10, 20),
|
120
|
+
'secure' => true,
|
121
|
+
'http_only' => true).to_s
|
122
|
+
assert_equal 'myname=myvalue; domain=mydomain; path=mypath; expires=Sat, 20 Oct 2007 00:00:00 GMT; secure; HttpOnly', cookie_str
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_cookie_to_s_hash_default_not_secure_not_http_only
|
126
|
+
cookie_str = CGI::Cookie.new(
|
127
|
+
'name' => 'myname',
|
128
|
+
'value' => 'myvalue',
|
129
|
+
'domain' => 'mydomain',
|
130
|
+
'path' => 'mypath',
|
131
|
+
'expires' => Time.utc(2007, 10, 20))
|
132
|
+
assert cookie_str !~ /secure/
|
133
|
+
assert cookie_str !~ /HttpOnly/
|
134
|
+
end
|
107
135
|
end
|
@@ -1,20 +1,7 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/../../abstract_unit'
|
2
2
|
|
3
3
|
class DeprecatedBaseMethodsTest < Test::Unit::TestCase
|
4
|
-
# ActiveRecord model mock to test pagination deprecation
|
5
|
-
class DummyModel
|
6
|
-
def self.find(*args) [] end
|
7
|
-
def self.count(*args) 0 end
|
8
|
-
end
|
9
|
-
|
10
4
|
class Target < ActionController::Base
|
11
|
-
def deprecated_symbol_parameter_to_url_for
|
12
|
-
redirect_to(url_for(:home_url, "superstars"))
|
13
|
-
end
|
14
|
-
|
15
|
-
def deprecated_render_parameters
|
16
|
-
render "fun/games/hello_world"
|
17
|
-
end
|
18
5
|
|
19
6
|
def home_url(greeting)
|
20
7
|
"http://example.com/#{greeting}"
|
@@ -24,37 +11,15 @@ class DeprecatedBaseMethodsTest < Test::Unit::TestCase
|
|
24
11
|
this_method_doesnt_exist
|
25
12
|
end
|
26
13
|
|
27
|
-
def pagination
|
28
|
-
paginate :dummy_models, :class_name => 'DeprecatedBaseMethodsTest::DummyModel'
|
29
|
-
render :nothing => true
|
30
|
-
end
|
31
|
-
|
32
14
|
def rescue_action(e) raise e end
|
33
15
|
end
|
34
16
|
|
35
|
-
Target.
|
17
|
+
Target.view_paths = [ File.dirname(__FILE__) + "/../../fixtures" ]
|
36
18
|
|
37
19
|
def setup
|
38
20
|
@request = ActionController::TestRequest.new
|
39
21
|
@response = ActionController::TestResponse.new
|
40
22
|
@controller = Target.new
|
41
|
-
@controller.logger = Logger.new(nil) unless @controller.logger
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_deprecated_symbol_parameter_to_url_for
|
45
|
-
assert_deprecated("url_for(:home_url)") do
|
46
|
-
get :deprecated_symbol_parameter_to_url_for
|
47
|
-
end
|
48
|
-
|
49
|
-
assert_redirected_to "http://example.com/superstars"
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_deprecated_render_parameters
|
53
|
-
assert_deprecated("render('fun/games/hello_world')") do
|
54
|
-
get :deprecated_render_parameters
|
55
|
-
end
|
56
|
-
|
57
|
-
assert_equal "Living in a nested world", @response.body
|
58
23
|
end
|
59
24
|
|
60
25
|
def test_log_error_silences_deprecation_warnings
|
@@ -69,10 +34,4 @@ class DeprecatedBaseMethodsTest < Test::Unit::TestCase
|
|
69
34
|
error = Test::Unit::Error.new('testing ur doodz', e)
|
70
35
|
assert_not_deprecated { error.message }
|
71
36
|
end
|
72
|
-
|
73
|
-
def test_pagination_deprecation
|
74
|
-
assert_deprecated('svn://errtheblog.com/svn/plugins/classic_pagination') do
|
75
|
-
get :pagination
|
76
|
-
end
|
77
|
-
end
|
78
37
|
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/../abstract_unit"
|
2
|
+
|
3
|
+
uses_mocha 'dispatcher tests' do
|
4
|
+
|
5
|
+
require 'action_controller/dispatcher'
|
6
|
+
|
7
|
+
class DispatcherTest < Test::Unit::TestCase
|
8
|
+
Dispatcher = ActionController::Dispatcher
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@output = StringIO.new
|
12
|
+
ENV['REQUEST_METHOD'] = 'GET'
|
13
|
+
|
14
|
+
Dispatcher.callbacks[:prepare].clear
|
15
|
+
@dispatcher = Dispatcher.new(@output)
|
16
|
+
end
|
17
|
+
|
18
|
+
def teardown
|
19
|
+
ENV['REQUEST_METHOD'] = nil
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_clears_dependencies_after_dispatch_if_in_loading_mode
|
23
|
+
Dependencies.stubs(:load?).returns(true)
|
24
|
+
|
25
|
+
ActionController::Routing::Routes.expects(:reload).once
|
26
|
+
Dependencies.expects(:clear).once
|
27
|
+
|
28
|
+
dispatch
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_leaves_dependencies_after_dispatch_if_not_in_loading_mode
|
32
|
+
Dependencies.stubs(:load?).returns(false)
|
33
|
+
|
34
|
+
ActionController::Routing::Routes.expects(:reload).never
|
35
|
+
Dependencies.expects(:clear).never
|
36
|
+
|
37
|
+
dispatch
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_failsafe_response
|
41
|
+
CGI.expects(:new).raises('some multipart parsing failure')
|
42
|
+
|
43
|
+
ActionController::Routing::Routes.stubs(:reload)
|
44
|
+
Dispatcher.stubs(:log_failsafe_exception)
|
45
|
+
|
46
|
+
assert_nothing_raised { dispatch }
|
47
|
+
|
48
|
+
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
|
+
end
|
50
|
+
|
51
|
+
def test_reload_application_sets_unprepared_if_loading_dependencies
|
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
|
65
|
+
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 }
|
69
|
+
|
70
|
+
# Skip the callbacks when already prepared.
|
71
|
+
@dispatcher.unprepared = false
|
72
|
+
@dispatcher.send! :prepare_application
|
73
|
+
assert_nil a || b || c
|
74
|
+
|
75
|
+
# Perform the callbacks when unprepared.
|
76
|
+
@dispatcher.unprepared = true
|
77
|
+
@dispatcher.send! :prepare_application
|
78
|
+
assert_equal 1, a
|
79
|
+
assert_equal 2, b
|
80
|
+
assert_equal 3, c
|
81
|
+
|
82
|
+
# But when not :load, make sure they are only run once
|
83
|
+
a = b = c = nil
|
84
|
+
@dispatcher.send! :prepare_application
|
85
|
+
assert_nil a || b || c
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_to_prepare_with_identifier_replaces
|
89
|
+
a = b = nil
|
90
|
+
Dispatcher.to_prepare(:unique_id) { a = b = 1 }
|
91
|
+
Dispatcher.to_prepare(:unique_id) { a = 2 }
|
92
|
+
|
93
|
+
@dispatcher.unprepared = true
|
94
|
+
@dispatcher.send! :prepare_application
|
95
|
+
assert_equal 2, a
|
96
|
+
assert_equal nil, b
|
97
|
+
end
|
98
|
+
|
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
|
+
private
|
108
|
+
def dispatch(output = @output)
|
109
|
+
controller = mock
|
110
|
+
controller.stubs(:process).returns(controller)
|
111
|
+
controller.stubs(:out).with(output).returns('response')
|
112
|
+
|
113
|
+
ActionController::Routing::Routes.stubs(:recognize).returns(controller)
|
114
|
+
|
115
|
+
Dispatcher.dispatch(nil, {}, output)
|
116
|
+
end
|
117
|
+
|
118
|
+
def assert_subclasses(howmany, klass, message = klass.subclasses.inspect)
|
119
|
+
assert_equal howmany, klass.subclasses.size, message
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|