actionpack 2.3.18 → 3.0.0.beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +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
|
@@ -62,9 +62,10 @@ module ActionController #:nodoc:
|
|
|
62
62
|
# expire_page "/lists/show"
|
|
63
63
|
def expire_page(path)
|
|
64
64
|
return unless perform_caching
|
|
65
|
+
path = page_cache_path(path)
|
|
65
66
|
|
|
66
|
-
|
|
67
|
-
File.delete(
|
|
67
|
+
instrument_page_cache :expire_page, path do
|
|
68
|
+
File.delete(path) if File.exist?(path)
|
|
68
69
|
end
|
|
69
70
|
end
|
|
70
71
|
|
|
@@ -72,10 +73,11 @@ module ActionController #:nodoc:
|
|
|
72
73
|
# cache_page "I'm the cached content", "/lists/show"
|
|
73
74
|
def cache_page(content, path)
|
|
74
75
|
return unless perform_caching
|
|
76
|
+
path = page_cache_path(path)
|
|
75
77
|
|
|
76
|
-
|
|
77
|
-
FileUtils.makedirs(File.dirname(
|
|
78
|
-
File.open(
|
|
78
|
+
instrument_page_cache :write_page, path do
|
|
79
|
+
FileUtils.makedirs(File.dirname(path))
|
|
80
|
+
File.open(path, "wb+") { |f| f.write(content) }
|
|
79
81
|
end
|
|
80
82
|
end
|
|
81
83
|
|
|
@@ -105,6 +107,10 @@ module ActionController #:nodoc:
|
|
|
105
107
|
def page_cache_path(path)
|
|
106
108
|
page_cache_directory + page_cache_file(path)
|
|
107
109
|
end
|
|
110
|
+
|
|
111
|
+
def instrument_page_cache(name, path)
|
|
112
|
+
ActiveSupport::Notifications.instrument("action_controller.#{name}", :path => path){ yield }
|
|
113
|
+
end
|
|
108
114
|
end
|
|
109
115
|
|
|
110
116
|
# Expires the page that was cached with the +options+ as a key. Example:
|
|
@@ -149,4 +155,4 @@ module ActionController #:nodoc:
|
|
|
149
155
|
end
|
|
150
156
|
end
|
|
151
157
|
end
|
|
152
|
-
end
|
|
158
|
+
end
|
|
@@ -51,5 +51,47 @@ module ActionController #:nodoc:
|
|
|
51
51
|
end
|
|
52
52
|
end
|
|
53
53
|
end
|
|
54
|
+
|
|
55
|
+
if defined?(ActiveRecord) and defined?(ActiveRecord::Observer)
|
|
56
|
+
class Sweeper < ActiveRecord::Observer #:nodoc:
|
|
57
|
+
attr_accessor :controller
|
|
58
|
+
|
|
59
|
+
def before(controller)
|
|
60
|
+
self.controller = controller
|
|
61
|
+
callback(:before) if controller.perform_caching
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def after(controller)
|
|
65
|
+
callback(:after) if controller.perform_caching
|
|
66
|
+
# Clean up, so that the controller can be collected after this request
|
|
67
|
+
self.controller = nil
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
protected
|
|
71
|
+
# gets the action cache path for the given options.
|
|
72
|
+
def action_path_for(options)
|
|
73
|
+
Actions::ActionCachePath.new(controller, options).path
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Retrieve instance variables set in the controller.
|
|
77
|
+
def assigns(key)
|
|
78
|
+
controller.instance_variable_get("@#{key}")
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
private
|
|
82
|
+
def callback(timing)
|
|
83
|
+
controller_callback_method_name = "#{timing}_#{controller.controller_name.underscore}"
|
|
84
|
+
action_callback_method_name = "#{controller_callback_method_name}_#{controller.action_name}"
|
|
85
|
+
|
|
86
|
+
__send__(controller_callback_method_name) if respond_to?(controller_callback_method_name, true)
|
|
87
|
+
__send__(action_callback_method_name) if respond_to?(action_callback_method_name, true)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def method_missing(method, *arguments, &block)
|
|
91
|
+
return if @controller.nil?
|
|
92
|
+
@controller.__send__(method, *arguments, &block)
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
54
96
|
end
|
|
55
97
|
end
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
ActionController::AbstractRequest = ActionController::Request = ActionDispatch::Request
|
|
2
|
+
ActionController::AbstractResponse = ActionController::Response = ActionDispatch::Response
|
|
3
|
+
ActionController::Routing = ActionDispatch::Routing
|
|
4
|
+
ActionController::Routing::Routes = ActionDispatch::Routing::RouteSet.new
|
|
5
|
+
ActionController::UrlWriter = ActionController::UrlFor
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module ActionController
|
|
2
|
+
class Dispatcher
|
|
3
|
+
class << self
|
|
4
|
+
def before_dispatch(*args, &block)
|
|
5
|
+
ActiveSupport::Deprecation.warn "ActionController::Dispatcher.before_dispatch is deprecated. " <<
|
|
6
|
+
"Please use ActionDispatch::Callbacks.before instead.", caller
|
|
7
|
+
ActionDispatch::Callbacks.before(*args, &block)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def after_dispatch(*args, &block)
|
|
11
|
+
ActiveSupport::Deprecation.warn "ActionController::Dispatcher.after_dispatch is deprecated. " <<
|
|
12
|
+
"Please use ActionDispatch::Callbacks.after instead.", caller
|
|
13
|
+
ActionDispatch::Callbacks.after(*args, &block)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def to_prepare(*args, &block)
|
|
17
|
+
ActiveSupport::Deprecation.warn "ActionController::Dispatcher.to_prepare is deprecated. " <<
|
|
18
|
+
"Please use config.to_prepare instead", caller
|
|
19
|
+
ActionDispatch::Callbacks.after(*args, &block)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def new
|
|
23
|
+
ActiveSupport::Deprecation.warn "ActionController::Dispatcher.new is deprecated, use Rails.application instead."
|
|
24
|
+
Rails.application
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ActionController::PerformanceTest = ActionDispatch::PerformanceTest
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
require 'active_support/core_ext/class/attribute'
|
|
2
|
+
|
|
3
|
+
module ActionController
|
|
4
|
+
# ActionController::Metal provides a way to get a valid Rack application from a controller.
|
|
5
|
+
#
|
|
6
|
+
# In AbstractController, dispatching is triggered directly by calling #process on a new controller.
|
|
7
|
+
# ActionController::Metal provides an #action method that returns a valid Rack application for a
|
|
8
|
+
# given action. Other rack builders, such as Rack::Builder, Rack::URLMap, and the Rails router,
|
|
9
|
+
# can dispatch directly to the action returned by FooController.action(:index).
|
|
10
|
+
class Metal < AbstractController::Base
|
|
11
|
+
abstract!
|
|
12
|
+
|
|
13
|
+
# :api: public
|
|
14
|
+
attr_internal :params, :env
|
|
15
|
+
|
|
16
|
+
# Returns the last part of the controller's name, underscored, without the ending
|
|
17
|
+
# "Controller". For instance, MyApp::MyPostsController would return "my_posts" for
|
|
18
|
+
# controller_name
|
|
19
|
+
#
|
|
20
|
+
# ==== Returns
|
|
21
|
+
# String
|
|
22
|
+
def self.controller_name
|
|
23
|
+
@controller_name ||= controller_path.split("/").last
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Delegates to the class' #controller_name
|
|
27
|
+
def controller_name
|
|
28
|
+
self.class.controller_name
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# The details below can be overridden to support a specific
|
|
32
|
+
# Request and Response object. The default ActionController::Base
|
|
33
|
+
# implementation includes RackDelegation, which makes a request
|
|
34
|
+
# and response object available. You might wish to control the
|
|
35
|
+
# environment and response manually for performance reasons.
|
|
36
|
+
|
|
37
|
+
attr_internal :status, :headers, :content_type, :response
|
|
38
|
+
|
|
39
|
+
def initialize(*)
|
|
40
|
+
@_headers = {}
|
|
41
|
+
super
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Basic implementations for content_type=, location=, and headers are
|
|
45
|
+
# provided to reduce the dependency on the RackDelegation module
|
|
46
|
+
# in Renderer and Redirector.
|
|
47
|
+
|
|
48
|
+
def content_type=(type)
|
|
49
|
+
headers["Content-Type"] = type.to_s
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def location=(url)
|
|
53
|
+
headers["Location"] = url
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def status=(status)
|
|
57
|
+
@_status = Rack::Utils.status_code(status)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# :api: private
|
|
61
|
+
def dispatch(name, env)
|
|
62
|
+
@_env = env
|
|
63
|
+
@_env['action_controller.instance'] = self
|
|
64
|
+
process(name)
|
|
65
|
+
to_a
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# :api: private
|
|
69
|
+
def to_a
|
|
70
|
+
response ? response.to_a : [status, headers, response_body]
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
class ActionEndpoint
|
|
74
|
+
@@endpoints = Hash.new {|h,k| h[k] = Hash.new {|sh,sk| sh[sk] = {} } }
|
|
75
|
+
|
|
76
|
+
def self.for(controller, action, stack)
|
|
77
|
+
@@endpoints[controller][action][stack] ||= begin
|
|
78
|
+
endpoint = new(controller, action)
|
|
79
|
+
stack.build(endpoint)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def initialize(controller, action)
|
|
84
|
+
@controller, @action = controller, action
|
|
85
|
+
@_formats = [Mime::HTML]
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def call(env)
|
|
89
|
+
@controller.new.dispatch(@action, env)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
class_attribute :middleware_stack
|
|
94
|
+
self.middleware_stack = ActionDispatch::MiddlewareStack.new
|
|
95
|
+
|
|
96
|
+
def self.inherited(base)
|
|
97
|
+
self.middleware_stack = base.middleware_stack.dup
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def self.use(*args)
|
|
101
|
+
middleware_stack.use(*args)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def self.middleware
|
|
105
|
+
middleware_stack
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def self.call(env)
|
|
109
|
+
action(env['action_dispatch.request.path_parameters'][:action]).call(env)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# Return a rack endpoint for the given action. Memoize the endpoint, so
|
|
113
|
+
# multiple calls into MyController.action will return the same object
|
|
114
|
+
# for the same action.
|
|
115
|
+
#
|
|
116
|
+
# ==== Parameters
|
|
117
|
+
# action<#to_s>:: An action name
|
|
118
|
+
#
|
|
119
|
+
# ==== Returns
|
|
120
|
+
# Proc:: A rack application
|
|
121
|
+
def self.action(name)
|
|
122
|
+
ActionEndpoint.for(self, name, middleware_stack)
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
module ActionController
|
|
2
|
+
module Compatibility
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
include AbstractController::Compatibility
|
|
6
|
+
|
|
7
|
+
class ::ActionController::ActionControllerError < StandardError #:nodoc:
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Temporary hax
|
|
11
|
+
included do
|
|
12
|
+
::ActionController::UnknownAction = ::AbstractController::ActionNotFound
|
|
13
|
+
::ActionController::DoubleRenderError = ::AbstractController::DoubleRenderError
|
|
14
|
+
|
|
15
|
+
cattr_accessor :session_options
|
|
16
|
+
self.session_options = {}
|
|
17
|
+
|
|
18
|
+
cattr_accessor :relative_url_root
|
|
19
|
+
self.relative_url_root = ENV['RAILS_RELATIVE_URL_ROOT']
|
|
20
|
+
|
|
21
|
+
class << self
|
|
22
|
+
delegate :default_charset=, :to => "ActionDispatch::Response"
|
|
23
|
+
delegate :resources_path_names, :to => "ActionController::Routing::Routes"
|
|
24
|
+
delegate :resources_path_names=, :to => "ActionController::Routing::Routes"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# cattr_reader :protected_instance_variables
|
|
28
|
+
cattr_accessor :protected_instance_variables
|
|
29
|
+
self.protected_instance_variables = %w(@assigns @performed_redirect @performed_render
|
|
30
|
+
@variables_added @request_origin @url
|
|
31
|
+
@parent_controller @action_name
|
|
32
|
+
@before_filter_chain_aborted @_headers @_params
|
|
33
|
+
@_response)
|
|
34
|
+
|
|
35
|
+
# Controls the resource action separator
|
|
36
|
+
cattr_accessor :resource_action_separator
|
|
37
|
+
self.resource_action_separator = "/"
|
|
38
|
+
|
|
39
|
+
cattr_accessor :use_accept_header
|
|
40
|
+
self.use_accept_header = true
|
|
41
|
+
|
|
42
|
+
self.page_cache_directory = defined?(Rails.public_path) ? Rails.public_path : ""
|
|
43
|
+
|
|
44
|
+
# Prepends all the URL-generating helpers from AssetHelper. This makes it possible to easily move javascripts, stylesheets,
|
|
45
|
+
# and images to a dedicated asset server away from the main web server. Example:
|
|
46
|
+
# ActionController::Base.asset_host = "http://assets.example.com"
|
|
47
|
+
cattr_accessor :asset_host
|
|
48
|
+
|
|
49
|
+
cattr_accessor :ip_spoofing_check
|
|
50
|
+
self.ip_spoofing_check = true
|
|
51
|
+
|
|
52
|
+
cattr_accessor :trusted_proxies
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# For old tests
|
|
56
|
+
def initialize_template_class(*) end
|
|
57
|
+
def assign_shortcuts(*) end
|
|
58
|
+
|
|
59
|
+
# TODO: Remove this after we flip
|
|
60
|
+
def template
|
|
61
|
+
@template ||= view_context
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def process_action(*)
|
|
65
|
+
template
|
|
66
|
+
super
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
module ClassMethods
|
|
70
|
+
def consider_all_requests_local
|
|
71
|
+
ActiveSupport::Deprecation.warn "ActionController::Base.consider_all_requests_local is deprecated, " <<
|
|
72
|
+
"use Rails.application.config.consider_all_requests_local instead"
|
|
73
|
+
Rails.application.config.consider_all_requests_local
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def consider_all_requests_local=(value)
|
|
77
|
+
ActiveSupport::Deprecation.warn "ActionController::Base.consider_all_requests_local= is no longer effective. " <<
|
|
78
|
+
"Please configure it on your application with config.consider_all_requests_local="
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def allow_concurrency
|
|
82
|
+
ActiveSupport::Deprecation.warn "ActionController::Base.allow_concurrency is deprecated, " <<
|
|
83
|
+
"use Rails.application.config.allow_concurrency instead"
|
|
84
|
+
Rails.application.config.allow_concurrency
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def allow_concurrency=(value)
|
|
88
|
+
ActiveSupport::Deprecation.warn "ActionController::Base.allow_concurrency= is no longer effective. " <<
|
|
89
|
+
"Please configure it on your application with config.allow_concurrency="
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def rescue_action(env)
|
|
93
|
+
raise env["action_dispatch.rescue.exception"]
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Defines the storage option for cached fragments
|
|
97
|
+
def cache_store=(store_option)
|
|
98
|
+
@@cache_store = ActiveSupport::Cache.lookup_store(store_option)
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
delegate :consider_all_requests_local, :consider_all_requests_local=,
|
|
103
|
+
:allow_concurrency, :allow_concurrency=, :to => :"self.class"
|
|
104
|
+
|
|
105
|
+
def render_to_body(options)
|
|
106
|
+
if options.is_a?(Hash) && options.key?(:template)
|
|
107
|
+
options[:template].sub!(/^\//, '')
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
options[:text] = nil if options.delete(:nothing) == true
|
|
111
|
+
options[:text] = " " if options.key?(:text) && options[:text].nil?
|
|
112
|
+
|
|
113
|
+
super || " "
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def _handle_method_missing
|
|
117
|
+
method_missing(@_action_name.to_sym)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def method_for_action(action_name)
|
|
121
|
+
super || (respond_to?(:method_missing) && "_handle_method_missing")
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def performed?
|
|
125
|
+
response_body
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
# ==== Request only view path switching ====
|
|
129
|
+
def append_view_path(path)
|
|
130
|
+
view_paths.push(*path)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def prepend_view_path(path)
|
|
134
|
+
view_paths.unshift(*path)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def view_paths
|
|
138
|
+
view_context.view_paths
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
end
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
module ActionController
|
|
2
|
+
module ConditionalGet
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
include RackDelegation
|
|
6
|
+
include Head
|
|
7
|
+
|
|
8
|
+
# Sets the etag, last_modified, or both on the response and renders a
|
|
9
|
+
# "304 Not Modified" response if the request is already fresh.
|
|
10
|
+
#
|
|
11
|
+
# Parameters:
|
|
12
|
+
# * <tt>:etag</tt>
|
|
13
|
+
# * <tt>:last_modified</tt>
|
|
14
|
+
# * <tt>:public</tt> By default the Cache-Control header is private, set this to true if you want your application to be cachable by other devices (proxy caches).
|
|
15
|
+
#
|
|
16
|
+
# Example:
|
|
17
|
+
#
|
|
18
|
+
# def show
|
|
19
|
+
# @article = Article.find(params[:id])
|
|
20
|
+
# fresh_when(:etag => @article, :last_modified => @article.created_at.utc, :public => true)
|
|
21
|
+
# end
|
|
22
|
+
#
|
|
23
|
+
# This will render the show template if the request isn't sending a matching etag or
|
|
24
|
+
# If-Modified-Since header and just a "304 Not Modified" response if there's a match.
|
|
25
|
+
#
|
|
26
|
+
def fresh_when(options)
|
|
27
|
+
options.assert_valid_keys(:etag, :last_modified, :public)
|
|
28
|
+
|
|
29
|
+
response.etag = options[:etag] if options[:etag]
|
|
30
|
+
response.last_modified = options[:last_modified] if options[:last_modified]
|
|
31
|
+
response.cache_control[:public] = true if options[:public]
|
|
32
|
+
|
|
33
|
+
head :not_modified if request.fresh?(response)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Sets the etag and/or last_modified on the response and checks it against
|
|
37
|
+
# the client request. If the request doesn't match the options provided, the
|
|
38
|
+
# request is considered stale and should be generated from scratch. Otherwise,
|
|
39
|
+
# it's fresh and we don't need to generate anything and a reply of "304 Not Modified" is sent.
|
|
40
|
+
#
|
|
41
|
+
# Parameters:
|
|
42
|
+
# * <tt>:etag</tt>
|
|
43
|
+
# * <tt>:last_modified</tt>
|
|
44
|
+
# * <tt>:public</tt> By default the Cache-Control header is private, set this to true if you want your application to be cachable by other devices (proxy caches).
|
|
45
|
+
#
|
|
46
|
+
# Example:
|
|
47
|
+
#
|
|
48
|
+
# def show
|
|
49
|
+
# @article = Article.find(params[:id])
|
|
50
|
+
#
|
|
51
|
+
# if stale?(:etag => @article, :last_modified => @article.created_at.utc)
|
|
52
|
+
# @statistics = @article.really_expensive_call
|
|
53
|
+
# respond_to do |format|
|
|
54
|
+
# # all the supported formats
|
|
55
|
+
# end
|
|
56
|
+
# end
|
|
57
|
+
# end
|
|
58
|
+
def stale?(options)
|
|
59
|
+
fresh_when(options)
|
|
60
|
+
!request.fresh?(response)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Sets a HTTP 1.1 Cache-Control header. Defaults to issuing a "private" instruction, so that
|
|
64
|
+
# intermediate caches shouldn't cache the response.
|
|
65
|
+
#
|
|
66
|
+
# Examples:
|
|
67
|
+
# expires_in 20.minutes
|
|
68
|
+
# expires_in 3.hours, :public => true
|
|
69
|
+
# expires in 3.hours, 'max-stale' => 5.hours, :public => true
|
|
70
|
+
#
|
|
71
|
+
# This method will overwrite an existing Cache-Control header.
|
|
72
|
+
# See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html for more possibilities.
|
|
73
|
+
def expires_in(seconds, options = {}) #:doc:
|
|
74
|
+
response.cache_control.merge!(:max_age => seconds, :public => options.delete(:public))
|
|
75
|
+
options.delete(:private)
|
|
76
|
+
|
|
77
|
+
response.cache_control[:extras] = options.map {|k,v| "#{k}=#{v}"}
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Sets a HTTP 1.1 Cache-Control header of "no-cache" so no caching should occur by the browser or
|
|
81
|
+
# intermediate caches (like caching proxy servers).
|
|
82
|
+
def expires_now #:doc:
|
|
83
|
+
response.cache_control.replace(:no_cache => true)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|