actionpack 1.13.6 → 2.0.0
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 +1400 -20
- data/MIT-LICENSE +1 -1
- data/README +5 -5
- data/RUNNING_UNIT_TESTS +4 -5
- data/Rakefile +5 -6
- data/install.rb +2 -2
- data/lib/action_controller.rb +11 -15
- data/lib/action_controller/assertions.rb +12 -25
- data/lib/action_controller/assertions/dom_assertions.rb +18 -4
- data/lib/action_controller/assertions/model_assertions.rb +8 -1
- data/lib/action_controller/assertions/response_assertions.rb +35 -12
- data/lib/action_controller/assertions/routing_assertions.rb +56 -12
- data/lib/action_controller/assertions/selector_assertions.rb +105 -38
- data/lib/action_controller/assertions/tag_assertions.rb +28 -15
- data/lib/action_controller/base.rb +318 -250
- data/lib/action_controller/benchmarking.rb +33 -29
- data/lib/action_controller/caching.rb +130 -64
- data/lib/action_controller/cgi_ext.rb +16 -0
- data/lib/action_controller/cgi_ext/{cookie_performance_fix.rb → cookie.rb} +25 -40
- data/lib/action_controller/cgi_ext/query_extension.rb +22 -0
- data/lib/action_controller/cgi_ext/session.rb +73 -0
- data/lib/action_controller/cgi_ext/stdinput.rb +23 -0
- data/lib/action_controller/cgi_process.rb +34 -57
- data/lib/action_controller/components.rb +19 -36
- data/lib/action_controller/cookies.rb +10 -9
- data/lib/action_controller/dispatcher.rb +195 -0
- data/lib/action_controller/filters.rb +35 -34
- data/lib/action_controller/flash.rb +30 -35
- data/lib/action_controller/helpers.rb +121 -47
- data/lib/action_controller/http_authentication.rb +126 -0
- data/lib/action_controller/integration.rb +105 -101
- data/lib/action_controller/layout.rb +59 -47
- data/lib/action_controller/mime_responds.rb +57 -68
- data/lib/action_controller/mime_type.rb +43 -80
- data/lib/action_controller/mime_types.rb +20 -0
- data/lib/action_controller/polymorphic_routes.rb +88 -0
- data/lib/action_controller/record_identifier.rb +91 -0
- data/lib/action_controller/request.rb +553 -88
- data/lib/action_controller/request_forgery_protection.rb +126 -0
- data/lib/action_controller/request_profiler.rb +138 -0
- data/lib/action_controller/rescue.rb +185 -69
- data/lib/action_controller/resources.rb +211 -172
- data/lib/action_controller/response.rb +49 -8
- data/lib/action_controller/routing.rb +359 -236
- data/lib/action_controller/routing_optimisation.rb +119 -0
- data/lib/action_controller/session/active_record_store.rb +3 -2
- data/lib/action_controller/session/cookie_store.rb +161 -0
- data/lib/action_controller/session/mem_cache_store.rb +9 -16
- data/lib/action_controller/session_management.rb +17 -8
- data/lib/action_controller/streaming.rb +6 -3
- data/lib/action_controller/templates/rescues/_request_and_response.erb +24 -0
- data/lib/action_controller/templates/rescues/{_trace.rhtml → _trace.erb} +0 -0
- data/lib/action_controller/templates/rescues/{diagnostics.rhtml → diagnostics.erb} +2 -2
- data/lib/action_controller/templates/rescues/{layout.rhtml → layout.erb} +0 -0
- data/lib/action_controller/templates/rescues/{missing_template.rhtml → missing_template.erb} +0 -0
- data/lib/action_controller/templates/rescues/{routing_error.rhtml → routing_error.erb} +0 -0
- data/lib/action_controller/templates/rescues/{template_error.rhtml → template_error.erb} +2 -2
- data/lib/action_controller/templates/rescues/{unknown_action.rhtml → unknown_action.erb} +0 -0
- data/lib/action_controller/test_case.rb +53 -0
- data/lib/action_controller/test_process.rb +59 -46
- data/lib/action_controller/url_rewriter.rb +48 -24
- data/lib/action_controller/vendor/html-scanner/html/document.rb +7 -4
- data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +173 -0
- data/lib/action_controller/vendor/html-scanner/html/selector.rb +11 -6
- data/lib/action_controller/verification.rb +27 -21
- data/lib/action_pack.rb +1 -1
- data/lib/action_pack/version.rb +4 -4
- data/lib/action_view.rb +2 -3
- data/lib/action_view/base.rb +218 -63
- data/lib/action_view/compiled_templates.rb +1 -2
- data/lib/action_view/helpers/active_record_helper.rb +35 -17
- data/lib/action_view/helpers/asset_tag_helper.rb +395 -87
- data/lib/action_view/helpers/atom_feed_helper.rb +111 -0
- data/lib/action_view/helpers/benchmark_helper.rb +12 -5
- data/lib/action_view/helpers/cache_helper.rb +29 -0
- data/lib/action_view/helpers/capture_helper.rb +97 -63
- data/lib/action_view/helpers/date_helper.rb +295 -35
- data/lib/action_view/helpers/debug_helper.rb +6 -2
- data/lib/action_view/helpers/form_helper.rb +354 -111
- data/lib/action_view/helpers/form_options_helper.rb +171 -109
- data/lib/action_view/helpers/form_tag_helper.rb +332 -76
- data/lib/action_view/helpers/javascript_helper.rb +35 -11
- data/lib/action_view/helpers/javascripts/controls.js +484 -354
- data/lib/action_view/helpers/javascripts/dragdrop.js +88 -58
- data/lib/action_view/helpers/javascripts/effects.js +396 -364
- data/lib/action_view/helpers/javascripts/prototype.js +2817 -1107
- data/lib/action_view/helpers/number_helper.rb +84 -60
- data/lib/action_view/helpers/prototype_helper.rb +419 -43
- data/lib/action_view/helpers/record_identification_helper.rb +20 -0
- data/lib/action_view/helpers/record_tag_helper.rb +59 -0
- data/lib/action_view/helpers/sanitize_helper.rb +223 -0
- data/lib/action_view/helpers/scriptaculous_helper.rb +63 -4
- data/lib/action_view/helpers/tag_helper.rb +69 -39
- data/lib/action_view/helpers/text_helper.rb +221 -148
- data/lib/action_view/helpers/url_helper.rb +283 -165
- data/lib/action_view/partials.rb +134 -62
- data/lib/action_view/template_error.rb +4 -12
- data/lib/actionpack.rb +1 -0
- data/test/abstract_unit.rb +21 -1
- data/test/action_view_test.rb +26 -0
- data/test/active_record_unit.rb +12 -20
- data/test/activerecord/active_record_store_test.rb +2 -2
- data/test/activerecord/render_partial_with_record_identification_test.rb +74 -0
- data/test/controller/action_pack_assertions_test.rb +21 -152
- data/test/controller/addresses_render_test.rb +2 -7
- data/test/controller/assert_select_test.rb +120 -14
- data/test/controller/base_test.rb +11 -13
- data/test/controller/caching_test.rb +125 -5
- data/test/controller/capture_test.rb +23 -16
- data/test/controller/cgi_test.rb +66 -391
- data/test/controller/components_test.rb +31 -42
- data/test/controller/content_type_test.rb +1 -1
- data/test/controller/cookie_test.rb +42 -14
- data/test/controller/deprecation/deprecated_base_methods_test.rb +1 -42
- data/test/controller/dispatcher_test.rb +123 -0
- data/test/controller/fake_models.rb +5 -0
- data/test/controller/filters_test.rb +44 -7
- data/test/controller/flash_test.rb +46 -2
- data/test/controller/fragment_store_setting_test.rb +10 -8
- data/test/controller/helper_test.rb +19 -2
- data/test/controller/html-scanner/document_test.rb +124 -0
- data/test/controller/html-scanner/node_test.rb +69 -0
- data/test/controller/html-scanner/sanitizer_test.rb +250 -0
- data/test/controller/html-scanner/tag_node_test.rb +239 -0
- data/test/controller/html-scanner/text_node_test.rb +51 -0
- data/test/controller/html-scanner/tokenizer_test.rb +125 -0
- data/test/controller/http_authentication_test.rb +54 -0
- data/test/controller/integration_test.rb +12 -26
- data/test/controller/layout_test.rb +64 -12
- data/test/controller/mime_responds_test.rb +193 -38
- data/test/controller/mime_type_test.rb +30 -8
- data/test/controller/new_render_test.rb +104 -22
- data/test/controller/polymorphic_routes_test.rb +98 -0
- data/test/controller/record_identifier_test.rb +103 -0
- data/test/controller/redirect_test.rb +120 -18
- data/test/controller/render_test.rb +195 -45
- data/test/controller/request_forgery_protection_test.rb +217 -0
- data/test/controller/request_test.rb +545 -27
- data/test/controller/rescue_test.rb +501 -0
- data/test/controller/resources_test.rb +258 -132
- data/test/controller/routing_test.rb +502 -106
- data/test/controller/selector_test.rb +5 -5
- data/test/controller/send_file_test.rb +17 -7
- data/test/controller/session/cookie_store_test.rb +246 -0
- data/test/controller/session/mem_cache_store_test.rb +182 -0
- data/test/controller/session_fixation_test.rb +8 -11
- data/test/controller/session_management_test.rb +7 -7
- data/test/controller/test_test.rb +150 -38
- data/test/controller/url_rewriter_test.rb +87 -12
- data/test/controller/verification_test.rb +11 -0
- data/test/controller/view_paths_test.rb +137 -0
- data/test/controller/webservice_test.rb +11 -75
- data/test/fixtures/addresses/{list.rhtml → list.erb} +0 -0
- data/test/fixtures/db_definitions/sqlite.sql +2 -1
- data/test/fixtures/developer.rb +2 -0
- data/test/fixtures/fun/games/{hello_world.rhtml → hello_world.erb} +0 -0
- data/test/fixtures/helpers/fun/pdf_helper.rb +1 -1
- data/test/fixtures/layout_tests/alt/hello.rhtml +1 -0
- data/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb +1 -0
- data/test/fixtures/layouts/{builder.rxml → builder.builder} +0 -0
- data/test/fixtures/layouts/{standard.rhtml → standard.erb} +0 -0
- data/test/fixtures/layouts/{talk_from_action.rhtml → talk_from_action.erb} +0 -0
- data/test/fixtures/layouts/{yield.rhtml → yield.erb} +0 -0
- data/test/fixtures/multipart/binary_file +0 -0
- data/test/fixtures/multipart/bracketed_param +5 -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/public/404.html +1 -0
- data/test/fixtures/public/500.html +1 -0
- data/test/fixtures/public/javascripts/application.js +0 -1
- data/test/fixtures/public/javascripts/bank.js +1 -0
- data/test/fixtures/public/javascripts/robber.js +1 -0
- data/test/fixtures/public/stylesheets/bank.css +1 -0
- data/test/fixtures/public/stylesheets/robber.css +1 -0
- data/test/fixtures/replies.yml +2 -0
- data/test/fixtures/reply.rb +2 -1
- data/test/fixtures/respond_to/{all_types_with_layout.rhtml → all_types_with_layout.html.erb} +0 -0
- data/test/fixtures/respond_to/{all_types_with_layout.rjs → all_types_with_layout.js.rjs} +0 -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.rhtml → using_defaults.html.erb} +0 -0
- data/test/fixtures/respond_to/{using_defaults.rjs → using_defaults.js.rjs} +0 -0
- data/test/fixtures/respond_to/{using_defaults.rxml → using_defaults.xml.builder} +0 -0
- data/test/fixtures/respond_to/{using_defaults_with_type_list.rhtml → using_defaults_with_type_list.html.erb} +0 -0
- data/test/fixtures/respond_to/{using_defaults_with_type_list.rjs → using_defaults_with_type_list.js.rjs} +0 -0
- data/test/fixtures/respond_to/{using_defaults_with_type_list.rxml → using_defaults_with_type_list.xml.builder} +0 -0
- data/test/fixtures/scope/test/{modgreet.rhtml → modgreet.erb} +0 -0
- data/test/fixtures/test/{_customer.rhtml → _customer.erb} +0 -0
- data/test/fixtures/test/{_customer_greeting.rhtml → _customer_greeting.erb} +0 -0
- data/test/fixtures/test/_hash_greeting.erb +1 -0
- data/test/fixtures/test/_hash_object.erb +2 -0
- data/test/fixtures/test/{_hello.rxml → _hello.builder} +0 -0
- data/test/fixtures/test/_layout_for_partial.html.erb +3 -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.rhtml → _partial_only.erb} +0 -0
- data/test/fixtures/test/{_person.rhtml → _person.erb} +0 -0
- data/test/fixtures/test/{action_talk_to_layout.rhtml → action_talk_to_layout.erb} +0 -0
- data/test/fixtures/test/{block_content_for.rhtml → block_content_for.erb} +0 -0
- data/test/fixtures/test/calling_partial_with_layout.html.erb +1 -0
- data/test/fixtures/test/{capturing.rhtml → capturing.erb} +0 -0
- data/test/fixtures/test/{content_for.rhtml → content_for.erb} +0 -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/dot.directory/{render_file_with_ivar.rhtml → render_file_with_ivar.erb} +0 -0
- data/test/fixtures/test/{erb_content_for.rhtml → erb_content_for.erb} +0 -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.rhtml → greeting.erb} +0 -0
- data/test/fixtures/test/{hello.rxml → hello.builder} +0 -0
- data/test/fixtures/test/{hello_world.rxml → hello_world.builder} +0 -0
- data/test/fixtures/test/{hello_world.rhtml → hello_world.erb} +0 -0
- data/test/fixtures/test/{hello_world_container.rxml → hello_world_container.builder} +0 -0
- data/test/fixtures/test/{hello_world_with_layout_false.rhtml → hello_world_with_layout_false.erb} +0 -0
- data/test/fixtures/test/{hello_xml_world.rxml → hello_xml_world.builder} +0 -0
- data/test/fixtures/test/list.erb +1 -0
- data/test/fixtures/test/{non_erb_block_content_for.rxml → non_erb_block_content_for.builder} +0 -0
- data/test/fixtures/test/{potential_conflicts.rhtml → potential_conflicts.erb} +0 -0
- data/test/fixtures/test/{render_file_with_ivar.rhtml → render_file_with_ivar.erb} +0 -0
- data/test/fixtures/test/{render_file_with_locals.rhtml → render_file_with_locals.erb} +0 -0
- data/test/fixtures/test/{render_to_string_test.rhtml → render_to_string_test.erb} +0 -0
- data/test/fixtures/test/{update_element_with_capture.rhtml → update_element_with_capture.erb} +0 -0
- data/test/fixtures/test/using_layout_around_block.html.erb +1 -0
- data/test/fixtures/topic.rb +1 -1
- data/test/template/active_record_helper_test.rb +67 -20
- data/test/template/asset_tag_helper_test.rb +222 -54
- data/test/template/atom_feed_helper_test.rb +101 -0
- data/test/template/benchmark_helper_test.rb +2 -2
- data/test/template/compiled_templates_test.rb +76 -32
- data/test/template/date_helper_test.rb +125 -9
- data/test/template/form_helper_test.rb +326 -33
- data/test/template/form_options_helper_test.rb +822 -15
- data/test/template/form_tag_helper_test.rb +96 -30
- data/test/template/javascript_helper_test.rb +61 -13
- data/test/template/number_helper_test.rb +12 -11
- data/test/template/prototype_helper_test.rb +185 -24
- data/test/template/sanitize_helper_test.rb +49 -0
- data/test/template/scriptaculous_helper_test.rb +9 -3
- data/test/template/tag_helper_test.rb +13 -2
- data/test/template/text_helper_test.rb +38 -52
- data/test/template/url_helper_test.rb +216 -46
- metadata +144 -116
- data/examples/.htaccess +0 -24
- data/examples/address_book/index.rhtml +0 -33
- data/examples/address_book/layout.rhtml +0 -8
- data/examples/address_book_controller.cgi +0 -9
- data/examples/address_book_controller.fcgi +0 -6
- data/examples/address_book_controller.rb +0 -52
- data/examples/address_book_controller.rbx +0 -4
- data/examples/benchmark.rb +0 -52
- data/examples/benchmark_with_ar.fcgi +0 -89
- data/examples/blog_controller.cgi +0 -53
- data/examples/debate/index.rhtml +0 -14
- data/examples/debate/new_topic.rhtml +0 -22
- data/examples/debate/topic.rhtml +0 -32
- data/examples/debate_controller.cgi +0 -57
- data/lib/action_controller/assertions/deprecated_assertions.rb +0 -228
- data/lib/action_controller/cgi_ext/cgi_ext.rb +0 -36
- data/lib/action_controller/cgi_ext/cgi_methods.rb +0 -211
- data/lib/action_controller/cgi_ext/pstore_performance_fix.rb +0 -30
- data/lib/action_controller/cgi_ext/raw_post_data_fix.rb +0 -95
- data/lib/action_controller/cgi_ext/session_performance_fix.rb +0 -30
- data/lib/action_controller/deprecated_dependencies.rb +0 -65
- data/lib/action_controller/deprecated_redirects.rb +0 -17
- data/lib/action_controller/deprecated_request_methods.rb +0 -34
- data/lib/action_controller/macros/auto_complete.rb +0 -53
- data/lib/action_controller/macros/in_place_editing.rb +0 -33
- data/lib/action_controller/pagination.rb +0 -408
- data/lib/action_controller/scaffolding.rb +0 -189
- data/lib/action_controller/templates/rescues/_request_and_response.rhtml +0 -44
- data/lib/action_controller/templates/scaffolds/edit.rhtml +0 -7
- data/lib/action_controller/templates/scaffolds/layout.rhtml +0 -69
- data/lib/action_controller/templates/scaffolds/list.rhtml +0 -27
- data/lib/action_controller/templates/scaffolds/new.rhtml +0 -6
- data/lib/action_controller/templates/scaffolds/show.rhtml +0 -9
- data/lib/action_controller/vendor/xml_node.rb +0 -97
- data/lib/action_view/helpers/deprecated_helper.rb +0 -37
- data/lib/action_view/helpers/java_script_macros_helper.rb +0 -233
- data/lib/action_view/helpers/pagination_helper.rb +0 -86
- data/test/activerecord/active_record_assertions_test.rb +0 -92
- data/test/activerecord/pagination_test.rb +0 -165
- data/test/controller/deprecated_instance_variables_test.rb +0 -48
- data/test/controller/raw_post_test.rb +0 -68
- data/test/fixtures/deprecated_instance_variables/_cookies_ivar.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_cookies_method.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_flash_ivar.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_flash_method.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_headers_ivar.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_headers_method.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_params_ivar.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_params_method.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_request_ivar.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_request_method.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_response_ivar.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_response_method.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_session_ivar.rhtml +0 -1
- data/test/fixtures/deprecated_instance_variables/_session_method.rhtml +0 -1
- data/test/fixtures/respond_to/layouts/standard.rhtml +0 -1
- data/test/fixtures/test/_hash_object.rhtml +0 -1
- data/test/fixtures/test/list.rhtml +0 -1
- data/test/template/deprecated_helper_test.rb +0 -36
- data/test/template/deprecated_instance_variables_test.rb +0 -43
- data/test/template/java_script_macros_helper_test.rb +0 -109
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
module ActionController
|
|
2
|
-
module Scaffolding # :nodoc:
|
|
3
|
-
def self.included(base)
|
|
4
|
-
base.extend(ClassMethods)
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
# Scaffolding is a way to quickly put an Active Record class online by providing a series of standardized actions
|
|
8
|
-
# for listing, showing, creating, updating, and destroying objects of the class. These standardized actions come
|
|
9
|
-
# with both controller logic and default templates that through introspection already know which fields to display
|
|
10
|
-
# and which input types to use. Example:
|
|
11
|
-
#
|
|
12
|
-
# class WeblogController < ActionController::Base
|
|
13
|
-
# scaffold :entry
|
|
14
|
-
# end
|
|
15
|
-
#
|
|
16
|
-
# This tiny piece of code will add all of the following methods to the controller:
|
|
17
|
-
#
|
|
18
|
-
# class WeblogController < ActionController::Base
|
|
19
|
-
# verify :method => :post, :only => [ :destroy, :create, :update ],
|
|
20
|
-
# :redirect_to => { :action => :list }
|
|
21
|
-
#
|
|
22
|
-
# def index
|
|
23
|
-
# list
|
|
24
|
-
# end
|
|
25
|
-
#
|
|
26
|
-
# def list
|
|
27
|
-
# @entries = Entry.find(:all)
|
|
28
|
-
# render_scaffold "list"
|
|
29
|
-
# end
|
|
30
|
-
#
|
|
31
|
-
# def show
|
|
32
|
-
# @entry = Entry.find(params[:id])
|
|
33
|
-
# render_scaffold
|
|
34
|
-
# end
|
|
35
|
-
#
|
|
36
|
-
# def destroy
|
|
37
|
-
# Entry.find(params[:id]).destroy
|
|
38
|
-
# redirect_to :action => "list"
|
|
39
|
-
# end
|
|
40
|
-
#
|
|
41
|
-
# def new
|
|
42
|
-
# @entry = Entry.new
|
|
43
|
-
# render_scaffold
|
|
44
|
-
# end
|
|
45
|
-
#
|
|
46
|
-
# def create
|
|
47
|
-
# @entry = Entry.new(params[:entry])
|
|
48
|
-
# if @entry.save
|
|
49
|
-
# flash[:notice] = "Entry was successfully created"
|
|
50
|
-
# redirect_to :action => "list"
|
|
51
|
-
# else
|
|
52
|
-
# render_scaffold('new')
|
|
53
|
-
# end
|
|
54
|
-
# end
|
|
55
|
-
#
|
|
56
|
-
# def edit
|
|
57
|
-
# @entry = Entry.find(params[:id])
|
|
58
|
-
# render_scaffold
|
|
59
|
-
# end
|
|
60
|
-
#
|
|
61
|
-
# def update
|
|
62
|
-
# @entry = Entry.find(params[:id])
|
|
63
|
-
# @entry.attributes = params[:entry]
|
|
64
|
-
#
|
|
65
|
-
# if @entry.save
|
|
66
|
-
# flash[:notice] = "Entry was successfully updated"
|
|
67
|
-
# redirect_to :action => "show", :id => @entry
|
|
68
|
-
# else
|
|
69
|
-
# render_scaffold('edit')
|
|
70
|
-
# end
|
|
71
|
-
# end
|
|
72
|
-
# end
|
|
73
|
-
#
|
|
74
|
-
# The <tt>render_scaffold</tt> method will first check to see if you've made your own template (like "weblog/show.rhtml" for
|
|
75
|
-
# the show action) and if not, then render the generic template for that action. This gives you the possibility of using the
|
|
76
|
-
# scaffold while you're building your specific application. Start out with a totally generic setup, then replace one template
|
|
77
|
-
# and one action at a time while relying on the rest of the scaffolded templates and actions.
|
|
78
|
-
module ClassMethods
|
|
79
|
-
# Adds a swath of generic CRUD actions to the controller. The +model_id+ is automatically converted into a class name unless
|
|
80
|
-
# one is specifically provide through <tt>options[:class_name]</tt>. So <tt>scaffold :post</tt> would use Post as the class
|
|
81
|
-
# and @post/@posts for the instance variables.
|
|
82
|
-
#
|
|
83
|
-
# It's possible to use more than one scaffold in a single controller by specifying <tt>options[:suffix] = true</tt>. This will
|
|
84
|
-
# make <tt>scaffold :post, :suffix => true</tt> use method names like list_post, show_post, and create_post
|
|
85
|
-
# instead of just list, show, and post. If suffix is used, then no index method is added.
|
|
86
|
-
def scaffold(model_id, options = {})
|
|
87
|
-
options.assert_valid_keys(:class_name, :suffix)
|
|
88
|
-
|
|
89
|
-
singular_name = model_id.to_s
|
|
90
|
-
class_name = options[:class_name] || singular_name.camelize
|
|
91
|
-
plural_name = singular_name.pluralize
|
|
92
|
-
suffix = options[:suffix] ? "_#{singular_name}" : ""
|
|
93
|
-
|
|
94
|
-
unless options[:suffix]
|
|
95
|
-
module_eval <<-"end_eval", __FILE__, __LINE__
|
|
96
|
-
def index
|
|
97
|
-
list
|
|
98
|
-
end
|
|
99
|
-
end_eval
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
module_eval <<-"end_eval", __FILE__, __LINE__
|
|
103
|
-
|
|
104
|
-
verify :method => :post, :only => [ :destroy#{suffix}, :create#{suffix}, :update#{suffix} ],
|
|
105
|
-
:redirect_to => { :action => :list#{suffix} }
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
def list#{suffix}
|
|
109
|
-
@#{singular_name}_pages, @#{plural_name} = paginate :#{plural_name}, :per_page => 10
|
|
110
|
-
render#{suffix}_scaffold "list#{suffix}"
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
def show#{suffix}
|
|
114
|
-
@#{singular_name} = #{class_name}.find(params[:id])
|
|
115
|
-
render#{suffix}_scaffold
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
def destroy#{suffix}
|
|
119
|
-
#{class_name}.find(params[:id]).destroy
|
|
120
|
-
redirect_to :action => "list#{suffix}"
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
def new#{suffix}
|
|
124
|
-
@#{singular_name} = #{class_name}.new
|
|
125
|
-
render#{suffix}_scaffold
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
def create#{suffix}
|
|
129
|
-
@#{singular_name} = #{class_name}.new(params[:#{singular_name}])
|
|
130
|
-
if @#{singular_name}.save
|
|
131
|
-
flash[:notice] = "#{class_name} was successfully created"
|
|
132
|
-
redirect_to :action => "list#{suffix}"
|
|
133
|
-
else
|
|
134
|
-
render#{suffix}_scaffold('new')
|
|
135
|
-
end
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
def edit#{suffix}
|
|
139
|
-
@#{singular_name} = #{class_name}.find(params[:id])
|
|
140
|
-
render#{suffix}_scaffold
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
def update#{suffix}
|
|
144
|
-
@#{singular_name} = #{class_name}.find(params[:id])
|
|
145
|
-
@#{singular_name}.attributes = params[:#{singular_name}]
|
|
146
|
-
|
|
147
|
-
if @#{singular_name}.save
|
|
148
|
-
flash[:notice] = "#{class_name} was successfully updated"
|
|
149
|
-
redirect_to :action => "show#{suffix}", :id => @#{singular_name}
|
|
150
|
-
else
|
|
151
|
-
render#{suffix}_scaffold('edit')
|
|
152
|
-
end
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
private
|
|
156
|
-
def render#{suffix}_scaffold(action=nil)
|
|
157
|
-
action ||= caller_method_name(caller)
|
|
158
|
-
# logger.info ("testing template:" + "\#{self.class.controller_path}/\#{action}") if logger
|
|
159
|
-
|
|
160
|
-
if template_exists?("\#{self.class.controller_path}/\#{action}")
|
|
161
|
-
render :action => action
|
|
162
|
-
else
|
|
163
|
-
@scaffold_class = #{class_name}
|
|
164
|
-
@scaffold_singular_name, @scaffold_plural_name = "#{singular_name}", "#{plural_name}"
|
|
165
|
-
@scaffold_suffix = "#{suffix}"
|
|
166
|
-
add_instance_variables_to_assigns
|
|
167
|
-
|
|
168
|
-
@template.instance_variable_set("@content_for_layout", @template.render_file(scaffold_path(action.sub(/#{suffix}$/, "")), false))
|
|
169
|
-
|
|
170
|
-
if !active_layout.nil?
|
|
171
|
-
render :file => active_layout, :use_full_path => true
|
|
172
|
-
else
|
|
173
|
-
render :file => scaffold_path('layout')
|
|
174
|
-
end
|
|
175
|
-
end
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
def scaffold_path(template_name)
|
|
179
|
-
File.dirname(__FILE__) + "/templates/scaffolds/" + template_name + ".rhtml"
|
|
180
|
-
end
|
|
181
|
-
|
|
182
|
-
def caller_method_name(caller)
|
|
183
|
-
caller.first.scan(/`(.*)'/).first.first # ' ruby-mode
|
|
184
|
-
end
|
|
185
|
-
end_eval
|
|
186
|
-
end
|
|
187
|
-
end
|
|
188
|
-
end
|
|
189
|
-
end
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
<% unless @exception.blamed_files.blank? %>
|
|
2
|
-
<% if (hide = @exception.blamed_files.length > 8) %>
|
|
3
|
-
<a href="#" onclick="document.getElementById('blame_trace').style.display='block'; return false;">Show blamed files</a>
|
|
4
|
-
<% end %>
|
|
5
|
-
<pre id="blame_trace" <%='style="display:none"' if hide %>><code><%=h @exception.describe_blame %></code></pre>
|
|
6
|
-
<% end %>
|
|
7
|
-
|
|
8
|
-
<% if false %>
|
|
9
|
-
<br /><br />
|
|
10
|
-
<% begin %>
|
|
11
|
-
<%= form_tag(request.request_uri, "method" => request.method) %>
|
|
12
|
-
<input type="hidden" name="BP-RETRY" value="1" />
|
|
13
|
-
|
|
14
|
-
<% for key, values in params %>
|
|
15
|
-
<% next if key == "BP-RETRY" %>
|
|
16
|
-
<% for value in Array(values) %>
|
|
17
|
-
<input type="hidden" name="<%= key %>" value="<%= value %>" />
|
|
18
|
-
<% end %>
|
|
19
|
-
<% end %>
|
|
20
|
-
|
|
21
|
-
<input type="submit" value="Retry with Breakpoint" />
|
|
22
|
-
</form>
|
|
23
|
-
<% rescue Exception => e %>
|
|
24
|
-
<%=h "Couldn't render breakpoint link due to #{e.class} #{e.message}" %>
|
|
25
|
-
<% end %>
|
|
26
|
-
<% end %>
|
|
27
|
-
|
|
28
|
-
<%
|
|
29
|
-
request_parameters_without_action = request.parameters.clone
|
|
30
|
-
request_parameters_without_action.delete("action")
|
|
31
|
-
request_parameters_without_action.delete("controller")
|
|
32
|
-
|
|
33
|
-
request_dump = request_parameters_without_action.inspect.gsub(/,/, ",\n")
|
|
34
|
-
%>
|
|
35
|
-
|
|
36
|
-
<h2 style="margin-top: 30px">Request</h2>
|
|
37
|
-
<p><b>Parameters</b>: <%=h request_dump == "{}" ? "None" : request_dump %></p>
|
|
38
|
-
|
|
39
|
-
<p><a href="#" onclick="document.getElementById('session_dump').style.display='block'; return false;">Show session dump</a></p>
|
|
40
|
-
<div id="session_dump" style="display:none"><%= debug(request.session.instance_variable_get("@data")) %></div>
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
<h2 style="margin-top: 30px">Response</h2>
|
|
44
|
-
<b>Headers</b>: <%=h response ? response.headers.inspect.gsub(/,/, ",\n") : "None" %><br/>
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
<h1>Editing <%= @scaffold_singular_name %></h1>
|
|
2
|
-
|
|
3
|
-
<%= error_messages_for(@scaffold_singular_name) %>
|
|
4
|
-
<%= form(@scaffold_singular_name, :action => "update#{@scaffold_suffix}") %>
|
|
5
|
-
|
|
6
|
-
<%= link_to "Show", :action => "show#{@scaffold_suffix}", :id => instance_variable_get("@#{@scaffold_singular_name}") %> |
|
|
7
|
-
<%= link_to "Back", :action => "list#{@scaffold_suffix}" %>
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
|
2
|
-
"http://www.w3.org/TR/html4/loose.dtd">
|
|
3
|
-
<html>
|
|
4
|
-
<head>
|
|
5
|
-
<title>Scaffolding</title>
|
|
6
|
-
<style>
|
|
7
|
-
body { background-color: #fff; color: #333; }
|
|
8
|
-
|
|
9
|
-
body, p, ol, ul, td {
|
|
10
|
-
font-family: verdana, arial, helvetica, sans-serif;
|
|
11
|
-
font-size: 13px;
|
|
12
|
-
line-height: 18px;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
pre {
|
|
16
|
-
background-color: #eee;
|
|
17
|
-
padding: 10px;
|
|
18
|
-
font-size: 11px;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
a { color: #000; }
|
|
22
|
-
a:visited { color: #666; }
|
|
23
|
-
a:hover { color: #fff; background-color:#000; }
|
|
24
|
-
|
|
25
|
-
.fieldWithErrors {
|
|
26
|
-
padding: 2px;
|
|
27
|
-
background-color: red;
|
|
28
|
-
display: table;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
#errorExplanation {
|
|
32
|
-
width: 400px;
|
|
33
|
-
border: 2px solid red;
|
|
34
|
-
padding: 7px;
|
|
35
|
-
padding-bottom: 12px;
|
|
36
|
-
margin-bottom: 20px;
|
|
37
|
-
background-color: #f0f0f0;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
#errorExplanation h2 {
|
|
41
|
-
text-align: left;
|
|
42
|
-
font-weight: bold;
|
|
43
|
-
padding: 5px 5px 5px 15px;
|
|
44
|
-
font-size: 12px;
|
|
45
|
-
margin: -7px;
|
|
46
|
-
background-color: #c00;
|
|
47
|
-
color: #fff;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
#errorExplanation p {
|
|
51
|
-
color: #333;
|
|
52
|
-
margin-bottom: 0;
|
|
53
|
-
padding: 5px;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
#errorExplanation ul li {
|
|
57
|
-
font-size: 12px;
|
|
58
|
-
list-style: square;
|
|
59
|
-
}
|
|
60
|
-
</style>
|
|
61
|
-
</head>
|
|
62
|
-
<body>
|
|
63
|
-
|
|
64
|
-
<p style="color: green"><%= flash[:notice] %></p>
|
|
65
|
-
|
|
66
|
-
<%= yield %>
|
|
67
|
-
|
|
68
|
-
</body>
|
|
69
|
-
</html>
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
<h1>Listing <%= @scaffold_plural_name %></h1>
|
|
2
|
-
|
|
3
|
-
<table>
|
|
4
|
-
<tr>
|
|
5
|
-
<% for column in @scaffold_class.content_columns %>
|
|
6
|
-
<th><%= column.human_name %></th>
|
|
7
|
-
<% end %>
|
|
8
|
-
</tr>
|
|
9
|
-
|
|
10
|
-
<% for entry in instance_variable_get("@#{@scaffold_plural_name}") %>
|
|
11
|
-
<tr>
|
|
12
|
-
<% for column in @scaffold_class.content_columns %>
|
|
13
|
-
<td><%= entry.send(column.name) %></td>
|
|
14
|
-
<% end %>
|
|
15
|
-
<td><%= link_to "Show", :action => "show#{@scaffold_suffix}", :id => entry %></td>
|
|
16
|
-
<td><%= link_to "Edit", :action => "edit#{@scaffold_suffix}", :id => entry %></td>
|
|
17
|
-
<td><%= link_to "Destroy", {:action => "destroy#{@scaffold_suffix}", :id => entry}, { :confirm => "Are you sure?", :method => :post } %></td>
|
|
18
|
-
</tr>
|
|
19
|
-
<% end %>
|
|
20
|
-
</table>
|
|
21
|
-
|
|
22
|
-
<%= link_to "Previous page", { :page => instance_variable_get("@#{@scaffold_singular_name}_pages").current.previous } if instance_variable_get("@#{@scaffold_singular_name}_pages").current.previous %>
|
|
23
|
-
<%= link_to "Next page", { :page => instance_variable_get("@#{@scaffold_singular_name}_pages").current.next } if instance_variable_get("@#{@scaffold_singular_name}_pages").current.next %>
|
|
24
|
-
|
|
25
|
-
<br />
|
|
26
|
-
|
|
27
|
-
<%= link_to "New #{@scaffold_singular_name}", :action => "new#{@scaffold_suffix}" %>
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
<% for column in @scaffold_class.content_columns %>
|
|
2
|
-
<p>
|
|
3
|
-
<b><%= column.human_name %>:</b>
|
|
4
|
-
<%= instance_variable_get("@#{@scaffold_singular_name}").send(column.name) %>
|
|
5
|
-
</p>
|
|
6
|
-
<% end %>
|
|
7
|
-
|
|
8
|
-
<%= link_to "Edit", :action => "edit#{@scaffold_suffix}", :id => instance_variable_get("@#{@scaffold_singular_name}") %> |
|
|
9
|
-
<%= link_to "Back", :action => "list#{@scaffold_suffix}" %>
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
require 'rexml/document'
|
|
2
|
-
|
|
3
|
-
# SimpleXML like xml parser. Written by leon breet from the ruby on rails Mailing list
|
|
4
|
-
class XmlNode #:nodoc:
|
|
5
|
-
attr :node
|
|
6
|
-
|
|
7
|
-
def initialize(node, options = {})
|
|
8
|
-
@node = node
|
|
9
|
-
@children = {}
|
|
10
|
-
@raise_errors = options[:raise_errors]
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def self.from_xml(xml_or_io)
|
|
14
|
-
document = REXML::Document.new(xml_or_io)
|
|
15
|
-
if document.root
|
|
16
|
-
XmlNode.new(document.root)
|
|
17
|
-
else
|
|
18
|
-
XmlNode.new(document)
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def node_encoding
|
|
23
|
-
@node.encoding
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def node_name
|
|
27
|
-
@node.name
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def node_value
|
|
31
|
-
@node.text
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def node_value=(value)
|
|
35
|
-
@node.text = value
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def xpath(expr)
|
|
39
|
-
matches = nil
|
|
40
|
-
REXML::XPath.each(@node, expr) do |element|
|
|
41
|
-
matches ||= XmlNodeList.new
|
|
42
|
-
matches << (@children[element] ||= XmlNode.new(element))
|
|
43
|
-
end
|
|
44
|
-
matches
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def method_missing(name, *args)
|
|
48
|
-
name = name.to_s
|
|
49
|
-
nodes = nil
|
|
50
|
-
@node.each_element(name) do |element|
|
|
51
|
-
nodes ||= XmlNodeList.new
|
|
52
|
-
nodes << (@children[element] ||= XmlNode.new(element))
|
|
53
|
-
end
|
|
54
|
-
nodes
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def <<(node)
|
|
58
|
-
if node.is_a? REXML::Node
|
|
59
|
-
child = node
|
|
60
|
-
elsif node.respond_to? :node
|
|
61
|
-
child = node.node
|
|
62
|
-
end
|
|
63
|
-
@node.add_element child
|
|
64
|
-
@children[child] ||= XmlNode.new(child)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
def [](name)
|
|
68
|
-
@node.attributes[name.to_s]
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def []=(name, value)
|
|
72
|
-
@node.attributes[name.to_s] = value
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
def to_s
|
|
76
|
-
@node.to_s
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
def to_i
|
|
80
|
-
to_s.to_i
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
class XmlNodeList < Array #:nodoc:
|
|
85
|
-
def [](i)
|
|
86
|
-
i.is_a?(String) ? super(0)[i] : super(i)
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def []=(i, value)
|
|
90
|
-
i.is_a?(String) ? self[0][i] = value : super(i, value)
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
def method_missing(name, *args)
|
|
94
|
-
name = name.to_s
|
|
95
|
-
self[0].__send__(name, *args)
|
|
96
|
-
end
|
|
97
|
-
end
|