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
data/CHANGELOG
CHANGED
@@ -1,32 +1,4 @@
|
|
1
|
-
*
|
2
|
-
|
3
|
-
* Two security fixes. CVE-2011-0446, CVE-2011-0447
|
4
|
-
|
5
|
-
*2.3.10 (October 15, 2010)*
|
6
|
-
|
7
|
-
*2.3.9 (September 4, 2010)*
|
8
|
-
|
9
|
-
* Version bump.
|
10
|
-
|
11
|
-
|
12
|
-
*2.3.8 (May 24, 2010)*
|
13
|
-
|
14
|
-
* HTML safety: fix compatibility *without* the optional rails_xss plugin.
|
15
|
-
|
16
|
-
|
17
|
-
*2.3.7 (May 24, 2010)*
|
18
|
-
|
19
|
-
* HTML safety: fix compatibility with the optional rails_xss plugin. [Nathan Weizenbaum, Santiago Pastorino]
|
20
|
-
|
21
|
-
|
22
|
-
*2.3.6 (May 23, 2010)*
|
23
|
-
|
24
|
-
* JSON: set Base.include_root_in_json = true to include a root value in the JSON: {"post": {"title": ...}}. Mirrors the Active Record option. #2584 [Matthew Moore, Joe Martinez, Elad Meidar, Santiago Pastorino]
|
25
|
-
|
26
|
-
* Ruby 1.9: ERB template encoding using a magic comment at the top of the file. [Jeremy Kemper]
|
27
|
-
<%# encoding: utf-8 %>
|
28
|
-
|
29
|
-
* Fixed that default locale templates should be used if the current locale template is missing [DHH]
|
1
|
+
*Edge*
|
30
2
|
|
31
3
|
* Fixed that PrototypeHelper#update_page should return html_safe [DHH]
|
32
4
|
|
@@ -34,7 +6,9 @@
|
|
34
6
|
|
35
7
|
* Fixed that fragment caching should return a cache hit as html_safe (or it would all just get escaped) [DHH]
|
36
8
|
|
37
|
-
*
|
9
|
+
* Added that ActionController::Base now does helper :all instead of relying on the default ApplicationController in Rails to do it [DHH]
|
10
|
+
|
11
|
+
* Added ActionDispatch::Request#authorization to access the http authentication header regardless of its proxy hiding [DHH]
|
38
12
|
|
39
13
|
* Added :alert, :notice, and :flash as options to ActionController::Base#redirect_to that'll automatically set the proper flash before the redirection [DHH]. Examples:
|
40
14
|
|
@@ -47,45 +21,22 @@
|
|
47
21
|
|
48
22
|
* Added ActionController::Base#notice/= and ActionController::Base#alert/= as a convenience accessors in both the controller and the view for flash[:notice]/= and flash[:alert]/= [DHH]
|
49
23
|
|
50
|
-
* Added cookies.permanent, cookies.signed, and cookies.permanent.signed accessor for common cookie actions [DHH]. Examples:
|
51
24
|
|
52
|
-
|
53
|
-
# => Set-Cookie: prefers_open_id=true; path=/; expires=Sun, 16-Dec-2029 03:24:16 GMT
|
54
|
-
|
55
|
-
cookies.signed[:discount] = 45
|
56
|
-
# => Set-Cookie: discount=BAhpMg==--2c1c6906c90a3bc4fd54a51ffb41dffa4bf6b5f7; path=/
|
57
|
-
|
58
|
-
cookies.signed[:discount]
|
59
|
-
# => 45 (if the cookie was changed, you'll get a InvalidSignature exception)
|
60
|
-
|
61
|
-
cookies.permanent.signed[:remember_me] = current_user.id
|
62
|
-
# => Set-Cookie: discount=BAhU--848956038e692d7046deab32b7131856ab20e14e; path=/; expires=Sun, 16-Dec-2029 03:24:16 GMT
|
63
|
-
|
64
|
-
...to use the signed cookies, you need to set a secret to ActionController::Base.cookie_verifier_secret (automatically done in config/initializers/cookie_verification_secret.rb for new Rails applications).
|
65
|
-
|
66
|
-
|
67
|
-
*2.3.5 (November 25, 2009)*
|
68
|
-
|
69
|
-
* Minor Bug Fixes and deprecation warnings
|
70
|
-
|
71
|
-
* Ruby 1.9 Support
|
72
|
-
|
73
|
-
* Fix filtering parameters when there are Fixnum or other un-dupable values.
|
74
|
-
|
75
|
-
* Improvements to ActionView::TestCase
|
76
|
-
|
77
|
-
* Compatiblity with the rails_xss plugin
|
25
|
+
* Introduce grouped_collection_select helper. #1249 [Dan Codeape, Erik Ostrom]
|
78
26
|
|
79
|
-
*
|
27
|
+
* Make sure javascript_include_tag/stylesheet_link_tag does not append ".js" or ".css" onto external urls. #1664 [Matthew Rudy Jacobs]
|
80
28
|
|
81
|
-
*
|
29
|
+
* Ruby 1.9: fix Content-Length for multibyte send_data streaming. #2661 [Sava Chankov]
|
82
30
|
|
83
|
-
*
|
31
|
+
* Ruby 1.9: ERB template encoding using a magic comment at the top of the file. [Jeremy Kemper]
|
32
|
+
<%# encoding: utf-8 %>
|
84
33
|
|
85
|
-
*
|
34
|
+
* Change integration test helpers to accept Rack environment instead of just HTTP Headers [Pratik Naik]
|
86
35
|
|
36
|
+
Before : get '/path', {}, 'Accept' => 'text/javascript'
|
37
|
+
After : get '/path', {}, 'HTTP_ACCEPT' => 'text/javascript'
|
87
38
|
|
88
|
-
*
|
39
|
+
* Instead of checking Rails.env.test? in Failsafe middleware, check env["rails.raise_exceptions"] [Bryan Helmkamp]
|
89
40
|
|
90
41
|
* Fixed that TestResponse.cookies was returning cookies unescaped #1867 [Doug McInnes]
|
91
42
|
|
@@ -1935,7 +1886,7 @@ superclass' view_paths. [Rick Olson]
|
|
1935
1886
|
|
1936
1887
|
* Update documentation for erb trim syntax. #5651 [matt@mattmargolis.net]
|
1937
1888
|
|
1938
|
-
* Pass :id => nil or :class => nil to error_messages_for to supress that html attribute. #3586 [olivier_ansaldi@yahoo.com]
|
1889
|
+
* Pass :id => nil or :class => nil to error_messages_for to supress that html attribute. #3586 [olivier_ansaldi@yahoo.com, sebastien@goetzilla.info]
|
1939
1890
|
|
1940
1891
|
* Reset @html_document between requests so assert_tag works. #4810 [Jarkko Laine, easleydp@gmail.com]
|
1941
1892
|
|
@@ -2532,7 +2483,7 @@ superclass' view_paths. [Rick Olson]
|
|
2532
2483
|
|
2533
2484
|
* Provide support for decimal columns to form helpers. Closes #5672. [Dave Thomas]
|
2534
2485
|
|
2535
|
-
* Pass :id => nil or :class => nil to error_messages_for to supress that html attribute. #3586 [olivier_ansaldi@yahoo.com]
|
2486
|
+
* Pass :id => nil or :class => nil to error_messages_for to supress that html attribute. #3586 [olivier_ansaldi@yahoo.com, sebastien@goetzilla.info]
|
2536
2487
|
|
2537
2488
|
* Reset @html_document between requests so assert_tag works. #4810 [Jarkko Laine, easleydp@gmail.com]
|
2538
2489
|
|
data/README
CHANGED
@@ -37,15 +37,15 @@ A short rundown of the major features:
|
|
37
37
|
def show
|
38
38
|
@customer = find_customer
|
39
39
|
end
|
40
|
-
|
40
|
+
|
41
41
|
def update
|
42
42
|
@customer = find_customer
|
43
43
|
@customer.attributes = params[:customer]
|
44
|
-
@customer.save ?
|
44
|
+
@customer.save ?
|
45
45
|
redirect_to(:action => "show") :
|
46
46
|
render(:action => "edit")
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
private
|
50
50
|
def find_customer() Customer.find(params[:id]) end
|
51
51
|
end
|
@@ -64,7 +64,7 @@ A short rundown of the major features:
|
|
64
64
|
<% unless @person.is_client? %>
|
65
65
|
Not for clients to see...
|
66
66
|
<% end %>
|
67
|
-
|
67
|
+
|
68
68
|
{Learn more}[link:classes/ActionView.html]
|
69
69
|
|
70
70
|
|
@@ -99,24 +99,24 @@ A short rundown of the major features:
|
|
99
99
|
before_filter :authenticate, :cache, :audit
|
100
100
|
after_filter { |c| c.response.body = Gzip::compress(c.response.body) }
|
101
101
|
after_filter LocalizeFilter
|
102
|
-
|
102
|
+
|
103
103
|
def index
|
104
104
|
# Before this action is run, the user will be authenticated, the cache
|
105
105
|
# will be examined to see if a valid copy of the results already
|
106
106
|
# exists, and the action will be logged for auditing.
|
107
|
-
|
108
|
-
# After this action has run, the output will first be localized then
|
107
|
+
|
108
|
+
# After this action has run, the output will first be localized then
|
109
109
|
# compressed to minimize bandwidth usage
|
110
110
|
end
|
111
|
-
|
111
|
+
|
112
112
|
private
|
113
113
|
def authenticate
|
114
114
|
# Implement the filter with full access to both request and response
|
115
115
|
end
|
116
116
|
end
|
117
|
-
|
117
|
+
|
118
118
|
{Learn more}[link:classes/ActionController/Filters/ClassMethods.html]
|
119
|
-
|
119
|
+
|
120
120
|
|
121
121
|
* Helpers for forms, dates, action links, and text
|
122
122
|
|
@@ -124,26 +124,26 @@ A short rundown of the major features:
|
|
124
124
|
<%= html_date_select(Date.today) %>
|
125
125
|
<%= link_to "New post", :controller => "post", :action => "new" %>
|
126
126
|
<%= truncate(post.title, :length => 25) %>
|
127
|
-
|
127
|
+
|
128
128
|
{Learn more}[link:classes/ActionView/Helpers.html]
|
129
129
|
|
130
130
|
|
131
|
-
* Layout sharing for template reuse (think simple version of Struts
|
131
|
+
* Layout sharing for template reuse (think simple version of Struts
|
132
132
|
Tiles[http://jakarta.apache.org/struts/userGuide/dev_tiles.html])
|
133
133
|
|
134
134
|
class WeblogController < ActionController::Base
|
135
135
|
layout "weblog_layout"
|
136
|
-
|
136
|
+
|
137
137
|
def hello_world
|
138
138
|
end
|
139
139
|
end
|
140
140
|
|
141
141
|
Layout file (called weblog_layout):
|
142
142
|
<html><body><%= yield %></body></html>
|
143
|
-
|
143
|
+
|
144
144
|
Template for hello_world action:
|
145
145
|
<h1>Hello world</h1>
|
146
|
-
|
146
|
+
|
147
147
|
Result of running hello_world action:
|
148
148
|
<html><body><h1>Hello world</h1></body></html>
|
149
149
|
|
@@ -155,26 +155,17 @@ A short rundown of the major features:
|
|
155
155
|
map.connect 'clients/:client_name/:project_name/:controller/:action'
|
156
156
|
|
157
157
|
Accessing /clients/37signals/basecamp/project/dash calls ProjectController#dash with
|
158
|
-
{ "client_name" => "37signals", "project_name" => "basecamp" }
|
159
|
-
|
160
|
-
From that URL you can redirect providing new parameters in a number of ways:
|
161
|
-
|
162
|
-
redirect_to :action => "edit"
|
163
|
-
# /clients/37signals/basecamp/project/edit
|
164
|
-
|
165
|
-
redirect_to :client_name => "nextangle", :project_name => "rails"
|
166
|
-
# /clients/nextangle/rails/project/dash
|
158
|
+
{ "client_name" => "37signals", "project_name" => "basecamp" } in params[:params]
|
167
159
|
|
168
|
-
|
160
|
+
From that URL, you can rewrite the redirect in a number of ways:
|
169
161
|
|
162
|
+
redirect_to(:action => "edit") =>
|
163
|
+
/clients/37signals/basecamp/project/dash
|
170
164
|
|
171
|
-
|
165
|
+
redirect_to(:client_name => "nextangle", :project_name => "rails") =>
|
166
|
+
/clients/nextangle/rails/project/dash
|
172
167
|
|
173
|
-
|
174
|
-
link_to_remote "Delete this post", :update => "posts",
|
175
|
-
:url => { :action => "destroy", :id => post.id }
|
176
|
-
|
177
|
-
{Learn more}[link:classes/ActionView/Helpers/JavaScriptHelper.html]
|
168
|
+
{Learn more}[link:classes/ActionController/Base.html]
|
178
169
|
|
179
170
|
|
180
171
|
* Easy testing of both controller and rendered template through ActionController::TestCase
|
@@ -218,18 +209,18 @@ A short rundown of the major features:
|
|
218
209
|
class WeblogController < ActionController::Base
|
219
210
|
caches_page :show
|
220
211
|
caches_action :account
|
221
|
-
|
212
|
+
|
222
213
|
def show
|
223
|
-
# the output of the method will be cached as
|
214
|
+
# the output of the method will be cached as
|
224
215
|
# ActionController::Base.page_cache_directory + "/weblog/show/n.html"
|
225
216
|
# and the web server will pick it up without even hitting Rails
|
226
217
|
end
|
227
|
-
|
218
|
+
|
228
219
|
def account
|
229
220
|
# the output of the method will be cached in the fragment store
|
230
221
|
# but Rails is hit to retrieve it, so filters are run
|
231
222
|
end
|
232
|
-
|
223
|
+
|
233
224
|
def update
|
234
225
|
List.update(params[:list][:id], params[:list])
|
235
226
|
expire_page :action => "show", :id => params[:list][:id]
|
@@ -256,26 +247,26 @@ A short rundown of the major features:
|
|
256
247
|
class AccountController < ActionController::Base
|
257
248
|
scaffold :account
|
258
249
|
end
|
259
|
-
|
250
|
+
|
260
251
|
The AccountController now has the full CRUD range of actions and default
|
261
252
|
templates: list, show, destroy, new, create, edit, update
|
262
|
-
|
253
|
+
|
263
254
|
{Learn more}[link:classes/ActionController/Scaffolding/ClassMethods.html]
|
264
255
|
|
265
256
|
|
266
257
|
* Form building for Active Record model objects
|
267
258
|
|
268
|
-
The post object has a title (varchar), content (text), and
|
259
|
+
The post object has a title (varchar), content (text), and
|
269
260
|
written_on (date)
|
270
261
|
|
271
262
|
<%= form "post" %>
|
272
|
-
|
263
|
+
|
273
264
|
...will generate something like (the selects will have more options, of
|
274
265
|
course):
|
275
|
-
|
266
|
+
|
276
267
|
<form action="create" method="POST">
|
277
268
|
<p>
|
278
|
-
<b>Title:</b><br/>
|
269
|
+
<b>Title:</b><br/>
|
279
270
|
<input type="text" name="post[title]" value="<%= @post.title %>" />
|
280
271
|
</p>
|
281
272
|
<p>
|
@@ -293,7 +284,7 @@ A short rundown of the major features:
|
|
293
284
|
</form>
|
294
285
|
|
295
286
|
This form generates a params[:post] array that can be used directly in a save action:
|
296
|
-
|
287
|
+
|
297
288
|
class WeblogController < ActionController::Base
|
298
289
|
def create
|
299
290
|
post = Post.create(params[:post])
|
@@ -318,19 +309,19 @@ methods:
|
|
318
309
|
|
319
310
|
class WeblogController < ActionController::Base
|
320
311
|
layout "weblog/layout"
|
321
|
-
|
312
|
+
|
322
313
|
def index
|
323
314
|
@posts = Post.find(:all)
|
324
315
|
end
|
325
|
-
|
316
|
+
|
326
317
|
def show
|
327
318
|
@post = Post.find(params[:id])
|
328
319
|
end
|
329
|
-
|
320
|
+
|
330
321
|
def new
|
331
322
|
@post = Post.new
|
332
323
|
end
|
333
|
-
|
324
|
+
|
334
325
|
def create
|
335
326
|
@post = Post.create(params[:post])
|
336
327
|
redirect_to :action => "show", :id => @post.id
|
@@ -364,7 +355,7 @@ And the templates look like this:
|
|
364
355
|
|
365
356
|
weblog/new.html.erb:
|
366
357
|
<%= form "post" %>
|
367
|
-
|
358
|
+
|
368
359
|
This simple setup will list all the posts in the system on the index page,
|
369
360
|
which is called by accessing /weblog/. It uses the form builder for the Active
|
370
361
|
Record model to make the new screen, which in turn hands everything over to
|
@@ -379,7 +370,7 @@ The latest version of Action Pack can be found at
|
|
379
370
|
|
380
371
|
* http://rubyforge.org/project/showfiles.php?group_id=249
|
381
372
|
|
382
|
-
Documentation can be found at
|
373
|
+
Documentation can be found at
|
383
374
|
|
384
375
|
* http://api.rubyonrails.com
|
385
376
|
|
@@ -0,0 +1,22 @@
|
|
1
|
+
activesupport_path = File.expand_path('../../../activesupport/lib', __FILE__)
|
2
|
+
$:.unshift(activesupport_path) if File.directory?(activesupport_path) && !$:.include?(activesupport_path)
|
3
|
+
|
4
|
+
require 'active_support/ruby/shim'
|
5
|
+
require 'active_support/dependencies/autoload'
|
6
|
+
require 'active_support/core_ext/module/attr_internal'
|
7
|
+
require 'active_support/core_ext/module/delegation'
|
8
|
+
|
9
|
+
module AbstractController
|
10
|
+
extend ActiveSupport::Autoload
|
11
|
+
|
12
|
+
autoload :Base
|
13
|
+
autoload :Callbacks
|
14
|
+
autoload :Collector
|
15
|
+
autoload :Compatibility
|
16
|
+
autoload :Helpers
|
17
|
+
autoload :Layouts
|
18
|
+
autoload :LocalizedCache
|
19
|
+
autoload :Logger
|
20
|
+
autoload :Rendering
|
21
|
+
autoload :Translation
|
22
|
+
end
|
@@ -0,0 +1,191 @@
|
|
1
|
+
module AbstractController
|
2
|
+
class Error < StandardError; end
|
3
|
+
class ActionNotFound < StandardError; end
|
4
|
+
|
5
|
+
class Base
|
6
|
+
attr_internal :response_body
|
7
|
+
attr_internal :action_name
|
8
|
+
attr_internal :formats
|
9
|
+
|
10
|
+
class << self
|
11
|
+
attr_reader :abstract
|
12
|
+
alias_method :abstract?, :abstract
|
13
|
+
|
14
|
+
# Define a controller as abstract. See internal_methods for more
|
15
|
+
# details.
|
16
|
+
def abstract!
|
17
|
+
@abstract = true
|
18
|
+
end
|
19
|
+
|
20
|
+
def inherited(klass)
|
21
|
+
::AbstractController::Base.descendants << klass.to_s
|
22
|
+
super
|
23
|
+
end
|
24
|
+
|
25
|
+
# A list of all descendents of AbstractController::Base. This is
|
26
|
+
# useful for initializers which need to add behavior to all controllers.
|
27
|
+
def descendants
|
28
|
+
@descendants ||= []
|
29
|
+
end
|
30
|
+
|
31
|
+
# A list of all internal methods for a controller. This finds the first
|
32
|
+
# abstract superclass of a controller, and gets a list of all public
|
33
|
+
# instance methods on that abstract class. Public instance methods of
|
34
|
+
# a controller would normally be considered action methods, so we
|
35
|
+
# are removing those methods on classes declared as abstract
|
36
|
+
# (ActionController::Metal and ActionController::Base are defined
|
37
|
+
# as abstract)
|
38
|
+
def internal_methods
|
39
|
+
controller = self
|
40
|
+
controller = controller.superclass until controller.abstract?
|
41
|
+
controller.public_instance_methods(true)
|
42
|
+
end
|
43
|
+
|
44
|
+
# The list of hidden actions to an empty Array. Defaults to an
|
45
|
+
# empty Array. This can be modified by other modules or subclasses
|
46
|
+
# to specify particular actions as hidden.
|
47
|
+
#
|
48
|
+
# ==== Returns
|
49
|
+
# Array[String]:: An array of method names that should not be
|
50
|
+
# considered actions.
|
51
|
+
def hidden_actions
|
52
|
+
[]
|
53
|
+
end
|
54
|
+
|
55
|
+
# A list of method names that should be considered actions. This
|
56
|
+
# includes all public instance methods on a controller, less
|
57
|
+
# any internal methods (see #internal_methods), adding back in
|
58
|
+
# any methods that are internal, but still exist on the class
|
59
|
+
# itself. Finally, #hidden_actions are removed.
|
60
|
+
#
|
61
|
+
# ==== Returns
|
62
|
+
# Array[String]:: A list of all methods that should be considered
|
63
|
+
# actions.
|
64
|
+
def action_methods
|
65
|
+
@action_methods ||= begin
|
66
|
+
# All public instance methods of this class, including ancestors
|
67
|
+
methods = public_instance_methods(true).map { |m| m.to_s }.to_set -
|
68
|
+
# Except for public instance methods of Base and its ancestors
|
69
|
+
internal_methods.map { |m| m.to_s } +
|
70
|
+
# Be sure to include shadowed public instance methods of this class
|
71
|
+
public_instance_methods(false).map { |m| m.to_s } -
|
72
|
+
# And always exclude explicitly hidden actions
|
73
|
+
hidden_actions
|
74
|
+
|
75
|
+
# Clear out AS callback method pollution
|
76
|
+
methods.reject { |method| method =~ /_one_time_conditions/ }
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# Returns the full controller name, underscored, without the ending Controller.
|
81
|
+
# For instance, MyApp::MyPostsController would return "my_app/my_posts" for
|
82
|
+
# controller_name.
|
83
|
+
#
|
84
|
+
# ==== Returns
|
85
|
+
# String
|
86
|
+
def controller_path
|
87
|
+
@controller_path ||= name && name.sub(/Controller$/, '').underscore
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
abstract!
|
92
|
+
|
93
|
+
# Initialize controller with nil formats.
|
94
|
+
def initialize #:nodoc:
|
95
|
+
@_formats = nil
|
96
|
+
end
|
97
|
+
|
98
|
+
# Calls the action going through the entire action dispatch stack.
|
99
|
+
#
|
100
|
+
# The actual method that is called is determined by calling
|
101
|
+
# #method_for_action. If no method can handle the action, then an
|
102
|
+
# ActionNotFound error is raised.
|
103
|
+
#
|
104
|
+
# ==== Returns
|
105
|
+
# self
|
106
|
+
def process(action, *args)
|
107
|
+
@_action_name = action_name = action.to_s
|
108
|
+
|
109
|
+
unless action_name = method_for_action(action_name)
|
110
|
+
raise ActionNotFound, "The action '#{action}' could not be found"
|
111
|
+
end
|
112
|
+
|
113
|
+
@_response_body = nil
|
114
|
+
|
115
|
+
process_action(action_name, *args)
|
116
|
+
end
|
117
|
+
|
118
|
+
# Delegates to the class' #controller_path
|
119
|
+
def controller_path
|
120
|
+
self.class.controller_path
|
121
|
+
end
|
122
|
+
|
123
|
+
def action_methods
|
124
|
+
self.class.action_methods
|
125
|
+
end
|
126
|
+
|
127
|
+
private
|
128
|
+
# Returns true if the name can be considered an action. This can
|
129
|
+
# be overridden in subclasses to modify the semantics of what
|
130
|
+
# can be considered an action.
|
131
|
+
#
|
132
|
+
# ==== Parameters
|
133
|
+
# name<String>:: The name of an action to be tested
|
134
|
+
#
|
135
|
+
# ==== Returns
|
136
|
+
# TrueClass, FalseClass
|
137
|
+
def action_method?(name)
|
138
|
+
self.class.action_methods.include?(name)
|
139
|
+
end
|
140
|
+
|
141
|
+
# Call the action. Override this in a subclass to modify the
|
142
|
+
# behavior around processing an action. This, and not #process,
|
143
|
+
# is the intended way to override action dispatching.
|
144
|
+
def process_action(method_name, *args)
|
145
|
+
send_action(method_name, *args)
|
146
|
+
end
|
147
|
+
|
148
|
+
# Actually call the method associated with the action. Override
|
149
|
+
# this method if you wish to change how action methods are called,
|
150
|
+
# not to add additional behavior around it. For example, you would
|
151
|
+
# override #send_action if you want to inject arguments into the
|
152
|
+
# method.
|
153
|
+
alias send_action send
|
154
|
+
|
155
|
+
# If the action name was not found, but a method called "action_missing"
|
156
|
+
# was found, #method_for_action will return "_handle_action_missing".
|
157
|
+
# This method calls #action_missing with the current action name.
|
158
|
+
def _handle_action_missing
|
159
|
+
action_missing(@_action_name)
|
160
|
+
end
|
161
|
+
|
162
|
+
# Takes an action name and returns the name of the method that will
|
163
|
+
# handle the action. In normal cases, this method returns the same
|
164
|
+
# name as it receives. By default, if #method_for_action receives
|
165
|
+
# a name that is not an action, it will look for an #action_missing
|
166
|
+
# method and return "_handle_action_missing" if one is found.
|
167
|
+
#
|
168
|
+
# Subclasses may override this method to add additional conditions
|
169
|
+
# that should be considered an action. For instance, an HTTP controller
|
170
|
+
# with a template matching the action name is considered to exist.
|
171
|
+
#
|
172
|
+
# If you override this method to handle additional cases, you may
|
173
|
+
# also provide a method (like _handle_method_missing) to handle
|
174
|
+
# the case.
|
175
|
+
#
|
176
|
+
# If none of these conditions are true, and method_for_action
|
177
|
+
# returns nil, an ActionNotFound exception will be raised.
|
178
|
+
#
|
179
|
+
# ==== Parameters
|
180
|
+
# action_name<String>:: An action name to find a method name for
|
181
|
+
#
|
182
|
+
# ==== Returns
|
183
|
+
# String:: The name of the method that handles the action
|
184
|
+
# nil:: No method name could be found. Raise ActionNotFound.
|
185
|
+
def method_for_action(action_name)
|
186
|
+
if action_method?(action_name) then action_name
|
187
|
+
elsif respond_to?(:action_missing, true) then "_handle_action_missing"
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|