actionpack 1.13.6 → 2.0.0
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 +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
data/examples/.htaccess
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
<IfModule mod_ruby.c>
|
2
|
-
RubyRequire apache/ruby-run
|
3
|
-
RubySafeLevel 0
|
4
|
-
|
5
|
-
<Files *.rbx>
|
6
|
-
SetHandler ruby-object
|
7
|
-
RubyHandler Apache::RubyRun.instance
|
8
|
-
</Files>
|
9
|
-
</IfModule>
|
10
|
-
|
11
|
-
|
12
|
-
RewriteEngine On
|
13
|
-
RewriteRule ^fcgi/([-_a-zA-Z0-9]+)/([-_a-zA-Z0-9]+)/([0-9]+)$ /$1_controller.fcgi?action=$2&id=$3 [QSA]
|
14
|
-
RewriteRule ^fcgi/([-_a-zA-Z0-9]+)/([-_a-zA-Z0-9]+)$ /$1_controller.fcgi?action=$2 [QSA]
|
15
|
-
RewriteRule ^fcgi/([-_a-zA-Z0-9]+)/$ /$1_controller.fcgi?action=index [QSA]
|
16
|
-
|
17
|
-
RewriteRule ^modruby/([-_a-zA-Z0-9]+)/([-_a-zA-Z0-9]+)/([0-9]+)$ /$1_controller.rbx?action=$2&id=$3 [QSA]
|
18
|
-
RewriteRule ^modruby/([-_a-zA-Z0-9]+)/([-_a-zA-Z0-9]+)$ /$1_controller.rbx?action=$2 [QSA]
|
19
|
-
RewriteRule ^modruby/([-_a-zA-Z0-9]+)/$ /$1_controller.rbx?action=index [QSA]
|
20
|
-
|
21
|
-
RewriteRule ^([-_a-zA-Z0-9]+)/([-_a-zA-Z0-9]+)/([0-9]+)$ /$1_controller.cgi?action=$2&id=$3 [QSA]
|
22
|
-
RewriteRule ^([-_a-zA-Z0-9]+)/([-_a-zA-Z0-9]+)$ /$1_controller.cgi?action=$2 [QSA]
|
23
|
-
RewriteRule ^([-_a-zA-Z0-9]+)/$ /$1_controller.cgi?action=index [QSA]
|
24
|
-
|
@@ -1,33 +0,0 @@
|
|
1
|
-
<h1>Address Book</h1>
|
2
|
-
|
3
|
-
<% if @people.empty? %>
|
4
|
-
<p>No people in the address book yet</p>
|
5
|
-
<% else %>
|
6
|
-
<table>
|
7
|
-
<tr><th>Name</th><th>Email Address</th><th>Phone Number</th></tr>
|
8
|
-
<% for person in @people %>
|
9
|
-
<tr><td><%= person.name %></td><td><%= person.email_address %></td><td><%= person.phone_number %></td></tr>
|
10
|
-
<% end %>
|
11
|
-
</table>
|
12
|
-
<% end %>
|
13
|
-
|
14
|
-
<form action="create_person">
|
15
|
-
<p>
|
16
|
-
Name:<br />
|
17
|
-
<input type="text" name="person[name]">
|
18
|
-
</p>
|
19
|
-
|
20
|
-
<p>
|
21
|
-
Email address:<br />
|
22
|
-
<input type="text" name="person[email_address]">
|
23
|
-
</p>
|
24
|
-
|
25
|
-
<p>
|
26
|
-
Phone number:<br />
|
27
|
-
<input type="text" name="person[phone_number]">
|
28
|
-
</p>
|
29
|
-
|
30
|
-
<p>
|
31
|
-
<input type="submit" value="Create Person">
|
32
|
-
</p>
|
33
|
-
</form>
|
@@ -1,52 +0,0 @@
|
|
1
|
-
$:.unshift(File.dirname(__FILE__) + "/../lib")
|
2
|
-
|
3
|
-
require "action_controller"
|
4
|
-
require "action_controller/test_process"
|
5
|
-
|
6
|
-
Person = Struct.new("Person", :id, :name, :email_address, :phone_number)
|
7
|
-
|
8
|
-
class AddressBookService
|
9
|
-
attr_reader :people
|
10
|
-
|
11
|
-
def initialize() @people = [] end
|
12
|
-
def create_person(data) people.unshift(Person.new(next_person_id, data["name"], data["email_address"], data["phone_number"])) end
|
13
|
-
def find_person(topic_id) people.select { |person| person.id == person.to_i }.first end
|
14
|
-
def next_person_id() people.first.id + 1 end
|
15
|
-
end
|
16
|
-
|
17
|
-
class AddressBookController < ActionController::Base
|
18
|
-
layout "address_book/layout"
|
19
|
-
|
20
|
-
before_filter :initialize_session_storage
|
21
|
-
|
22
|
-
# Could also have used a proc
|
23
|
-
# before_filter proc { |c| c.instance_variable_set("@address_book", c.session["address_book"] ||= AddressBookService.new) }
|
24
|
-
|
25
|
-
def index
|
26
|
-
@title = "Address Book"
|
27
|
-
@people = @address_book.people
|
28
|
-
end
|
29
|
-
|
30
|
-
def person
|
31
|
-
@person = @address_book.find_person(params[:id])
|
32
|
-
end
|
33
|
-
|
34
|
-
def create_person
|
35
|
-
@address_book.create_person(params[:person])
|
36
|
-
redirect_to :action => "index"
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
def initialize_session_storage
|
41
|
-
@address_book = @session["address_book"] ||= AddressBookService.new
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
ActionController::Base.template_root = File.dirname(__FILE__)
|
46
|
-
# ActionController::Base.logger = Logger.new("debug.log") # Remove first comment to turn on logging in current dir
|
47
|
-
|
48
|
-
begin
|
49
|
-
AddressBookController.process_cgi(CGI.new) if $0 == __FILE__
|
50
|
-
rescue => e
|
51
|
-
CGI.new.out { "#{e.class}: #{e.message}" }
|
52
|
-
end
|
data/examples/benchmark.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
$:.unshift(File.dirname(__FILE__) + "/../lib")
|
2
|
-
|
3
|
-
require "action_controller"
|
4
|
-
require 'action_controller/test_process'
|
5
|
-
|
6
|
-
Person = Struct.new("Person", :name, :address, :age)
|
7
|
-
|
8
|
-
class BenchmarkController < ActionController::Base
|
9
|
-
def message
|
10
|
-
render_text "hello world"
|
11
|
-
end
|
12
|
-
|
13
|
-
def list
|
14
|
-
@people = [ Person.new("David"), Person.new("Mary") ]
|
15
|
-
render_template "hello: <% for person in @people %>Name: <%= person.name %><% end %>"
|
16
|
-
end
|
17
|
-
|
18
|
-
def form_helper
|
19
|
-
@person = Person.new "david", "hyacintvej", 24
|
20
|
-
render_template(
|
21
|
-
"<% person = Person.new 'Mary', 'hyacintvej', 22 %> " +
|
22
|
-
"change the name <%= text_field 'person', 'name' %> and <%= text_field 'person', 'address' %> and <%= text_field 'person', 'age' %>"
|
23
|
-
)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
#ActionController::Base.template_root = File.dirname(__FILE__)
|
28
|
-
|
29
|
-
require "benchmark"
|
30
|
-
|
31
|
-
RUNS = ARGV[0] ? ARGV[0].to_i : 50
|
32
|
-
|
33
|
-
require "profile" if ARGV[1]
|
34
|
-
|
35
|
-
runtime = Benchmark.measure {
|
36
|
-
RUNS.times { BenchmarkController.process_test(ActionController::TestRequest.new({ "action" => "list" })) }
|
37
|
-
}
|
38
|
-
|
39
|
-
puts "List: #{RUNS / runtime.real}"
|
40
|
-
|
41
|
-
|
42
|
-
runtime = Benchmark.measure {
|
43
|
-
RUNS.times { BenchmarkController.process_test(ActionController::TestRequest.new({ "action" => "message" })) }
|
44
|
-
}
|
45
|
-
|
46
|
-
puts "Message: #{RUNS / runtime.real}"
|
47
|
-
|
48
|
-
runtime = Benchmark.measure {
|
49
|
-
RUNS.times { BenchmarkController.process_test(ActionController::TestRequest.new({ "action" => "form_helper" })) }
|
50
|
-
}
|
51
|
-
|
52
|
-
puts "Form helper: #{RUNS / runtime.real}"
|
@@ -1,89 +0,0 @@
|
|
1
|
-
#!/usr/local/bin/ruby
|
2
|
-
|
3
|
-
begin
|
4
|
-
|
5
|
-
$:.unshift(File.dirname(__FILE__) + "/../lib")
|
6
|
-
$:.unshift(File.dirname(__FILE__) + "/../../../edge/activerecord/lib")
|
7
|
-
|
8
|
-
require 'fcgi'
|
9
|
-
require 'action_controller'
|
10
|
-
require 'action_controller/test_process'
|
11
|
-
|
12
|
-
require 'active_record'
|
13
|
-
|
14
|
-
class Post < ActiveRecord::Base; end
|
15
|
-
|
16
|
-
ActiveRecord::Base.establish_connection(:adapter => "mysql", :database => "basecamp")
|
17
|
-
|
18
|
-
SESSION_OPTIONS = { "database_manager" => CGI::Session::MemoryStore }
|
19
|
-
|
20
|
-
class TestController < ActionController::Base
|
21
|
-
def index
|
22
|
-
render_template <<-EOT
|
23
|
-
<% for post in Post.find_all(nil,nil,100) %>
|
24
|
-
<%= post.title %>
|
25
|
-
<% end %>
|
26
|
-
EOT
|
27
|
-
end
|
28
|
-
|
29
|
-
def show_one
|
30
|
-
render_template <<-EOT
|
31
|
-
<%= Post.find_first.title %>
|
32
|
-
EOT
|
33
|
-
end
|
34
|
-
|
35
|
-
def text
|
36
|
-
render_text "hello world"
|
37
|
-
end
|
38
|
-
|
39
|
-
def erb_text
|
40
|
-
render_template "hello <%= 'world' %>"
|
41
|
-
end
|
42
|
-
|
43
|
-
def erb_loop
|
44
|
-
render_template <<-EOT
|
45
|
-
<% for post in 1..100 %>
|
46
|
-
<%= post %>
|
47
|
-
<% end %>
|
48
|
-
EOT
|
49
|
-
end
|
50
|
-
|
51
|
-
def rescue_action(e) puts e.message + e.backtrace.join("\n") end
|
52
|
-
end
|
53
|
-
|
54
|
-
if ARGV.empty? && ENV["REQUEST_URI"]
|
55
|
-
FCGI.each_cgi do |cgi|
|
56
|
-
TestController.process(ActionController::CgiRequest.new(cgi, SESSION_OPTIONS), ActionController::CgiResponse.new(cgi)).out
|
57
|
-
end
|
58
|
-
else
|
59
|
-
if ARGV.empty?
|
60
|
-
cgi = CGI.new
|
61
|
-
end
|
62
|
-
|
63
|
-
require 'benchmark'
|
64
|
-
require 'profile' if ARGV[2] == "profile"
|
65
|
-
|
66
|
-
RUNS = ARGV[1] ? ARGV[1].to_i : 50
|
67
|
-
|
68
|
-
runtime = Benchmark::measure {
|
69
|
-
RUNS.times {
|
70
|
-
if ARGV.empty?
|
71
|
-
TestController.process(ActionController::CgiRequest.new(cgi, SESSION_OPTIONS), ActionController::CgiResponse.new(cgi))
|
72
|
-
else
|
73
|
-
response = TestController.process_test(
|
74
|
-
ActionController::TestRequest.new({"action" => ARGV[0]})
|
75
|
-
)
|
76
|
-
puts(response.body) if ARGV[2] == "show"
|
77
|
-
end
|
78
|
-
}
|
79
|
-
}
|
80
|
-
|
81
|
-
puts "Runs: #{RUNS}"
|
82
|
-
puts "Avg. runtime: #{runtime.real / RUNS}"
|
83
|
-
puts "Requests/second: #{RUNS / runtime.real}"
|
84
|
-
end
|
85
|
-
|
86
|
-
rescue Exception => e
|
87
|
-
# CGI.new.out { "<pre>" + e.message + e.backtrace.join("\n") + "</pre>" }
|
88
|
-
$stderr << e.message + e.backtrace.join("\n")
|
89
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
#!/usr/local/bin/ruby
|
2
|
-
|
3
|
-
$:.unshift(File.dirname(__FILE__) + "/../lib")
|
4
|
-
|
5
|
-
require "action_controller"
|
6
|
-
|
7
|
-
Post = Struct.new("Post", :title, :body)
|
8
|
-
|
9
|
-
class BlogController < ActionController::Base
|
10
|
-
before_filter :initialize_session_storage
|
11
|
-
|
12
|
-
def index
|
13
|
-
@posts = @session["posts"]
|
14
|
-
|
15
|
-
render_template <<-"EOF"
|
16
|
-
<html><body>
|
17
|
-
<%= flash["alert"] %>
|
18
|
-
<h1>Posts</h1>
|
19
|
-
<% @posts.each do |post| %>
|
20
|
-
<p><b><%= post.title %></b><br /><%= post.body %></p>
|
21
|
-
<% end %>
|
22
|
-
|
23
|
-
<h1>Create post</h1>
|
24
|
-
<form action="create">
|
25
|
-
Title: <input type="text" name="post[title]"><br>
|
26
|
-
Body: <textarea name="post[body]"></textarea><br>
|
27
|
-
<input type="submit" value="save">
|
28
|
-
</form>
|
29
|
-
|
30
|
-
</body></html>
|
31
|
-
EOF
|
32
|
-
end
|
33
|
-
|
34
|
-
def create
|
35
|
-
@session["posts"].unshift(Post.new(params[:post][:title], params[:post][:body]))
|
36
|
-
flash["alert"] = "New post added!"
|
37
|
-
redirect_to :action => "index"
|
38
|
-
end
|
39
|
-
|
40
|
-
private
|
41
|
-
def initialize_session_storage
|
42
|
-
@session["posts"] = [] if @session["posts"].nil?
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
ActionController::Base.template_root = File.dirname(__FILE__)
|
47
|
-
# ActionController::Base.logger = Logger.new("debug.log") # Remove first comment to turn on logging in current dir
|
48
|
-
|
49
|
-
begin
|
50
|
-
BlogController.process_cgi(CGI.new) if $0 == __FILE__
|
51
|
-
rescue => e
|
52
|
-
CGI.new.out { "#{e.class}: #{e.message}" }
|
53
|
-
end
|
data/examples/debate/index.rhtml
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
<html>
|
2
|
-
<body>
|
3
|
-
<h1>Topics</h1>
|
4
|
-
|
5
|
-
<%= link_to "New topic", :action => "new_topic" %>
|
6
|
-
|
7
|
-
<ul>
|
8
|
-
<% for topic in @topics %>
|
9
|
-
<li><%= link_to "#{topic.title} (#{topic.replies.length} replies)", :action => "topic", :path_params => { "id" => topic.id } %></li>
|
10
|
-
<% end %>
|
11
|
-
</ul>
|
12
|
-
|
13
|
-
</body>
|
14
|
-
</html>
|
@@ -1,22 +0,0 @@
|
|
1
|
-
<html>
|
2
|
-
<body>
|
3
|
-
<h1>New topic</h1>
|
4
|
-
|
5
|
-
<form action="<%= url_for(:action => "create_topic") %>" method="post">
|
6
|
-
<p>
|
7
|
-
Title:<br>
|
8
|
-
<input type="text" name="topic[title]">
|
9
|
-
</p>
|
10
|
-
|
11
|
-
<p>
|
12
|
-
Body:<br>
|
13
|
-
<textarea name="topic[body]" style="width: 200px; height: 200px"></textarea>
|
14
|
-
</p>
|
15
|
-
|
16
|
-
<p>
|
17
|
-
<input type="submit" value="Create topic">
|
18
|
-
</p>
|
19
|
-
</form>
|
20
|
-
|
21
|
-
</body>
|
22
|
-
</html>
|
data/examples/debate/topic.rhtml
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
<html>
|
2
|
-
<body>
|
3
|
-
<h1><%= @topic.title %></h1>
|
4
|
-
|
5
|
-
<p><%= @topic.body %></p>
|
6
|
-
|
7
|
-
<%= link_to "Back to topics", :action => "index" %>
|
8
|
-
|
9
|
-
<% unless @topic.replies.empty? %>
|
10
|
-
<h2>Replies</h2>
|
11
|
-
<ol>
|
12
|
-
<% for reply in @topic.replies %>
|
13
|
-
<li><%= reply.body %></li>
|
14
|
-
<% end %>
|
15
|
-
</ol>
|
16
|
-
<% end %>
|
17
|
-
|
18
|
-
<h2>Reply to this topic</h2>
|
19
|
-
|
20
|
-
<form action="<%= url_for(:action => "create_reply") %>" method="post">
|
21
|
-
<input type="hidden" name="reply[topic_id]" value="<%= @topic.id %>">
|
22
|
-
<p>
|
23
|
-
<textarea name="reply[body]" style="width: 200px; height: 200px"></textarea>
|
24
|
-
</p>
|
25
|
-
|
26
|
-
<p>
|
27
|
-
<input type="submit" value="Create reply">
|
28
|
-
</p>
|
29
|
-
</form>
|
30
|
-
|
31
|
-
</body>
|
32
|
-
</html>
|
@@ -1,57 +0,0 @@
|
|
1
|
-
#!/usr/local/bin/ruby
|
2
|
-
|
3
|
-
$:.unshift(File.dirname(__FILE__) + "/../lib")
|
4
|
-
|
5
|
-
require "action_controller"
|
6
|
-
|
7
|
-
Topic = Struct.new("Topic", :id, :title, :body, :replies)
|
8
|
-
Reply = Struct.new("Reply", :body)
|
9
|
-
|
10
|
-
class DebateService
|
11
|
-
attr_reader :topics
|
12
|
-
|
13
|
-
def initialize() @topics = [] end
|
14
|
-
def create_topic(data) topics.unshift(Topic.new(next_topic_id, data["title"], data["body"], [])) end
|
15
|
-
def create_reply(data) find_topic(data["topic_id"]).replies << Reply.new(data["body"]) end
|
16
|
-
def find_topic(topic_id) topics.select { |topic| topic.id == topic_id.to_i }.first end
|
17
|
-
def next_topic_id() topics.first.id + 1 end
|
18
|
-
end
|
19
|
-
|
20
|
-
class DebateController < ActionController::Base
|
21
|
-
before_filter :initialize_session_storage
|
22
|
-
|
23
|
-
def index
|
24
|
-
@topics = @debate.topics
|
25
|
-
end
|
26
|
-
|
27
|
-
def topic
|
28
|
-
@topic = @debate.find_topic(params[:id])
|
29
|
-
end
|
30
|
-
|
31
|
-
# def new_topic() end <-- This is not needed as the template doesn't require any assigns
|
32
|
-
|
33
|
-
def create_topic
|
34
|
-
@debate.create_topic(params[:topic])
|
35
|
-
redirect_to :action => "index"
|
36
|
-
end
|
37
|
-
|
38
|
-
def create_reply
|
39
|
-
@debate.create_reply(params[:reply])
|
40
|
-
redirect_to :action => "topic", :path_params => { "id" => params[:reply][:topic_id] }
|
41
|
-
end
|
42
|
-
|
43
|
-
private
|
44
|
-
def initialize_session_storage
|
45
|
-
@session["debate"] = DebateService.new if @session["debate"].nil?
|
46
|
-
@debate = @session["debate"]
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
ActionController::Base.template_root = File.dirname(__FILE__)
|
51
|
-
# ActionController::Base.logger = Logger.new("debug.log") # Remove first comment to turn on logging in current dir
|
52
|
-
|
53
|
-
begin
|
54
|
-
DebateController.process_cgi(CGI.new) if $0 == __FILE__
|
55
|
-
rescue => e
|
56
|
-
CGI.new.out { "#{e.class}: #{e.message}" }
|
57
|
-
end
|