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,9 +1,11 @@
|
|
1
|
-
require 'active_support/core_ext/string/bytesize'
|
2
|
-
|
3
1
|
module ActionController #:nodoc:
|
4
2
|
# Methods for sending arbitrary data and for streaming files to the browser,
|
5
3
|
# instead of rendering.
|
6
4
|
module Streaming
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
include ActionController::Rendering
|
8
|
+
|
7
9
|
DEFAULT_SEND_FILE_OPTIONS = {
|
8
10
|
:type => 'application/octet-stream'.freeze,
|
9
11
|
:disposition => 'attachment'.freeze,
|
@@ -86,12 +88,11 @@ module ActionController #:nodoc:
|
|
86
88
|
@performed_render = false
|
87
89
|
|
88
90
|
if options[:x_sendfile]
|
89
|
-
logger.info "Sending #{X_SENDFILE_HEADER} header #{path}" if logger
|
90
91
|
head options[:status], X_SENDFILE_HEADER => path
|
91
92
|
else
|
92
93
|
if options[:stream]
|
94
|
+
# TODO : Make render :text => proc {} work with the new base
|
93
95
|
render :status => options[:status], :text => Proc.new { |response, output|
|
94
|
-
logger.info "Streaming file #{path}" unless logger.nil?
|
95
96
|
len = options[:buffer_size] || 4096
|
96
97
|
File.open(path, 'rb') do |file|
|
97
98
|
while buf = file.read(len)
|
@@ -100,7 +101,6 @@ module ActionController #:nodoc:
|
|
100
101
|
end
|
101
102
|
}
|
102
103
|
else
|
103
|
-
logger.info "Sending file #{path}" unless logger.nil?
|
104
104
|
File.open(path, 'rb') { |file| render :status => options[:status], :text => file.read }
|
105
105
|
end
|
106
106
|
end
|
@@ -138,9 +138,7 @@ module ActionController #:nodoc:
|
|
138
138
|
# data to the browser, then use <tt>render :text => proc { ... }</tt>
|
139
139
|
# instead. See ActionController::Base#render for more information.
|
140
140
|
def send_data(data, options = {}) #:doc:
|
141
|
-
logger.info "Sending data #{options[:filename]}" if logger
|
142
141
|
send_file_headers! options.merge(:length => data.bytesize)
|
143
|
-
@performed_render = false
|
144
142
|
render :status => options[:status], :text => data
|
145
143
|
end
|
146
144
|
|
@@ -156,26 +154,29 @@ module ActionController #:nodoc:
|
|
156
154
|
disposition <<= %(; filename="#{options[:filename]}") if options[:filename]
|
157
155
|
|
158
156
|
content_type = options[:type]
|
157
|
+
|
159
158
|
if content_type.is_a?(Symbol)
|
160
|
-
raise ArgumentError, "Unknown MIME type #{options[:type]}" unless Mime::EXTENSION_LOOKUP.
|
161
|
-
content_type = Mime::Type.lookup_by_extension(content_type.to_s)
|
159
|
+
raise ArgumentError, "Unknown MIME type #{options[:type]}" unless Mime::EXTENSION_LOOKUP.key?(content_type.to_s)
|
160
|
+
self.content_type = Mime::Type.lookup_by_extension(content_type.to_s)
|
161
|
+
else
|
162
|
+
self.content_type = content_type
|
162
163
|
end
|
163
|
-
content_type = content_type.to_s.strip # fixes a problem with extra '\r' with some browsers
|
164
164
|
|
165
165
|
headers.merge!(
|
166
166
|
'Content-Length' => options[:length].to_s,
|
167
|
-
'Content-Type' => content_type,
|
168
167
|
'Content-Disposition' => disposition,
|
169
168
|
'Content-Transfer-Encoding' => 'binary'
|
170
169
|
)
|
171
170
|
|
171
|
+
response.sending_file = true
|
172
|
+
|
172
173
|
# Fix a problem with IE 6.0 on opening downloaded files:
|
173
174
|
# If Cache-Control: no-cache is set (which Rails does by default),
|
174
175
|
# IE removes the file it just downloaded from its cache immediately
|
175
176
|
# after it displays the "open/save" dialog, which means that if you
|
176
177
|
# hit "open" the file isn't there anymore when the application that
|
177
178
|
# is called for handling the download is run, so let's workaround that
|
178
|
-
|
179
|
+
response.cache_control[:public] ||= false
|
179
180
|
end
|
180
181
|
end
|
181
182
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module ActionController
|
2
|
+
module Testing
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
include RackDelegation
|
6
|
+
|
7
|
+
# TODO: Clean this up
|
8
|
+
def process_with_new_base_test(request, response)
|
9
|
+
@_request = request
|
10
|
+
@_response = response
|
11
|
+
@_response.request = request
|
12
|
+
ret = process(request.parameters[:action])
|
13
|
+
if cookies = @_request.env['action_dispatch.cookies']
|
14
|
+
cookies.write(@_response)
|
15
|
+
end
|
16
|
+
@_response.body ||= self.response_body
|
17
|
+
@_response.prepare!
|
18
|
+
set_test_assigns
|
19
|
+
ret
|
20
|
+
end
|
21
|
+
|
22
|
+
def set_test_assigns
|
23
|
+
@assigns = {}
|
24
|
+
(instance_variable_names - self.class.protected_instance_variables).each do |var|
|
25
|
+
name, value = var[1..-1], instance_variable_get(var)
|
26
|
+
@assigns[name] = value
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# TODO : Rewrite tests using controller.headers= to use Rack env
|
31
|
+
def headers=(new_headers)
|
32
|
+
@_response ||= ActionDispatch::Response.new
|
33
|
+
@_response.headers.replace(new_headers)
|
34
|
+
end
|
35
|
+
|
36
|
+
module ClassMethods
|
37
|
+
def before_filters
|
38
|
+
_process_action_callbacks.find_all{|x| x.kind == :before}.map{|x| x.name}
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,157 @@
|
|
1
|
+
require 'active_support/core_ext/class/attribute'
|
2
|
+
|
3
|
+
module ActionController
|
4
|
+
# In <b>routes.rb</b> one defines URL-to-controller mappings, but the reverse
|
5
|
+
# is also possible: an URL can be generated from one of your routing definitions.
|
6
|
+
# URL generation functionality is centralized in this module.
|
7
|
+
#
|
8
|
+
# See ActionController::Routing and ActionController::Resources for general
|
9
|
+
# information about routing and routes.rb.
|
10
|
+
#
|
11
|
+
# <b>Tip:</b> If you need to generate URLs from your models or some other place,
|
12
|
+
# then ActionController::UrlFor is what you're looking for. Read on for
|
13
|
+
# an introduction.
|
14
|
+
#
|
15
|
+
# == URL generation from parameters
|
16
|
+
#
|
17
|
+
# As you may know, some functions - such as ActionController::Base#url_for
|
18
|
+
# and ActionView::Helpers::UrlHelper#link_to, can generate URLs given a set
|
19
|
+
# of parameters. For example, you've probably had the chance to write code
|
20
|
+
# like this in one of your views:
|
21
|
+
#
|
22
|
+
# <%= link_to('Click here', :controller => 'users',
|
23
|
+
# :action => 'new', :message => 'Welcome!') %>
|
24
|
+
#
|
25
|
+
# #=> Generates a link to: /users/new?message=Welcome%21
|
26
|
+
#
|
27
|
+
# link_to, and all other functions that require URL generation functionality,
|
28
|
+
# actually use ActionController::UrlFor under the hood. And in particular,
|
29
|
+
# they use the ActionController::UrlFor#url_for method. One can generate
|
30
|
+
# the same path as the above example by using the following code:
|
31
|
+
#
|
32
|
+
# include UrlFor
|
33
|
+
# url_for(:controller => 'users',
|
34
|
+
# :action => 'new',
|
35
|
+
# :message => 'Welcome!',
|
36
|
+
# :only_path => true)
|
37
|
+
# # => "/users/new?message=Welcome%21"
|
38
|
+
#
|
39
|
+
# Notice the <tt>:only_path => true</tt> part. This is because UrlFor has no
|
40
|
+
# information about the website hostname that your Rails app is serving. So if you
|
41
|
+
# want to include the hostname as well, then you must also pass the <tt>:host</tt>
|
42
|
+
# argument:
|
43
|
+
#
|
44
|
+
# include UrlFor
|
45
|
+
# url_for(:controller => 'users',
|
46
|
+
# :action => 'new',
|
47
|
+
# :message => 'Welcome!',
|
48
|
+
# :host => 'www.example.com') # Changed this.
|
49
|
+
# # => "http://www.example.com/users/new?message=Welcome%21"
|
50
|
+
#
|
51
|
+
# By default, all controllers and views have access to a special version of url_for,
|
52
|
+
# that already knows what the current hostname is. So if you use url_for in your
|
53
|
+
# controllers or your views, then you don't need to explicitly pass the <tt>:host</tt>
|
54
|
+
# argument.
|
55
|
+
#
|
56
|
+
# For convenience reasons, mailers provide a shortcut for ActionController::UrlFor#url_for.
|
57
|
+
# So within mailers, you only have to type 'url_for' instead of 'ActionController::UrlFor#url_for'
|
58
|
+
# in full. However, mailers don't have hostname information, and what's why you'll still
|
59
|
+
# have to specify the <tt>:host</tt> argument when generating URLs in mailers.
|
60
|
+
#
|
61
|
+
#
|
62
|
+
# == URL generation for named routes
|
63
|
+
#
|
64
|
+
# UrlFor also allows one to access methods that have been auto-generated from
|
65
|
+
# named routes. For example, suppose that you have a 'users' resource in your
|
66
|
+
# <b>routes.rb</b>:
|
67
|
+
#
|
68
|
+
# map.resources :users
|
69
|
+
#
|
70
|
+
# This generates, among other things, the method <tt>users_path</tt>. By default,
|
71
|
+
# this method is accessible from your controllers, views and mailers. If you need
|
72
|
+
# to access this auto-generated method from other places (such as a model), then
|
73
|
+
# you can do that by including ActionController::UrlFor in your class:
|
74
|
+
#
|
75
|
+
# class User < ActiveRecord::Base
|
76
|
+
# include ActionController::UrlFor
|
77
|
+
#
|
78
|
+
# def base_uri
|
79
|
+
# user_path(self)
|
80
|
+
# end
|
81
|
+
# end
|
82
|
+
#
|
83
|
+
# User.find(1).base_uri # => "/users/1"
|
84
|
+
#
|
85
|
+
module UrlFor
|
86
|
+
extend ActiveSupport::Concern
|
87
|
+
|
88
|
+
included do
|
89
|
+
ActionController::Routing::Routes.install_helpers(self)
|
90
|
+
class_attribute :default_url_options
|
91
|
+
self.default_url_options = {}
|
92
|
+
end
|
93
|
+
|
94
|
+
# Overwrite to implement a number of default options that all url_for-based methods will use. The default options should come in
|
95
|
+
# the form of a hash, just like the one you would use for url_for directly. Example:
|
96
|
+
#
|
97
|
+
# def default_url_options(options)
|
98
|
+
# { :project => @project.active? ? @project.url_name : "unknown" }
|
99
|
+
# end
|
100
|
+
#
|
101
|
+
# As you can infer from the example, this is mostly useful for situations where you want to centralize dynamic decisions about the
|
102
|
+
# urls as they stem from the business domain. Please note that any individual url_for call can always override the defaults set
|
103
|
+
# by this method.
|
104
|
+
def default_url_options(options = nil)
|
105
|
+
self.class.default_url_options
|
106
|
+
end
|
107
|
+
|
108
|
+
def rewrite_options(options) #:nodoc:
|
109
|
+
if options.delete(:use_defaults) != false && (defaults = default_url_options(options))
|
110
|
+
defaults.merge(options)
|
111
|
+
else
|
112
|
+
options
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
# Generate a url based on the options provided, default_url_options and the
|
117
|
+
# routes defined in routes.rb. The following options are supported:
|
118
|
+
#
|
119
|
+
# * <tt>:only_path</tt> - If true, the relative url is returned. Defaults to +false+.
|
120
|
+
# * <tt>:protocol</tt> - The protocol to connect to. Defaults to 'http'.
|
121
|
+
# * <tt>:host</tt> - Specifies the host the link should be targeted at.
|
122
|
+
# If <tt>:only_path</tt> is false, this option must be
|
123
|
+
# provided either explicitly, or via +default_url_options+.
|
124
|
+
# * <tt>:port</tt> - Optionally specify the port to connect to.
|
125
|
+
# * <tt>:anchor</tt> - An anchor name to be appended to the path.
|
126
|
+
# * <tt>:skip_relative_url_root</tt> - If true, the url is not constructed using the
|
127
|
+
# +relative_url_root+ set in ActionController::Base.relative_url_root.
|
128
|
+
# * <tt>:trailing_slash</tt> - If true, adds a trailing slash, as in "/archive/2009/"
|
129
|
+
#
|
130
|
+
# Any other key (<tt>:controller</tt>, <tt>:action</tt>, etc.) given to
|
131
|
+
# +url_for+ is forwarded to the Routes module.
|
132
|
+
#
|
133
|
+
# Examples:
|
134
|
+
#
|
135
|
+
# url_for :controller => 'tasks', :action => 'testing', :host=>'somehost.org', :port=>'8080' # => 'http://somehost.org:8080/tasks/testing'
|
136
|
+
# url_for :controller => 'tasks', :action => 'testing', :host=>'somehost.org', :anchor => 'ok', :only_path => true # => '/tasks/testing#ok'
|
137
|
+
# url_for :controller => 'tasks', :action => 'testing', :trailing_slash=>true # => 'http://somehost.org/tasks/testing/'
|
138
|
+
# url_for :controller => 'tasks', :action => 'testing', :host=>'somehost.org', :number => '33' # => 'http://somehost.org/tasks/testing?number=33'
|
139
|
+
def url_for(options = {})
|
140
|
+
options ||= {}
|
141
|
+
case options
|
142
|
+
when String
|
143
|
+
options
|
144
|
+
when Hash
|
145
|
+
_url_rewriter.rewrite(rewrite_options(options))
|
146
|
+
else
|
147
|
+
polymorphic_url(options)
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
protected
|
152
|
+
|
153
|
+
def _url_rewriter
|
154
|
+
ActionController::UrlRewriter
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module ActionController #:nodoc:
|
2
2
|
module Verification #:nodoc:
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
include AbstractController::Callbacks, Flash, Rendering
|
6
6
|
|
7
7
|
# This module provides a class-level method for specifying that certain
|
8
8
|
# actions are guarded against being called without certain prerequisites
|
@@ -35,7 +35,7 @@ module ActionController #:nodoc:
|
|
35
35
|
# :add_flash => { "alert" => "Failed to create your message" },
|
36
36
|
# :redirect_to => :category_url
|
37
37
|
#
|
38
|
-
# Note that these prerequisites are not business rules. They do not examine
|
38
|
+
# Note that these prerequisites are not business rules. They do not examine
|
39
39
|
# the content of the session or the parameters. That level of validation should
|
40
40
|
# be encapsulated by your domain model or helper methods in the controller.
|
41
41
|
module ClassMethods
|
@@ -43,44 +43,44 @@ module ActionController #:nodoc:
|
|
43
43
|
# the user is redirected to a different action. The +options+ parameter
|
44
44
|
# is a hash consisting of the following key/value pairs:
|
45
45
|
#
|
46
|
-
# <tt>:params</tt>::
|
47
|
-
# a single key or an array of keys that must be in the <tt>params</tt>
|
46
|
+
# <tt>:params</tt>::
|
47
|
+
# a single key or an array of keys that must be in the <tt>params</tt>
|
48
48
|
# hash in order for the action(s) to be safely called.
|
49
|
-
# <tt>:session</tt>::
|
50
|
-
# a single key or an array of keys that must be in the <tt>session</tt>
|
49
|
+
# <tt>:session</tt>::
|
50
|
+
# a single key or an array of keys that must be in the <tt>session</tt>
|
51
51
|
# in order for the action(s) to be safely called.
|
52
|
-
# <tt>:flash</tt>::
|
53
|
-
# a single key or an array of keys that must be in the flash in order
|
52
|
+
# <tt>:flash</tt>::
|
53
|
+
# a single key or an array of keys that must be in the flash in order
|
54
54
|
# for the action(s) to be safely called.
|
55
|
-
# <tt>:method</tt>::
|
56
|
-
# a single key or an array of keys--any one of which must match the
|
57
|
-
# current request method in order for the action(s) to be safely called.
|
58
|
-
# (The key should be a symbol: <tt>:get</tt> or <tt>:post</tt>, for
|
55
|
+
# <tt>:method</tt>::
|
56
|
+
# a single key or an array of keys--any one of which must match the
|
57
|
+
# current request method in order for the action(s) to be safely called.
|
58
|
+
# (The key should be a symbol: <tt>:get</tt> or <tt>:post</tt>, for
|
59
59
|
# example.)
|
60
|
-
# <tt>:xhr</tt>::
|
61
|
-
# true/false option to ensure that the request is coming from an Ajax
|
62
|
-
# call or not.
|
63
|
-
# <tt>:add_flash</tt>::
|
64
|
-
# a hash of name/value pairs that should be merged into the session's
|
60
|
+
# <tt>:xhr</tt>::
|
61
|
+
# true/false option to ensure that the request is coming from an Ajax
|
62
|
+
# call or not.
|
63
|
+
# <tt>:add_flash</tt>::
|
64
|
+
# a hash of name/value pairs that should be merged into the session's
|
65
65
|
# flash if the prerequisites cannot be satisfied.
|
66
|
-
# <tt>:add_headers</tt>::
|
67
|
-
# a hash of name/value pairs that should be merged into the response's
|
66
|
+
# <tt>:add_headers</tt>::
|
67
|
+
# a hash of name/value pairs that should be merged into the response's
|
68
68
|
# headers hash if the prerequisites cannot be satisfied.
|
69
|
-
# <tt>:redirect_to</tt>::
|
70
|
-
# the redirection parameters to be used when redirecting if the
|
71
|
-
# prerequisites cannot be satisfied. You can redirect either to named
|
69
|
+
# <tt>:redirect_to</tt>::
|
70
|
+
# the redirection parameters to be used when redirecting if the
|
71
|
+
# prerequisites cannot be satisfied. You can redirect either to named
|
72
72
|
# route or to the action in some controller.
|
73
|
-
# <tt>:render</tt>::
|
73
|
+
# <tt>:render</tt>::
|
74
74
|
# the render parameters to be used when the prerequisites cannot be satisfied.
|
75
|
-
# <tt>:only</tt>::
|
76
|
-
# only apply this verification to the actions specified in the associated
|
75
|
+
# <tt>:only</tt>::
|
76
|
+
# only apply this verification to the actions specified in the associated
|
77
77
|
# array (may also be a single value).
|
78
|
-
# <tt>:except</tt>::
|
79
|
-
# do not apply this verification to the actions specified in the associated
|
78
|
+
# <tt>:except</tt>::
|
79
|
+
# do not apply this verification to the actions specified in the associated
|
80
80
|
# array (may also be a single value).
|
81
81
|
def verify(options={})
|
82
|
-
before_filter :only => options[:only], :except => options[:except] do
|
83
|
-
|
82
|
+
before_filter :only => options[:only], :except => options[:except] do
|
83
|
+
verify_action options
|
84
84
|
end
|
85
85
|
end
|
86
86
|
end
|
@@ -94,31 +94,31 @@ module ActionController #:nodoc:
|
|
94
94
|
apply_remaining_actions(options) unless performed?
|
95
95
|
end
|
96
96
|
end
|
97
|
-
|
97
|
+
|
98
98
|
def prereqs_invalid?(options) # :nodoc:
|
99
|
-
verify_presence_of_keys_in_hash_flash_or_params(options) ||
|
100
|
-
verify_method(options) ||
|
99
|
+
verify_presence_of_keys_in_hash_flash_or_params(options) ||
|
100
|
+
verify_method(options) ||
|
101
101
|
verify_request_xhr_status(options)
|
102
102
|
end
|
103
|
-
|
103
|
+
|
104
104
|
def verify_presence_of_keys_in_hash_flash_or_params(options) # :nodoc:
|
105
|
-
[*options[:params] ].find { |v| params[v].nil? } ||
|
105
|
+
[*options[:params] ].find { |v| v && params[v.to_sym].nil? } ||
|
106
106
|
[*options[:session]].find { |v| session[v].nil? } ||
|
107
107
|
[*options[:flash] ].find { |v| flash[v].nil? }
|
108
108
|
end
|
109
|
-
|
109
|
+
|
110
110
|
def verify_method(options) # :nodoc:
|
111
111
|
[*options[:method]].all? { |v| request.method != v.to_sym } if options[:method]
|
112
112
|
end
|
113
|
-
|
113
|
+
|
114
114
|
def verify_request_xhr_status(options) # :nodoc:
|
115
115
|
request.xhr? != options[:xhr] unless options[:xhr].nil?
|
116
116
|
end
|
117
|
-
|
117
|
+
|
118
118
|
def apply_redirect_to(redirect_to_option) # :nodoc:
|
119
119
|
(redirect_to_option.is_a?(Symbol) && redirect_to_option != :back) ? self.__send__(redirect_to_option) : redirect_to_option
|
120
120
|
end
|
121
|
-
|
121
|
+
|
122
122
|
def apply_remaining_actions(options) # :nodoc:
|
123
123
|
case
|
124
124
|
when options[:render] ; render(options[:render])
|
@@ -127,4 +127,4 @@ module ActionController #:nodoc:
|
|
127
127
|
end
|
128
128
|
end
|
129
129
|
end
|
130
|
-
end
|
130
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module ActionController
|
2
|
+
class Middleware < Metal
|
3
|
+
class ActionMiddleware
|
4
|
+
def initialize(controller, app)
|
5
|
+
@controller, @app = controller, app
|
6
|
+
end
|
7
|
+
|
8
|
+
def call(env)
|
9
|
+
@controller.build(@app).dispatch(:index, env)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class << self
|
14
|
+
alias build new
|
15
|
+
|
16
|
+
def new(app)
|
17
|
+
ActionMiddleware.new(self, app)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
attr_internal :app
|
22
|
+
|
23
|
+
def process(action)
|
24
|
+
response = super
|
25
|
+
self.status, self.headers, self.response_body = response if response.is_a?(Array)
|
26
|
+
response
|
27
|
+
end
|
28
|
+
|
29
|
+
def initialize(app)
|
30
|
+
super()
|
31
|
+
@_app = app
|
32
|
+
end
|
33
|
+
|
34
|
+
def index
|
35
|
+
call(env)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|