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,217 +0,0 @@
|
|
1
|
-
require 'abstract_unit'
|
2
|
-
require 'pp' # require 'pp' early to prevent hidden_methods from not picking up the pretty-print methods until too late
|
3
|
-
|
4
|
-
# Provide some controller to run the tests on.
|
5
|
-
module Submodule
|
6
|
-
class ContainedEmptyController < ActionController::Base
|
7
|
-
end
|
8
|
-
class ContainedNonEmptyController < ActionController::Base
|
9
|
-
def public_action
|
10
|
-
render :nothing => true
|
11
|
-
end
|
12
|
-
|
13
|
-
hide_action :hidden_action
|
14
|
-
def hidden_action
|
15
|
-
raise "Noooo!"
|
16
|
-
end
|
17
|
-
|
18
|
-
def another_hidden_action
|
19
|
-
end
|
20
|
-
hide_action :another_hidden_action
|
21
|
-
end
|
22
|
-
class SubclassedController < ContainedNonEmptyController
|
23
|
-
hide_action :public_action # Hiding it here should not affect the superclass.
|
24
|
-
end
|
25
|
-
end
|
26
|
-
class EmptyController < ActionController::Base
|
27
|
-
end
|
28
|
-
class NonEmptyController < ActionController::Base
|
29
|
-
def public_action
|
30
|
-
end
|
31
|
-
|
32
|
-
hide_action :hidden_action
|
33
|
-
def hidden_action
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
class MethodMissingController < ActionController::Base
|
38
|
-
|
39
|
-
hide_action :shouldnt_be_called
|
40
|
-
def shouldnt_be_called
|
41
|
-
raise "NO WAY!"
|
42
|
-
end
|
43
|
-
|
44
|
-
protected
|
45
|
-
|
46
|
-
def method_missing(selector)
|
47
|
-
render :text => selector.to_s
|
48
|
-
end
|
49
|
-
|
50
|
-
end
|
51
|
-
|
52
|
-
class DefaultUrlOptionsController < ActionController::Base
|
53
|
-
def default_url_options_action
|
54
|
-
end
|
55
|
-
|
56
|
-
def default_url_options(options = nil)
|
57
|
-
{ :host => 'www.override.com', :action => 'new', :bacon => 'chunky' }
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
class ControllerClassTests < Test::Unit::TestCase
|
62
|
-
def test_controller_path
|
63
|
-
assert_equal 'empty', EmptyController.controller_path
|
64
|
-
assert_equal EmptyController.controller_path, EmptyController.new.controller_path
|
65
|
-
assert_equal 'submodule/contained_empty', Submodule::ContainedEmptyController.controller_path
|
66
|
-
assert_equal Submodule::ContainedEmptyController.controller_path, Submodule::ContainedEmptyController.new.controller_path
|
67
|
-
end
|
68
|
-
def test_controller_name
|
69
|
-
assert_equal 'empty', EmptyController.controller_name
|
70
|
-
assert_equal 'contained_empty', Submodule::ContainedEmptyController.controller_name
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
class ControllerInstanceTests < Test::Unit::TestCase
|
75
|
-
def setup
|
76
|
-
@empty = EmptyController.new
|
77
|
-
@contained = Submodule::ContainedEmptyController.new
|
78
|
-
@empty_controllers = [@empty, @contained, Submodule::SubclassedController.new]
|
79
|
-
|
80
|
-
@non_empty_controllers = [NonEmptyController.new,
|
81
|
-
Submodule::ContainedNonEmptyController.new]
|
82
|
-
end
|
83
|
-
|
84
|
-
def test_action_methods
|
85
|
-
@empty_controllers.each do |c|
|
86
|
-
hide_mocha_methods_from_controller(c)
|
87
|
-
assert_equal Set.new, c.__send__(:action_methods), "#{c.controller_path} should be empty!"
|
88
|
-
end
|
89
|
-
@non_empty_controllers.each do |c|
|
90
|
-
hide_mocha_methods_from_controller(c)
|
91
|
-
assert_equal Set.new(%w(public_action)), c.__send__(:action_methods), "#{c.controller_path} should not be empty!"
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
protected
|
96
|
-
# Mocha adds some public instance methods to Object that would be
|
97
|
-
# considered actions, so explicitly hide_action them.
|
98
|
-
def hide_mocha_methods_from_controller(controller)
|
99
|
-
mocha_methods = [
|
100
|
-
:expects, :mocha, :mocha_inspect, :reset_mocha, :stubba_object,
|
101
|
-
:stubba_method, :stubs, :verify, :__metaclass__, :__is_a__, :to_matcher,
|
102
|
-
]
|
103
|
-
controller.class.__send__(:hide_action, *mocha_methods)
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
|
108
|
-
class PerformActionTest < ActionController::TestCase
|
109
|
-
class MockLogger
|
110
|
-
attr_reader :logged
|
111
|
-
|
112
|
-
def initialize
|
113
|
-
@logged = []
|
114
|
-
end
|
115
|
-
|
116
|
-
def method_missing(method, *args)
|
117
|
-
@logged << args.first
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
def use_controller(controller_class)
|
122
|
-
@controller = controller_class.new
|
123
|
-
|
124
|
-
# enable a logger so that (e.g.) the benchmarking stuff runs, so we can get
|
125
|
-
# a more accurate simulation of what happens in "real life".
|
126
|
-
@controller.logger = Logger.new(nil)
|
127
|
-
|
128
|
-
@request = ActionController::TestRequest.new
|
129
|
-
@response = ActionController::TestResponse.new
|
130
|
-
|
131
|
-
@request.host = "www.nextangle.com"
|
132
|
-
|
133
|
-
rescue_action_in_public!
|
134
|
-
end
|
135
|
-
|
136
|
-
def test_get_on_priv_should_show_selector
|
137
|
-
use_controller MethodMissingController
|
138
|
-
get :shouldnt_be_called
|
139
|
-
assert_response :success
|
140
|
-
assert_equal 'shouldnt_be_called', @response.body
|
141
|
-
end
|
142
|
-
|
143
|
-
def test_method_missing_is_not_an_action_name
|
144
|
-
use_controller MethodMissingController
|
145
|
-
assert ! @controller.__send__(:action_methods).include?('method_missing')
|
146
|
-
|
147
|
-
get :method_missing
|
148
|
-
assert_response :success
|
149
|
-
assert_equal 'method_missing', @response.body
|
150
|
-
end
|
151
|
-
|
152
|
-
def test_get_on_hidden_should_fail
|
153
|
-
use_controller NonEmptyController
|
154
|
-
get :hidden_action
|
155
|
-
assert_response 404
|
156
|
-
|
157
|
-
get :another_hidden_action
|
158
|
-
assert_response 404
|
159
|
-
end
|
160
|
-
|
161
|
-
def test_namespaced_action_should_log_module_name
|
162
|
-
use_controller Submodule::ContainedNonEmptyController
|
163
|
-
@controller.logger = MockLogger.new
|
164
|
-
get :public_action
|
165
|
-
assert_match /Processing\sSubmodule::ContainedNonEmptyController#public_action/, @controller.logger.logged[1]
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
class DefaultUrlOptionsTest < ActionController::TestCase
|
170
|
-
tests DefaultUrlOptionsController
|
171
|
-
|
172
|
-
def setup
|
173
|
-
@request.host = 'www.example.com'
|
174
|
-
rescue_action_in_public!
|
175
|
-
end
|
176
|
-
|
177
|
-
def test_default_url_options_are_used_if_set
|
178
|
-
ActionController::Routing::Routes.draw do |map|
|
179
|
-
map.default_url_options 'default_url_options', :controller => 'default_url_options'
|
180
|
-
map.connect ':controller/:action/:id'
|
181
|
-
end
|
182
|
-
|
183
|
-
get :default_url_options_action # Make a dummy request so that the controller is initialized properly.
|
184
|
-
|
185
|
-
assert_equal 'http://www.override.com/default_url_options/new?bacon=chunky', @controller.url_for(:controller => 'default_url_options')
|
186
|
-
assert_equal 'http://www.override.com/default_url_options?bacon=chunky', @controller.send(:default_url_options_url)
|
187
|
-
ensure
|
188
|
-
ActionController::Routing::Routes.load!
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
class EmptyUrlOptionsTest < ActionController::TestCase
|
193
|
-
tests NonEmptyController
|
194
|
-
|
195
|
-
def setup
|
196
|
-
@request.host = 'www.example.com'
|
197
|
-
rescue_action_in_public!
|
198
|
-
end
|
199
|
-
|
200
|
-
def test_ensure_url_for_works_as_expected_when_called_with_no_options_if_default_url_options_is_not_set
|
201
|
-
get :public_action
|
202
|
-
assert_equal "http://www.example.com/non_empty/public_action", @controller.url_for
|
203
|
-
end
|
204
|
-
end
|
205
|
-
|
206
|
-
class EnsureNamedRoutesWorksTicket22BugTest < Test::Unit::TestCase
|
207
|
-
def test_named_routes_still_work
|
208
|
-
ActionController::Routing::Routes.draw do |map|
|
209
|
-
map.resources :things
|
210
|
-
end
|
211
|
-
EmptyController.send :include, ActionController::UrlWriter
|
212
|
-
|
213
|
-
assert_equal '/things', EmptyController.new.send(:things_path)
|
214
|
-
ensure
|
215
|
-
ActionController::Routing::Routes.load!
|
216
|
-
end
|
217
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
require 'abstract_unit'
|
2
|
-
|
3
|
-
# Provide some static controllers.
|
4
|
-
class BenchmarkedController < ActionController::Base
|
5
|
-
def public_action
|
6
|
-
render :nothing => true
|
7
|
-
end
|
8
|
-
|
9
|
-
def rescue_action(e)
|
10
|
-
raise e
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
class BenchmarkTest < ActionController::TestCase
|
15
|
-
tests BenchmarkedController
|
16
|
-
|
17
|
-
class MockLogger
|
18
|
-
def method_missing(*args)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def setup
|
23
|
-
# benchmark doesn't do anything unless a logger is set
|
24
|
-
@controller.logger = MockLogger.new
|
25
|
-
@request.host = "test.actioncontroller.i"
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_with_http_1_0_request
|
29
|
-
@request.host = nil
|
30
|
-
assert_nothing_raised { get :public_action }
|
31
|
-
end
|
32
|
-
end
|
@@ -1,743 +0,0 @@
|
|
1
|
-
require 'fileutils'
|
2
|
-
require 'abstract_unit'
|
3
|
-
require 'active_record_unit'
|
4
|
-
|
5
|
-
CACHE_DIR = 'test_cache'
|
6
|
-
# Don't change '/../temp/' cavalierly or you might hose something you don't want hosed
|
7
|
-
FILE_STORE_PATH = File.join(File.dirname(__FILE__), '/../temp/', CACHE_DIR)
|
8
|
-
ActionController::Base.page_cache_directory = FILE_STORE_PATH
|
9
|
-
ActionController::Base.cache_store = :file_store, FILE_STORE_PATH
|
10
|
-
|
11
|
-
# Force sweeper classes to load
|
12
|
-
ActionController::Caching::Sweeper
|
13
|
-
ActionController::Caching::Sweeping
|
14
|
-
|
15
|
-
class PageCachingTestController < ActionController::Base
|
16
|
-
caches_page :ok, :no_content, :if => Proc.new { |c| !c.request.format.json? }
|
17
|
-
caches_page :found, :not_found
|
18
|
-
|
19
|
-
def ok
|
20
|
-
head :ok
|
21
|
-
end
|
22
|
-
|
23
|
-
def no_content
|
24
|
-
head :no_content
|
25
|
-
end
|
26
|
-
|
27
|
-
def found
|
28
|
-
redirect_to :action => 'ok'
|
29
|
-
end
|
30
|
-
|
31
|
-
def not_found
|
32
|
-
head :not_found
|
33
|
-
end
|
34
|
-
|
35
|
-
def custom_path
|
36
|
-
render :text => "Super soaker"
|
37
|
-
cache_page("Super soaker", "/index.html")
|
38
|
-
end
|
39
|
-
|
40
|
-
def expire_custom_path
|
41
|
-
expire_page("/index.html")
|
42
|
-
head :ok
|
43
|
-
end
|
44
|
-
|
45
|
-
def trailing_slash
|
46
|
-
render :text => "Sneak attack"
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
class PageCachingTest < ActionController::TestCase
|
51
|
-
def setup
|
52
|
-
ActionController::Base.perform_caching = true
|
53
|
-
|
54
|
-
ActionController::Routing::Routes.draw do |map|
|
55
|
-
map.main '', :controller => 'posts', :format => nil
|
56
|
-
map.formatted_posts 'posts.:format', :controller => 'posts'
|
57
|
-
map.resources :posts
|
58
|
-
map.connect ':controller/:action/:id'
|
59
|
-
end
|
60
|
-
|
61
|
-
@request = ActionController::TestRequest.new
|
62
|
-
@request.host = 'hostname.com'
|
63
|
-
|
64
|
-
@response = ActionController::TestResponse.new
|
65
|
-
@controller = PageCachingTestController.new
|
66
|
-
|
67
|
-
@params = {:controller => 'posts', :action => 'index', :only_path => true, :skip_relative_url_root => true}
|
68
|
-
@rewriter = ActionController::UrlRewriter.new(@request, @params)
|
69
|
-
|
70
|
-
FileUtils.rm_rf(File.dirname(FILE_STORE_PATH))
|
71
|
-
FileUtils.mkdir_p(FILE_STORE_PATH)
|
72
|
-
end
|
73
|
-
|
74
|
-
def teardown
|
75
|
-
FileUtils.rm_rf(File.dirname(FILE_STORE_PATH))
|
76
|
-
ActionController::Routing::Routes.clear!
|
77
|
-
ActionController::Base.perform_caching = false
|
78
|
-
end
|
79
|
-
|
80
|
-
def test_page_caching_resources_saves_to_correct_path_with_extension_even_if_default_route
|
81
|
-
@params[:format] = 'rss'
|
82
|
-
assert_equal '/posts.rss', @rewriter.rewrite(@params)
|
83
|
-
@params[:format] = nil
|
84
|
-
assert_equal '/', @rewriter.rewrite(@params)
|
85
|
-
end
|
86
|
-
|
87
|
-
def test_should_cache_get_with_ok_status
|
88
|
-
get :ok
|
89
|
-
assert_response :ok
|
90
|
-
assert_page_cached :ok, "get with ok status should have been cached"
|
91
|
-
end
|
92
|
-
|
93
|
-
def test_should_cache_with_custom_path
|
94
|
-
get :custom_path
|
95
|
-
assert File.exist?("#{FILE_STORE_PATH}/index.html")
|
96
|
-
end
|
97
|
-
|
98
|
-
def test_should_expire_cache_with_custom_path
|
99
|
-
get :custom_path
|
100
|
-
assert File.exist?("#{FILE_STORE_PATH}/index.html")
|
101
|
-
|
102
|
-
get :expire_custom_path
|
103
|
-
assert !File.exist?("#{FILE_STORE_PATH}/index.html")
|
104
|
-
end
|
105
|
-
|
106
|
-
def test_should_cache_without_trailing_slash_on_url
|
107
|
-
@controller.class.cache_page 'cached content', '/page_caching_test/trailing_slash'
|
108
|
-
assert File.exist?("#{FILE_STORE_PATH}/page_caching_test/trailing_slash.html")
|
109
|
-
end
|
110
|
-
|
111
|
-
def test_should_cache_with_trailing_slash_on_url
|
112
|
-
@controller.class.cache_page 'cached content', '/page_caching_test/trailing_slash/'
|
113
|
-
assert File.exist?("#{FILE_STORE_PATH}/page_caching_test/trailing_slash.html")
|
114
|
-
end
|
115
|
-
|
116
|
-
def test_should_cache_ok_at_custom_path
|
117
|
-
@request.stubs(:path).returns("/index.html")
|
118
|
-
get :ok
|
119
|
-
assert_response :ok
|
120
|
-
assert File.exist?("#{FILE_STORE_PATH}/index.html")
|
121
|
-
end
|
122
|
-
|
123
|
-
[:ok, :no_content, :found, :not_found].each do |status|
|
124
|
-
[:get, :post, :put, :delete].each do |method|
|
125
|
-
unless method == :get and status == :ok
|
126
|
-
define_method "test_shouldnt_cache_#{method}_with_#{status}_status" do
|
127
|
-
send(method, status)
|
128
|
-
assert_response status
|
129
|
-
assert_page_not_cached status, "#{method} with #{status} status shouldn't have been cached"
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
def test_page_caching_conditional_options
|
136
|
-
get :ok, :format=>'json'
|
137
|
-
assert_page_not_cached :ok
|
138
|
-
end
|
139
|
-
|
140
|
-
private
|
141
|
-
def assert_page_cached(action, message = "#{action} should have been cached")
|
142
|
-
assert page_cached?(action), message
|
143
|
-
end
|
144
|
-
|
145
|
-
def assert_page_not_cached(action, message = "#{action} shouldn't have been cached")
|
146
|
-
assert !page_cached?(action), message
|
147
|
-
end
|
148
|
-
|
149
|
-
def page_cached?(action)
|
150
|
-
File.exist? "#{FILE_STORE_PATH}/page_caching_test/#{action}.html"
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
class ActionCachingTestController < ActionController::Base
|
155
|
-
caches_action :index, :redirected, :forbidden, :if => Proc.new { |c| !c.request.format.json? }, :expires_in => 1.hour
|
156
|
-
caches_action :show, :cache_path => 'http://test.host/custom/show'
|
157
|
-
caches_action :edit, :cache_path => Proc.new { |c| c.params[:id] ? "http://test.host/#{c.params[:id]};edit" : "http://test.host/edit" }
|
158
|
-
caches_action :with_layout
|
159
|
-
caches_action :layout_false, :layout => false
|
160
|
-
caches_action :record_not_found, :four_oh_four, :simple_runtime_error
|
161
|
-
|
162
|
-
layout 'talk_from_action.erb'
|
163
|
-
|
164
|
-
def index
|
165
|
-
@cache_this = MockTime.now.to_f.to_s
|
166
|
-
render :text => @cache_this
|
167
|
-
end
|
168
|
-
|
169
|
-
def redirected
|
170
|
-
redirect_to :action => 'index'
|
171
|
-
end
|
172
|
-
|
173
|
-
def forbidden
|
174
|
-
render :text => "Forbidden"
|
175
|
-
response.status = "403 Forbidden"
|
176
|
-
end
|
177
|
-
|
178
|
-
def with_layout
|
179
|
-
@cache_this = MockTime.now.to_f.to_s
|
180
|
-
render :text => @cache_this, :layout => true
|
181
|
-
end
|
182
|
-
|
183
|
-
def record_not_found
|
184
|
-
raise ActiveRecord::RecordNotFound, "oops!"
|
185
|
-
end
|
186
|
-
|
187
|
-
def four_oh_four
|
188
|
-
render :text => "404'd!", :status => 404
|
189
|
-
end
|
190
|
-
|
191
|
-
def simple_runtime_error
|
192
|
-
raise "oops!"
|
193
|
-
end
|
194
|
-
|
195
|
-
alias_method :show, :index
|
196
|
-
alias_method :edit, :index
|
197
|
-
alias_method :destroy, :index
|
198
|
-
alias_method :layout_false, :with_layout
|
199
|
-
|
200
|
-
def expire
|
201
|
-
expire_action :controller => 'action_caching_test', :action => 'index'
|
202
|
-
render :nothing => true
|
203
|
-
end
|
204
|
-
|
205
|
-
def expire_xml
|
206
|
-
expire_action :controller => 'action_caching_test', :action => 'index', :format => 'xml'
|
207
|
-
render :nothing => true
|
208
|
-
end
|
209
|
-
end
|
210
|
-
|
211
|
-
class MockTime < Time
|
212
|
-
# Let Time spicy to assure that Time.now != Time.now
|
213
|
-
def to_f
|
214
|
-
super+rand
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
class ActionCachingMockController
|
219
|
-
attr_accessor :mock_url_for
|
220
|
-
attr_accessor :mock_path
|
221
|
-
|
222
|
-
def initialize
|
223
|
-
yield self if block_given?
|
224
|
-
end
|
225
|
-
|
226
|
-
def url_for(*args)
|
227
|
-
@mock_url_for
|
228
|
-
end
|
229
|
-
|
230
|
-
def request
|
231
|
-
mocked_path = @mock_path
|
232
|
-
Object.new.instance_eval(<<-EVAL)
|
233
|
-
def path; '#{@mock_path}' end
|
234
|
-
def format; 'all' end
|
235
|
-
def cache_format; nil end
|
236
|
-
self
|
237
|
-
EVAL
|
238
|
-
end
|
239
|
-
end
|
240
|
-
|
241
|
-
class ActionCacheTest < ActionController::TestCase
|
242
|
-
def setup
|
243
|
-
reset!
|
244
|
-
FileUtils.mkdir_p(FILE_STORE_PATH)
|
245
|
-
@path_class = ActionController::Caching::Actions::ActionCachePath
|
246
|
-
@mock_controller = ActionCachingMockController.new
|
247
|
-
end
|
248
|
-
|
249
|
-
def teardown
|
250
|
-
FileUtils.rm_rf(File.dirname(FILE_STORE_PATH))
|
251
|
-
end
|
252
|
-
|
253
|
-
def test_simple_action_cache
|
254
|
-
get :index
|
255
|
-
cached_time = content_to_cache
|
256
|
-
assert_equal cached_time, @response.body
|
257
|
-
assert fragment_exist?('hostname.com/action_caching_test')
|
258
|
-
reset!
|
259
|
-
|
260
|
-
get :index
|
261
|
-
assert_equal cached_time, @response.body
|
262
|
-
end
|
263
|
-
|
264
|
-
def test_simple_action_not_cached
|
265
|
-
get :destroy
|
266
|
-
cached_time = content_to_cache
|
267
|
-
assert_equal cached_time, @response.body
|
268
|
-
assert !fragment_exist?('hostname.com/action_caching_test/destroy')
|
269
|
-
reset!
|
270
|
-
|
271
|
-
get :destroy
|
272
|
-
assert_not_equal cached_time, @response.body
|
273
|
-
end
|
274
|
-
|
275
|
-
def test_action_cache_with_layout
|
276
|
-
get :with_layout
|
277
|
-
cached_time = content_to_cache
|
278
|
-
assert_not_equal cached_time, @response.body
|
279
|
-
assert fragment_exist?('hostname.com/action_caching_test/with_layout')
|
280
|
-
reset!
|
281
|
-
|
282
|
-
get :with_layout
|
283
|
-
assert_not_equal cached_time, @response.body
|
284
|
-
|
285
|
-
assert_equal @response.body, read_fragment('hostname.com/action_caching_test/with_layout')
|
286
|
-
end
|
287
|
-
|
288
|
-
def test_action_cache_with_layout_and_layout_cache_false
|
289
|
-
get :layout_false
|
290
|
-
cached_time = content_to_cache
|
291
|
-
assert_not_equal cached_time, @response.body
|
292
|
-
assert fragment_exist?('hostname.com/action_caching_test/layout_false')
|
293
|
-
reset!
|
294
|
-
|
295
|
-
get :layout_false
|
296
|
-
assert_not_equal cached_time, @response.body
|
297
|
-
|
298
|
-
assert_equal cached_time, read_fragment('hostname.com/action_caching_test/layout_false')
|
299
|
-
end
|
300
|
-
|
301
|
-
def test_action_cache_conditional_options
|
302
|
-
old_use_accept_header = ActionController::Base.use_accept_header
|
303
|
-
ActionController::Base.use_accept_header = true
|
304
|
-
@request.env['HTTP_ACCEPT'] = 'application/json'
|
305
|
-
get :index
|
306
|
-
assert !fragment_exist?('hostname.com/action_caching_test')
|
307
|
-
ActionController::Base.use_accept_header = old_use_accept_header
|
308
|
-
end
|
309
|
-
|
310
|
-
def test_action_cache_with_store_options
|
311
|
-
MockTime.expects(:now).returns(12345).once
|
312
|
-
@controller.expects(:read_fragment).with('hostname.com/action_caching_test', :expires_in => 1.hour).once
|
313
|
-
@controller.expects(:write_fragment).with('hostname.com/action_caching_test', '12345.0', :expires_in => 1.hour).once
|
314
|
-
get :index
|
315
|
-
end
|
316
|
-
|
317
|
-
def test_action_cache_with_custom_cache_path
|
318
|
-
get :show
|
319
|
-
cached_time = content_to_cache
|
320
|
-
assert_equal cached_time, @response.body
|
321
|
-
assert fragment_exist?('test.host/custom/show')
|
322
|
-
reset!
|
323
|
-
|
324
|
-
get :show
|
325
|
-
assert_equal cached_time, @response.body
|
326
|
-
end
|
327
|
-
|
328
|
-
def test_action_cache_with_custom_cache_path_in_block
|
329
|
-
get :edit
|
330
|
-
assert fragment_exist?('test.host/edit')
|
331
|
-
reset!
|
332
|
-
|
333
|
-
get :edit, :id => 1
|
334
|
-
assert fragment_exist?('test.host/1;edit')
|
335
|
-
end
|
336
|
-
|
337
|
-
def test_cache_expiration
|
338
|
-
get :index
|
339
|
-
cached_time = content_to_cache
|
340
|
-
reset!
|
341
|
-
|
342
|
-
get :index
|
343
|
-
assert_equal cached_time, @response.body
|
344
|
-
reset!
|
345
|
-
|
346
|
-
get :expire
|
347
|
-
reset!
|
348
|
-
|
349
|
-
get :index
|
350
|
-
new_cached_time = content_to_cache
|
351
|
-
assert_not_equal cached_time, @response.body
|
352
|
-
reset!
|
353
|
-
|
354
|
-
get :index
|
355
|
-
assert_response :success
|
356
|
-
assert_equal new_cached_time, @response.body
|
357
|
-
end
|
358
|
-
|
359
|
-
def test_cache_expiration_isnt_affected_by_request_format
|
360
|
-
get :index
|
361
|
-
cached_time = content_to_cache
|
362
|
-
reset!
|
363
|
-
|
364
|
-
@request.set_REQUEST_URI "/action_caching_test/expire.xml"
|
365
|
-
get :expire, :format => :xml
|
366
|
-
reset!
|
367
|
-
|
368
|
-
get :index
|
369
|
-
new_cached_time = content_to_cache
|
370
|
-
assert_not_equal cached_time, @response.body
|
371
|
-
end
|
372
|
-
|
373
|
-
def test_cache_is_scoped_by_subdomain
|
374
|
-
@request.host = 'jamis.hostname.com'
|
375
|
-
get :index
|
376
|
-
jamis_cache = content_to_cache
|
377
|
-
|
378
|
-
reset!
|
379
|
-
|
380
|
-
@request.host = 'david.hostname.com'
|
381
|
-
get :index
|
382
|
-
david_cache = content_to_cache
|
383
|
-
assert_not_equal jamis_cache, @response.body
|
384
|
-
|
385
|
-
reset!
|
386
|
-
|
387
|
-
@request.host = 'jamis.hostname.com'
|
388
|
-
get :index
|
389
|
-
assert_equal jamis_cache, @response.body
|
390
|
-
|
391
|
-
reset!
|
392
|
-
|
393
|
-
@request.host = 'david.hostname.com'
|
394
|
-
get :index
|
395
|
-
assert_equal david_cache, @response.body
|
396
|
-
end
|
397
|
-
|
398
|
-
def test_redirect_is_not_cached
|
399
|
-
get :redirected
|
400
|
-
assert_response :redirect
|
401
|
-
reset!
|
402
|
-
|
403
|
-
get :redirected
|
404
|
-
assert_response :redirect
|
405
|
-
end
|
406
|
-
|
407
|
-
def test_forbidden_is_not_cached
|
408
|
-
get :forbidden
|
409
|
-
assert_response :forbidden
|
410
|
-
reset!
|
411
|
-
|
412
|
-
get :forbidden
|
413
|
-
assert_response :forbidden
|
414
|
-
end
|
415
|
-
|
416
|
-
def test_xml_version_of_resource_is_treated_as_different_cache
|
417
|
-
with_routing do |set|
|
418
|
-
set.draw do |map|
|
419
|
-
map.connect ':controller/:action.:format'
|
420
|
-
map.connect ':controller/:action'
|
421
|
-
end
|
422
|
-
|
423
|
-
get :index, :format => 'xml'
|
424
|
-
cached_time = content_to_cache
|
425
|
-
assert_equal cached_time, @response.body
|
426
|
-
assert fragment_exist?('hostname.com/action_caching_test/index.xml')
|
427
|
-
reset!
|
428
|
-
|
429
|
-
get :index, :format => 'xml'
|
430
|
-
assert_equal cached_time, @response.body
|
431
|
-
assert_equal 'application/xml', @response.content_type
|
432
|
-
reset!
|
433
|
-
|
434
|
-
get :expire_xml
|
435
|
-
reset!
|
436
|
-
|
437
|
-
get :index, :format => 'xml'
|
438
|
-
assert_not_equal cached_time, @response.body
|
439
|
-
end
|
440
|
-
end
|
441
|
-
|
442
|
-
def test_correct_content_type_is_returned_for_cache_hit
|
443
|
-
# run it twice to cache it the first time
|
444
|
-
get :index, :id => 'content-type.xml'
|
445
|
-
get :index, :id => 'content-type.xml'
|
446
|
-
assert_equal 'application/xml', @response.content_type
|
447
|
-
end
|
448
|
-
|
449
|
-
def test_correct_content_type_is_returned_for_cache_hit_on_action_with_string_key
|
450
|
-
# run it twice to cache it the first time
|
451
|
-
get :show, :format => 'xml'
|
452
|
-
get :show, :format => 'xml'
|
453
|
-
assert_equal 'application/xml', @response.content_type
|
454
|
-
end
|
455
|
-
|
456
|
-
def test_correct_content_type_is_returned_for_cache_hit_on_action_with_string_key_from_proc
|
457
|
-
# run it twice to cache it the first time
|
458
|
-
get :edit, :id => 1, :format => 'xml'
|
459
|
-
get :edit, :id => 1, :format => 'xml'
|
460
|
-
assert_equal 'application/xml', @response.content_type
|
461
|
-
end
|
462
|
-
|
463
|
-
def test_empty_path_is_normalized
|
464
|
-
@mock_controller.mock_url_for = 'http://example.org/'
|
465
|
-
@mock_controller.mock_path = '/'
|
466
|
-
|
467
|
-
assert_equal 'example.org/index', @path_class.path_for(@mock_controller, {})
|
468
|
-
end
|
469
|
-
|
470
|
-
def test_file_extensions
|
471
|
-
get :index, :id => 'kitten.jpg'
|
472
|
-
get :index, :id => 'kitten.jpg'
|
473
|
-
|
474
|
-
assert_response :success
|
475
|
-
end
|
476
|
-
|
477
|
-
def test_record_not_found_returns_404_for_multiple_requests
|
478
|
-
get :record_not_found
|
479
|
-
assert_response 404
|
480
|
-
get :record_not_found
|
481
|
-
assert_response 404
|
482
|
-
end
|
483
|
-
|
484
|
-
def test_four_oh_four_returns_404_for_multiple_requests
|
485
|
-
get :four_oh_four
|
486
|
-
assert_response 404
|
487
|
-
get :four_oh_four
|
488
|
-
assert_response 404
|
489
|
-
end
|
490
|
-
|
491
|
-
def test_simple_runtime_error_returns_500_for_multiple_requests
|
492
|
-
get :simple_runtime_error
|
493
|
-
assert_response 500
|
494
|
-
get :simple_runtime_error
|
495
|
-
assert_response 500
|
496
|
-
end
|
497
|
-
|
498
|
-
private
|
499
|
-
def content_to_cache
|
500
|
-
assigns(:cache_this)
|
501
|
-
end
|
502
|
-
|
503
|
-
def reset!
|
504
|
-
@request = ActionController::TestRequest.new
|
505
|
-
@response = ActionController::TestResponse.new
|
506
|
-
@controller = ActionCachingTestController.new
|
507
|
-
@request.host = 'hostname.com'
|
508
|
-
end
|
509
|
-
|
510
|
-
def fragment_exist?(path)
|
511
|
-
@controller.fragment_exist?(path)
|
512
|
-
end
|
513
|
-
|
514
|
-
def read_fragment(path)
|
515
|
-
@controller.read_fragment(path)
|
516
|
-
end
|
517
|
-
end
|
518
|
-
|
519
|
-
class FragmentCachingTestController < ActionController::Base
|
520
|
-
def some_action; end;
|
521
|
-
end
|
522
|
-
|
523
|
-
class FragmentCachingTest < ActionController::TestCase
|
524
|
-
def setup
|
525
|
-
ActionController::Base.perform_caching = true
|
526
|
-
@store = ActiveSupport::Cache::MemoryStore.new
|
527
|
-
ActionController::Base.cache_store = @store
|
528
|
-
@controller = FragmentCachingTestController.new
|
529
|
-
@params = {:controller => 'posts', :action => 'index'}
|
530
|
-
@request = ActionController::TestRequest.new
|
531
|
-
@response = ActionController::TestResponse.new
|
532
|
-
@controller.params = @params
|
533
|
-
@controller.request = @request
|
534
|
-
@controller.response = @response
|
535
|
-
@controller.send(:initialize_current_url)
|
536
|
-
@controller.send(:initialize_template_class, @response)
|
537
|
-
@controller.send(:assign_shortcuts, @request, @response)
|
538
|
-
end
|
539
|
-
|
540
|
-
def test_fragment_cache_key
|
541
|
-
assert_equal 'views/what a key', @controller.fragment_cache_key('what a key')
|
542
|
-
assert_equal "views/test.host/fragment_caching_test/some_action",
|
543
|
-
@controller.fragment_cache_key(:controller => 'fragment_caching_test',:action => 'some_action')
|
544
|
-
end
|
545
|
-
|
546
|
-
def test_read_fragment_with_caching_enabled
|
547
|
-
@store.write('views/name', 'value')
|
548
|
-
assert_equal 'value', @controller.read_fragment('name')
|
549
|
-
end
|
550
|
-
|
551
|
-
def test_read_fragment_with_caching_disabled
|
552
|
-
ActionController::Base.perform_caching = false
|
553
|
-
@store.write('views/name', 'value')
|
554
|
-
assert_nil @controller.read_fragment('name')
|
555
|
-
end
|
556
|
-
|
557
|
-
def test_fragment_exist_with_caching_enabled
|
558
|
-
@store.write('views/name', 'value')
|
559
|
-
assert @controller.fragment_exist?('name')
|
560
|
-
assert !@controller.fragment_exist?('other_name')
|
561
|
-
end
|
562
|
-
|
563
|
-
def test_fragment_exist_with_caching_disabled
|
564
|
-
ActionController::Base.perform_caching = false
|
565
|
-
@store.write('views/name', 'value')
|
566
|
-
assert !@controller.fragment_exist?('name')
|
567
|
-
assert !@controller.fragment_exist?('other_name')
|
568
|
-
end
|
569
|
-
|
570
|
-
def test_write_fragment_with_caching_enabled
|
571
|
-
assert_nil @store.read('views/name')
|
572
|
-
assert_equal 'value', @controller.write_fragment('name', 'value')
|
573
|
-
assert_equal 'value', @store.read('views/name')
|
574
|
-
end
|
575
|
-
|
576
|
-
def test_write_fragment_with_caching_disabled
|
577
|
-
assert_nil @store.read('views/name')
|
578
|
-
ActionController::Base.perform_caching = false
|
579
|
-
assert_equal 'value', @controller.write_fragment('name', 'value')
|
580
|
-
assert_nil @store.read('views/name')
|
581
|
-
end
|
582
|
-
|
583
|
-
def test_expire_fragment_with_simple_key
|
584
|
-
@store.write('views/name', 'value')
|
585
|
-
@controller.expire_fragment 'name'
|
586
|
-
assert_nil @store.read('views/name')
|
587
|
-
end
|
588
|
-
|
589
|
-
def test_expire_fragment_with_regexp
|
590
|
-
@store.write('views/name', 'value')
|
591
|
-
@store.write('views/another_name', 'another_value')
|
592
|
-
@store.write('views/primalgrasp', 'will not expire ;-)')
|
593
|
-
|
594
|
-
@controller.expire_fragment /name/
|
595
|
-
|
596
|
-
assert_nil @store.read('views/name')
|
597
|
-
assert_nil @store.read('views/another_name')
|
598
|
-
assert_equal 'will not expire ;-)', @store.read('views/primalgrasp')
|
599
|
-
end
|
600
|
-
|
601
|
-
def test_fragment_for_with_disabled_caching
|
602
|
-
ActionController::Base.perform_caching = false
|
603
|
-
|
604
|
-
@store.write('views/expensive', 'fragment content')
|
605
|
-
fragment_computed = false
|
606
|
-
|
607
|
-
buffer = 'generated till now -> '.html_safe
|
608
|
-
@controller.fragment_for(buffer, 'expensive') { fragment_computed = true }
|
609
|
-
|
610
|
-
assert fragment_computed
|
611
|
-
assert_equal 'generated till now -> ', buffer
|
612
|
-
end
|
613
|
-
|
614
|
-
def test_fragment_for
|
615
|
-
@store.write('views/expensive', 'fragment content')
|
616
|
-
fragment_computed = false
|
617
|
-
|
618
|
-
buffer = 'generated till now -> '.html_safe
|
619
|
-
@controller.fragment_for(buffer, 'expensive') { fragment_computed = true }
|
620
|
-
|
621
|
-
assert !fragment_computed
|
622
|
-
assert_equal 'generated till now -> fragment content', buffer
|
623
|
-
end
|
624
|
-
|
625
|
-
def test_html_safety
|
626
|
-
assert_nil @store.read('views/name')
|
627
|
-
content = 'value'.html_safe
|
628
|
-
assert_equal content, @controller.write_fragment('name', content)
|
629
|
-
|
630
|
-
cached = @store.read('views/name')
|
631
|
-
assert_equal content, cached
|
632
|
-
assert_equal String, cached.class
|
633
|
-
|
634
|
-
html_safe = @controller.read_fragment('name')
|
635
|
-
assert_equal content, html_safe
|
636
|
-
assert html_safe.html_safe?
|
637
|
-
end
|
638
|
-
end
|
639
|
-
|
640
|
-
class FunctionalCachingController < ActionController::Base
|
641
|
-
def fragment_cached
|
642
|
-
end
|
643
|
-
|
644
|
-
def html_fragment_cached_with_partial
|
645
|
-
respond_to do |format|
|
646
|
-
format.html
|
647
|
-
end
|
648
|
-
end
|
649
|
-
|
650
|
-
def js_fragment_cached_with_partial
|
651
|
-
respond_to do |format|
|
652
|
-
format.js
|
653
|
-
end
|
654
|
-
end
|
655
|
-
|
656
|
-
def formatted_fragment_cached
|
657
|
-
respond_to do |format|
|
658
|
-
format.html
|
659
|
-
format.xml
|
660
|
-
format.js
|
661
|
-
end
|
662
|
-
end
|
663
|
-
|
664
|
-
def rescue_action(e)
|
665
|
-
raise e
|
666
|
-
end
|
667
|
-
end
|
668
|
-
|
669
|
-
class FunctionalFragmentCachingTest < ActionController::TestCase
|
670
|
-
def setup
|
671
|
-
ActionController::Base.perform_caching = true
|
672
|
-
@store = ActiveSupport::Cache::MemoryStore.new
|
673
|
-
ActionController::Base.cache_store = @store
|
674
|
-
@controller = FunctionalCachingController.new
|
675
|
-
@request = ActionController::TestRequest.new
|
676
|
-
@response = ActionController::TestResponse.new
|
677
|
-
end
|
678
|
-
|
679
|
-
def test_fragment_caching
|
680
|
-
get :fragment_cached
|
681
|
-
assert_response :success
|
682
|
-
expected_body = <<-CACHED
|
683
|
-
Hello
|
684
|
-
This bit's fragment cached
|
685
|
-
CACHED
|
686
|
-
assert_equal expected_body, @response.body
|
687
|
-
|
688
|
-
assert_equal "This bit's fragment cached", @store.read('views/test.host/functional_caching/fragment_cached')
|
689
|
-
end
|
690
|
-
|
691
|
-
def test_fragment_caching_in_partials
|
692
|
-
get :html_fragment_cached_with_partial
|
693
|
-
assert_response :success
|
694
|
-
assert_match /Fragment caching in a partial/, @response.body
|
695
|
-
assert_match "Fragment caching in a partial", @store.read('views/test.host/functional_caching/html_fragment_cached_with_partial')
|
696
|
-
end
|
697
|
-
|
698
|
-
def test_render_inline_before_fragment_caching
|
699
|
-
get :inline_fragment_cached
|
700
|
-
assert_response :success
|
701
|
-
assert_match /Some inline content/, @response.body
|
702
|
-
assert_match /Some cached content/, @response.body
|
703
|
-
assert_match "Some cached content", @store.read('views/test.host/functional_caching/inline_fragment_cached')
|
704
|
-
end
|
705
|
-
|
706
|
-
def test_fragment_caching_in_rjs_partials
|
707
|
-
xhr :get, :js_fragment_cached_with_partial
|
708
|
-
assert_response :success
|
709
|
-
assert_match /Fragment caching in a partial/, @response.body
|
710
|
-
assert_match "Fragment caching in a partial", @store.read('views/test.host/functional_caching/js_fragment_cached_with_partial')
|
711
|
-
end
|
712
|
-
|
713
|
-
def test_html_formatted_fragment_caching
|
714
|
-
get :formatted_fragment_cached, :format => "html"
|
715
|
-
assert_response :success
|
716
|
-
expected_body = "<body>\n<p>ERB</p>\n</body>"
|
717
|
-
|
718
|
-
assert_equal expected_body, @response.body
|
719
|
-
|
720
|
-
assert_equal "<p>ERB</p>", @store.read('views/test.host/functional_caching/formatted_fragment_cached')
|
721
|
-
end
|
722
|
-
|
723
|
-
def test_xml_formatted_fragment_caching
|
724
|
-
get :formatted_fragment_cached, :format => "xml"
|
725
|
-
assert_response :success
|
726
|
-
expected_body = "<body>\n <p>Builder</p>\n</body>\n"
|
727
|
-
|
728
|
-
assert_equal expected_body, @response.body
|
729
|
-
|
730
|
-
assert_equal " <p>Builder</p>\n", @store.read('views/test.host/functional_caching/formatted_fragment_cached')
|
731
|
-
end
|
732
|
-
|
733
|
-
def test_js_formatted_fragment_caching
|
734
|
-
get :formatted_fragment_cached, :format => "js"
|
735
|
-
assert_response :success
|
736
|
-
expected_body = %(title = "Hey";\n$("element_1").visualEffect("highlight");\n) +
|
737
|
-
%($("element_2").visualEffect("highlight");\nfooter = "Bye";)
|
738
|
-
assert_equal expected_body, @response.body
|
739
|
-
|
740
|
-
assert_equal ['$("element_1").visualEffect("highlight");', '$("element_2").visualEffect("highlight");'],
|
741
|
-
@store.read('views/test.host/functional_caching/formatted_fragment_cached')
|
742
|
-
end
|
743
|
-
end
|