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,45 +0,0 @@
|
|
1
|
-
require 'active_record'
|
2
|
-
|
3
|
-
module ActionController #:nodoc:
|
4
|
-
module Caching
|
5
|
-
class Sweeper < ActiveRecord::Observer #:nodoc:
|
6
|
-
attr_accessor :controller
|
7
|
-
|
8
|
-
def before(controller)
|
9
|
-
self.controller = controller
|
10
|
-
callback(:before) if controller.perform_caching
|
11
|
-
end
|
12
|
-
|
13
|
-
def after(controller)
|
14
|
-
callback(:after) if controller.perform_caching
|
15
|
-
# Clean up, so that the controller can be collected after this request
|
16
|
-
self.controller = nil
|
17
|
-
end
|
18
|
-
|
19
|
-
protected
|
20
|
-
# gets the action cache path for the given options.
|
21
|
-
def action_path_for(options)
|
22
|
-
ActionController::Caching::Actions::ActionCachePath.path_for(controller, options)
|
23
|
-
end
|
24
|
-
|
25
|
-
# Retrieve instance variables set in the controller.
|
26
|
-
def assigns(key)
|
27
|
-
controller.instance_variable_get("@#{key}")
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
def callback(timing)
|
32
|
-
controller_callback_method_name = "#{timing}_#{controller.controller_name.underscore}"
|
33
|
-
action_callback_method_name = "#{controller_callback_method_name}_#{controller.action_name}"
|
34
|
-
|
35
|
-
__send__(controller_callback_method_name) if respond_to?(controller_callback_method_name, true)
|
36
|
-
__send__(action_callback_method_name) if respond_to?(action_callback_method_name, true)
|
37
|
-
end
|
38
|
-
|
39
|
-
def method_missing(method, *arguments, &block)
|
40
|
-
return if @controller.nil?
|
41
|
-
@controller.__send__(method, *arguments, &block)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'action_controller/cgi_ext/stdinput'
|
2
|
-
require 'action_controller/cgi_ext/query_extension'
|
3
|
-
require 'action_controller/cgi_ext/cookie'
|
4
|
-
|
5
|
-
class CGI #:nodoc:
|
6
|
-
include ActionController::CgiExt::Stdinput
|
7
|
-
|
8
|
-
class << self
|
9
|
-
alias :escapeHTML_fail_on_nil :escapeHTML
|
10
|
-
|
11
|
-
def escapeHTML(string)
|
12
|
-
escapeHTML_fail_on_nil(string) unless string.nil?
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,112 +0,0 @@
|
|
1
|
-
require 'delegate'
|
2
|
-
|
3
|
-
CGI.module_eval { remove_const "Cookie" }
|
4
|
-
|
5
|
-
# TODO: document how this differs from stdlib CGI::Cookie
|
6
|
-
class CGI #:nodoc:
|
7
|
-
class Cookie < DelegateClass(Array)
|
8
|
-
attr_accessor :name, :value, :path, :domain, :expires
|
9
|
-
attr_reader :secure, :http_only
|
10
|
-
|
11
|
-
# Creates a new CGI::Cookie object.
|
12
|
-
#
|
13
|
-
# The contents of the cookie can be specified as a +name+ and one
|
14
|
-
# or more +value+ arguments. Alternatively, the contents can
|
15
|
-
# be specified as a single hash argument. The possible keywords of
|
16
|
-
# this hash are as follows:
|
17
|
-
#
|
18
|
-
# * <tt>:name</tt> - The name of the cookie. Required.
|
19
|
-
# * <tt>:value</tt> - The cookie's value or list of values.
|
20
|
-
# * <tt>:path</tt> - The path for which this cookie applies. Defaults to the
|
21
|
-
# base directory of the CGI script.
|
22
|
-
# * <tt>:domain</tt> - The domain for which this cookie applies.
|
23
|
-
# * <tt>:expires</tt> - The time at which this cookie expires, as a Time object.
|
24
|
-
# * <tt>:secure</tt> - Whether this cookie is a secure cookie or not (defaults to
|
25
|
-
# +false+). Secure cookies are only transmitted to HTTPS servers.
|
26
|
-
# * <tt>:http_only</tt> - Whether this cookie can be accessed by client side scripts (e.g. document.cookie) or only over HTTP.
|
27
|
-
# More details in http://msdn2.microsoft.com/en-us/library/system.web.httpcookie.httponly.aspx. Defaults to +false+.
|
28
|
-
#
|
29
|
-
# These keywords correspond to attributes of the cookie object.
|
30
|
-
def initialize(name = '', *value)
|
31
|
-
if name.kind_of?(String)
|
32
|
-
@name = name
|
33
|
-
@value = Array(value)
|
34
|
-
@domain = nil
|
35
|
-
@expires = nil
|
36
|
-
@secure = false
|
37
|
-
@http_only = false
|
38
|
-
@path = nil
|
39
|
-
else
|
40
|
-
@name = name['name']
|
41
|
-
@value = (name['value'].kind_of?(String) ? [name['value']] : Array(name['value'])).delete_if(&:blank?)
|
42
|
-
@domain = name['domain']
|
43
|
-
@expires = name['expires']
|
44
|
-
@secure = name['secure'] || false
|
45
|
-
@http_only = name['http_only'] || false
|
46
|
-
@path = name['path']
|
47
|
-
end
|
48
|
-
|
49
|
-
raise ArgumentError, "`name' required" unless @name
|
50
|
-
|
51
|
-
# simple support for IE
|
52
|
-
unless @path
|
53
|
-
%r|^(.*/)|.match(ENV['SCRIPT_NAME'])
|
54
|
-
@path = ($1 or '')
|
55
|
-
end
|
56
|
-
|
57
|
-
super(@value)
|
58
|
-
end
|
59
|
-
|
60
|
-
# Sets whether the Cookie is a secure cookie or not.
|
61
|
-
def secure=(val)
|
62
|
-
@secure = val == true
|
63
|
-
end
|
64
|
-
|
65
|
-
# Sets whether the Cookie is an HTTP only cookie or not.
|
66
|
-
def http_only=(val)
|
67
|
-
@http_only = val == true
|
68
|
-
end
|
69
|
-
|
70
|
-
# Converts the Cookie to its string representation.
|
71
|
-
def to_s
|
72
|
-
buf = ''
|
73
|
-
buf << @name << '='
|
74
|
-
buf << (@value.kind_of?(String) ? CGI::escape(@value) : @value.collect{|v| CGI::escape(v) }.join("&"))
|
75
|
-
buf << '; domain=' << @domain if @domain
|
76
|
-
buf << '; path=' << @path if @path
|
77
|
-
buf << '; expires=' << CGI::rfc1123_date(@expires) if @expires
|
78
|
-
buf << '; secure' if @secure
|
79
|
-
buf << '; HttpOnly' if @http_only
|
80
|
-
buf
|
81
|
-
end
|
82
|
-
|
83
|
-
# FIXME: work around broken 1.8.7 DelegateClass#respond_to?
|
84
|
-
def respond_to?(method, include_private = false)
|
85
|
-
return true if super(method)
|
86
|
-
return __getobj__.respond_to?(method, include_private)
|
87
|
-
end
|
88
|
-
|
89
|
-
# Parses a raw cookie string into a hash of <tt>cookie-name => cookie-object</tt>
|
90
|
-
# pairs.
|
91
|
-
#
|
92
|
-
# cookies = CGI::Cookie::parse("raw_cookie_string")
|
93
|
-
# # => { "name1" => cookie1, "name2" => cookie2, ... }
|
94
|
-
#
|
95
|
-
def self.parse(raw_cookie)
|
96
|
-
cookies = Hash.new([])
|
97
|
-
|
98
|
-
if raw_cookie
|
99
|
-
raw_cookie.split(/;\s?/).each do |pairs|
|
100
|
-
name, value = pairs.split('=',2)
|
101
|
-
next unless name and value
|
102
|
-
name = CGI::unescape(name)
|
103
|
-
unless cookies.has_key?(name)
|
104
|
-
cookies[name] = new(name, CGI::unescape(value))
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
cookies
|
110
|
-
end
|
111
|
-
end # class Cookie
|
112
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
require 'cgi'
|
2
|
-
|
3
|
-
class CGI #:nodoc:
|
4
|
-
module QueryExtension
|
5
|
-
# Remove the old initialize_query method before redefining it.
|
6
|
-
remove_method :initialize_query
|
7
|
-
|
8
|
-
# Neuter CGI parameter parsing.
|
9
|
-
def initialize_query
|
10
|
-
# Fix some strange request environments.
|
11
|
-
env_table['REQUEST_METHOD'] ||= 'GET'
|
12
|
-
|
13
|
-
# POST assumes missing Content-Type is application/x-www-form-urlencoded.
|
14
|
-
if env_table['CONTENT_TYPE'].blank? && env_table['REQUEST_METHOD'] == 'POST'
|
15
|
-
env_table['CONTENT_TYPE'] = 'application/x-www-form-urlencoded'
|
16
|
-
end
|
17
|
-
|
18
|
-
@cookies = CGI::Cookie::parse(env_table['HTTP_COOKIE'] || env_table['COOKIE'])
|
19
|
-
@params = {}
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'cgi'
|
2
|
-
|
3
|
-
module ActionController
|
4
|
-
module CgiExt
|
5
|
-
# Publicize the CGI's internal input stream so we can lazy-read
|
6
|
-
# request.body. Make it writable so we don't have to play $stdin games.
|
7
|
-
module Stdinput
|
8
|
-
def self.included(base)
|
9
|
-
base.class_eval do
|
10
|
-
remove_method :stdinput
|
11
|
-
attr_accessor :stdinput
|
12
|
-
end
|
13
|
-
|
14
|
-
base.alias_method_chain :initialize, :stdinput
|
15
|
-
end
|
16
|
-
|
17
|
-
def initialize_with_stdinput(type = nil, stdinput = $stdin)
|
18
|
-
@stdinput = stdinput
|
19
|
-
@stdinput.set_encoding(Encoding::BINARY) if @stdinput.respond_to?(:set_encoding)
|
20
|
-
initialize_without_stdinput(type || 'query')
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,77 +0,0 @@
|
|
1
|
-
require 'action_controller/cgi_ext'
|
2
|
-
|
3
|
-
module ActionController #:nodoc:
|
4
|
-
class CGIHandler
|
5
|
-
module ProperStream
|
6
|
-
def each
|
7
|
-
while line = gets
|
8
|
-
yield line
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def read(*args)
|
13
|
-
if args.empty?
|
14
|
-
super || ""
|
15
|
-
else
|
16
|
-
super
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.dispatch_cgi(app, cgi, out = $stdout)
|
22
|
-
env = cgi.__send__(:env_table)
|
23
|
-
env.delete "HTTP_CONTENT_LENGTH"
|
24
|
-
|
25
|
-
cgi.stdinput.extend ProperStream
|
26
|
-
|
27
|
-
env["SCRIPT_NAME"] = "" if env["SCRIPT_NAME"] == "/"
|
28
|
-
|
29
|
-
env.update({
|
30
|
-
"rack.version" => [0,1],
|
31
|
-
"rack.input" => cgi.stdinput,
|
32
|
-
"rack.errors" => $stderr,
|
33
|
-
"rack.multithread" => false,
|
34
|
-
"rack.multiprocess" => true,
|
35
|
-
"rack.run_once" => false,
|
36
|
-
"rack.url_scheme" => ["yes", "on", "1"].include?(env["HTTPS"]) ? "https" : "http"
|
37
|
-
})
|
38
|
-
|
39
|
-
env["QUERY_STRING"] ||= ""
|
40
|
-
env["HTTP_VERSION"] ||= env["SERVER_PROTOCOL"]
|
41
|
-
env["REQUEST_PATH"] ||= "/"
|
42
|
-
env.delete "PATH_INFO" if env["PATH_INFO"] == ""
|
43
|
-
|
44
|
-
status, headers, body = app.call(env)
|
45
|
-
begin
|
46
|
-
out.binmode if out.respond_to?(:binmode)
|
47
|
-
out.sync = false if out.respond_to?(:sync=)
|
48
|
-
|
49
|
-
headers['Status'] = status.to_s
|
50
|
-
|
51
|
-
if headers.include?('Set-Cookie')
|
52
|
-
headers['cookie'] = headers.delete('Set-Cookie').split("\n")
|
53
|
-
end
|
54
|
-
|
55
|
-
out.write(cgi.header(headers))
|
56
|
-
|
57
|
-
body.each { |part|
|
58
|
-
out.write part
|
59
|
-
out.flush if out.respond_to?(:flush)
|
60
|
-
}
|
61
|
-
ensure
|
62
|
-
body.close if body.respond_to?(:close)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
class CgiRequest #:nodoc:
|
68
|
-
DEFAULT_SESSION_OPTIONS = {
|
69
|
-
:database_manager => nil,
|
70
|
-
:prefix => "ruby_sess.",
|
71
|
-
:session_path => "/",
|
72
|
-
:session_key => "_session_id",
|
73
|
-
:cookie_only => true,
|
74
|
-
:session_http_only => true
|
75
|
-
}
|
76
|
-
end
|
77
|
-
end
|
@@ -1,197 +0,0 @@
|
|
1
|
-
module ActionController #:nodoc:
|
2
|
-
# Cookies are read and written through ActionController#cookies.
|
3
|
-
#
|
4
|
-
# The cookies being read are the ones received along with the request, the cookies
|
5
|
-
# being written will be sent out with the response. Reading a cookie does not get
|
6
|
-
# the cookie object itself back, just the value it holds.
|
7
|
-
#
|
8
|
-
# Examples for writing:
|
9
|
-
#
|
10
|
-
# # Sets a simple session cookie.
|
11
|
-
# cookies[:user_name] = "david"
|
12
|
-
#
|
13
|
-
# # Sets a cookie that expires in 1 hour.
|
14
|
-
# cookies[:login] = { :value => "XJ-122", :expires => 1.hour.from_now }
|
15
|
-
#
|
16
|
-
# Examples for reading:
|
17
|
-
#
|
18
|
-
# cookies[:user_name] # => "david"
|
19
|
-
# cookies.size # => 2
|
20
|
-
#
|
21
|
-
# Example for deleting:
|
22
|
-
#
|
23
|
-
# cookies.delete :user_name
|
24
|
-
#
|
25
|
-
# Please note that if you specify a :domain when setting a cookie, you must also specify the domain when deleting the cookie:
|
26
|
-
#
|
27
|
-
# cookies[:key] = {
|
28
|
-
# :value => 'a yummy cookie',
|
29
|
-
# :expires => 1.year.from_now,
|
30
|
-
# :domain => 'domain.com'
|
31
|
-
# }
|
32
|
-
#
|
33
|
-
# cookies.delete(:key, :domain => 'domain.com')
|
34
|
-
#
|
35
|
-
# The option symbols for setting cookies are:
|
36
|
-
#
|
37
|
-
# * <tt>:value</tt> - The cookie's value or list of values (as an array).
|
38
|
-
# * <tt>:path</tt> - The path for which this cookie applies. Defaults to the root
|
39
|
-
# of the application.
|
40
|
-
# * <tt>:domain</tt> - The domain for which this cookie applies.
|
41
|
-
# * <tt>:expires</tt> - The time at which this cookie expires, as a Time object.
|
42
|
-
# * <tt>:secure</tt> - Whether this cookie is a only transmitted to HTTPS servers.
|
43
|
-
# Default is +false+.
|
44
|
-
# * <tt>:httponly</tt> - Whether this cookie is accessible via scripting or
|
45
|
-
# only HTTP. Defaults to +false+.
|
46
|
-
module Cookies
|
47
|
-
def self.included(base)
|
48
|
-
base.helper_method :cookies
|
49
|
-
base.cattr_accessor :cookie_verifier_secret
|
50
|
-
end
|
51
|
-
|
52
|
-
protected
|
53
|
-
# Returns the cookie container, which operates as described above.
|
54
|
-
def cookies
|
55
|
-
@cookies ||= CookieJar.new(self)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
class CookieJar < Hash #:nodoc:
|
60
|
-
attr_reader :controller
|
61
|
-
|
62
|
-
def initialize(controller)
|
63
|
-
@controller, @cookies, @secure = controller, controller.request.cookies, controller.request.ssl?
|
64
|
-
super()
|
65
|
-
update(@cookies)
|
66
|
-
end
|
67
|
-
|
68
|
-
# Returns the value of the cookie by +name+, or +nil+ if no such cookie exists.
|
69
|
-
def [](name)
|
70
|
-
super(name.to_s)
|
71
|
-
end
|
72
|
-
|
73
|
-
# Sets the cookie named +name+. The second argument may be the very cookie
|
74
|
-
# value, or a hash of options as documented above.
|
75
|
-
def []=(key, options)
|
76
|
-
if options.is_a?(Hash)
|
77
|
-
options.symbolize_keys!
|
78
|
-
else
|
79
|
-
options = { :value => options }
|
80
|
-
end
|
81
|
-
|
82
|
-
options[:path] = "/" unless options.has_key?(:path)
|
83
|
-
super(key.to_s, options[:value])
|
84
|
-
@controller.response.set_cookie(key, options) if write_cookie?(options)
|
85
|
-
end
|
86
|
-
|
87
|
-
# Removes the cookie on the client machine by setting the value to an empty string
|
88
|
-
# and setting its expiration date into the past. Like <tt>[]=</tt>, you can pass in
|
89
|
-
# an options hash to delete cookies with extra data such as a <tt>:path</tt>.
|
90
|
-
def delete(key, options = {})
|
91
|
-
options.symbolize_keys!
|
92
|
-
options[:path] = "/" unless options.has_key?(:path)
|
93
|
-
value = super(key.to_s)
|
94
|
-
@controller.response.delete_cookie(key, options)
|
95
|
-
value
|
96
|
-
end
|
97
|
-
|
98
|
-
# Returns a jar that'll automatically set the assigned cookies to have an expiration date 20 years from now. Example:
|
99
|
-
#
|
100
|
-
# cookies.permanent[:prefers_open_id] = true
|
101
|
-
# # => Set-Cookie: prefers_open_id=true; path=/; expires=Sun, 16-Dec-2029 03:24:16 GMT
|
102
|
-
#
|
103
|
-
# This jar is only meant for writing. You'll read permanent cookies through the regular accessor.
|
104
|
-
#
|
105
|
-
# This jar allows chaining with the signed jar as well, so you can set permanent, signed cookies. Examples:
|
106
|
-
#
|
107
|
-
# cookies.permanent.signed[:remember_me] = current_user.id
|
108
|
-
# # => Set-Cookie: discount=BAhU--848956038e692d7046deab32b7131856ab20e14e; path=/; expires=Sun, 16-Dec-2029 03:24:16 GMT
|
109
|
-
def permanent
|
110
|
-
@permanent ||= PermanentCookieJar.new(self)
|
111
|
-
end
|
112
|
-
|
113
|
-
# Returns a jar that'll automatically generate a signed representation of cookie value and verify it when reading from
|
114
|
-
# the cookie again. This is useful for creating cookies with values that the user is not supposed to change. If a signed
|
115
|
-
# cookie was tampered with by the user (or a 3rd party), an ActiveSupport::MessageVerifier::InvalidSignature exception will
|
116
|
-
# be raised.
|
117
|
-
#
|
118
|
-
# This jar requires that you set a suitable secret for the verification on ActionController::Base.cookie_verifier_secret.
|
119
|
-
#
|
120
|
-
# Example:
|
121
|
-
#
|
122
|
-
# cookies.signed[:discount] = 45
|
123
|
-
# # => Set-Cookie: discount=BAhpMg==--2c1c6906c90a3bc4fd54a51ffb41dffa4bf6b5f7; path=/
|
124
|
-
#
|
125
|
-
# cookies.signed[:discount] # => 45
|
126
|
-
def signed
|
127
|
-
@signed ||= SignedCookieJar.new(self)
|
128
|
-
end
|
129
|
-
|
130
|
-
private
|
131
|
-
|
132
|
-
def write_cookie?(cookie)
|
133
|
-
@secure || !cookie[:secure] || defined?(Rails.env) && Rails.env.development?
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
class PermanentCookieJar < CookieJar #:nodoc:
|
138
|
-
def initialize(parent_jar)
|
139
|
-
@parent_jar = parent_jar
|
140
|
-
end
|
141
|
-
|
142
|
-
def []=(key, options)
|
143
|
-
if options.is_a?(Hash)
|
144
|
-
options.symbolize_keys!
|
145
|
-
else
|
146
|
-
options = { :value => options }
|
147
|
-
end
|
148
|
-
|
149
|
-
options[:expires] = 20.years.from_now
|
150
|
-
@parent_jar[key] = options
|
151
|
-
end
|
152
|
-
|
153
|
-
def signed
|
154
|
-
@signed ||= SignedCookieJar.new(self)
|
155
|
-
end
|
156
|
-
|
157
|
-
def controller
|
158
|
-
@parent_jar.controller
|
159
|
-
end
|
160
|
-
|
161
|
-
def method_missing(method, *arguments, &block)
|
162
|
-
@parent_jar.send(method, *arguments, &block)
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
class SignedCookieJar < CookieJar #:nodoc:
|
167
|
-
def initialize(parent_jar)
|
168
|
-
unless parent_jar.controller.class.cookie_verifier_secret
|
169
|
-
raise "You must set ActionController::Base.cookie_verifier_secret to use signed cookies"
|
170
|
-
end
|
171
|
-
|
172
|
-
@parent_jar = parent_jar
|
173
|
-
@verifier = ActiveSupport::MessageVerifier.new(@parent_jar.controller.class.cookie_verifier_secret)
|
174
|
-
end
|
175
|
-
|
176
|
-
def [](name)
|
177
|
-
if value = @parent_jar[name]
|
178
|
-
@verifier.verify(value)
|
179
|
-
end
|
180
|
-
end
|
181
|
-
|
182
|
-
def []=(key, options)
|
183
|
-
if options.is_a?(Hash)
|
184
|
-
options.symbolize_keys!
|
185
|
-
options[:value] = @verifier.generate(options[:value])
|
186
|
-
else
|
187
|
-
options = { :value => @verifier.generate(options) }
|
188
|
-
end
|
189
|
-
|
190
|
-
@parent_jar[key] = options
|
191
|
-
end
|
192
|
-
|
193
|
-
def method_missing(method, *arguments, &block)
|
194
|
-
@parent_jar.send(method, *arguments, &block)
|
195
|
-
end
|
196
|
-
end
|
197
|
-
end
|