actionpack 2.3.18 → 3.0.0.beta
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 +15 -64
- data/README +39 -48
- data/lib/abstract_controller.rb +22 -0
- data/lib/abstract_controller/base.rb +191 -0
- data/lib/abstract_controller/callbacks.rb +113 -0
- data/lib/abstract_controller/collector.rb +30 -0
- data/lib/abstract_controller/compatibility.rb +18 -0
- data/lib/abstract_controller/helpers.rb +163 -0
- data/lib/abstract_controller/layouts.rb +413 -0
- data/lib/abstract_controller/localized_cache.rb +49 -0
- data/lib/abstract_controller/logger.rb +13 -0
- data/lib/abstract_controller/rendering.rb +238 -0
- data/lib/{action_controller → abstract_controller}/translation.rb +1 -1
- data/lib/action_controller.rb +68 -102
- data/lib/action_controller/base.rb +77 -1409
- data/lib/action_controller/caching.rb +58 -45
- data/lib/action_controller/caching/actions.rb +100 -114
- data/lib/action_controller/caching/fragments.rb +17 -19
- data/lib/action_controller/caching/pages.rb +12 -6
- data/lib/action_controller/caching/sweeping.rb +42 -0
- data/lib/action_controller/deprecated.rb +5 -0
- data/lib/action_controller/deprecated/dispatcher.rb +28 -0
- data/lib/action_controller/deprecated/integration_test.rb +2 -0
- data/lib/action_controller/deprecated/performance_test.rb +1 -0
- data/lib/action_controller/metal.rb +125 -0
- data/lib/action_controller/metal/compatibility.rb +141 -0
- data/lib/action_controller/metal/conditional_get.rb +86 -0
- data/lib/action_controller/metal/configuration.rb +28 -0
- data/lib/action_controller/metal/cookies.rb +17 -0
- data/lib/action_controller/metal/exceptions.rb +46 -0
- data/lib/action_controller/metal/flash.rb +28 -0
- data/lib/action_controller/metal/head.rb +33 -0
- data/lib/action_controller/metal/helpers.rb +116 -0
- data/lib/action_controller/metal/hide_actions.rb +50 -0
- data/lib/action_controller/{http_authentication.rb → metal/http_authentication.rb} +18 -15
- data/lib/action_controller/metal/instrumentation.rb +99 -0
- data/lib/action_controller/metal/mime_responds.rb +300 -0
- data/lib/action_controller/metal/rack_delegation.rb +35 -0
- data/lib/action_controller/metal/redirecting.rb +90 -0
- data/lib/action_controller/metal/renderers.rb +95 -0
- data/lib/action_controller/metal/rendering.rb +69 -0
- data/lib/action_controller/metal/request_forgery_protection.rb +115 -0
- data/lib/action_controller/metal/rescue.rb +13 -0
- data/lib/action_controller/metal/responder.rb +220 -0
- data/lib/action_controller/{session_management.rb → metal/session_management.rb} +5 -14
- data/lib/action_controller/{streaming.rb → metal/streaming.rb} +13 -12
- data/lib/action_controller/metal/testing.rb +42 -0
- data/lib/action_controller/metal/url_for.rb +157 -0
- data/lib/action_controller/{verification.rb → metal/verification.rb} +41 -41
- data/lib/action_controller/middleware.rb +38 -0
- data/lib/action_controller/polymorphic_routes.rb +20 -26
- data/lib/action_controller/railtie.rb +30 -0
- data/lib/action_controller/railties/subscriber.rb +63 -0
- data/lib/action_controller/record_identifier.rb +3 -16
- data/lib/action_controller/test_case.rb +156 -18
- data/lib/action_controller/url_rewriter.rb +47 -200
- data/lib/action_controller/vendor/html-scanner.rb +16 -12
- data/lib/action_controller/vendor/html-scanner/html/node.rb +1 -1
- data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +12 -9
- data/lib/action_dispatch.rb +88 -0
- data/lib/action_dispatch/http/cache.rb +123 -0
- data/lib/action_dispatch/http/filter_parameters.rb +98 -0
- data/lib/{action_controller → action_dispatch/http}/headers.rb +8 -8
- data/lib/action_dispatch/http/mime_negotiation.rb +101 -0
- data/lib/{action_controller → action_dispatch/http}/mime_type.rb +30 -11
- data/lib/{action_controller → action_dispatch/http}/mime_types.rb +5 -3
- data/lib/action_dispatch/http/parameters.rb +49 -0
- data/lib/action_dispatch/http/request.rb +223 -0
- data/lib/action_dispatch/http/response.rb +209 -0
- data/lib/action_dispatch/http/upload.rb +48 -0
- data/lib/action_dispatch/http/url.rb +129 -0
- data/lib/action_dispatch/middleware/callbacks.rb +50 -0
- data/lib/action_dispatch/middleware/cascade.rb +29 -0
- data/lib/action_dispatch/middleware/cookies.rb +216 -0
- data/lib/{action_controller → action_dispatch/middleware}/flash.rb +51 -90
- data/lib/action_dispatch/middleware/head.rb +18 -0
- data/lib/action_dispatch/middleware/params_parser.rb +78 -0
- data/lib/action_dispatch/middleware/rescue.rb +26 -0
- data/lib/action_dispatch/middleware/session/abstract_store.rb +209 -0
- data/lib/{action_controller → action_dispatch/middleware}/session/cookie_store.rb +56 -60
- data/lib/action_dispatch/middleware/session/mem_cache_store.rb +47 -0
- data/lib/action_dispatch/middleware/show_exceptions.rb +173 -0
- data/lib/{action_controller/middleware_stack.rb → action_dispatch/middleware/stack.rb} +23 -13
- data/lib/action_dispatch/middleware/static.rb +44 -0
- data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/_request_and_response.erb +10 -3
- data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/_trace.erb +4 -4
- data/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb +10 -0
- data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/layout.erb +2 -2
- data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/missing_template.erb +0 -0
- data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/routing_error.erb +0 -0
- data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/template_error.erb +3 -3
- data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/unknown_action.erb +0 -0
- data/lib/action_dispatch/railtie.rb +15 -0
- data/lib/action_dispatch/routing.rb +217 -0
- data/lib/action_dispatch/routing/deprecated_mapper.rb +877 -0
- data/lib/action_dispatch/routing/mapper.rb +649 -0
- data/lib/action_dispatch/routing/route.rb +55 -0
- data/lib/action_dispatch/routing/route_set.rb +445 -0
- data/lib/action_dispatch/testing/assertions.rb +21 -0
- data/lib/action_dispatch/testing/assertions/dom.rb +37 -0
- data/lib/{action_controller/assertions/model_assertions.rb → action_dispatch/testing/assertions/model.rb} +2 -4
- data/lib/action_dispatch/testing/assertions/response.rb +154 -0
- data/lib/{action_controller/assertions/routing_assertions.rb → action_dispatch/testing/assertions/routing.rb} +72 -34
- data/lib/{action_controller/assertions/selector_assertions.rb → action_dispatch/testing/assertions/selector.rb} +14 -11
- data/lib/{action_controller/assertions/tag_assertions.rb → action_dispatch/testing/assertions/tag.rb} +25 -14
- data/lib/{action_controller → action_dispatch/testing}/integration.rb +173 -406
- data/lib/action_dispatch/testing/performance_test.rb +17 -0
- data/lib/action_dispatch/testing/test_process.rb +42 -0
- data/lib/action_dispatch/testing/test_request.rb +83 -0
- data/lib/action_dispatch/testing/test_response.rb +136 -0
- data/lib/action_pack/version.rb +3 -3
- data/lib/action_view.rb +29 -26
- data/lib/action_view/base.rb +101 -148
- data/lib/action_view/context.rb +44 -0
- data/lib/action_view/helpers.rb +6 -4
- data/lib/action_view/helpers/{active_record_helper.rb → active_model_helper.rb} +63 -63
- data/lib/action_view/helpers/asset_tag_helper.rb +166 -31
- data/lib/action_view/helpers/cache_helper.rb +1 -1
- data/lib/action_view/helpers/capture_helper.rb +40 -8
- data/lib/action_view/helpers/csrf_helper.rb +2 -4
- data/lib/action_view/helpers/date_helper.rb +14 -15
- data/lib/action_view/helpers/form_helper.rb +121 -24
- data/lib/action_view/helpers/form_options_helper.rb +26 -25
- data/lib/action_view/helpers/form_tag_helper.rb +42 -33
- data/lib/action_view/helpers/javascript_helper.rb +1 -109
- data/lib/action_view/helpers/number_helper.rb +4 -1
- data/lib/action_view/helpers/prototype_helper.rb +75 -499
- data/lib/action_view/helpers/raw_output_helper.rb +1 -1
- data/lib/action_view/helpers/record_tag_helper.rb +3 -3
- data/lib/action_view/helpers/sanitize_helper.rb +3 -2
- data/lib/action_view/helpers/scriptaculous_helper.rb +89 -53
- data/lib/action_view/helpers/tag_helper.rb +12 -13
- data/lib/action_view/helpers/text_helper.rb +33 -38
- data/lib/action_view/helpers/translation_helper.rb +11 -35
- data/lib/action_view/helpers/url_helper.rb +140 -134
- data/lib/action_view/locale/en.yml +34 -28
- data/lib/action_view/paths.rb +27 -24
- data/lib/action_view/railtie.rb +17 -0
- data/lib/action_view/railties/subscriber.rb +24 -0
- data/lib/action_view/{partials.rb → render/partials.rb} +161 -51
- data/lib/action_view/render/rendering.rb +117 -0
- data/lib/action_view/template.rb +88 -217
- data/lib/action_view/template/error.rb +105 -0
- data/lib/action_view/template/handler.rb +41 -0
- data/lib/action_view/template/handlers.rb +54 -0
- data/lib/action_view/{template_handlers → template/handlers}/builder.rb +6 -6
- data/lib/action_view/template/handlers/erb.rb +58 -0
- data/lib/action_view/{template_handlers → template/handlers}/rjs.rb +8 -3
- data/lib/action_view/template/resolver.rb +164 -0
- data/lib/action_view/template/text.rb +40 -0
- data/lib/action_view/test_case.rb +18 -18
- metadata +165 -420
- data/RUNNING_UNIT_TESTS +0 -24
- data/Rakefile +0 -158
- data/install.rb +0 -30
- data/lib/action_controller/assertions/dom_assertions.rb +0 -55
- data/lib/action_controller/assertions/response_assertions.rb +0 -169
- data/lib/action_controller/benchmarking.rb +0 -107
- data/lib/action_controller/caching/sweeper.rb +0 -45
- data/lib/action_controller/cgi_ext.rb +0 -15
- data/lib/action_controller/cgi_ext/cookie.rb +0 -112
- data/lib/action_controller/cgi_ext/query_extension.rb +0 -22
- data/lib/action_controller/cgi_ext/stdinput.rb +0 -24
- data/lib/action_controller/cgi_process.rb +0 -77
- data/lib/action_controller/cookies.rb +0 -197
- data/lib/action_controller/dispatcher.rb +0 -133
- data/lib/action_controller/failsafe.rb +0 -87
- data/lib/action_controller/filters.rb +0 -680
- data/lib/action_controller/helpers.rb +0 -225
- data/lib/action_controller/layout.rb +0 -286
- data/lib/action_controller/middlewares.rb +0 -14
- data/lib/action_controller/mime_responds.rb +0 -193
- data/lib/action_controller/params_parser.rb +0 -77
- data/lib/action_controller/performance_test.rb +0 -15
- data/lib/action_controller/rack_lint_patch.rb +0 -36
- data/lib/action_controller/reloader.rb +0 -54
- data/lib/action_controller/request.rb +0 -518
- data/lib/action_controller/request_forgery_protection.rb +0 -116
- data/lib/action_controller/rescue.rb +0 -183
- data/lib/action_controller/resources.rb +0 -682
- data/lib/action_controller/response.rb +0 -237
- data/lib/action_controller/routing.rb +0 -388
- data/lib/action_controller/routing/builder.rb +0 -197
- data/lib/action_controller/routing/optimisations.rb +0 -130
- data/lib/action_controller/routing/recognition_optimisation.rb +0 -167
- data/lib/action_controller/routing/route.rb +0 -265
- data/lib/action_controller/routing/route_set.rb +0 -503
- data/lib/action_controller/routing/routing_ext.rb +0 -49
- data/lib/action_controller/routing/segments.rb +0 -343
- data/lib/action_controller/session/abstract_store.rb +0 -276
- data/lib/action_controller/session/mem_cache_store.rb +0 -60
- data/lib/action_controller/status_codes.rb +0 -88
- data/lib/action_controller/string_coercion.rb +0 -29
- data/lib/action_controller/templates/rescues/diagnostics.erb +0 -11
- data/lib/action_controller/test_process.rb +0 -580
- data/lib/action_controller/uploaded_file.rb +0 -44
- data/lib/action_view/helpers/benchmark_helper.rb +0 -54
- data/lib/action_view/inline_template.rb +0 -19
- data/lib/action_view/reloadable_template.rb +0 -117
- data/lib/action_view/renderable.rb +0 -109
- data/lib/action_view/renderable_partial.rb +0 -53
- data/lib/action_view/template_error.rb +0 -99
- data/lib/action_view/template_handler.rb +0 -34
- data/lib/action_view/template_handlers.rb +0 -48
- data/lib/action_view/template_handlers/erb.rb +0 -25
- data/lib/actionpack.rb +0 -2
- data/test/abstract_unit.rb +0 -78
- data/test/active_record_unit.rb +0 -104
- data/test/activerecord/active_record_store_test.rb +0 -221
- data/test/activerecord/render_partial_with_record_identification_test.rb +0 -188
- data/test/adv_attr_test.rb +0 -20
- data/test/controller/action_pack_assertions_test.rb +0 -545
- data/test/controller/addresses_render_test.rb +0 -37
- data/test/controller/assert_select_test.rb +0 -735
- data/test/controller/base_test.rb +0 -217
- data/test/controller/benchmark_test.rb +0 -32
- data/test/controller/caching_test.rb +0 -743
- data/test/controller/capture_test.rb +0 -66
- data/test/controller/content_type_test.rb +0 -178
- data/test/controller/controller_fixtures/app/controllers/admin/user_controller.rb +0 -0
- data/test/controller/controller_fixtures/app/controllers/user_controller.rb +0 -0
- data/test/controller/controller_fixtures/vendor/plugins/bad_plugin/lib/plugin_controller.rb +0 -0
- data/test/controller/cookie_test.rb +0 -208
- data/test/controller/deprecation/deprecated_base_methods_test.rb +0 -32
- data/test/controller/dispatcher_test.rb +0 -144
- data/test/controller/dom_assertions_test.rb +0 -53
- data/test/controller/failsafe_test.rb +0 -60
- data/test/controller/fake_controllers.rb +0 -33
- data/test/controller/fake_models.rb +0 -19
- data/test/controller/filter_params_test.rb +0 -52
- data/test/controller/filters_test.rb +0 -885
- data/test/controller/flash_test.rb +0 -174
- data/test/controller/header_test.rb +0 -14
- data/test/controller/helper_test.rb +0 -224
- data/test/controller/html-scanner/cdata_node_test.rb +0 -15
- data/test/controller/html-scanner/document_test.rb +0 -148
- data/test/controller/html-scanner/node_test.rb +0 -89
- data/test/controller/html-scanner/sanitizer_test.rb +0 -300
- data/test/controller/html-scanner/tag_node_test.rb +0 -238
- data/test/controller/html-scanner/text_node_test.rb +0 -50
- data/test/controller/html-scanner/tokenizer_test.rb +0 -131
- data/test/controller/http_basic_authentication_test.rb +0 -113
- data/test/controller/http_digest_authentication_test.rb +0 -254
- data/test/controller/integration_test.rb +0 -526
- data/test/controller/layout_test.rb +0 -215
- data/test/controller/localized_templates_test.rb +0 -24
- data/test/controller/logging_test.rb +0 -46
- data/test/controller/middleware_stack_test.rb +0 -90
- data/test/controller/mime_responds_test.rb +0 -536
- data/test/controller/mime_type_test.rb +0 -93
- data/test/controller/output_escaping_test.rb +0 -19
- data/test/controller/polymorphic_routes_test.rb +0 -297
- data/test/controller/rack_test.rb +0 -308
- data/test/controller/record_identifier_test.rb +0 -139
- data/test/controller/redirect_test.rb +0 -285
- data/test/controller/reloader_test.rb +0 -125
- data/test/controller/render_test.rb +0 -1783
- data/test/controller/request/json_params_parsing_test.rb +0 -65
- data/test/controller/request/multipart_params_parsing_test.rb +0 -177
- data/test/controller/request/query_string_parsing_test.rb +0 -129
- data/test/controller/request/test_request_test.rb +0 -35
- data/test/controller/request/url_encoded_params_parsing_test.rb +0 -146
- data/test/controller/request/xml_params_parsing_test.rb +0 -103
- data/test/controller/request_forgery_protection_test.rb +0 -233
- data/test/controller/request_test.rb +0 -398
- data/test/controller/rescue_test.rb +0 -541
- data/test/controller/resources_test.rb +0 -1393
- data/test/controller/routing_test.rb +0 -2592
- data/test/controller/selector_test.rb +0 -628
- data/test/controller/send_file_test.rb +0 -171
- data/test/controller/session/abstract_store_test.rb +0 -64
- data/test/controller/session/cookie_store_test.rb +0 -354
- data/test/controller/session/mem_cache_store_test.rb +0 -187
- data/test/controller/session/test_session_test.rb +0 -58
- data/test/controller/test_test.rb +0 -700
- data/test/controller/translation_test.rb +0 -26
- data/test/controller/url_rewriter_test.rb +0 -395
- data/test/controller/verification_test.rb +0 -270
- data/test/controller/view_paths_test.rb +0 -141
- data/test/controller/webservice_test.rb +0 -273
- data/test/fixtures/_top_level_partial.html.erb +0 -1
- data/test/fixtures/_top_level_partial_only.erb +0 -1
- data/test/fixtures/addresses/list.erb +0 -1
- data/test/fixtures/alternate_helpers/foo_helper.rb +0 -3
- data/test/fixtures/bad_customers/_bad_customer.html.erb +0 -1
- data/test/fixtures/companies.yml +0 -24
- data/test/fixtures/company.rb +0 -10
- data/test/fixtures/content_type/render_default_content_types_for_respond_to.rhtml +0 -1
- data/test/fixtures/content_type/render_default_for_rhtml.rhtml +0 -1
- data/test/fixtures/content_type/render_default_for_rjs.rjs +0 -1
- data/test/fixtures/content_type/render_default_for_rxml.rxml +0 -1
- data/test/fixtures/customers/_customer.html.erb +0 -1
- data/test/fixtures/db_definitions/sqlite.sql +0 -49
- data/test/fixtures/developer.rb +0 -9
- data/test/fixtures/developers.yml +0 -21
- data/test/fixtures/developers/_developer.erb +0 -1
- data/test/fixtures/developers_projects.yml +0 -13
- data/test/fixtures/failsafe/500.html +0 -1
- data/test/fixtures/fun/games/_game.erb +0 -1
- data/test/fixtures/fun/games/hello_world.erb +0 -1
- data/test/fixtures/fun/serious/games/_game.erb +0 -1
- data/test/fixtures/functional_caching/_partial.erb +0 -3
- data/test/fixtures/functional_caching/formatted_fragment_cached.html.erb +0 -3
- data/test/fixtures/functional_caching/formatted_fragment_cached.js.rjs +0 -6
- data/test/fixtures/functional_caching/formatted_fragment_cached.xml.builder +0 -5
- data/test/fixtures/functional_caching/fragment_cached.html.erb +0 -2
- data/test/fixtures/functional_caching/html_fragment_cached_with_partial.html.erb +0 -1
- data/test/fixtures/functional_caching/inline_fragment_cached.html.erb +0 -2
- data/test/fixtures/functional_caching/js_fragment_cached_with_partial.js.rjs +0 -1
- data/test/fixtures/good_customers/_good_customer.html.erb +0 -1
- data/test/fixtures/helpers/abc_helper.rb +0 -5
- data/test/fixtures/helpers/fun/games_helper.rb +0 -3
- data/test/fixtures/helpers/fun/pdf_helper.rb +0 -3
- data/test/fixtures/layout_tests/abs_path_layout.rhtml +0 -1
- data/test/fixtures/layout_tests/alt/hello.rhtml +0 -1
- data/test/fixtures/layout_tests/alt/layouts/alt.rhtml +0 -0
- data/test/fixtures/layout_tests/layouts/controller_name_space/nested.rhtml +0 -1
- data/test/fixtures/layout_tests/layouts/item.rhtml +0 -1
- data/test/fixtures/layout_tests/layouts/layout_test.rhtml +0 -1
- data/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb +0 -1
- data/test/fixtures/layout_tests/layouts/third_party_template_library.mab +0 -1
- data/test/fixtures/layout_tests/views/hello.rhtml +0 -1
- data/test/fixtures/layouts/_column.html.erb +0 -2
- data/test/fixtures/layouts/block_with_layout.erb +0 -3
- data/test/fixtures/layouts/builder.builder +0 -3
- data/test/fixtures/layouts/default_html.html.erb +0 -1
- data/test/fixtures/layouts/partial_with_layout.erb +0 -3
- data/test/fixtures/layouts/standard.erb +0 -1
- data/test/fixtures/layouts/talk_from_action.erb +0 -2
- data/test/fixtures/layouts/xhr.html.erb +0 -2
- data/test/fixtures/layouts/yield.erb +0 -2
- data/test/fixtures/localized/hello_world.de.html +0 -1
- data/test/fixtures/localized/hello_world.en.html +0 -1
- data/test/fixtures/mascot.rb +0 -3
- data/test/fixtures/mascots.yml +0 -4
- data/test/fixtures/mascots/_mascot.html.erb +0 -1
- data/test/fixtures/multipart/binary_file +0 -0
- data/test/fixtures/multipart/boundary_problem_file +0 -10
- data/test/fixtures/multipart/bracketed_param +0 -5
- data/test/fixtures/multipart/empty +0 -10
- data/test/fixtures/multipart/hello.txt +0 -1
- data/test/fixtures/multipart/large_text_file +0 -10
- data/test/fixtures/multipart/mixed_files +0 -0
- data/test/fixtures/multipart/mona_lisa.jpg +0 -0
- data/test/fixtures/multipart/none +0 -9
- data/test/fixtures/multipart/single_parameter +0 -5
- data/test/fixtures/multipart/text_file +0 -10
- data/test/fixtures/override/test/hello_world.erb +0 -1
- data/test/fixtures/override2/layouts/test/sub.erb +0 -1
- data/test/fixtures/post_test/layouts/post.html.erb +0 -1
- data/test/fixtures/post_test/layouts/super_post.iphone.erb +0 -1
- data/test/fixtures/post_test/post/index.html.erb +0 -1
- data/test/fixtures/post_test/post/index.iphone.erb +0 -1
- data/test/fixtures/post_test/super_post/index.html.erb +0 -1
- data/test/fixtures/post_test/super_post/index.iphone.erb +0 -1
- data/test/fixtures/project.rb +0 -3
- data/test/fixtures/projects.yml +0 -7
- data/test/fixtures/projects/_project.erb +0 -1
- data/test/fixtures/public/404.html +0 -1
- data/test/fixtures/public/500.da.html +0 -1
- data/test/fixtures/public/500.html +0 -1
- data/test/fixtures/public/absolute/test.css +0 -23
- data/test/fixtures/public/absolute/test.js +0 -63
- data/test/fixtures/public/images/rails.png +0 -0
- data/test/fixtures/public/javascripts/application.js +0 -1
- data/test/fixtures/public/javascripts/bank.js +0 -1
- data/test/fixtures/public/javascripts/controls.js +0 -1
- data/test/fixtures/public/javascripts/dragdrop.js +0 -1
- data/test/fixtures/public/javascripts/effects.js +0 -1
- data/test/fixtures/public/javascripts/prototype.js +0 -1
- data/test/fixtures/public/javascripts/robber.js +0 -1
- data/test/fixtures/public/javascripts/subdir/subdir.js +0 -1
- data/test/fixtures/public/javascripts/version.1.0.js +0 -1
- data/test/fixtures/public/stylesheets/bank.css +0 -1
- data/test/fixtures/public/stylesheets/robber.css +0 -1
- data/test/fixtures/public/stylesheets/subdir/subdir.css +0 -1
- data/test/fixtures/public/stylesheets/version.1.0.css +0 -1
- data/test/fixtures/quiz/questions/_question.html.erb +0 -1
- data/test/fixtures/replies.yml +0 -15
- data/test/fixtures/replies/_reply.erb +0 -1
- data/test/fixtures/reply.rb +0 -7
- data/test/fixtures/respond_to/all_types_with_layout.html.erb +0 -1
- data/test/fixtures/respond_to/all_types_with_layout.js.rjs +0 -1
- data/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +0 -1
- data/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +0 -1
- data/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +0 -1
- data/test/fixtures/respond_to/layouts/missing.html.erb +0 -1
- data/test/fixtures/respond_to/layouts/standard.html.erb +0 -1
- data/test/fixtures/respond_to/layouts/standard.iphone.erb +0 -1
- data/test/fixtures/respond_to/using_defaults.html.erb +0 -1
- data/test/fixtures/respond_to/using_defaults.js.rjs +0 -1
- data/test/fixtures/respond_to/using_defaults.xml.builder +0 -1
- data/test/fixtures/respond_to/using_defaults_with_type_list.html.erb +0 -1
- data/test/fixtures/respond_to/using_defaults_with_type_list.js.rjs +0 -1
- data/test/fixtures/respond_to/using_defaults_with_type_list.xml.builder +0 -1
- data/test/fixtures/scope/test/modgreet.erb +0 -1
- data/test/fixtures/session_autoload_test/session_autoload_test/foo.rb +0 -10
- data/test/fixtures/shared.html.erb +0 -1
- data/test/fixtures/symlink_parent/symlinked_layout.erb +0 -5
- data/test/fixtures/test/_counter.html.erb +0 -1
- data/test/fixtures/test/_customer.erb +0 -1
- data/test/fixtures/test/_customer_counter.erb +0 -1
- data/test/fixtures/test/_customer_counter_with_as.erb +0 -1
- data/test/fixtures/test/_customer_greeting.erb +0 -1
- data/test/fixtures/test/_customer_with_var.erb +0 -1
- data/test/fixtures/test/_form.erb +0 -1
- data/test/fixtures/test/_from_helper.erb +0 -1
- data/test/fixtures/test/_hash_greeting.erb +0 -1
- data/test/fixtures/test/_hash_object.erb +0 -2
- data/test/fixtures/test/_hello.builder +0 -1
- data/test/fixtures/test/_labelling_form.erb +0 -1
- data/test/fixtures/test/_layout_for_block_with_args.html.erb +0 -3
- data/test/fixtures/test/_layout_for_partial.html.erb +0 -3
- data/test/fixtures/test/_local_inspector.html.erb +0 -1
- data/test/fixtures/test/_one.html.erb +0 -1
- data/test/fixtures/test/_partial.erb +0 -1
- data/test/fixtures/test/_partial.html.erb +0 -1
- data/test/fixtures/test/_partial.js.erb +0 -1
- data/test/fixtures/test/_partial_for_use_in_layout.html.erb +0 -1
- data/test/fixtures/test/_partial_only.erb +0 -1
- data/test/fixtures/test/_partial_with_only_html_version.html.erb +0 -1
- data/test/fixtures/test/_person.erb +0 -2
- data/test/fixtures/test/_raise.html.erb +0 -1
- data/test/fixtures/test/_two.html.erb +0 -1
- data/test/fixtures/test/_utf8_partial.html.erb +0 -1
- data/test/fixtures/test/_utf8_partial_magic.html.erb +0 -2
- data/test/fixtures/test/action_talk_to_layout.erb +0 -2
- data/test/fixtures/test/array_translation.erb +0 -1
- data/test/fixtures/test/calling_partial_with_layout.html.erb +0 -1
- data/test/fixtures/test/capturing.erb +0 -4
- data/test/fixtures/test/content_for.erb +0 -2
- data/test/fixtures/test/content_for_concatenated.erb +0 -3
- data/test/fixtures/test/content_for_with_parameter.erb +0 -2
- data/test/fixtures/test/delete_with_js.rjs +0 -2
- data/test/fixtures/test/dont_pick_me +0 -1
- data/test/fixtures/test/dot.directory/render_file_with_ivar.erb +0 -1
- data/test/fixtures/test/enum_rjs_test.rjs +0 -6
- data/test/fixtures/test/formatted_html_erb.html.erb +0 -1
- data/test/fixtures/test/formatted_xml_erb.builder +0 -1
- data/test/fixtures/test/formatted_xml_erb.html.erb +0 -1
- data/test/fixtures/test/formatted_xml_erb.xml.erb +0 -1
- data/test/fixtures/test/greeting.erb +0 -1
- data/test/fixtures/test/greeting.js.rjs +0 -1
- data/test/fixtures/test/hello.builder +0 -4
- data/test/fixtures/test/hello_world.da.html.erb +0 -1
- data/test/fixtures/test/hello_world.erb +0 -1
- data/test/fixtures/test/hello_world.erb~ +0 -1
- data/test/fixtures/test/hello_world.pt-BR.html.erb +0 -1
- data/test/fixtures/test/hello_world_container.builder +0 -3
- data/test/fixtures/test/hello_world_from_rxml.builder +0 -4
- data/test/fixtures/test/hello_world_with_layout_false.erb +0 -1
- data/test/fixtures/test/hello_xml_world.builder +0 -11
- data/test/fixtures/test/hyphen-ated.erb +0 -1
- data/test/fixtures/test/implicit_content_type.atom.builder +0 -2
- data/test/fixtures/test/list.erb +0 -1
- data/test/fixtures/test/malformed/malformed.en.html.erb~ +0 -1
- data/test/fixtures/test/malformed/malformed.erb~ +0 -1
- data/test/fixtures/test/malformed/malformed.html.erb~ +0 -1
- data/test/fixtures/test/nested_layout.erb +0 -3
- data/test/fixtures/test/non_erb_block_content_for.builder +0 -4
- data/test/fixtures/test/potential_conflicts.erb +0 -4
- data/test/fixtures/test/render_explicit_html_template.js.rjs +0 -1
- data/test/fixtures/test/render_file_from_template.html.erb +0 -1
- data/test/fixtures/test/render_file_with_ivar.erb +0 -1
- data/test/fixtures/test/render_file_with_locals.erb +0 -1
- data/test/fixtures/test/render_implicit_html_template.js.rjs +0 -1
- data/test/fixtures/test/render_implicit_html_template_from_xhr_request.da.html.erb +0 -1
- data/test/fixtures/test/render_implicit_html_template_from_xhr_request.html.erb +0 -1
- data/test/fixtures/test/render_implicit_js_template_without_layout.js.erb +0 -1
- data/test/fixtures/test/render_to_string_test.erb +0 -1
- data/test/fixtures/test/scoped_array_translation.erb +0 -1
- data/test/fixtures/test/sub_template_raise.html.erb +0 -1
- data/test/fixtures/test/template.erb +0 -1
- data/test/fixtures/test/translation.erb +0 -1
- data/test/fixtures/test/update_element_with_capture.erb +0 -9
- data/test/fixtures/test/using_layout_around_block.html.erb +0 -1
- data/test/fixtures/test/using_layout_around_block_with_args.html.erb +0 -1
- data/test/fixtures/test/utf8.html.erb +0 -4
- data/test/fixtures/test/utf8_magic.html.erb +0 -5
- data/test/fixtures/test/utf8_magic_with_bare_partial.html.erb +0 -5
- data/test/fixtures/topic.rb +0 -3
- data/test/fixtures/topics.yml +0 -22
- data/test/fixtures/topics/_topic.html.erb +0 -1
- data/test/template/active_record_helper_i18n_test.rb +0 -51
- data/test/template/active_record_helper_test.rb +0 -302
- data/test/template/asset_tag_helper_test.rb +0 -770
- data/test/template/atom_feed_helper_test.rb +0 -315
- data/test/template/benchmark_helper_test.rb +0 -86
- data/test/template/compiled_templates_test.rb +0 -204
- data/test/template/date_helper_i18n_test.rb +0 -121
- data/test/template/date_helper_test.rb +0 -2603
- data/test/template/erb_util_test.rb +0 -36
- data/test/template/form_helper_test.rb +0 -1447
- data/test/template/form_options_helper_i18n_test.rb +0 -27
- data/test/template/form_options_helper_test.rb +0 -811
- data/test/template/form_tag_helper_test.rb +0 -356
- data/test/template/javascript_helper_test.rb +0 -106
- data/test/template/number_helper_i18n_test.rb +0 -69
- data/test/template/number_helper_test.rb +0 -132
- data/test/template/prototype_helper_test.rb +0 -639
- data/test/template/raw_output_helper_test.rb +0 -21
- data/test/template/record_tag_helper_test.rb +0 -58
- data/test/template/render_test.rb +0 -329
- data/test/template/sanitize_helper_test.rb +0 -57
- data/test/template/scriptaculous_helper_test.rb +0 -90
- data/test/template/tag_helper_test.rb +0 -98
- data/test/template/template_test.rb +0 -32
- data/test/template/test_test.rb +0 -54
- data/test/template/text_helper_test.rb +0 -601
- data/test/template/translation_helper_test.rb +0 -95
- data/test/template/url_helper_test.rb +0 -641
- data/test/testing_sandbox.rb +0 -15
- data/test/view/test_case_test.rb +0 -176
@@ -1,32 +0,0 @@
|
|
1
|
-
require 'abstract_unit'
|
2
|
-
|
3
|
-
class DeprecatedBaseMethodsTest < ActionController::TestCase
|
4
|
-
class Target < ActionController::Base
|
5
|
-
def home_url(greeting)
|
6
|
-
"http://example.com/#{greeting}"
|
7
|
-
end
|
8
|
-
|
9
|
-
def raises_name_error
|
10
|
-
this_method_doesnt_exist
|
11
|
-
end
|
12
|
-
|
13
|
-
def rescue_action(e) raise e end
|
14
|
-
end
|
15
|
-
|
16
|
-
tests Target
|
17
|
-
|
18
|
-
def test_log_error_silences_deprecation_warnings
|
19
|
-
get :raises_name_error
|
20
|
-
rescue => e
|
21
|
-
assert_not_deprecated { @controller.send :log_error, e }
|
22
|
-
end
|
23
|
-
|
24
|
-
if defined? Test::Unit::Error
|
25
|
-
def test_assertion_failed_error_silences_deprecation_warnings
|
26
|
-
get :raises_name_error
|
27
|
-
rescue => e
|
28
|
-
error = Test::Unit::Error.new('testing ur doodz', e)
|
29
|
-
assert_not_deprecated { error.message }
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,144 +0,0 @@
|
|
1
|
-
require 'abstract_unit'
|
2
|
-
|
3
|
-
class DispatcherTest < Test::Unit::TestCase
|
4
|
-
Dispatcher = ActionController::Dispatcher
|
5
|
-
Reloader = ActionController::Reloader
|
6
|
-
|
7
|
-
def setup
|
8
|
-
ENV['REQUEST_METHOD'] = 'GET'
|
9
|
-
reset_dispatcher
|
10
|
-
Dispatcher.stubs(:require_dependency)
|
11
|
-
end
|
12
|
-
|
13
|
-
def teardown
|
14
|
-
ENV.delete 'REQUEST_METHOD'
|
15
|
-
reset_dispatcher
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_clears_dependencies_after_dispatch_if_in_loading_mode
|
19
|
-
ActiveSupport::Dependencies.expects(:clear).once
|
20
|
-
# Close the response so dependencies kicks in
|
21
|
-
dispatch(false).last.close
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_reloads_routes_before_dispatch_if_in_loading_mode
|
25
|
-
ActionController::Routing::Routes.expects(:reload).once
|
26
|
-
dispatch(false)
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_leaves_dependencies_after_dispatch_if_not_in_loading_mode
|
30
|
-
ActionController::Routing::Routes.expects(:reload).never
|
31
|
-
ActiveSupport::Dependencies.expects(:clear).never
|
32
|
-
|
33
|
-
dispatch
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_builds_middleware_stack_only_during_initialization_if_not_in_loading_mode
|
37
|
-
dispatcher = create_dispatcher
|
38
|
-
assert_not_nil dispatcher.instance_variable_get(:"@app")
|
39
|
-
dispatcher.instance_variable_set(:"@app", lambda { |env| })
|
40
|
-
dispatcher.expects(:build_middleware_stack).never
|
41
|
-
dispatcher.call(nil)
|
42
|
-
dispatcher.call(nil)
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_rebuilds_middleware_stack_on_every_request_if_in_loading_mode
|
46
|
-
dispatcher = create_dispatcher(false)
|
47
|
-
dispatcher.instance_variable_set(:"@app", lambda { |env| })
|
48
|
-
dispatcher.expects(:build_middleware_stack).twice
|
49
|
-
dispatcher.call(nil)
|
50
|
-
Reloader.default_lock.unlock
|
51
|
-
dispatcher.call(nil)
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_doesnt_wrap_call_in_reloader_if_not_in_loading_mode
|
55
|
-
Reloader.expects(:run).never
|
56
|
-
dispatch
|
57
|
-
end
|
58
|
-
|
59
|
-
def test_wraps_call_in_reloader_if_in_loading_mode
|
60
|
-
Reloader.expects(:run).once
|
61
|
-
dispatch(false)
|
62
|
-
end
|
63
|
-
|
64
|
-
# Stub out dispatch error logger
|
65
|
-
class << Dispatcher
|
66
|
-
def log_failsafe_exception(status, exception); end
|
67
|
-
end
|
68
|
-
|
69
|
-
def test_failsafe_response
|
70
|
-
Dispatcher.any_instance.expects(:dispatch).raises('b00m')
|
71
|
-
ActionController::Failsafe.any_instance.expects(:log_failsafe_exception)
|
72
|
-
|
73
|
-
response = nil
|
74
|
-
assert_nothing_raised do
|
75
|
-
response = dispatch
|
76
|
-
end
|
77
|
-
assert_equal 3, response.size
|
78
|
-
assert_equal 500, response[0]
|
79
|
-
assert_equal({"Content-Type" => "text/html"}, response[1])
|
80
|
-
assert_match /500 Internal Server Error/, response[2].join
|
81
|
-
end
|
82
|
-
|
83
|
-
def test_prepare_callbacks
|
84
|
-
a = b = c = nil
|
85
|
-
Dispatcher.to_prepare { |*args| a = b = c = 1 }
|
86
|
-
Dispatcher.to_prepare { |*args| b = c = 2 }
|
87
|
-
Dispatcher.to_prepare { |*args| c = 3 }
|
88
|
-
|
89
|
-
# Ensure to_prepare callbacks are not run when defined
|
90
|
-
assert_nil a || b || c
|
91
|
-
|
92
|
-
# Run callbacks
|
93
|
-
Dispatcher.run_prepare_callbacks
|
94
|
-
|
95
|
-
assert_equal 1, a
|
96
|
-
assert_equal 2, b
|
97
|
-
assert_equal 3, c
|
98
|
-
|
99
|
-
# Make sure they are only run once
|
100
|
-
a = b = c = nil
|
101
|
-
dispatch
|
102
|
-
assert_nil a || b || c
|
103
|
-
end
|
104
|
-
|
105
|
-
def test_to_prepare_with_identifier_replaces
|
106
|
-
a = b = nil
|
107
|
-
Dispatcher.to_prepare(:unique_id) { |*args| a = b = 1 }
|
108
|
-
Dispatcher.to_prepare(:unique_id) { |*args| a = 2 }
|
109
|
-
|
110
|
-
Dispatcher.run_prepare_callbacks
|
111
|
-
assert_equal 2, a
|
112
|
-
assert_equal nil, b
|
113
|
-
end
|
114
|
-
|
115
|
-
private
|
116
|
-
def dispatch(cache_classes = true)
|
117
|
-
ActionController::Routing::RouteSet.any_instance.stubs(:call).returns([200, {}, 'response'])
|
118
|
-
Dispatcher.define_dispatcher_callbacks(cache_classes)
|
119
|
-
Dispatcher.new.call({'rack.input' => StringIO.new('')})
|
120
|
-
end
|
121
|
-
|
122
|
-
def create_dispatcher(cache_classes = true)
|
123
|
-
Dispatcher.define_dispatcher_callbacks(cache_classes)
|
124
|
-
Dispatcher.new
|
125
|
-
end
|
126
|
-
|
127
|
-
def reset_dispatcher
|
128
|
-
Dispatcher.middleware = ActionController::MiddlewareStack.new do |middleware|
|
129
|
-
middlewares = File.expand_path(File.join(File.dirname(__FILE__), "../../lib/action_controller/middlewares.rb"))
|
130
|
-
middleware.instance_eval(File.read(middlewares))
|
131
|
-
end
|
132
|
-
|
133
|
-
# Clear callbacks as they are redefined by Dispatcher#define_dispatcher_callbacks
|
134
|
-
Dispatcher.instance_variable_set("@prepare_dispatch_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
|
135
|
-
Dispatcher.instance_variable_set("@before_dispatch_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
|
136
|
-
Dispatcher.instance_variable_set("@after_dispatch_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
|
137
|
-
|
138
|
-
Dispatcher.define_dispatcher_callbacks(true)
|
139
|
-
end
|
140
|
-
|
141
|
-
def assert_subclasses(howmany, klass, message = klass.subclasses.inspect)
|
142
|
-
assert_equal howmany, klass.subclasses.size, message
|
143
|
-
end
|
144
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
require 'abstract_unit'
|
2
|
-
|
3
|
-
class DomAssertionsTest < ActionView::TestCase
|
4
|
-
def setup
|
5
|
-
super
|
6
|
-
@html_only = '<ul><li>foo</li><li>bar</li></ul>'
|
7
|
-
@html_with_meaningless_whitespace = %{
|
8
|
-
<ul>
|
9
|
-
<li>\tfoo </li>
|
10
|
-
<li>
|
11
|
-
bar
|
12
|
-
</li>
|
13
|
-
</ul>
|
14
|
-
}
|
15
|
-
@more_html_with_meaningless_whitespace = %{<ul>
|
16
|
-
|
17
|
-
<li>foo</li>
|
18
|
-
|
19
|
-
<li>bar</li></ul>}
|
20
|
-
end
|
21
|
-
|
22
|
-
test "assert_dom_equal strips meaningless whitespace from expected string" do
|
23
|
-
assert_dom_equal @html_with_meaningless_whitespace, @html_only
|
24
|
-
end
|
25
|
-
|
26
|
-
test "assert_dom_equal strips meaningless whitespace from actual string" do
|
27
|
-
assert_dom_equal @html_only, @html_with_meaningless_whitespace
|
28
|
-
end
|
29
|
-
|
30
|
-
test "assert_dom_equal strips meaningless whitespace from both expected and actual strings" do
|
31
|
-
assert_dom_equal @more_html_with_meaningless_whitespace, @html_with_meaningless_whitespace
|
32
|
-
end
|
33
|
-
|
34
|
-
test "assert_dom_not_equal strips meaningless whitespace from expected string" do
|
35
|
-
assert_assertion_fails { assert_dom_not_equal @html_with_meaningless_whitespace, @html_only }
|
36
|
-
end
|
37
|
-
|
38
|
-
test "assert_dom_not_equal strips meaningless whitespace from actual string" do
|
39
|
-
assert_assertion_fails { assert_dom_not_equal @html_only, @html_with_meaningless_whitespace }
|
40
|
-
end
|
41
|
-
|
42
|
-
test "assert_dom_not_equal strips meaningless whitespace from both expected and actual strings" do
|
43
|
-
assert_assertion_fails do
|
44
|
-
assert_dom_not_equal @more_html_with_meaningless_whitespace, @html_with_meaningless_whitespace
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
private
|
49
|
-
|
50
|
-
def assert_assertion_fails
|
51
|
-
assert_raise(ActiveSupport::TestCase::Assertion) { yield }
|
52
|
-
end
|
53
|
-
end
|
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'abstract_unit'
|
2
|
-
require 'stringio'
|
3
|
-
require 'logger'
|
4
|
-
|
5
|
-
class FailsafeTest < ActionController::TestCase
|
6
|
-
FIXTURE_PUBLIC = "#{File.dirname(__FILE__)}/../fixtures/failsafe".freeze
|
7
|
-
|
8
|
-
def setup
|
9
|
-
@old_error_file_path = ActionController::Failsafe.error_file_path
|
10
|
-
ActionController::Failsafe.error_file_path = FIXTURE_PUBLIC
|
11
|
-
@app = mock
|
12
|
-
@log_io = StringIO.new
|
13
|
-
@logger = Logger.new(@log_io)
|
14
|
-
@failsafe = ActionController::Failsafe.new(@app)
|
15
|
-
@failsafe.stubs(:failsafe_logger).returns(@logger)
|
16
|
-
end
|
17
|
-
|
18
|
-
def teardown
|
19
|
-
ActionController::Failsafe.error_file_path = @old_error_file_path
|
20
|
-
end
|
21
|
-
|
22
|
-
def app_will_raise_error!
|
23
|
-
@app.expects(:call).then.raises(RuntimeError.new("Printer on fire"))
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_calls_app_and_returns_its_return_value
|
27
|
-
@app.expects(:call).returns([200, { "Content-Type" => "text/html" }, "ok"])
|
28
|
-
assert_equal [200, { "Content-Type" => "text/html" }, "ok"], @failsafe.call({})
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_writes_to_log_file_on_exception
|
32
|
-
app_will_raise_error!
|
33
|
-
@failsafe.call({})
|
34
|
-
assert_match /Printer on fire/, @log_io.string # Logs exception message.
|
35
|
-
assert_match /failsafe_test\.rb/, @log_io.string # Logs backtrace.
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_returns_500_internal_server_error_on_exception
|
39
|
-
app_will_raise_error!
|
40
|
-
response = @failsafe.call({})
|
41
|
-
assert_equal 3, response.size # It is a valid Rack response.
|
42
|
-
assert_equal 500, response[0] # Status is 500.
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_renders_error_page_file_with_erb
|
46
|
-
app_will_raise_error!
|
47
|
-
response = @failsafe.call({})
|
48
|
-
assert_equal 500, response[0]
|
49
|
-
assert_equal "hello my world", response[2].join
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_returns_a_default_message_if_erb_rendering_failed
|
53
|
-
app_will_raise_error!
|
54
|
-
@failsafe.expects(:render_template).raises(RuntimeError.new("Harddisk is crashing"))
|
55
|
-
response = @failsafe.call({})
|
56
|
-
assert_equal 500, response[0]
|
57
|
-
assert_match /500 Internal Server Error/, response[2].join
|
58
|
-
assert_match %r(please read this web application's log file), response[2].join
|
59
|
-
end
|
60
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
class << Object; alias_method :const_available?, :const_defined?; end
|
2
|
-
|
3
|
-
class ContentController < Class.new(ActionController::Base)
|
4
|
-
end
|
5
|
-
class NotAController
|
6
|
-
end
|
7
|
-
module Admin
|
8
|
-
class << self; alias_method :const_available?, :const_defined?; end
|
9
|
-
class UserController < Class.new(ActionController::Base); end
|
10
|
-
class NewsFeedController < Class.new(ActionController::Base); end
|
11
|
-
end
|
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
|
-
|
30
|
-
ActionController::Routing::Routes.draw do |map|
|
31
|
-
map.route_one 'route_one', :controller => 'elsewhere', :action => 'flash_me'
|
32
|
-
map.connect ':controller/:action/:id'
|
33
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
class Customer < Struct.new(:name, :id)
|
2
|
-
def to_param
|
3
|
-
id.to_s
|
4
|
-
end
|
5
|
-
end
|
6
|
-
|
7
|
-
class BadCustomer < Customer
|
8
|
-
end
|
9
|
-
|
10
|
-
class GoodCustomer < Customer
|
11
|
-
end
|
12
|
-
|
13
|
-
module Quiz
|
14
|
-
class Question < Struct.new(:name, :id)
|
15
|
-
def to_param
|
16
|
-
id.to_s
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
require 'abstract_unit'
|
2
|
-
|
3
|
-
class FilterParamController < ActionController::Base
|
4
|
-
end
|
5
|
-
|
6
|
-
class FilterParamTest < Test::Unit::TestCase
|
7
|
-
def setup
|
8
|
-
@controller = FilterParamController.new
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_filter_parameters
|
12
|
-
assert FilterParamController.respond_to?(:filter_parameter_logging)
|
13
|
-
assert !@controller.respond_to?(:filter_parameters)
|
14
|
-
|
15
|
-
FilterParamController.filter_parameter_logging
|
16
|
-
assert @controller.respond_to?(:filter_parameters)
|
17
|
-
|
18
|
-
test_hashes = [[{},{},[]],
|
19
|
-
[{'foo'=>nil},{'foo'=>nil},[]],
|
20
|
-
[{'foo'=>'bar'},{'foo'=>'bar'},[]],
|
21
|
-
[{'foo'=>1},{'foo'=>1},[]],
|
22
|
-
[{'foo'=>'bar'},{'foo'=>'bar'},%w'food'],
|
23
|
-
[{'foo'=>'bar'},{'foo'=>'[FILTERED]'},%w'foo'],
|
24
|
-
[{'foo'=>'bar', 'bar'=>'foo'},{'foo'=>'[FILTERED]', 'bar'=>'foo'},%w'foo baz'],
|
25
|
-
[{'foo'=>'bar', 'baz'=>'foo'},{'foo'=>'[FILTERED]', 'baz'=>'[FILTERED]'},%w'foo baz'],
|
26
|
-
[{'bar'=>{'foo'=>'bar','bar'=>'foo'}},{'bar'=>{'foo'=>'[FILTERED]','bar'=>'foo'}},%w'fo'],
|
27
|
-
[{'foo'=>{'foo'=>'bar','bar'=>'foo'}},{'foo'=>'[FILTERED]'},%w'f banana'],
|
28
|
-
[{'baz'=>[{'foo'=>'baz'}]}, {'baz'=>[{'foo'=>'[FILTERED]'}]}, %w(foo)],
|
29
|
-
[{'baz'=>[{'foo'=>'baz'}, 1, 2, 3]}, {'baz'=>[{'foo'=>'[FILTERED]'}, 1, 2, 3]}, %w(foo)]]
|
30
|
-
|
31
|
-
test_hashes.each do |before_filter, after_filter, filter_words|
|
32
|
-
FilterParamController.filter_parameter_logging(*filter_words)
|
33
|
-
assert_equal after_filter, @controller.__send__(:filter_parameters, before_filter)
|
34
|
-
|
35
|
-
filter_words.push('blah')
|
36
|
-
FilterParamController.filter_parameter_logging(*filter_words) do |key, value|
|
37
|
-
value.reverse! if key =~ /bargain/
|
38
|
-
end
|
39
|
-
|
40
|
-
before_filter['barg'] = {'bargain'=>'gain', 'blah'=>'bar', 'bar'=>{'bargain'=>{'blah'=>'foo'}}}
|
41
|
-
after_filter['barg'] = {'bargain'=>'niag', 'blah'=>'[FILTERED]', 'bar'=>{'bargain'=>{'blah'=>'[FILTERED]'}}}
|
42
|
-
|
43
|
-
assert_equal after_filter, @controller.__send__(:filter_parameters, before_filter)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_filter_parameters_is_protected
|
48
|
-
FilterParamController.filter_parameter_logging(:foo)
|
49
|
-
assert !FilterParamController.action_methods.include?('filter_parameters')
|
50
|
-
assert_raise(NoMethodError) { @controller.filter_parameters([{'password' => '[FILTERED]'}]) }
|
51
|
-
end
|
52
|
-
end
|
@@ -1,885 +0,0 @@
|
|
1
|
-
require 'abstract_unit'
|
2
|
-
|
3
|
-
# FIXME: crashes Ruby 1.9
|
4
|
-
class FilterTest < Test::Unit::TestCase
|
5
|
-
class TestController < ActionController::Base
|
6
|
-
before_filter :ensure_login
|
7
|
-
after_filter :clean_up
|
8
|
-
|
9
|
-
def show
|
10
|
-
render :inline => "ran action"
|
11
|
-
end
|
12
|
-
|
13
|
-
private
|
14
|
-
def ensure_login
|
15
|
-
@ran_filter ||= []
|
16
|
-
@ran_filter << "ensure_login"
|
17
|
-
end
|
18
|
-
|
19
|
-
def clean_up
|
20
|
-
@ran_after_filter ||= []
|
21
|
-
@ran_after_filter << "clean_up"
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
class ChangingTheRequirementsController < TestController
|
26
|
-
before_filter :ensure_login, :except => [:go_wild]
|
27
|
-
|
28
|
-
def go_wild
|
29
|
-
render :text => "gobble"
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
class TestMultipleFiltersController < ActionController::Base
|
34
|
-
before_filter :try_1
|
35
|
-
before_filter :try_2
|
36
|
-
before_filter :try_3
|
37
|
-
|
38
|
-
(1..3).each do |i|
|
39
|
-
define_method "fail_#{i}" do
|
40
|
-
render :text => i.to_s
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
protected
|
45
|
-
(1..3).each do |i|
|
46
|
-
define_method "try_#{i}" do
|
47
|
-
instance_variable_set :@try, i
|
48
|
-
if action_name == "fail_#{i}"
|
49
|
-
head(404)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
class RenderingController < ActionController::Base
|
56
|
-
before_filter :render_something_else
|
57
|
-
|
58
|
-
def show
|
59
|
-
@ran_action = true
|
60
|
-
render :inline => "ran action"
|
61
|
-
end
|
62
|
-
|
63
|
-
private
|
64
|
-
def render_something_else
|
65
|
-
render :inline => "something else"
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
class ConditionalFilterController < ActionController::Base
|
70
|
-
def show
|
71
|
-
render :inline => "ran action"
|
72
|
-
end
|
73
|
-
|
74
|
-
def another_action
|
75
|
-
render :inline => "ran action"
|
76
|
-
end
|
77
|
-
|
78
|
-
def show_without_filter
|
79
|
-
render :inline => "ran action without filter"
|
80
|
-
end
|
81
|
-
|
82
|
-
private
|
83
|
-
def ensure_login
|
84
|
-
@ran_filter ||= []
|
85
|
-
@ran_filter << "ensure_login"
|
86
|
-
end
|
87
|
-
|
88
|
-
def clean_up_tmp
|
89
|
-
@ran_filter ||= []
|
90
|
-
@ran_filter << "clean_up_tmp"
|
91
|
-
end
|
92
|
-
|
93
|
-
def rescue_action(e) raise(e) end
|
94
|
-
end
|
95
|
-
|
96
|
-
class ConditionalCollectionFilterController < ConditionalFilterController
|
97
|
-
before_filter :ensure_login, :except => [ :show_without_filter, :another_action ]
|
98
|
-
end
|
99
|
-
|
100
|
-
class OnlyConditionSymController < ConditionalFilterController
|
101
|
-
before_filter :ensure_login, :only => :show
|
102
|
-
end
|
103
|
-
|
104
|
-
class ExceptConditionSymController < ConditionalFilterController
|
105
|
-
before_filter :ensure_login, :except => :show_without_filter
|
106
|
-
end
|
107
|
-
|
108
|
-
class BeforeAndAfterConditionController < ConditionalFilterController
|
109
|
-
before_filter :ensure_login, :only => :show
|
110
|
-
after_filter :clean_up_tmp, :only => :show
|
111
|
-
end
|
112
|
-
|
113
|
-
class OnlyConditionProcController < ConditionalFilterController
|
114
|
-
before_filter(:only => :show) {|c| c.instance_variable_set(:"@ran_proc_filter", true) }
|
115
|
-
end
|
116
|
-
|
117
|
-
class ExceptConditionProcController < ConditionalFilterController
|
118
|
-
before_filter(:except => :show_without_filter) {|c| c.instance_variable_set(:"@ran_proc_filter", true) }
|
119
|
-
end
|
120
|
-
|
121
|
-
class ConditionalClassFilter
|
122
|
-
def self.filter(controller) controller.instance_variable_set(:"@ran_class_filter", true) end
|
123
|
-
end
|
124
|
-
|
125
|
-
class OnlyConditionClassController < ConditionalFilterController
|
126
|
-
before_filter ConditionalClassFilter, :only => :show
|
127
|
-
end
|
128
|
-
|
129
|
-
class ExceptConditionClassController < ConditionalFilterController
|
130
|
-
before_filter ConditionalClassFilter, :except => :show_without_filter
|
131
|
-
end
|
132
|
-
|
133
|
-
class AnomolousYetValidConditionController < ConditionalFilterController
|
134
|
-
before_filter(ConditionalClassFilter, :ensure_login, Proc.new {|c| c.instance_variable_set(:"@ran_proc_filter1", true)}, :except => :show_without_filter) { |c| c.instance_variable_set(:"@ran_proc_filter2", true)}
|
135
|
-
end
|
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
|
-
|
142
|
-
class EmptyFilterChainController < TestController
|
143
|
-
self.filter_chain.clear
|
144
|
-
def show
|
145
|
-
@action_executed = true
|
146
|
-
render :text => "yawp!"
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
class PrependingController < TestController
|
151
|
-
prepend_before_filter :wonderful_life
|
152
|
-
# skip_before_filter :fire_flash
|
153
|
-
|
154
|
-
private
|
155
|
-
def wonderful_life
|
156
|
-
@ran_filter ||= []
|
157
|
-
@ran_filter << "wonderful_life"
|
158
|
-
end
|
159
|
-
end
|
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
|
-
|
185
|
-
class ConditionalSkippingController < TestController
|
186
|
-
skip_before_filter :ensure_login, :only => [ :login ]
|
187
|
-
skip_after_filter :clean_up, :only => [ :login ]
|
188
|
-
|
189
|
-
before_filter :find_user, :only => [ :change_password ]
|
190
|
-
|
191
|
-
def login
|
192
|
-
render :inline => "ran action"
|
193
|
-
end
|
194
|
-
|
195
|
-
def change_password
|
196
|
-
render :inline => "ran action"
|
197
|
-
end
|
198
|
-
|
199
|
-
protected
|
200
|
-
def find_user
|
201
|
-
@ran_filter ||= []
|
202
|
-
@ran_filter << "find_user"
|
203
|
-
end
|
204
|
-
end
|
205
|
-
|
206
|
-
class ConditionalParentOfConditionalSkippingController < ConditionalFilterController
|
207
|
-
before_filter :conditional_in_parent, :only => [:show, :another_action]
|
208
|
-
after_filter :conditional_in_parent, :only => [:show, :another_action]
|
209
|
-
|
210
|
-
private
|
211
|
-
|
212
|
-
def conditional_in_parent
|
213
|
-
@ran_filter ||= []
|
214
|
-
@ran_filter << 'conditional_in_parent'
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
class ChildOfConditionalParentController < ConditionalParentOfConditionalSkippingController
|
219
|
-
skip_before_filter :conditional_in_parent, :only => :another_action
|
220
|
-
skip_after_filter :conditional_in_parent, :only => :another_action
|
221
|
-
end
|
222
|
-
|
223
|
-
class AnotherChildOfConditionalParentController < ConditionalParentOfConditionalSkippingController
|
224
|
-
skip_before_filter :conditional_in_parent, :only => :show
|
225
|
-
end
|
226
|
-
|
227
|
-
class ProcController < PrependingController
|
228
|
-
before_filter(proc { |c| c.instance_variable_set(:"@ran_proc_filter", true) })
|
229
|
-
end
|
230
|
-
|
231
|
-
class ImplicitProcController < PrependingController
|
232
|
-
before_filter { |c| c.instance_variable_set(:"@ran_proc_filter", true) }
|
233
|
-
end
|
234
|
-
|
235
|
-
class AuditFilter
|
236
|
-
def self.filter(controller)
|
237
|
-
controller.instance_variable_set(:"@was_audited", true)
|
238
|
-
end
|
239
|
-
end
|
240
|
-
|
241
|
-
class AroundFilter
|
242
|
-
def before(controller)
|
243
|
-
@execution_log = "before"
|
244
|
-
controller.class.execution_log << " before aroundfilter " if controller.respond_to? :execution_log
|
245
|
-
controller.instance_variable_set(:"@before_ran", true)
|
246
|
-
end
|
247
|
-
|
248
|
-
def after(controller)
|
249
|
-
controller.instance_variable_set(:"@execution_log", @execution_log + " and after")
|
250
|
-
controller.instance_variable_set(:"@after_ran", true)
|
251
|
-
controller.class.execution_log << " after aroundfilter " if controller.respond_to? :execution_log
|
252
|
-
end
|
253
|
-
end
|
254
|
-
|
255
|
-
class AppendedAroundFilter
|
256
|
-
def before(controller)
|
257
|
-
controller.class.execution_log << " before appended aroundfilter "
|
258
|
-
end
|
259
|
-
|
260
|
-
def after(controller)
|
261
|
-
controller.class.execution_log << " after appended aroundfilter "
|
262
|
-
end
|
263
|
-
end
|
264
|
-
|
265
|
-
class AuditController < ActionController::Base
|
266
|
-
before_filter(AuditFilter)
|
267
|
-
|
268
|
-
def show
|
269
|
-
render :text => "hello"
|
270
|
-
end
|
271
|
-
end
|
272
|
-
|
273
|
-
class AroundFilterController < PrependingController
|
274
|
-
around_filter AroundFilter.new
|
275
|
-
end
|
276
|
-
|
277
|
-
class BeforeAfterClassFilterController < PrependingController
|
278
|
-
begin
|
279
|
-
filter = AroundFilter.new
|
280
|
-
before_filter filter
|
281
|
-
after_filter filter
|
282
|
-
end
|
283
|
-
end
|
284
|
-
|
285
|
-
class MixedFilterController < PrependingController
|
286
|
-
cattr_accessor :execution_log
|
287
|
-
|
288
|
-
def initialize
|
289
|
-
@@execution_log = ""
|
290
|
-
end
|
291
|
-
|
292
|
-
before_filter { |c| c.class.execution_log << " before procfilter " }
|
293
|
-
prepend_around_filter AroundFilter.new
|
294
|
-
|
295
|
-
after_filter { |c| c.class.execution_log << " after procfilter " }
|
296
|
-
append_around_filter AppendedAroundFilter.new
|
297
|
-
end
|
298
|
-
|
299
|
-
class MixedSpecializationController < ActionController::Base
|
300
|
-
class OutOfOrder < StandardError; end
|
301
|
-
|
302
|
-
before_filter :first
|
303
|
-
before_filter :second, :only => :foo
|
304
|
-
|
305
|
-
def foo
|
306
|
-
render :text => 'foo'
|
307
|
-
end
|
308
|
-
|
309
|
-
def bar
|
310
|
-
render :text => 'bar'
|
311
|
-
end
|
312
|
-
|
313
|
-
protected
|
314
|
-
def first
|
315
|
-
@first = true
|
316
|
-
end
|
317
|
-
|
318
|
-
def second
|
319
|
-
raise OutOfOrder unless @first
|
320
|
-
end
|
321
|
-
end
|
322
|
-
|
323
|
-
class DynamicDispatchController < ActionController::Base
|
324
|
-
before_filter :choose
|
325
|
-
|
326
|
-
%w(foo bar baz).each do |action|
|
327
|
-
define_method(action) { render :text => action }
|
328
|
-
end
|
329
|
-
|
330
|
-
private
|
331
|
-
def choose
|
332
|
-
self.action_name = params[:choose]
|
333
|
-
end
|
334
|
-
end
|
335
|
-
|
336
|
-
class PrependingBeforeAndAfterController < ActionController::Base
|
337
|
-
prepend_before_filter :before_all
|
338
|
-
prepend_after_filter :after_all
|
339
|
-
before_filter :between_before_all_and_after_all
|
340
|
-
|
341
|
-
def before_all
|
342
|
-
@ran_filter ||= []
|
343
|
-
@ran_filter << 'before_all'
|
344
|
-
end
|
345
|
-
|
346
|
-
def after_all
|
347
|
-
@ran_filter ||= []
|
348
|
-
@ran_filter << 'after_all'
|
349
|
-
end
|
350
|
-
|
351
|
-
def between_before_all_and_after_all
|
352
|
-
@ran_filter ||= []
|
353
|
-
@ran_filter << 'between_before_all_and_after_all'
|
354
|
-
end
|
355
|
-
def show
|
356
|
-
render :text => 'hello'
|
357
|
-
end
|
358
|
-
end
|
359
|
-
|
360
|
-
class ErrorToRescue < Exception; end
|
361
|
-
|
362
|
-
class RescuingAroundFilterWithBlock
|
363
|
-
def filter(controller)
|
364
|
-
begin
|
365
|
-
yield
|
366
|
-
rescue ErrorToRescue => ex
|
367
|
-
controller.__send__ :render, :text => "I rescued this: #{ex.inspect}"
|
368
|
-
end
|
369
|
-
end
|
370
|
-
end
|
371
|
-
|
372
|
-
class RescuedController < ActionController::Base
|
373
|
-
around_filter RescuingAroundFilterWithBlock.new
|
374
|
-
|
375
|
-
def show
|
376
|
-
raise ErrorToRescue.new("Something made the bad noise.")
|
377
|
-
end
|
378
|
-
|
379
|
-
private
|
380
|
-
def rescue_action(exception)
|
381
|
-
raise exception
|
382
|
-
end
|
383
|
-
end
|
384
|
-
|
385
|
-
class NonYieldingAroundFilterController < ActionController::Base
|
386
|
-
|
387
|
-
before_filter :filter_one
|
388
|
-
around_filter :non_yielding_filter
|
389
|
-
before_filter :filter_two
|
390
|
-
after_filter :filter_three
|
391
|
-
|
392
|
-
def index
|
393
|
-
render :inline => "index"
|
394
|
-
end
|
395
|
-
|
396
|
-
#make sure the controller complains
|
397
|
-
def rescue_action(e); raise e; end
|
398
|
-
|
399
|
-
private
|
400
|
-
|
401
|
-
def filter_one
|
402
|
-
@filters ||= []
|
403
|
-
@filters << "filter_one"
|
404
|
-
end
|
405
|
-
|
406
|
-
def filter_two
|
407
|
-
@filters << "filter_two"
|
408
|
-
end
|
409
|
-
|
410
|
-
def non_yielding_filter
|
411
|
-
@filters << "zomg it didn't yield"
|
412
|
-
@filter_return_value
|
413
|
-
end
|
414
|
-
|
415
|
-
def filter_three
|
416
|
-
@filters << "filter_three"
|
417
|
-
end
|
418
|
-
|
419
|
-
end
|
420
|
-
|
421
|
-
def test_non_yielding_around_filters_not_returning_false_do_not_raise
|
422
|
-
controller = NonYieldingAroundFilterController.new
|
423
|
-
controller.instance_variable_set "@filter_return_value", true
|
424
|
-
assert_nothing_raised do
|
425
|
-
test_process(controller, "index")
|
426
|
-
end
|
427
|
-
end
|
428
|
-
|
429
|
-
def test_non_yielding_around_filters_returning_false_do_not_raise
|
430
|
-
controller = NonYieldingAroundFilterController.new
|
431
|
-
controller.instance_variable_set "@filter_return_value", false
|
432
|
-
assert_nothing_raised do
|
433
|
-
test_process(controller, "index")
|
434
|
-
end
|
435
|
-
end
|
436
|
-
|
437
|
-
def test_after_filters_are_not_run_if_around_filter_returns_false
|
438
|
-
controller = NonYieldingAroundFilterController.new
|
439
|
-
controller.instance_variable_set "@filter_return_value", false
|
440
|
-
test_process(controller, "index")
|
441
|
-
assert_equal ["filter_one", "zomg it didn't yield"], controller.assigns['filters']
|
442
|
-
end
|
443
|
-
|
444
|
-
def test_after_filters_are_not_run_if_around_filter_does_not_yield
|
445
|
-
controller = NonYieldingAroundFilterController.new
|
446
|
-
controller.instance_variable_set "@filter_return_value", true
|
447
|
-
test_process(controller, "index")
|
448
|
-
assert_equal ["filter_one", "zomg it didn't yield"], controller.assigns['filters']
|
449
|
-
end
|
450
|
-
|
451
|
-
def test_empty_filter_chain
|
452
|
-
assert_equal 0, EmptyFilterChainController.filter_chain.size
|
453
|
-
assert test_process(EmptyFilterChainController).template.assigns['action_executed']
|
454
|
-
end
|
455
|
-
|
456
|
-
def test_added_filter_to_inheritance_graph
|
457
|
-
assert_equal [ :ensure_login ], TestController.before_filters
|
458
|
-
end
|
459
|
-
|
460
|
-
def test_base_class_in_isolation
|
461
|
-
assert_equal [ ], ActionController::Base.before_filters
|
462
|
-
end
|
463
|
-
|
464
|
-
def test_prepending_filter
|
465
|
-
assert_equal [ :wonderful_life, :ensure_login ], PrependingController.before_filters
|
466
|
-
end
|
467
|
-
|
468
|
-
def test_running_filters
|
469
|
-
assert_equal %w( wonderful_life ensure_login ), test_process(PrependingController).template.assigns["ran_filter"]
|
470
|
-
end
|
471
|
-
|
472
|
-
def test_running_filters_with_proc
|
473
|
-
assert test_process(ProcController).template.assigns["ran_proc_filter"]
|
474
|
-
end
|
475
|
-
|
476
|
-
def test_running_filters_with_implicit_proc
|
477
|
-
assert test_process(ImplicitProcController).template.assigns["ran_proc_filter"]
|
478
|
-
end
|
479
|
-
|
480
|
-
def test_running_filters_with_class
|
481
|
-
assert test_process(AuditController).template.assigns["was_audited"]
|
482
|
-
end
|
483
|
-
|
484
|
-
def test_running_anomolous_yet_valid_condition_filters
|
485
|
-
response = test_process(AnomolousYetValidConditionController)
|
486
|
-
assert_equal %w( ensure_login ), response.template.assigns["ran_filter"]
|
487
|
-
assert response.template.assigns["ran_class_filter"]
|
488
|
-
assert response.template.assigns["ran_proc_filter1"]
|
489
|
-
assert response.template.assigns["ran_proc_filter2"]
|
490
|
-
|
491
|
-
response = test_process(AnomolousYetValidConditionController, "show_without_filter")
|
492
|
-
assert_equal nil, response.template.assigns["ran_filter"]
|
493
|
-
assert !response.template.assigns["ran_class_filter"]
|
494
|
-
assert !response.template.assigns["ran_proc_filter1"]
|
495
|
-
assert !response.template.assigns["ran_proc_filter2"]
|
496
|
-
end
|
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
|
-
|
503
|
-
def test_running_collection_condition_filters
|
504
|
-
assert_equal %w( ensure_login ), test_process(ConditionalCollectionFilterController).template.assigns["ran_filter"]
|
505
|
-
assert_equal nil, test_process(ConditionalCollectionFilterController, "show_without_filter").template.assigns["ran_filter"]
|
506
|
-
assert_equal nil, test_process(ConditionalCollectionFilterController, "another_action").template.assigns["ran_filter"]
|
507
|
-
end
|
508
|
-
|
509
|
-
def test_running_only_condition_filters
|
510
|
-
assert_equal %w( ensure_login ), test_process(OnlyConditionSymController).template.assigns["ran_filter"]
|
511
|
-
assert_equal nil, test_process(OnlyConditionSymController, "show_without_filter").template.assigns["ran_filter"]
|
512
|
-
|
513
|
-
assert test_process(OnlyConditionProcController).template.assigns["ran_proc_filter"]
|
514
|
-
assert !test_process(OnlyConditionProcController, "show_without_filter").template.assigns["ran_proc_filter"]
|
515
|
-
|
516
|
-
assert test_process(OnlyConditionClassController).template.assigns["ran_class_filter"]
|
517
|
-
assert !test_process(OnlyConditionClassController, "show_without_filter").template.assigns["ran_class_filter"]
|
518
|
-
end
|
519
|
-
|
520
|
-
def test_running_except_condition_filters
|
521
|
-
assert_equal %w( ensure_login ), test_process(ExceptConditionSymController).template.assigns["ran_filter"]
|
522
|
-
assert_equal nil, test_process(ExceptConditionSymController, "show_without_filter").template.assigns["ran_filter"]
|
523
|
-
|
524
|
-
assert test_process(ExceptConditionProcController).template.assigns["ran_proc_filter"]
|
525
|
-
assert !test_process(ExceptConditionProcController, "show_without_filter").template.assigns["ran_proc_filter"]
|
526
|
-
|
527
|
-
assert test_process(ExceptConditionClassController).template.assigns["ran_class_filter"]
|
528
|
-
assert !test_process(ExceptConditionClassController, "show_without_filter").template.assigns["ran_class_filter"]
|
529
|
-
end
|
530
|
-
|
531
|
-
def test_running_before_and_after_condition_filters
|
532
|
-
assert_equal %w( ensure_login clean_up_tmp), test_process(BeforeAndAfterConditionController).template.assigns["ran_filter"]
|
533
|
-
assert_equal nil, test_process(BeforeAndAfterConditionController, "show_without_filter").template.assigns["ran_filter"]
|
534
|
-
end
|
535
|
-
|
536
|
-
def test_around_filter
|
537
|
-
controller = test_process(AroundFilterController)
|
538
|
-
assert controller.template.assigns["before_ran"]
|
539
|
-
assert controller.template.assigns["after_ran"]
|
540
|
-
end
|
541
|
-
|
542
|
-
def test_before_after_class_filter
|
543
|
-
controller = test_process(BeforeAfterClassFilterController)
|
544
|
-
assert controller.template.assigns["before_ran"]
|
545
|
-
assert controller.template.assigns["after_ran"]
|
546
|
-
end
|
547
|
-
|
548
|
-
def test_having_properties_in_around_filter
|
549
|
-
controller = test_process(AroundFilterController)
|
550
|
-
assert_equal "before and after", controller.template.assigns["execution_log"]
|
551
|
-
end
|
552
|
-
|
553
|
-
def test_prepending_and_appending_around_filter
|
554
|
-
controller = test_process(MixedFilterController)
|
555
|
-
assert_equal " before aroundfilter before procfilter before appended aroundfilter " +
|
556
|
-
" after appended aroundfilter after aroundfilter after procfilter ",
|
557
|
-
MixedFilterController.execution_log
|
558
|
-
end
|
559
|
-
|
560
|
-
def test_rendering_breaks_filtering_chain
|
561
|
-
response = test_process(RenderingController)
|
562
|
-
assert_equal "something else", response.body
|
563
|
-
assert !response.template.assigns["ran_action"]
|
564
|
-
end
|
565
|
-
|
566
|
-
def test_filters_with_mixed_specialization_run_in_order
|
567
|
-
assert_nothing_raised do
|
568
|
-
response = test_process(MixedSpecializationController, 'bar')
|
569
|
-
assert_equal 'bar', response.body
|
570
|
-
end
|
571
|
-
|
572
|
-
assert_nothing_raised do
|
573
|
-
response = test_process(MixedSpecializationController, 'foo')
|
574
|
-
assert_equal 'foo', response.body
|
575
|
-
end
|
576
|
-
end
|
577
|
-
|
578
|
-
def test_dynamic_dispatch
|
579
|
-
%w(foo bar baz).each do |action|
|
580
|
-
request = ActionController::TestRequest.new
|
581
|
-
request.query_parameters[:choose] = action
|
582
|
-
response = DynamicDispatchController.process(request, ActionController::TestResponse.new)
|
583
|
-
assert_equal action, response.body
|
584
|
-
end
|
585
|
-
end
|
586
|
-
|
587
|
-
def test_running_prepended_before_and_after_filter
|
588
|
-
assert_equal 3, PrependingBeforeAndAfterController.filter_chain.length
|
589
|
-
response = test_process(PrependingBeforeAndAfterController)
|
590
|
-
assert_equal %w( before_all between_before_all_and_after_all after_all ), response.template.assigns["ran_filter"]
|
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
|
601
|
-
|
602
|
-
def test_conditional_skipping_of_filters
|
603
|
-
assert_nil test_process(ConditionalSkippingController, "login").template.assigns["ran_filter"]
|
604
|
-
assert_equal %w( ensure_login find_user ), test_process(ConditionalSkippingController, "change_password").template.assigns["ran_filter"]
|
605
|
-
|
606
|
-
assert_nil test_process(ConditionalSkippingController, "login").template.controller.instance_variable_get("@ran_after_filter")
|
607
|
-
assert_equal %w( clean_up ), test_process(ConditionalSkippingController, "change_password").template.controller.instance_variable_get("@ran_after_filter")
|
608
|
-
end
|
609
|
-
|
610
|
-
def test_conditional_skipping_of_filters_when_parent_filter_is_also_conditional
|
611
|
-
assert_equal %w( conditional_in_parent conditional_in_parent ), test_process(ChildOfConditionalParentController).template.assigns['ran_filter']
|
612
|
-
assert_nil test_process(ChildOfConditionalParentController, 'another_action').template.assigns['ran_filter']
|
613
|
-
end
|
614
|
-
|
615
|
-
def test_condition_skipping_of_filters_when_siblings_also_have_conditions
|
616
|
-
assert_equal %w( conditional_in_parent conditional_in_parent ), test_process(ChildOfConditionalParentController).template.assigns['ran_filter'], "1"
|
617
|
-
assert_equal nil, test_process(AnotherChildOfConditionalParentController).template.assigns['ran_filter']
|
618
|
-
assert_equal %w( conditional_in_parent conditional_in_parent ), test_process(ChildOfConditionalParentController).template.assigns['ran_filter']
|
619
|
-
end
|
620
|
-
|
621
|
-
def test_changing_the_requirements
|
622
|
-
assert_equal nil, test_process(ChangingTheRequirementsController, "go_wild").template.assigns['ran_filter']
|
623
|
-
end
|
624
|
-
|
625
|
-
def test_a_rescuing_around_filter
|
626
|
-
response = nil
|
627
|
-
assert_nothing_raised do
|
628
|
-
response = test_process(RescuedController)
|
629
|
-
end
|
630
|
-
|
631
|
-
assert response.success?
|
632
|
-
assert_equal("I rescued this: #<FilterTest::ErrorToRescue: Something made the bad noise.>", response.body)
|
633
|
-
end
|
634
|
-
|
635
|
-
private
|
636
|
-
def test_process(controller, action = "show")
|
637
|
-
ActionController::Base.class_eval { include ActionController::ProcessWithTest } unless ActionController::Base < ActionController::ProcessWithTest
|
638
|
-
request = ActionController::TestRequest.new
|
639
|
-
request.action = action
|
640
|
-
controller = controller.new if controller.is_a?(Class)
|
641
|
-
controller.process_with_test(request, ActionController::TestResponse.new)
|
642
|
-
end
|
643
|
-
end
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
class PostsController < ActionController::Base
|
648
|
-
def rescue_action(e); raise e; end
|
649
|
-
|
650
|
-
module AroundExceptions
|
651
|
-
class Error < StandardError ; end
|
652
|
-
class Before < Error ; end
|
653
|
-
class After < Error ; end
|
654
|
-
end
|
655
|
-
include AroundExceptions
|
656
|
-
|
657
|
-
class DefaultFilter
|
658
|
-
include AroundExceptions
|
659
|
-
end
|
660
|
-
|
661
|
-
module_eval %w(raises_before raises_after raises_both no_raise no_filter).map { |action| "def #{action}; default_action end" }.join("\n")
|
662
|
-
|
663
|
-
private
|
664
|
-
def default_action
|
665
|
-
render :inline => "#{action_name} called"
|
666
|
-
end
|
667
|
-
end
|
668
|
-
|
669
|
-
class ControllerWithSymbolAsFilter < PostsController
|
670
|
-
around_filter :raise_before, :only => :raises_before
|
671
|
-
around_filter :raise_after, :only => :raises_after
|
672
|
-
around_filter :without_exception, :only => :no_raise
|
673
|
-
|
674
|
-
private
|
675
|
-
def raise_before
|
676
|
-
raise Before
|
677
|
-
yield
|
678
|
-
end
|
679
|
-
|
680
|
-
def raise_after
|
681
|
-
yield
|
682
|
-
raise After
|
683
|
-
end
|
684
|
-
|
685
|
-
def without_exception
|
686
|
-
# Do stuff...
|
687
|
-
1 + 1
|
688
|
-
|
689
|
-
yield
|
690
|
-
|
691
|
-
# Do stuff...
|
692
|
-
1 + 1
|
693
|
-
end
|
694
|
-
end
|
695
|
-
|
696
|
-
class ControllerWithFilterClass < PostsController
|
697
|
-
class YieldingFilter < DefaultFilter
|
698
|
-
def self.filter(controller)
|
699
|
-
yield
|
700
|
-
raise After
|
701
|
-
end
|
702
|
-
end
|
703
|
-
|
704
|
-
around_filter YieldingFilter, :only => :raises_after
|
705
|
-
end
|
706
|
-
|
707
|
-
class ControllerWithFilterInstance < PostsController
|
708
|
-
class YieldingFilter < DefaultFilter
|
709
|
-
def filter(controller)
|
710
|
-
yield
|
711
|
-
raise After
|
712
|
-
end
|
713
|
-
end
|
714
|
-
|
715
|
-
around_filter YieldingFilter.new, :only => :raises_after
|
716
|
-
end
|
717
|
-
|
718
|
-
class ControllerWithFilterMethod < PostsController
|
719
|
-
class YieldingFilter < DefaultFilter
|
720
|
-
def filter(controller)
|
721
|
-
yield
|
722
|
-
raise After
|
723
|
-
end
|
724
|
-
end
|
725
|
-
|
726
|
-
around_filter YieldingFilter.new.method(:filter), :only => :raises_after
|
727
|
-
end
|
728
|
-
|
729
|
-
class ControllerWithProcFilter < PostsController
|
730
|
-
around_filter(:only => :no_raise) do |c,b|
|
731
|
-
c.instance_variable_set(:"@before", true)
|
732
|
-
b.call
|
733
|
-
c.instance_variable_set(:"@after", true)
|
734
|
-
end
|
735
|
-
end
|
736
|
-
|
737
|
-
class ControllerWithNestedFilters < ControllerWithSymbolAsFilter
|
738
|
-
around_filter :raise_before, :raise_after, :without_exception, :only => :raises_both
|
739
|
-
end
|
740
|
-
|
741
|
-
class ControllerWithAllTypesOfFilters < PostsController
|
742
|
-
before_filter :before
|
743
|
-
around_filter :around
|
744
|
-
after_filter :after
|
745
|
-
around_filter :around_again
|
746
|
-
|
747
|
-
private
|
748
|
-
def before
|
749
|
-
@ran_filter ||= []
|
750
|
-
@ran_filter << 'before'
|
751
|
-
end
|
752
|
-
|
753
|
-
def around
|
754
|
-
@ran_filter << 'around (before yield)'
|
755
|
-
yield
|
756
|
-
@ran_filter << 'around (after yield)'
|
757
|
-
end
|
758
|
-
|
759
|
-
def after
|
760
|
-
@ran_filter << 'after'
|
761
|
-
end
|
762
|
-
|
763
|
-
def around_again
|
764
|
-
@ran_filter << 'around_again (before yield)'
|
765
|
-
yield
|
766
|
-
@ran_filter << 'around_again (after yield)'
|
767
|
-
end
|
768
|
-
end
|
769
|
-
|
770
|
-
class ControllerWithTwoLessFilters < ControllerWithAllTypesOfFilters
|
771
|
-
skip_filter :around_again
|
772
|
-
skip_filter :after
|
773
|
-
end
|
774
|
-
|
775
|
-
class YieldingAroundFiltersTest < Test::Unit::TestCase
|
776
|
-
include PostsController::AroundExceptions
|
777
|
-
|
778
|
-
def test_filters_registering
|
779
|
-
assert_equal 1, ControllerWithFilterMethod.filter_chain.size
|
780
|
-
assert_equal 1, ControllerWithFilterClass.filter_chain.size
|
781
|
-
assert_equal 1, ControllerWithFilterInstance.filter_chain.size
|
782
|
-
assert_equal 3, ControllerWithSymbolAsFilter.filter_chain.size
|
783
|
-
assert_equal 6, ControllerWithNestedFilters.filter_chain.size
|
784
|
-
assert_equal 4, ControllerWithAllTypesOfFilters.filter_chain.size
|
785
|
-
end
|
786
|
-
|
787
|
-
def test_base
|
788
|
-
controller = PostsController
|
789
|
-
assert_nothing_raised { test_process(controller,'no_raise') }
|
790
|
-
assert_nothing_raised { test_process(controller,'raises_before') }
|
791
|
-
assert_nothing_raised { test_process(controller,'raises_after') }
|
792
|
-
assert_nothing_raised { test_process(controller,'no_filter') }
|
793
|
-
end
|
794
|
-
|
795
|
-
def test_with_symbol
|
796
|
-
controller = ControllerWithSymbolAsFilter
|
797
|
-
assert_nothing_raised { test_process(controller,'no_raise') }
|
798
|
-
assert_raise(Before) { test_process(controller,'raises_before') }
|
799
|
-
assert_raise(After) { test_process(controller,'raises_after') }
|
800
|
-
assert_nothing_raised { test_process(controller,'no_raise') }
|
801
|
-
end
|
802
|
-
|
803
|
-
def test_with_class
|
804
|
-
controller = ControllerWithFilterClass
|
805
|
-
assert_nothing_raised { test_process(controller,'no_raise') }
|
806
|
-
assert_raise(After) { test_process(controller,'raises_after') }
|
807
|
-
end
|
808
|
-
|
809
|
-
def test_with_instance
|
810
|
-
controller = ControllerWithFilterInstance
|
811
|
-
assert_nothing_raised { test_process(controller,'no_raise') }
|
812
|
-
assert_raise(After) { test_process(controller,'raises_after') }
|
813
|
-
end
|
814
|
-
|
815
|
-
def test_with_method
|
816
|
-
controller = ControllerWithFilterMethod
|
817
|
-
assert_nothing_raised { test_process(controller,'no_raise') }
|
818
|
-
assert_raise(After) { test_process(controller,'raises_after') }
|
819
|
-
end
|
820
|
-
|
821
|
-
def test_with_proc
|
822
|
-
controller = test_process(ControllerWithProcFilter,'no_raise')
|
823
|
-
assert controller.template.assigns['before']
|
824
|
-
assert controller.template.assigns['after']
|
825
|
-
end
|
826
|
-
|
827
|
-
def test_nested_filters
|
828
|
-
controller = ControllerWithNestedFilters
|
829
|
-
assert_nothing_raised do
|
830
|
-
begin
|
831
|
-
test_process(controller,'raises_both')
|
832
|
-
rescue Before, After
|
833
|
-
end
|
834
|
-
end
|
835
|
-
assert_raise Before do
|
836
|
-
begin
|
837
|
-
test_process(controller,'raises_both')
|
838
|
-
rescue After
|
839
|
-
end
|
840
|
-
end
|
841
|
-
end
|
842
|
-
|
843
|
-
def test_filter_order_with_all_filter_types
|
844
|
-
controller = test_process(ControllerWithAllTypesOfFilters,'no_raise')
|
845
|
-
assert_equal 'before around (before yield) around_again (before yield) around_again (after yield) around (after yield) after',controller.template.assigns['ran_filter'].join(' ')
|
846
|
-
end
|
847
|
-
|
848
|
-
def test_filter_order_with_skip_filter_method
|
849
|
-
controller = test_process(ControllerWithTwoLessFilters,'no_raise')
|
850
|
-
assert_equal 'before around (before yield) around (after yield)',controller.template.assigns['ran_filter'].join(' ')
|
851
|
-
end
|
852
|
-
|
853
|
-
def test_first_filter_in_multiple_before_filter_chain_halts
|
854
|
-
controller = ::FilterTest::TestMultipleFiltersController.new
|
855
|
-
response = test_process(controller, 'fail_1')
|
856
|
-
assert_equal ' ', response.body
|
857
|
-
assert_equal 1, controller.instance_variable_get(:@try)
|
858
|
-
assert controller.instance_variable_get(:@before_filter_chain_aborted)
|
859
|
-
end
|
860
|
-
|
861
|
-
def test_second_filter_in_multiple_before_filter_chain_halts
|
862
|
-
controller = ::FilterTest::TestMultipleFiltersController.new
|
863
|
-
response = test_process(controller, 'fail_2')
|
864
|
-
assert_equal ' ', response.body
|
865
|
-
assert_equal 2, controller.instance_variable_get(:@try)
|
866
|
-
assert controller.instance_variable_get(:@before_filter_chain_aborted)
|
867
|
-
end
|
868
|
-
|
869
|
-
def test_last_filter_in_multiple_before_filter_chain_halts
|
870
|
-
controller = ::FilterTest::TestMultipleFiltersController.new
|
871
|
-
response = test_process(controller, 'fail_3')
|
872
|
-
assert_equal ' ', response.body
|
873
|
-
assert_equal 3, controller.instance_variable_get(:@try)
|
874
|
-
assert controller.instance_variable_get(:@before_filter_chain_aborted)
|
875
|
-
end
|
876
|
-
|
877
|
-
protected
|
878
|
-
def test_process(controller, action = "show")
|
879
|
-
ActionController::Base.class_eval { include ActionController::ProcessWithTest } unless ActionController::Base < ActionController::ProcessWithTest
|
880
|
-
request = ActionController::TestRequest.new
|
881
|
-
request.action = action
|
882
|
-
controller = controller.new if controller.is_a?(Class)
|
883
|
-
controller.process_with_test(request, ActionController::TestResponse.new)
|
884
|
-
end
|
885
|
-
end
|