actionpack_csi 2.3.5.p6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +5184 -0
- data/MIT-LICENSE +21 -0
- data/README +409 -0
- data/RUNNING_UNIT_TESTS +24 -0
- data/Rakefile +160 -0
- data/install.rb +30 -0
- data/lib/action_controller/assertions/dom_assertions.rb +55 -0
- data/lib/action_controller/assertions/model_assertions.rb +21 -0
- data/lib/action_controller/assertions/response_assertions.rb +160 -0
- data/lib/action_controller/assertions/routing_assertions.rb +146 -0
- data/lib/action_controller/assertions/selector_assertions.rb +638 -0
- data/lib/action_controller/assertions/tag_assertions.rb +127 -0
- data/lib/action_controller/base.rb +1423 -0
- data/lib/action_controller/benchmarking.rb +107 -0
- data/lib/action_controller/caching/actions.rb +177 -0
- data/lib/action_controller/caching/fragments.rb +120 -0
- data/lib/action_controller/caching/pages.rb +152 -0
- data/lib/action_controller/caching/sweeper.rb +45 -0
- data/lib/action_controller/caching/sweeping.rb +55 -0
- data/lib/action_controller/caching.rb +71 -0
- data/lib/action_controller/cgi_ext/cookie.rb +112 -0
- data/lib/action_controller/cgi_ext/query_extension.rb +22 -0
- data/lib/action_controller/cgi_ext/stdinput.rb +24 -0
- data/lib/action_controller/cgi_ext.rb +15 -0
- data/lib/action_controller/cgi_process.rb +77 -0
- data/lib/action_controller/cookies.rb +95 -0
- data/lib/action_controller/dispatcher.rb +133 -0
- data/lib/action_controller/failsafe.rb +86 -0
- data/lib/action_controller/filters.rb +680 -0
- data/lib/action_controller/flash.rb +171 -0
- data/lib/action_controller/headers.rb +33 -0
- data/lib/action_controller/helpers.rb +225 -0
- data/lib/action_controller/http_authentication.rb +309 -0
- data/lib/action_controller/integration.rb +692 -0
- data/lib/action_controller/layout.rb +286 -0
- data/lib/action_controller/middleware_stack.rb +119 -0
- data/lib/action_controller/middlewares.rb +14 -0
- data/lib/action_controller/mime_responds.rb +193 -0
- data/lib/action_controller/mime_type.rb +212 -0
- data/lib/action_controller/mime_types.rb +21 -0
- data/lib/action_controller/params_parser.rb +77 -0
- data/lib/action_controller/performance_test.rb +15 -0
- data/lib/action_controller/polymorphic_routes.rb +189 -0
- data/lib/action_controller/rack_lint_patch.rb +36 -0
- data/lib/action_controller/record_identifier.rb +104 -0
- data/lib/action_controller/reloader.rb +54 -0
- data/lib/action_controller/request.rb +493 -0
- data/lib/action_controller/request_forgery_protection.rb +113 -0
- data/lib/action_controller/rescue.rb +183 -0
- data/lib/action_controller/resources.rb +682 -0
- data/lib/action_controller/response.rb +239 -0
- data/lib/action_controller/routing/builder.rb +197 -0
- data/lib/action_controller/routing/optimisations.rb +130 -0
- data/lib/action_controller/routing/recognition_optimisation.rb +167 -0
- data/lib/action_controller/routing/route.rb +265 -0
- data/lib/action_controller/routing/route_set.rb +502 -0
- data/lib/action_controller/routing/routing_ext.rb +49 -0
- data/lib/action_controller/routing/segments.rb +343 -0
- data/lib/action_controller/routing.rb +388 -0
- data/lib/action_controller/session/abstract_store.rb +181 -0
- data/lib/action_controller/session/cookie_store.rb +221 -0
- data/lib/action_controller/session/mem_cache_store.rb +51 -0
- data/lib/action_controller/session_management.rb +54 -0
- data/lib/action_controller/status_codes.rb +88 -0
- data/lib/action_controller/streaming.rb +181 -0
- data/lib/action_controller/string_coercion.rb +29 -0
- data/lib/action_controller/templates/rescues/_request_and_response.erb +24 -0
- data/lib/action_controller/templates/rescues/_trace.erb +26 -0
- data/lib/action_controller/templates/rescues/diagnostics.erb +11 -0
- data/lib/action_controller/templates/rescues/layout.erb +29 -0
- data/lib/action_controller/templates/rescues/missing_template.erb +2 -0
- data/lib/action_controller/templates/rescues/routing_error.erb +10 -0
- data/lib/action_controller/templates/rescues/template_error.erb +21 -0
- data/lib/action_controller/templates/rescues/unknown_action.erb +2 -0
- data/lib/action_controller/test_case.rb +209 -0
- data/lib/action_controller/test_process.rb +580 -0
- data/lib/action_controller/translation.rb +13 -0
- data/lib/action_controller/uploaded_file.rb +44 -0
- data/lib/action_controller/url_rewriter.rb +216 -0
- data/lib/action_controller/vendor/html-scanner/html/document.rb +68 -0
- data/lib/action_controller/vendor/html-scanner/html/node.rb +537 -0
- data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +173 -0
- data/lib/action_controller/vendor/html-scanner/html/selector.rb +828 -0
- data/lib/action_controller/vendor/html-scanner/html/tokenizer.rb +105 -0
- data/lib/action_controller/vendor/html-scanner/html/version.rb +11 -0
- data/lib/action_controller/vendor/html-scanner.rb +16 -0
- data/lib/action_controller/verification.rb +130 -0
- data/lib/action_controller.rb +113 -0
- data/lib/action_pack/version.rb +9 -0
- data/lib/action_pack.rb +24 -0
- data/lib/action_view/base.rb +362 -0
- data/lib/action_view/erb/util.rb +44 -0
- data/lib/action_view/helpers/active_record_helper.rb +305 -0
- data/lib/action_view/helpers/asset_tag_helper.rb +694 -0
- data/lib/action_view/helpers/atom_feed_helper.rb +198 -0
- data/lib/action_view/helpers/benchmark_helper.rb +54 -0
- data/lib/action_view/helpers/cache_helper.rb +39 -0
- data/lib/action_view/helpers/capture_helper.rb +136 -0
- data/lib/action_view/helpers/date_helper.rb +988 -0
- data/lib/action_view/helpers/debug_helper.rb +38 -0
- data/lib/action_view/helpers/form_helper.rb +1074 -0
- data/lib/action_view/helpers/form_options_helper.rb +600 -0
- data/lib/action_view/helpers/form_tag_helper.rb +487 -0
- data/lib/action_view/helpers/javascript_helper.rb +208 -0
- data/lib/action_view/helpers/number_helper.rb +308 -0
- data/lib/action_view/helpers/prototype_helper.rb +1305 -0
- data/lib/action_view/helpers/raw_output_helper.rb +9 -0
- data/lib/action_view/helpers/record_identification_helper.rb +20 -0
- data/lib/action_view/helpers/record_tag_helper.rb +58 -0
- data/lib/action_view/helpers/sanitize_helper.rb +259 -0
- data/lib/action_view/helpers/scriptaculous_helper.rb +226 -0
- data/lib/action_view/helpers/tag_helper.rb +150 -0
- data/lib/action_view/helpers/text_helper.rb +587 -0
- data/lib/action_view/helpers/translation_helper.rb +39 -0
- data/lib/action_view/helpers/url_helper.rb +639 -0
- data/lib/action_view/helpers.rb +59 -0
- data/lib/action_view/inline_template.rb +19 -0
- data/lib/action_view/locale/en.yml +117 -0
- data/lib/action_view/partials.rb +240 -0
- data/lib/action_view/paths.rb +69 -0
- data/lib/action_view/reloadable_template.rb +117 -0
- data/lib/action_view/renderable.rb +95 -0
- data/lib/action_view/renderable_partial.rb +47 -0
- data/lib/action_view/safe_buffer.rb +28 -0
- data/lib/action_view/template.rb +252 -0
- data/lib/action_view/template_error.rb +99 -0
- data/lib/action_view/template_handler.rb +34 -0
- data/lib/action_view/template_handlers/builder.rb +17 -0
- data/lib/action_view/template_handlers/erb.rb +22 -0
- data/lib/action_view/template_handlers/rjs.rb +13 -0
- data/lib/action_view/template_handlers.rb +48 -0
- data/lib/action_view/test_case.rb +162 -0
- data/lib/action_view.rb +58 -0
- data/lib/actionpack.rb +2 -0
- data/test/abstract_unit.rb +61 -0
- data/test/active_record_unit.rb +104 -0
- data/test/activerecord/active_record_store_test.rb +174 -0
- data/test/activerecord/render_partial_with_record_identification_test.rb +188 -0
- data/test/adv_attr_test.rb +20 -0
- data/test/controller/action_pack_assertions_test.rb +543 -0
- data/test/controller/addresses_render_test.rb +37 -0
- data/test/controller/assert_select_test.rb +734 -0
- data/test/controller/base_test.rb +217 -0
- data/test/controller/benchmark_test.rb +32 -0
- data/test/controller/caching_test.rb +729 -0
- data/test/controller/capture_test.rb +66 -0
- data/test/controller/content_type_test.rb +168 -0
- 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 +134 -0
- data/test/controller/deprecation/deprecated_base_methods_test.rb +32 -0
- data/test/controller/dispatcher_test.rb +144 -0
- data/test/controller/dom_assertions_test.rb +53 -0
- data/test/controller/failsafe_test.rb +60 -0
- data/test/controller/fake_controllers.rb +33 -0
- data/test/controller/fake_models.rb +19 -0
- data/test/controller/filter_params_test.rb +52 -0
- data/test/controller/filters_test.rb +885 -0
- data/test/controller/flash_test.rb +147 -0
- data/test/controller/header_test.rb +14 -0
- data/test/controller/helper_test.rb +224 -0
- data/test/controller/html-scanner/cdata_node_test.rb +15 -0
- data/test/controller/html-scanner/document_test.rb +148 -0
- data/test/controller/html-scanner/node_test.rb +89 -0
- data/test/controller/html-scanner/sanitizer_test.rb +274 -0
- data/test/controller/html-scanner/tag_node_test.rb +238 -0
- data/test/controller/html-scanner/text_node_test.rb +50 -0
- data/test/controller/html-scanner/tokenizer_test.rb +131 -0
- data/test/controller/http_basic_authentication_test.rb +113 -0
- data/test/controller/http_digest_authentication_test.rb +254 -0
- data/test/controller/integration_test.rb +483 -0
- data/test/controller/layout_test.rb +215 -0
- data/test/controller/logging_test.rb +46 -0
- data/test/controller/middleware_stack_test.rb +90 -0
- data/test/controller/mime_responds_test.rb +536 -0
- data/test/controller/mime_type_test.rb +93 -0
- data/test/controller/polymorphic_routes_test.rb +297 -0
- data/test/controller/rack_test.rb +311 -0
- data/test/controller/record_identifier_test.rb +139 -0
- data/test/controller/redirect_test.rb +285 -0
- data/test/controller/reloader_test.rb +124 -0
- data/test/controller/render_test.rb +1762 -0
- data/test/controller/request/json_params_parsing_test.rb +65 -0
- data/test/controller/request/multipart_params_parsing_test.rb +162 -0
- data/test/controller/request/query_string_parsing_test.rb +120 -0
- data/test/controller/request/test_request_test.rb +35 -0
- data/test/controller/request/url_encoded_params_parsing_test.rb +146 -0
- data/test/controller/request/xml_params_parsing_test.rb +103 -0
- data/test/controller/request_forgery_protection_test.rb +265 -0
- data/test/controller/request_test.rb +395 -0
- data/test/controller/rescue_test.rb +536 -0
- data/test/controller/resources_test.rb +1393 -0
- data/test/controller/routing_test.rb +2591 -0
- data/test/controller/selector_test.rb +628 -0
- data/test/controller/send_file_test.rb +171 -0
- data/test/controller/session/cookie_store_test.rb +216 -0
- data/test/controller/session/mem_cache_store_test.rb +127 -0
- data/test/controller/session/test_session_test.rb +58 -0
- data/test/controller/test_test.rb +700 -0
- data/test/controller/translation_test.rb +26 -0
- data/test/controller/url_rewriter_test.rb +385 -0
- data/test/controller/verification_test.rb +270 -0
- data/test/controller/view_paths_test.rb +141 -0
- data/test/controller/webservice_test.rb +273 -0
- data/test/fixtures/_top_level_partial.html.erb +1 -0
- data/test/fixtures/_top_level_partial_only.erb +1 -0
- data/test/fixtures/addresses/list.erb +1 -0
- data/test/fixtures/alternate_helpers/foo_helper.rb +3 -0
- data/test/fixtures/bad_customers/_bad_customer.html.erb +1 -0
- data/test/fixtures/companies.yml +24 -0
- data/test/fixtures/company.rb +10 -0
- data/test/fixtures/content_type/render_default_content_types_for_respond_to.rhtml +1 -0
- data/test/fixtures/content_type/render_default_for_rhtml.rhtml +1 -0
- data/test/fixtures/content_type/render_default_for_rjs.rjs +1 -0
- data/test/fixtures/content_type/render_default_for_rxml.rxml +1 -0
- data/test/fixtures/customers/_customer.html.erb +1 -0
- data/test/fixtures/db_definitions/sqlite.sql +49 -0
- data/test/fixtures/developer.rb +9 -0
- data/test/fixtures/developers/_developer.erb +1 -0
- data/test/fixtures/developers.yml +21 -0
- data/test/fixtures/developers_projects.yml +13 -0
- data/test/fixtures/failsafe/500.html +1 -0
- data/test/fixtures/fun/games/_game.erb +1 -0
- data/test/fixtures/fun/games/hello_world.erb +1 -0
- data/test/fixtures/fun/serious/games/_game.erb +1 -0
- data/test/fixtures/functional_caching/_partial.erb +3 -0
- data/test/fixtures/functional_caching/formatted_fragment_cached.html.erb +3 -0
- data/test/fixtures/functional_caching/formatted_fragment_cached.js.rjs +6 -0
- data/test/fixtures/functional_caching/formatted_fragment_cached.xml.builder +5 -0
- data/test/fixtures/functional_caching/fragment_cached.html.erb +2 -0
- data/test/fixtures/functional_caching/html_fragment_cached_with_partial.html.erb +1 -0
- data/test/fixtures/functional_caching/inline_fragment_cached.html.erb +2 -0
- data/test/fixtures/functional_caching/js_fragment_cached_with_partial.js.rjs +1 -0
- data/test/fixtures/good_customers/_good_customer.html.erb +1 -0
- data/test/fixtures/helpers/abc_helper.rb +5 -0
- data/test/fixtures/helpers/fun/games_helper.rb +3 -0
- data/test/fixtures/helpers/fun/pdf_helper.rb +3 -0
- data/test/fixtures/layout_tests/abs_path_layout.rhtml +1 -0
- data/test/fixtures/layout_tests/alt/hello.rhtml +1 -0
- data/test/fixtures/layout_tests/alt/layouts/alt.rhtml +0 -0
- data/test/fixtures/layout_tests/layouts/controller_name_space/nested.rhtml +1 -0
- data/test/fixtures/layout_tests/layouts/item.rhtml +1 -0
- data/test/fixtures/layout_tests/layouts/layout_test.rhtml +1 -0
- data/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb +1 -0
- data/test/fixtures/layout_tests/layouts/third_party_template_library.mab +1 -0
- data/test/fixtures/layout_tests/views/hello.rhtml +1 -0
- data/test/fixtures/layouts/_column.html.erb +2 -0
- data/test/fixtures/layouts/block_with_layout.erb +3 -0
- data/test/fixtures/layouts/builder.builder +3 -0
- data/test/fixtures/layouts/default_html.html.erb +1 -0
- data/test/fixtures/layouts/partial_with_layout.erb +3 -0
- data/test/fixtures/layouts/standard.erb +1 -0
- data/test/fixtures/layouts/talk_from_action.erb +2 -0
- data/test/fixtures/layouts/xhr.html.erb +2 -0
- data/test/fixtures/layouts/yield.erb +2 -0
- data/test/fixtures/mascot.rb +3 -0
- data/test/fixtures/mascots/_mascot.html.erb +1 -0
- data/test/fixtures/mascots.yml +4 -0
- data/test/fixtures/multipart/binary_file +0 -0
- data/test/fixtures/multipart/boundary_problem_file +10 -0
- data/test/fixtures/multipart/bracketed_param +5 -0
- data/test/fixtures/multipart/empty +10 -0
- data/test/fixtures/multipart/hello.txt +1 -0
- data/test/fixtures/multipart/large_text_file +10 -0
- data/test/fixtures/multipart/mixed_files +0 -0
- data/test/fixtures/multipart/mona_lisa.jpg +0 -0
- data/test/fixtures/multipart/none +9 -0
- data/test/fixtures/multipart/single_parameter +5 -0
- data/test/fixtures/multipart/text_file +10 -0
- data/test/fixtures/override/test/hello_world.erb +1 -0
- data/test/fixtures/override2/layouts/test/sub.erb +1 -0
- data/test/fixtures/post_test/layouts/post.html.erb +1 -0
- data/test/fixtures/post_test/layouts/super_post.iphone.erb +1 -0
- data/test/fixtures/post_test/post/index.html.erb +1 -0
- data/test/fixtures/post_test/post/index.iphone.erb +1 -0
- data/test/fixtures/post_test/super_post/index.html.erb +1 -0
- data/test/fixtures/post_test/super_post/index.iphone.erb +1 -0
- data/test/fixtures/project.rb +3 -0
- data/test/fixtures/projects/_project.erb +1 -0
- data/test/fixtures/projects.yml +7 -0
- data/test/fixtures/public/404.html +1 -0
- data/test/fixtures/public/500.da.html +1 -0
- data/test/fixtures/public/500.html +1 -0
- data/test/fixtures/public/absolute/test.css +23 -0
- data/test/fixtures/public/absolute/test.js +63 -0
- data/test/fixtures/public/images/rails.png +0 -0
- data/test/fixtures/public/javascripts/application.js +1 -0
- data/test/fixtures/public/javascripts/bank.js +1 -0
- data/test/fixtures/public/javascripts/controls.js +1 -0
- data/test/fixtures/public/javascripts/dragdrop.js +1 -0
- data/test/fixtures/public/javascripts/effects.js +1 -0
- data/test/fixtures/public/javascripts/prototype.js +1 -0
- data/test/fixtures/public/javascripts/robber.js +1 -0
- data/test/fixtures/public/javascripts/subdir/subdir.js +1 -0
- data/test/fixtures/public/javascripts/version.1.0.js +1 -0
- data/test/fixtures/public/stylesheets/bank.css +1 -0
- data/test/fixtures/public/stylesheets/robber.css +1 -0
- data/test/fixtures/public/stylesheets/subdir/subdir.css +1 -0
- data/test/fixtures/public/stylesheets/version.1.0.css +1 -0
- data/test/fixtures/quiz/questions/_question.html.erb +1 -0
- data/test/fixtures/replies/_reply.erb +1 -0
- data/test/fixtures/replies.yml +15 -0
- data/test/fixtures/reply.rb +7 -0
- data/test/fixtures/respond_to/all_types_with_layout.html.erb +1 -0
- data/test/fixtures/respond_to/all_types_with_layout.js.rjs +1 -0
- data/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +1 -0
- data/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +1 -0
- data/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +1 -0
- data/test/fixtures/respond_to/layouts/missing.html.erb +1 -0
- data/test/fixtures/respond_to/layouts/standard.html.erb +1 -0
- data/test/fixtures/respond_to/layouts/standard.iphone.erb +1 -0
- data/test/fixtures/respond_to/using_defaults.html.erb +1 -0
- data/test/fixtures/respond_to/using_defaults.js.rjs +1 -0
- data/test/fixtures/respond_to/using_defaults.xml.builder +1 -0
- data/test/fixtures/respond_to/using_defaults_with_type_list.html.erb +1 -0
- data/test/fixtures/respond_to/using_defaults_with_type_list.js.rjs +1 -0
- data/test/fixtures/respond_to/using_defaults_with_type_list.xml.builder +1 -0
- data/test/fixtures/scope/test/modgreet.erb +1 -0
- data/test/fixtures/shared.html.erb +1 -0
- data/test/fixtures/symlink_parent/symlinked_layout.erb +5 -0
- data/test/fixtures/test/_counter.html.erb +1 -0
- data/test/fixtures/test/_customer.erb +1 -0
- data/test/fixtures/test/_customer_counter.erb +1 -0
- data/test/fixtures/test/_customer_greeting.erb +1 -0
- data/test/fixtures/test/_customer_with_var.erb +1 -0
- data/test/fixtures/test/_form.erb +1 -0
- data/test/fixtures/test/_from_helper.erb +1 -0
- data/test/fixtures/test/_hash_greeting.erb +1 -0
- data/test/fixtures/test/_hash_object.erb +2 -0
- data/test/fixtures/test/_hello.builder +1 -0
- data/test/fixtures/test/_labelling_form.erb +1 -0
- data/test/fixtures/test/_layout_for_block_with_args.html.erb +3 -0
- data/test/fixtures/test/_layout_for_partial.html.erb +3 -0
- data/test/fixtures/test/_local_inspector.html.erb +1 -0
- data/test/fixtures/test/_one.html.erb +1 -0
- data/test/fixtures/test/_partial.erb +1 -0
- data/test/fixtures/test/_partial.html.erb +1 -0
- data/test/fixtures/test/_partial.js.erb +1 -0
- data/test/fixtures/test/_partial_for_use_in_layout.html.erb +1 -0
- data/test/fixtures/test/_partial_only.erb +1 -0
- data/test/fixtures/test/_partial_with_only_html_version.html.erb +1 -0
- data/test/fixtures/test/_person.erb +2 -0
- data/test/fixtures/test/_raise.html.erb +1 -0
- data/test/fixtures/test/_two.html.erb +1 -0
- data/test/fixtures/test/action_talk_to_layout.erb +2 -0
- data/test/fixtures/test/calling_partial_with_layout.html.erb +1 -0
- data/test/fixtures/test/capturing.erb +4 -0
- data/test/fixtures/test/content_for.erb +2 -0
- data/test/fixtures/test/content_for_concatenated.erb +3 -0
- data/test/fixtures/test/content_for_with_parameter.erb +2 -0
- data/test/fixtures/test/delete_with_js.rjs +2 -0
- data/test/fixtures/test/dont_pick_me +1 -0
- data/test/fixtures/test/dot.directory/render_file_with_ivar.erb +1 -0
- data/test/fixtures/test/enum_rjs_test.rjs +6 -0
- data/test/fixtures/test/formatted_html_erb.html.erb +1 -0
- data/test/fixtures/test/formatted_xml_erb.builder +1 -0
- data/test/fixtures/test/formatted_xml_erb.html.erb +1 -0
- data/test/fixtures/test/formatted_xml_erb.xml.erb +1 -0
- data/test/fixtures/test/greeting.erb +1 -0
- data/test/fixtures/test/greeting.js.rjs +1 -0
- data/test/fixtures/test/hello.builder +4 -0
- data/test/fixtures/test/hello_world.da.html.erb +1 -0
- data/test/fixtures/test/hello_world.erb +1 -0
- data/test/fixtures/test/hello_world.erb~ +1 -0
- data/test/fixtures/test/hello_world.pt-BR.html.erb +1 -0
- data/test/fixtures/test/hello_world_container.builder +3 -0
- data/test/fixtures/test/hello_world_from_rxml.builder +4 -0
- data/test/fixtures/test/hello_world_with_layout_false.erb +1 -0
- data/test/fixtures/test/hello_xml_world.builder +11 -0
- data/test/fixtures/test/hyphen-ated.erb +1 -0
- data/test/fixtures/test/implicit_content_type.atom.builder +2 -0
- data/test/fixtures/test/list.erb +1 -0
- data/test/fixtures/test/malformed/malformed.en.html.erb~ +1 -0
- data/test/fixtures/test/malformed/malformed.erb~ +1 -0
- data/test/fixtures/test/malformed/malformed.html.erb~ +1 -0
- data/test/fixtures/test/nested_layout.erb +3 -0
- data/test/fixtures/test/non_erb_block_content_for.builder +4 -0
- data/test/fixtures/test/potential_conflicts.erb +4 -0
- data/test/fixtures/test/render_explicit_html_template.js.rjs +1 -0
- data/test/fixtures/test/render_file_from_template.html.erb +1 -0
- data/test/fixtures/test/render_file_with_ivar.erb +1 -0
- data/test/fixtures/test/render_file_with_locals.erb +1 -0
- data/test/fixtures/test/render_implicit_html_template.js.rjs +1 -0
- data/test/fixtures/test/render_implicit_html_template_from_xhr_request.da.html.erb +1 -0
- data/test/fixtures/test/render_implicit_html_template_from_xhr_request.html.erb +1 -0
- data/test/fixtures/test/render_implicit_js_template_without_layout.js.erb +1 -0
- data/test/fixtures/test/render_to_string_test.erb +1 -0
- data/test/fixtures/test/sub_template_raise.html.erb +1 -0
- data/test/fixtures/test/template.erb +1 -0
- data/test/fixtures/test/update_element_with_capture.erb +9 -0
- data/test/fixtures/test/using_layout_around_block.html.erb +1 -0
- data/test/fixtures/test/using_layout_around_block_with_args.html.erb +1 -0
- data/test/fixtures/test/utf8.html.erb +2 -0
- data/test/fixtures/topic.rb +3 -0
- data/test/fixtures/topics/_topic.html.erb +1 -0
- data/test/fixtures/topics.yml +22 -0
- data/test/template/active_record_helper_i18n_test.rb +44 -0
- data/test/template/active_record_helper_test.rb +302 -0
- data/test/template/asset_tag_helper_test.rb +771 -0
- data/test/template/atom_feed_helper_test.rb +315 -0
- data/test/template/benchmark_helper_test.rb +86 -0
- data/test/template/compiled_templates_test.rb +204 -0
- data/test/template/date_helper_i18n_test.rb +121 -0
- data/test/template/date_helper_test.rb +2485 -0
- data/test/template/erb_util_test.rb +24 -0
- data/test/template/form_helper_test.rb +1393 -0
- data/test/template/form_options_helper_i18n_test.rb +27 -0
- data/test/template/form_options_helper_test.rb +807 -0
- data/test/template/form_tag_helper_test.rb +344 -0
- data/test/template/javascript_helper_test.rb +106 -0
- data/test/template/number_helper_i18n_test.rb +69 -0
- data/test/template/number_helper_test.rb +132 -0
- data/test/template/prototype_helper_test.rb +639 -0
- data/test/template/raw_output_helper_test.rb +21 -0
- data/test/template/record_tag_helper_test.rb +58 -0
- data/test/template/render_test.rb +290 -0
- data/test/template/sanitize_helper_test.rb +57 -0
- data/test/template/scriptaculous_helper_test.rb +90 -0
- data/test/template/tag_helper_test.rb +98 -0
- data/test/template/template_test.rb +32 -0
- data/test/template/test_test.rb +54 -0
- data/test/template/text_helper_test.rb +543 -0
- data/test/template/translation_helper_test.rb +32 -0
- data/test/template/url_helper_test.rb +622 -0
- data/test/testing_sandbox.rb +15 -0
- data/test/view/safe_buffer_test.rb +36 -0
- data/test/view/test_case_test.rb +176 -0
- metadata +531 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
module ActionController #:nodoc:
|
|
2
|
+
# The flash provides a way to pass temporary objects between actions. Anything you place in the flash will be exposed
|
|
3
|
+
# to the very next action and then cleared out. This is a great way of doing notices and alerts, such as a create
|
|
4
|
+
# action that sets <tt>flash[:notice] = "Successfully created"</tt> before redirecting to a display action that can
|
|
5
|
+
# then expose the flash to its template. Actually, that exposure is automatically done. Example:
|
|
6
|
+
#
|
|
7
|
+
# class PostsController < ActionController::Base
|
|
8
|
+
# def create
|
|
9
|
+
# # save post
|
|
10
|
+
# flash[:notice] = "Successfully created post"
|
|
11
|
+
# redirect_to posts_path(@post)
|
|
12
|
+
# end
|
|
13
|
+
#
|
|
14
|
+
# def show
|
|
15
|
+
# # doesn't need to assign the flash notice to the template, that's done automatically
|
|
16
|
+
# end
|
|
17
|
+
# end
|
|
18
|
+
#
|
|
19
|
+
# show.html.erb
|
|
20
|
+
# <% if flash[:notice] %>
|
|
21
|
+
# <div class="notice"><%= flash[:notice] %></div>
|
|
22
|
+
# <% end %>
|
|
23
|
+
#
|
|
24
|
+
# This example just places a string in the flash, but you can put any object in there. And of course, you can put as
|
|
25
|
+
# many as you like at a time too. Just remember: They'll be gone by the time the next action has been performed.
|
|
26
|
+
#
|
|
27
|
+
# See docs on the FlashHash class for more details about the flash.
|
|
28
|
+
module Flash
|
|
29
|
+
def self.included(base)
|
|
30
|
+
base.class_eval do
|
|
31
|
+
include InstanceMethods
|
|
32
|
+
alias_method_chain :perform_action, :flash
|
|
33
|
+
alias_method_chain :reset_session, :flash
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
class FlashNow #:nodoc:
|
|
38
|
+
def initialize(flash)
|
|
39
|
+
@flash = flash
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def []=(k, v)
|
|
43
|
+
@flash[k] = v
|
|
44
|
+
@flash.discard(k)
|
|
45
|
+
v
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def [](k)
|
|
49
|
+
@flash[k]
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
class FlashHash < Hash
|
|
54
|
+
def initialize #:nodoc:
|
|
55
|
+
super
|
|
56
|
+
@used = {}
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def []=(k, v) #:nodoc:
|
|
60
|
+
keep(k)
|
|
61
|
+
super
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def update(h) #:nodoc:
|
|
65
|
+
h.keys.each { |k| keep(k) }
|
|
66
|
+
super
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
alias :merge! :update
|
|
70
|
+
|
|
71
|
+
def replace(h) #:nodoc:
|
|
72
|
+
@used = {}
|
|
73
|
+
super
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Sets a flash that will not be available to the next action, only to the current.
|
|
77
|
+
#
|
|
78
|
+
# flash.now[:message] = "Hello current action"
|
|
79
|
+
#
|
|
80
|
+
# This method enables you to use the flash as a central messaging system in your app.
|
|
81
|
+
# When you need to pass an object to the next action, you use the standard flash assign (<tt>[]=</tt>).
|
|
82
|
+
# When you need to pass an object to the current action, you use <tt>now</tt>, and your object will
|
|
83
|
+
# vanish when the current action is done.
|
|
84
|
+
#
|
|
85
|
+
# Entries set via <tt>now</tt> are accessed the same way as standard entries: <tt>flash['my-key']</tt>.
|
|
86
|
+
def now
|
|
87
|
+
FlashNow.new(self)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Keeps either the entire current flash or a specific flash entry available for the next action:
|
|
91
|
+
#
|
|
92
|
+
# flash.keep # keeps the entire flash
|
|
93
|
+
# flash.keep(:notice) # keeps only the "notice" entry, the rest of the flash is discarded
|
|
94
|
+
def keep(k = nil)
|
|
95
|
+
use(k, false)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Marks the entire flash or a single flash entry to be discarded by the end of the current action:
|
|
99
|
+
#
|
|
100
|
+
# flash.discard # discard the entire flash at the end of the current action
|
|
101
|
+
# flash.discard(:warning) # discard only the "warning" entry at the end of the current action
|
|
102
|
+
def discard(k = nil)
|
|
103
|
+
use(k)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Mark for removal entries that were kept, and delete unkept ones.
|
|
107
|
+
#
|
|
108
|
+
# This method is called automatically by filters, so you generally don't need to care about it.
|
|
109
|
+
def sweep #:nodoc:
|
|
110
|
+
keys.each do |k|
|
|
111
|
+
unless @used[k]
|
|
112
|
+
use(k)
|
|
113
|
+
else
|
|
114
|
+
delete(k)
|
|
115
|
+
@used.delete(k)
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# clean up after keys that could have been left over by calling reject! or shift on the flash
|
|
120
|
+
(@used.keys - keys).each{ |k| @used.delete(k) }
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def store(session, key = "flash")
|
|
124
|
+
return if self.empty?
|
|
125
|
+
session[key] = self
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
private
|
|
129
|
+
# Used internally by the <tt>keep</tt> and <tt>discard</tt> methods
|
|
130
|
+
# use() # marks the entire flash as used
|
|
131
|
+
# use('msg') # marks the "msg" entry as used
|
|
132
|
+
# use(nil, false) # marks the entire flash as unused (keeps it around for one more action)
|
|
133
|
+
# use('msg', false) # marks the "msg" entry as unused (keeps it around for one more action)
|
|
134
|
+
def use(k=nil, v=true)
|
|
135
|
+
unless k.nil?
|
|
136
|
+
@used[k] = v
|
|
137
|
+
else
|
|
138
|
+
keys.each{ |key| use(key, v) }
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
module InstanceMethods #:nodoc:
|
|
144
|
+
protected
|
|
145
|
+
def perform_action_with_flash
|
|
146
|
+
perform_action_without_flash
|
|
147
|
+
if defined? @_flash
|
|
148
|
+
@_flash.store(session)
|
|
149
|
+
remove_instance_variable(:@_flash)
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def reset_session_with_flash
|
|
154
|
+
reset_session_without_flash
|
|
155
|
+
remove_instance_variable(:@_flash) if defined? @_flash
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# Access the contents of the flash. Use <tt>flash["notice"]</tt> to
|
|
159
|
+
# read a notice you put there or <tt>flash["notice"] = "hello"</tt>
|
|
160
|
+
# to put a new one.
|
|
161
|
+
def flash #:doc:
|
|
162
|
+
if !defined?(@_flash)
|
|
163
|
+
@_flash = session["flash"] || FlashHash.new
|
|
164
|
+
@_flash.sweep
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
@_flash
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'active_support/memoizable'
|
|
2
|
+
|
|
3
|
+
module ActionController
|
|
4
|
+
module Http
|
|
5
|
+
class Headers < ::Hash
|
|
6
|
+
extend ActiveSupport::Memoizable
|
|
7
|
+
|
|
8
|
+
def initialize(*args)
|
|
9
|
+
if args.size == 1 && args[0].is_a?(Hash)
|
|
10
|
+
super()
|
|
11
|
+
update(args[0])
|
|
12
|
+
else
|
|
13
|
+
super
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def [](header_name)
|
|
18
|
+
if include?(header_name)
|
|
19
|
+
super
|
|
20
|
+
else
|
|
21
|
+
super(env_name(header_name))
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
# Converts a HTTP header name to an environment variable name.
|
|
27
|
+
def env_name(header_name)
|
|
28
|
+
"HTTP_#{header_name.upcase.gsub(/-/, '_')}"
|
|
29
|
+
end
|
|
30
|
+
memoize :env_name
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
require 'active_support/dependencies'
|
|
2
|
+
|
|
3
|
+
# FIXME: helper { ... } is broken on Ruby 1.9
|
|
4
|
+
module ActionController #:nodoc:
|
|
5
|
+
module Helpers #:nodoc:
|
|
6
|
+
def self.included(base)
|
|
7
|
+
# Initialize the base module to aggregate its helpers.
|
|
8
|
+
base.class_inheritable_accessor :master_helper_module
|
|
9
|
+
base.master_helper_module = Module.new
|
|
10
|
+
|
|
11
|
+
# Set the default directory for helpers
|
|
12
|
+
base.class_inheritable_accessor :helpers_dir
|
|
13
|
+
base.helpers_dir = (defined?(RAILS_ROOT) ? "#{RAILS_ROOT}/app/helpers" : "app/helpers")
|
|
14
|
+
|
|
15
|
+
# Extend base with class methods to declare helpers.
|
|
16
|
+
base.extend(ClassMethods)
|
|
17
|
+
|
|
18
|
+
base.class_eval do
|
|
19
|
+
# Wrap inherited to create a new master helper module for subclasses.
|
|
20
|
+
class << self
|
|
21
|
+
alias_method_chain :inherited, :helper
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# The Rails framework provides a large number of helpers for working with +assets+, +dates+, +forms+,
|
|
27
|
+
# +numbers+ and Active Record objects, to name a few. These helpers are available to all templates
|
|
28
|
+
# by default.
|
|
29
|
+
#
|
|
30
|
+
# In addition to using the standard template helpers provided in the Rails framework, creating custom helpers to
|
|
31
|
+
# extract complicated logic or reusable functionality is strongly encouraged. By default, the controller will
|
|
32
|
+
# include a helper whose name matches that of the controller, e.g., <tt>MyController</tt> will automatically
|
|
33
|
+
# include <tt>MyHelper</tt>.
|
|
34
|
+
#
|
|
35
|
+
# Additional helpers can be specified using the +helper+ class method in <tt>ActionController::Base</tt> or any
|
|
36
|
+
# controller which inherits from it.
|
|
37
|
+
#
|
|
38
|
+
# ==== Examples
|
|
39
|
+
# The +to_s+ method from the Time class can be wrapped in a helper method to display a custom message if
|
|
40
|
+
# the Time object is blank:
|
|
41
|
+
#
|
|
42
|
+
# module FormattedTimeHelper
|
|
43
|
+
# def format_time(time, format=:long, blank_message=" ")
|
|
44
|
+
# time.blank? ? blank_message : time.to_s(format)
|
|
45
|
+
# end
|
|
46
|
+
# end
|
|
47
|
+
#
|
|
48
|
+
# FormattedTimeHelper can now be included in a controller, using the +helper+ class method:
|
|
49
|
+
#
|
|
50
|
+
# class EventsController < ActionController::Base
|
|
51
|
+
# helper FormattedTimeHelper
|
|
52
|
+
# def index
|
|
53
|
+
# @events = Event.find(:all)
|
|
54
|
+
# end
|
|
55
|
+
# end
|
|
56
|
+
#
|
|
57
|
+
# Then, in any view rendered by <tt>EventController</tt>, the <tt>format_time</tt> method can be called:
|
|
58
|
+
#
|
|
59
|
+
# <% @events.each do |event| -%>
|
|
60
|
+
# <p>
|
|
61
|
+
# <% format_time(event.time, :short, "N/A") %> | <%= event.name %>
|
|
62
|
+
# </p>
|
|
63
|
+
# <% end -%>
|
|
64
|
+
#
|
|
65
|
+
# Finally, assuming we have two event instances, one which has a time and one which does not,
|
|
66
|
+
# the output might look like this:
|
|
67
|
+
#
|
|
68
|
+
# 23 Aug 11:30 | Carolina Railhawks Soccer Match
|
|
69
|
+
# N/A | Carolina Railhaws Training Workshop
|
|
70
|
+
#
|
|
71
|
+
module ClassMethods
|
|
72
|
+
# Makes all the (instance) methods in the helper module available to templates rendered through this controller.
|
|
73
|
+
# See ActionView::Helpers (link:classes/ActionView/Helpers.html) for more about making your own helper modules
|
|
74
|
+
# available to the templates.
|
|
75
|
+
def add_template_helper(helper_module) #:nodoc:
|
|
76
|
+
master_helper_module.module_eval { include helper_module }
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# The +helper+ class method can take a series of helper module names, a block, or both.
|
|
80
|
+
#
|
|
81
|
+
# * <tt>*args</tt>: One or more modules, strings or symbols, or the special symbol <tt>:all</tt>.
|
|
82
|
+
# * <tt>&block</tt>: A block defining helper methods.
|
|
83
|
+
#
|
|
84
|
+
# ==== Examples
|
|
85
|
+
# When the argument is a string or symbol, the method will provide the "_helper" suffix, require the file
|
|
86
|
+
# and include the module in the template class. The second form illustrates how to include custom helpers
|
|
87
|
+
# when working with namespaced controllers, or other cases where the file containing the helper definition is not
|
|
88
|
+
# in one of Rails' standard load paths:
|
|
89
|
+
# helper :foo # => requires 'foo_helper' and includes FooHelper
|
|
90
|
+
# helper 'resources/foo' # => requires 'resources/foo_helper' and includes Resources::FooHelper
|
|
91
|
+
#
|
|
92
|
+
# When the argument is a module it will be included directly in the template class.
|
|
93
|
+
# helper FooHelper # => includes FooHelper
|
|
94
|
+
#
|
|
95
|
+
# When the argument is the symbol <tt>:all</tt>, the controller will include all helpers beneath
|
|
96
|
+
# <tt>ActionController::Base.helpers_dir</tt> (defaults to <tt>app/helpers/**/*.rb</tt> under RAILS_ROOT).
|
|
97
|
+
# helper :all
|
|
98
|
+
#
|
|
99
|
+
# Additionally, the +helper+ class method can receive and evaluate a block, making the methods defined available
|
|
100
|
+
# to the template.
|
|
101
|
+
# # One line
|
|
102
|
+
# helper { def hello() "Hello, world!" end }
|
|
103
|
+
# # Multi-line
|
|
104
|
+
# helper do
|
|
105
|
+
# def foo(bar)
|
|
106
|
+
# "#{bar} is the very best"
|
|
107
|
+
# end
|
|
108
|
+
# end
|
|
109
|
+
#
|
|
110
|
+
# Finally, all the above styles can be mixed together, and the +helper+ method can be invoked with a mix of
|
|
111
|
+
# +symbols+, +strings+, +modules+ and blocks.
|
|
112
|
+
# helper(:three, BlindHelper) { def mice() 'mice' end }
|
|
113
|
+
#
|
|
114
|
+
def helper(*args, &block)
|
|
115
|
+
args.flatten.each do |arg|
|
|
116
|
+
case arg
|
|
117
|
+
when Module
|
|
118
|
+
add_template_helper(arg)
|
|
119
|
+
when :all
|
|
120
|
+
helper(all_application_helpers)
|
|
121
|
+
when String, Symbol
|
|
122
|
+
file_name = arg.to_s.underscore + '_helper'
|
|
123
|
+
class_name = file_name.camelize
|
|
124
|
+
|
|
125
|
+
begin
|
|
126
|
+
require_dependency(file_name)
|
|
127
|
+
rescue LoadError => load_error
|
|
128
|
+
requiree = / -- (.*?)(\.rb)?$/.match(load_error.message).to_a[1]
|
|
129
|
+
if requiree == file_name
|
|
130
|
+
msg = "Missing helper file helpers/#{file_name}.rb"
|
|
131
|
+
raise LoadError.new(msg).copy_blame!(load_error)
|
|
132
|
+
else
|
|
133
|
+
raise
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
add_template_helper(class_name.constantize)
|
|
138
|
+
else
|
|
139
|
+
raise ArgumentError, "helper expects String, Symbol, or Module argument (was: #{args.inspect})"
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Evaluate block in template class if given.
|
|
144
|
+
master_helper_module.module_eval(&block) if block_given?
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# Declare a controller method as a helper. For example, the following
|
|
148
|
+
# makes the +current_user+ controller method available to the view:
|
|
149
|
+
# class ApplicationController < ActionController::Base
|
|
150
|
+
# helper_method :current_user, :logged_in?
|
|
151
|
+
#
|
|
152
|
+
# def current_user
|
|
153
|
+
# @current_user ||= User.find_by_id(session[:user])
|
|
154
|
+
# end
|
|
155
|
+
#
|
|
156
|
+
# def logged_in?
|
|
157
|
+
# current_user != nil
|
|
158
|
+
# end
|
|
159
|
+
# end
|
|
160
|
+
#
|
|
161
|
+
# In a view:
|
|
162
|
+
# <% if logged_in? -%>Welcome, <%= current_user.name %><% end -%>
|
|
163
|
+
def helper_method(*methods)
|
|
164
|
+
methods.flatten.each do |method|
|
|
165
|
+
master_helper_module.module_eval <<-end_eval
|
|
166
|
+
def #{method}(*args, &block) # def current_user(*args, &block)
|
|
167
|
+
controller.send(%(#{method}), *args, &block) # controller.send(%(current_user), *args, &block)
|
|
168
|
+
end # end
|
|
169
|
+
end_eval
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
# Declares helper accessors for controller attributes. For example, the
|
|
174
|
+
# following adds new +name+ and <tt>name=</tt> instance methods to a
|
|
175
|
+
# controller and makes them available to the view:
|
|
176
|
+
# helper_attr :name
|
|
177
|
+
# attr_accessor :name
|
|
178
|
+
def helper_attr(*attrs)
|
|
179
|
+
attrs.flatten.each { |attr| helper_method(attr, "#{attr}=") }
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# Provides a proxy to access helpers methods from outside the view.
|
|
183
|
+
def helpers
|
|
184
|
+
unless @helper_proxy
|
|
185
|
+
@helper_proxy = ActionView::Base.new
|
|
186
|
+
@helper_proxy.extend master_helper_module
|
|
187
|
+
else
|
|
188
|
+
@helper_proxy
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
private
|
|
193
|
+
def default_helper_module!
|
|
194
|
+
unless name.blank?
|
|
195
|
+
module_name = name.sub(/Controller$|$/, 'Helper')
|
|
196
|
+
module_path = module_name.split('::').map { |m| m.underscore }.join('/')
|
|
197
|
+
require_dependency module_path
|
|
198
|
+
helper module_name.constantize
|
|
199
|
+
end
|
|
200
|
+
rescue MissingSourceFile => e
|
|
201
|
+
raise unless e.is_missing? module_path
|
|
202
|
+
rescue NameError => e
|
|
203
|
+
raise unless e.missing_name? module_name
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
def inherited_with_helper(child)
|
|
207
|
+
inherited_without_helper(child)
|
|
208
|
+
|
|
209
|
+
begin
|
|
210
|
+
child.master_helper_module = Module.new
|
|
211
|
+
child.master_helper_module.__send__ :include, master_helper_module
|
|
212
|
+
child.__send__ :default_helper_module!
|
|
213
|
+
rescue MissingSourceFile => e
|
|
214
|
+
raise unless e.is_missing?("helpers/#{child.controller_path}_helper")
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
# Extract helper names from files in app/helpers/**/*.rb
|
|
219
|
+
def all_application_helpers
|
|
220
|
+
extract = /^#{Regexp.quote(helpers_dir)}\/?(.*)_helper.rb$/
|
|
221
|
+
Dir["#{helpers_dir}/**/*_helper.rb"].map { |file| file.sub extract, '\1' }
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
end
|