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
@@ -0,0 +1,28 @@
|
|
1
|
+
module ActionController
|
2
|
+
module Configuration
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
def config
|
6
|
+
@config ||= self.class.config
|
7
|
+
end
|
8
|
+
|
9
|
+
def config=(config)
|
10
|
+
@config = config
|
11
|
+
end
|
12
|
+
|
13
|
+
module ClassMethods
|
14
|
+
def default_config
|
15
|
+
@default_config ||= {}
|
16
|
+
end
|
17
|
+
|
18
|
+
def config
|
19
|
+
self.config ||= default_config
|
20
|
+
end
|
21
|
+
|
22
|
+
def config=(config)
|
23
|
+
@config = ActiveSupport::OrderedHash.new
|
24
|
+
@config.merge!(config)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module ActionController #:nodoc:
|
2
|
+
module Cookies
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
include RackDelegation
|
6
|
+
|
7
|
+
included do
|
8
|
+
helper_method :cookies
|
9
|
+
cattr_accessor :cookie_verifier_secret
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
def cookies
|
14
|
+
request.cookie_jar
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module ActionController
|
2
|
+
class ActionControllerError < StandardError #:nodoc:
|
3
|
+
end
|
4
|
+
|
5
|
+
class RenderError < ActionControllerError #:nodoc:
|
6
|
+
end
|
7
|
+
|
8
|
+
class RoutingError < ActionControllerError #:nodoc:
|
9
|
+
attr_reader :failures
|
10
|
+
def initialize(message, failures=[])
|
11
|
+
super(message)
|
12
|
+
@failures = failures
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class MethodNotAllowed < ActionControllerError #:nodoc:
|
17
|
+
attr_reader :allowed_methods
|
18
|
+
|
19
|
+
def initialize(*allowed_methods)
|
20
|
+
super("Only #{allowed_methods.to_sentence(:locale => :en)} requests are allowed.")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class NotImplemented < MethodNotAllowed #:nodoc:
|
25
|
+
end
|
26
|
+
|
27
|
+
class UnknownController < ActionControllerError #:nodoc:
|
28
|
+
end
|
29
|
+
|
30
|
+
class MissingFile < ActionControllerError #:nodoc:
|
31
|
+
end
|
32
|
+
|
33
|
+
class RenderError < ActionControllerError #:nodoc:
|
34
|
+
end
|
35
|
+
|
36
|
+
class SessionOverflowError < ActionControllerError #:nodoc:
|
37
|
+
DEFAULT_MESSAGE = 'Your session data is larger than the data column in which it is to be stored. You must increase the size of your data column if you intend to store large data.'
|
38
|
+
|
39
|
+
def initialize(message = nil)
|
40
|
+
super(message || DEFAULT_MESSAGE)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
class UnknownHttpMethod < ActionControllerError #:nodoc:
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module ActionController #:nodoc:
|
2
|
+
module Flash
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
delegate :flash, :to => :request
|
7
|
+
delegate :alert, :notice, :to => "request.flash"
|
8
|
+
helper_method :alert, :notice
|
9
|
+
end
|
10
|
+
|
11
|
+
protected
|
12
|
+
def redirect_to(options = {}, response_status_and_flash = {}) #:doc:
|
13
|
+
if alert = response_status_and_flash.delete(:alert)
|
14
|
+
flash[:alert] = alert
|
15
|
+
end
|
16
|
+
|
17
|
+
if notice = response_status_and_flash.delete(:notice)
|
18
|
+
flash[:notice] = notice
|
19
|
+
end
|
20
|
+
|
21
|
+
if other_flashes = response_status_and_flash.delete(:flash)
|
22
|
+
flash.update(other_flashes)
|
23
|
+
end
|
24
|
+
|
25
|
+
super(options, response_status_and_flash)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module ActionController
|
2
|
+
module Head
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
include ActionController::UrlFor
|
5
|
+
|
6
|
+
# Return a response that has no content (merely headers). The options
|
7
|
+
# argument is interpreted to be a hash of header names and values.
|
8
|
+
# This allows you to easily return a response that consists only of
|
9
|
+
# significant headers:
|
10
|
+
#
|
11
|
+
# head :created, :location => person_path(@person)
|
12
|
+
#
|
13
|
+
# It can also be used to return exceptional conditions:
|
14
|
+
#
|
15
|
+
# return head(:method_not_allowed) unless request.post?
|
16
|
+
# return head(:bad_request) unless valid_request?
|
17
|
+
# render
|
18
|
+
def head(status, options = {})
|
19
|
+
options, status = status, nil if status.is_a?(Hash)
|
20
|
+
status ||= options.delete(:status) || :ok
|
21
|
+
location = options.delete(:location)
|
22
|
+
|
23
|
+
options.each do |key, value|
|
24
|
+
headers[key.to_s.dasherize.split(/-/).map { |v| v.capitalize }.join("-")] = value.to_s
|
25
|
+
end
|
26
|
+
|
27
|
+
self.status = status
|
28
|
+
self.location = url_for(location) if location
|
29
|
+
self.content_type = Mime[formats.first]
|
30
|
+
self.response_body = " "
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'active_support/core_ext/class/attribute'
|
2
|
+
|
3
|
+
module ActionController
|
4
|
+
# The Rails framework provides a large number of helpers for working with +assets+, +dates+, +forms+,
|
5
|
+
# +numbers+ and model objects, to name a few. These helpers are available to all templates
|
6
|
+
# by default.
|
7
|
+
#
|
8
|
+
# In addition to using the standard template helpers provided in the Rails framework, creating custom helpers to
|
9
|
+
# extract complicated logic or reusable functionality is strongly encouraged. By default, the controller will
|
10
|
+
# include a helper whose name matches that of the controller, e.g., <tt>MyController</tt> will automatically
|
11
|
+
# include <tt>MyHelper</tt>.
|
12
|
+
#
|
13
|
+
# Additional helpers can be specified using the +helper+ class method in <tt>ActionController::Base</tt> or any
|
14
|
+
# controller which inherits from it.
|
15
|
+
#
|
16
|
+
# ==== Examples
|
17
|
+
# The +to_s+ method from the Time class can be wrapped in a helper method to display a custom message if
|
18
|
+
# the Time object is blank:
|
19
|
+
#
|
20
|
+
# module FormattedTimeHelper
|
21
|
+
# def format_time(time, format=:long, blank_message=" ")
|
22
|
+
# time.blank? ? blank_message : time.to_s(format)
|
23
|
+
# end
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# FormattedTimeHelper can now be included in a controller, using the +helper+ class method:
|
27
|
+
#
|
28
|
+
# class EventsController < ActionController::Base
|
29
|
+
# helper FormattedTimeHelper
|
30
|
+
# def index
|
31
|
+
# @events = Event.find(:all)
|
32
|
+
# end
|
33
|
+
# end
|
34
|
+
#
|
35
|
+
# Then, in any view rendered by <tt>EventController</tt>, the <tt>format_time</tt> method can be called:
|
36
|
+
#
|
37
|
+
# <% @events.each do |event| -%>
|
38
|
+
# <p>
|
39
|
+
# <% format_time(event.time, :short, "N/A") %> | <%= event.name %>
|
40
|
+
# </p>
|
41
|
+
# <% end -%>
|
42
|
+
#
|
43
|
+
# Finally, assuming we have two event instances, one which has a time and one which does not,
|
44
|
+
# the output might look like this:
|
45
|
+
#
|
46
|
+
# 23 Aug 11:30 | Carolina Railhawks Soccer Match
|
47
|
+
# N/A | Carolina Railhaws Training Workshop
|
48
|
+
#
|
49
|
+
module Helpers
|
50
|
+
extend ActiveSupport::Concern
|
51
|
+
|
52
|
+
include AbstractController::Helpers
|
53
|
+
|
54
|
+
included do
|
55
|
+
class_attribute :helpers_path
|
56
|
+
self.helpers_path = []
|
57
|
+
end
|
58
|
+
|
59
|
+
module ClassMethods
|
60
|
+
def helpers_dir
|
61
|
+
ActiveSupport::Deprecation.warn "helpers_dir is deprecated, use helpers_path instead"
|
62
|
+
self.helpers_path
|
63
|
+
end
|
64
|
+
|
65
|
+
def helpers_dir=(value)
|
66
|
+
ActiveSupport::Deprecation.warn "helpers_dir= is deprecated, use helpers_path= instead"
|
67
|
+
self.helpers_path = Array(value)
|
68
|
+
end
|
69
|
+
|
70
|
+
# Declares helper accessors for controller attributes. For example, the
|
71
|
+
# following adds new +name+ and <tt>name=</tt> instance methods to a
|
72
|
+
# controller and makes them available to the view:
|
73
|
+
# helper_attr :name
|
74
|
+
# attr_accessor :name
|
75
|
+
#
|
76
|
+
# ==== Parameters
|
77
|
+
# *attrs<Array[String, Symbol]>:: Names of attributes to be converted
|
78
|
+
# into helpers.
|
79
|
+
def helper_attr(*attrs)
|
80
|
+
attrs.flatten.each { |attr| helper_method(attr, "#{attr}=") }
|
81
|
+
end
|
82
|
+
|
83
|
+
# Provides a proxy to access helpers methods from outside the view.
|
84
|
+
def helpers
|
85
|
+
@helper_proxy ||= ActionView::Base.new.extend(_helpers)
|
86
|
+
end
|
87
|
+
|
88
|
+
private
|
89
|
+
# Overwrite _modules_for_helpers to accept :all as argument, which loads
|
90
|
+
# all helpers in helpers_dir.
|
91
|
+
#
|
92
|
+
# ==== Parameters
|
93
|
+
# args<Array[String, Symbol, Module, all]>:: A list of helpers
|
94
|
+
#
|
95
|
+
# ==== Returns
|
96
|
+
# Array[Module]:: A normalized list of modules for the list of
|
97
|
+
# helpers provided.
|
98
|
+
def _modules_for_helpers(args)
|
99
|
+
args += all_application_helpers if args.delete(:all)
|
100
|
+
super(args)
|
101
|
+
end
|
102
|
+
|
103
|
+
# Extract helper names from files in app/helpers/**/*_helper.rb
|
104
|
+
def all_application_helpers
|
105
|
+
helpers = []
|
106
|
+
helpers_path.each do |path|
|
107
|
+
extract = /^#{Regexp.quote(path)}\/?(.*)_helper.rb$/
|
108
|
+
helpers += Dir["#{path}/**/*_helper.rb"].map { |file| file.sub(extract, '\1') }
|
109
|
+
end
|
110
|
+
helpers.sort!
|
111
|
+
helpers.uniq!
|
112
|
+
helpers
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'active_support/core_ext/class/attribute'
|
2
|
+
|
3
|
+
module ActionController
|
4
|
+
# ActionController::HideActions adds the ability to prevent public methods on a controller
|
5
|
+
# to be called as actions.
|
6
|
+
module HideActions
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
included do
|
10
|
+
class_attribute :hidden_actions
|
11
|
+
self.hidden_actions = Set.new
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
# Overrides AbstractController::Base#action_method? to return false if the
|
17
|
+
# action name is in the list of hidden actions.
|
18
|
+
def action_method?(action_name)
|
19
|
+
self.class.visible_action?(action_name) do
|
20
|
+
!self.class.hidden_actions.include?(action_name) && super
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
module ClassMethods
|
25
|
+
# Sets all of the actions passed in as hidden actions.
|
26
|
+
#
|
27
|
+
# ==== Parameters
|
28
|
+
# *args<#to_s>:: A list of actions
|
29
|
+
def hide_action(*args)
|
30
|
+
self.hidden_actions = hidden_actions.dup.merge(args.map(&:to_s))
|
31
|
+
end
|
32
|
+
|
33
|
+
def inherited(klass)
|
34
|
+
klass.instance_variable_set("@visible_actions", {})
|
35
|
+
super
|
36
|
+
end
|
37
|
+
|
38
|
+
def visible_action?(action_name)
|
39
|
+
return @visible_actions[action_name] if @visible_actions.key?(action_name)
|
40
|
+
@visible_actions[action_name] = yield
|
41
|
+
end
|
42
|
+
|
43
|
+
# Overrides AbstractController::Base#action_methods to remove any methods
|
44
|
+
# that are listed as hidden methods.
|
45
|
+
def action_methods
|
46
|
+
@action_methods ||= Set.new(super.reject {|name| hidden_actions.include?(name)})
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'active_support/base64'
|
2
|
+
|
1
3
|
module ActionController
|
2
4
|
module HttpAuthentication
|
3
5
|
# Makes it dead easy to do HTTP Basic authentication.
|
@@ -113,7 +115,7 @@ module ActionController
|
|
113
115
|
end
|
114
116
|
|
115
117
|
def authenticate_with_http_basic(&login_procedure)
|
116
|
-
HttpAuthentication::Basic.authenticate(
|
118
|
+
HttpAuthentication::Basic.authenticate(request, &login_procedure)
|
117
119
|
end
|
118
120
|
|
119
121
|
def request_http_basic_authentication(realm = "Application")
|
@@ -121,9 +123,9 @@ module ActionController
|
|
121
123
|
end
|
122
124
|
end
|
123
125
|
|
124
|
-
def authenticate(
|
125
|
-
unless authorization(
|
126
|
-
login_procedure.call(*user_name_and_password(
|
126
|
+
def authenticate(request, &login_procedure)
|
127
|
+
unless authorization(request).blank?
|
128
|
+
login_procedure.call(*user_name_and_password(request))
|
127
129
|
end
|
128
130
|
end
|
129
131
|
|
@@ -148,7 +150,8 @@ module ActionController
|
|
148
150
|
|
149
151
|
def authentication_request(controller, realm)
|
150
152
|
controller.headers["WWW-Authenticate"] = %(Basic realm="#{realm.gsub(/"/, "")}")
|
151
|
-
controller.
|
153
|
+
controller.response_body = "HTTP Basic: Access denied.\n"
|
154
|
+
controller.status = 401
|
152
155
|
end
|
153
156
|
end
|
154
157
|
|
@@ -162,7 +165,7 @@ module ActionController
|
|
162
165
|
|
163
166
|
# Authenticate with HTTP Digest, returns true or false
|
164
167
|
def authenticate_with_http_digest(realm = "Application", &password_procedure)
|
165
|
-
HttpAuthentication::Digest.authenticate(
|
168
|
+
HttpAuthentication::Digest.authenticate(request, realm, &password_procedure)
|
166
169
|
end
|
167
170
|
|
168
171
|
# Render output including the HTTP Digest authentication header
|
@@ -172,8 +175,8 @@ module ActionController
|
|
172
175
|
end
|
173
176
|
|
174
177
|
# Returns false on a valid response, true otherwise
|
175
|
-
def authenticate(
|
176
|
-
authorization(
|
178
|
+
def authenticate(request, realm, &password_procedure)
|
179
|
+
authorization(request) && validate_digest_response(request, realm, &password_procedure)
|
177
180
|
end
|
178
181
|
|
179
182
|
def authorization(request)
|
@@ -227,9 +230,9 @@ module ActionController
|
|
227
230
|
end
|
228
231
|
|
229
232
|
def decode_credentials(header)
|
230
|
-
header.to_s.gsub(/^Digest\s+/,'').split(',').inject({}
|
233
|
+
header.to_s.gsub(/^Digest\s+/,'').split(',').inject({}) do |hash, pair|
|
231
234
|
key, value = pair.split('=', 2)
|
232
|
-
hash[key.strip] = value.to_s.gsub(/^"|"$/,'').gsub(/'/, '')
|
235
|
+
hash[key.strip.to_sym] = value.to_s.gsub(/^"|"$/,'').gsub(/'/, '')
|
233
236
|
hash
|
234
237
|
end
|
235
238
|
end
|
@@ -241,7 +244,8 @@ module ActionController
|
|
241
244
|
def authentication_request(controller, realm, message = nil)
|
242
245
|
message ||= "HTTP Digest: Access denied.\n"
|
243
246
|
authentication_header(controller, realm)
|
244
|
-
controller.
|
247
|
+
controller.response_body = message
|
248
|
+
controller.status = 401
|
245
249
|
end
|
246
250
|
|
247
251
|
# Uses an MD5 digest based on time to generate a value to be used only once.
|
@@ -275,12 +279,12 @@ module ActionController
|
|
275
279
|
#
|
276
280
|
# The nonce is opaque to the client. Composed of Time, and hash of Time with secret
|
277
281
|
# key from the Rails session secret generated upon creation of project. Ensures
|
278
|
-
# the time cannot be
|
282
|
+
# the time cannot be modified by client.
|
279
283
|
def nonce(time = Time.now)
|
280
284
|
t = time.to_i
|
281
285
|
hashed = [t, secret_key]
|
282
286
|
digest = ::Digest::MD5.hexdigest(hashed.join(":"))
|
283
|
-
Base64.encode64("#{t}:#{digest}").gsub("\n", '')
|
287
|
+
ActiveSupport::Base64.encode64("#{t}:#{digest}").gsub("\n", '')
|
284
288
|
end
|
285
289
|
|
286
290
|
# Might want a shorter timeout depending on whether the request
|
@@ -289,8 +293,7 @@ module ActionController
|
|
289
293
|
# allow a user to use new nonce without prompting user again for their
|
290
294
|
# username and password.
|
291
295
|
def validate_nonce(request, value, seconds_to_timeout=5*60)
|
292
|
-
|
293
|
-
t = Base64.decode64(value).split(":").first.to_i
|
296
|
+
t = ActiveSupport::Base64.decode64(value).split(":").first.to_i
|
294
297
|
nonce(t) == value && (t - Time.now.to_i).abs <= seconds_to_timeout
|
295
298
|
end
|
296
299
|
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require 'abstract_controller/logger'
|
2
|
+
|
3
|
+
module ActionController
|
4
|
+
# Adds instrumentation to several ends in ActionController::Base. It also provides
|
5
|
+
# some hooks related with process_action, this allows an ORM like ActiveRecord
|
6
|
+
# and/or DataMapper to plug in ActionController and show related information.
|
7
|
+
#
|
8
|
+
# Check ActiveRecord::Railties::ControllerRuntime for an example.
|
9
|
+
module Instrumentation
|
10
|
+
extend ActiveSupport::Concern
|
11
|
+
|
12
|
+
include AbstractController::Logger
|
13
|
+
|
14
|
+
attr_internal :view_runtime
|
15
|
+
|
16
|
+
def process_action(action, *args)
|
17
|
+
raw_payload = {
|
18
|
+
:controller => self.class.name,
|
19
|
+
:action => self.action_name,
|
20
|
+
:params => request.filtered_parameters,
|
21
|
+
:formats => request.formats.map(&:to_sym),
|
22
|
+
:method => request.method,
|
23
|
+
:path => (request.request_uri rescue "unknown")
|
24
|
+
}
|
25
|
+
|
26
|
+
ActiveSupport::Notifications.instrument("action_controller.start_processing", raw_payload.dup)
|
27
|
+
|
28
|
+
ActiveSupport::Notifications.instrument("action_controller.process_action", raw_payload) do |payload|
|
29
|
+
result = super
|
30
|
+
payload[:status] = response.status
|
31
|
+
append_info_to_payload(payload)
|
32
|
+
result
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def render(*args)
|
37
|
+
render_output = nil
|
38
|
+
self.view_runtime = cleanup_view_runtime do
|
39
|
+
Benchmark.ms { render_output = super }
|
40
|
+
end
|
41
|
+
render_output
|
42
|
+
end
|
43
|
+
|
44
|
+
def send_file(path, options={})
|
45
|
+
ActiveSupport::Notifications.instrument("action_controller.send_file",
|
46
|
+
options.merge(:path => path)) do
|
47
|
+
super
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def send_data(data, options = {})
|
52
|
+
ActiveSupport::Notifications.instrument("action_controller.send_data", options) do
|
53
|
+
super
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def redirect_to(*args)
|
58
|
+
ActiveSupport::Notifications.instrument("action_controller.redirect_to") do |payload|
|
59
|
+
result = super
|
60
|
+
payload[:status] = self.status
|
61
|
+
payload[:location] = self.location
|
62
|
+
result
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
protected
|
67
|
+
|
68
|
+
# A hook which allows you to clean up any time taken into account in
|
69
|
+
# views wrongly, like database querying time.
|
70
|
+
#
|
71
|
+
# def cleanup_view_runtime
|
72
|
+
# super - time_taken_in_something_expensive
|
73
|
+
# end
|
74
|
+
#
|
75
|
+
# :api: plugin
|
76
|
+
def cleanup_view_runtime #:nodoc:
|
77
|
+
yield
|
78
|
+
end
|
79
|
+
|
80
|
+
# Everytime after an action is processed, this method is invoked
|
81
|
+
# with the payload, so you can add more information.
|
82
|
+
# :api: plugin
|
83
|
+
def append_info_to_payload(payload) #:nodoc:
|
84
|
+
payload[:view_runtime] = view_runtime
|
85
|
+
end
|
86
|
+
|
87
|
+
module ClassMethods
|
88
|
+
# A hook which allows other frameworks to log what happened during
|
89
|
+
# controller process action. This method should return an array
|
90
|
+
# with the messages to be added.
|
91
|
+
# :api: plugin
|
92
|
+
def log_process_action(payload) #:nodoc:
|
93
|
+
messages, view_runtime = [], payload[:view_runtime]
|
94
|
+
messages << ("Views: %.1fms" % view_runtime.to_f) if view_runtime
|
95
|
+
messages
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|