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.

Files changed (317) hide show
  1. data/CHANGELOG +1400 -20
  2. data/MIT-LICENSE +1 -1
  3. data/README +5 -5
  4. data/RUNNING_UNIT_TESTS +4 -5
  5. data/Rakefile +5 -6
  6. data/install.rb +2 -2
  7. data/lib/action_controller.rb +11 -15
  8. data/lib/action_controller/assertions.rb +12 -25
  9. data/lib/action_controller/assertions/dom_assertions.rb +18 -4
  10. data/lib/action_controller/assertions/model_assertions.rb +8 -1
  11. data/lib/action_controller/assertions/response_assertions.rb +35 -12
  12. data/lib/action_controller/assertions/routing_assertions.rb +56 -12
  13. data/lib/action_controller/assertions/selector_assertions.rb +105 -38
  14. data/lib/action_controller/assertions/tag_assertions.rb +28 -15
  15. data/lib/action_controller/base.rb +318 -250
  16. data/lib/action_controller/benchmarking.rb +33 -29
  17. data/lib/action_controller/caching.rb +130 -64
  18. data/lib/action_controller/cgi_ext.rb +16 -0
  19. data/lib/action_controller/cgi_ext/{cookie_performance_fix.rb → cookie.rb} +25 -40
  20. data/lib/action_controller/cgi_ext/query_extension.rb +22 -0
  21. data/lib/action_controller/cgi_ext/session.rb +73 -0
  22. data/lib/action_controller/cgi_ext/stdinput.rb +23 -0
  23. data/lib/action_controller/cgi_process.rb +34 -57
  24. data/lib/action_controller/components.rb +19 -36
  25. data/lib/action_controller/cookies.rb +10 -9
  26. data/lib/action_controller/dispatcher.rb +195 -0
  27. data/lib/action_controller/filters.rb +35 -34
  28. data/lib/action_controller/flash.rb +30 -35
  29. data/lib/action_controller/helpers.rb +121 -47
  30. data/lib/action_controller/http_authentication.rb +126 -0
  31. data/lib/action_controller/integration.rb +105 -101
  32. data/lib/action_controller/layout.rb +59 -47
  33. data/lib/action_controller/mime_responds.rb +57 -68
  34. data/lib/action_controller/mime_type.rb +43 -80
  35. data/lib/action_controller/mime_types.rb +20 -0
  36. data/lib/action_controller/polymorphic_routes.rb +88 -0
  37. data/lib/action_controller/record_identifier.rb +91 -0
  38. data/lib/action_controller/request.rb +553 -88
  39. data/lib/action_controller/request_forgery_protection.rb +126 -0
  40. data/lib/action_controller/request_profiler.rb +138 -0
  41. data/lib/action_controller/rescue.rb +185 -69
  42. data/lib/action_controller/resources.rb +211 -172
  43. data/lib/action_controller/response.rb +49 -8
  44. data/lib/action_controller/routing.rb +359 -236
  45. data/lib/action_controller/routing_optimisation.rb +119 -0
  46. data/lib/action_controller/session/active_record_store.rb +3 -2
  47. data/lib/action_controller/session/cookie_store.rb +161 -0
  48. data/lib/action_controller/session/mem_cache_store.rb +9 -16
  49. data/lib/action_controller/session_management.rb +17 -8
  50. data/lib/action_controller/streaming.rb +6 -3
  51. data/lib/action_controller/templates/rescues/_request_and_response.erb +24 -0
  52. data/lib/action_controller/templates/rescues/{_trace.rhtml → _trace.erb} +0 -0
  53. data/lib/action_controller/templates/rescues/{diagnostics.rhtml → diagnostics.erb} +2 -2
  54. data/lib/action_controller/templates/rescues/{layout.rhtml → layout.erb} +0 -0
  55. data/lib/action_controller/templates/rescues/{missing_template.rhtml → missing_template.erb} +0 -0
  56. data/lib/action_controller/templates/rescues/{routing_error.rhtml → routing_error.erb} +0 -0
  57. data/lib/action_controller/templates/rescues/{template_error.rhtml → template_error.erb} +2 -2
  58. data/lib/action_controller/templates/rescues/{unknown_action.rhtml → unknown_action.erb} +0 -0
  59. data/lib/action_controller/test_case.rb +53 -0
  60. data/lib/action_controller/test_process.rb +59 -46
  61. data/lib/action_controller/url_rewriter.rb +48 -24
  62. data/lib/action_controller/vendor/html-scanner/html/document.rb +7 -4
  63. data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +173 -0
  64. data/lib/action_controller/vendor/html-scanner/html/selector.rb +11 -6
  65. data/lib/action_controller/verification.rb +27 -21
  66. data/lib/action_pack.rb +1 -1
  67. data/lib/action_pack/version.rb +4 -4
  68. data/lib/action_view.rb +2 -3
  69. data/lib/action_view/base.rb +218 -63
  70. data/lib/action_view/compiled_templates.rb +1 -2
  71. data/lib/action_view/helpers/active_record_helper.rb +35 -17
  72. data/lib/action_view/helpers/asset_tag_helper.rb +395 -87
  73. data/lib/action_view/helpers/atom_feed_helper.rb +111 -0
  74. data/lib/action_view/helpers/benchmark_helper.rb +12 -5
  75. data/lib/action_view/helpers/cache_helper.rb +29 -0
  76. data/lib/action_view/helpers/capture_helper.rb +97 -63
  77. data/lib/action_view/helpers/date_helper.rb +295 -35
  78. data/lib/action_view/helpers/debug_helper.rb +6 -2
  79. data/lib/action_view/helpers/form_helper.rb +354 -111
  80. data/lib/action_view/helpers/form_options_helper.rb +171 -109
  81. data/lib/action_view/helpers/form_tag_helper.rb +332 -76
  82. data/lib/action_view/helpers/javascript_helper.rb +35 -11
  83. data/lib/action_view/helpers/javascripts/controls.js +484 -354
  84. data/lib/action_view/helpers/javascripts/dragdrop.js +88 -58
  85. data/lib/action_view/helpers/javascripts/effects.js +396 -364
  86. data/lib/action_view/helpers/javascripts/prototype.js +2817 -1107
  87. data/lib/action_view/helpers/number_helper.rb +84 -60
  88. data/lib/action_view/helpers/prototype_helper.rb +419 -43
  89. data/lib/action_view/helpers/record_identification_helper.rb +20 -0
  90. data/lib/action_view/helpers/record_tag_helper.rb +59 -0
  91. data/lib/action_view/helpers/sanitize_helper.rb +223 -0
  92. data/lib/action_view/helpers/scriptaculous_helper.rb +63 -4
  93. data/lib/action_view/helpers/tag_helper.rb +69 -39
  94. data/lib/action_view/helpers/text_helper.rb +221 -148
  95. data/lib/action_view/helpers/url_helper.rb +283 -165
  96. data/lib/action_view/partials.rb +134 -62
  97. data/lib/action_view/template_error.rb +4 -12
  98. data/lib/actionpack.rb +1 -0
  99. data/test/abstract_unit.rb +21 -1
  100. data/test/action_view_test.rb +26 -0
  101. data/test/active_record_unit.rb +12 -20
  102. data/test/activerecord/active_record_store_test.rb +2 -2
  103. data/test/activerecord/render_partial_with_record_identification_test.rb +74 -0
  104. data/test/controller/action_pack_assertions_test.rb +21 -152
  105. data/test/controller/addresses_render_test.rb +2 -7
  106. data/test/controller/assert_select_test.rb +120 -14
  107. data/test/controller/base_test.rb +11 -13
  108. data/test/controller/caching_test.rb +125 -5
  109. data/test/controller/capture_test.rb +23 -16
  110. data/test/controller/cgi_test.rb +66 -391
  111. data/test/controller/components_test.rb +31 -42
  112. data/test/controller/content_type_test.rb +1 -1
  113. data/test/controller/cookie_test.rb +42 -14
  114. data/test/controller/deprecation/deprecated_base_methods_test.rb +1 -42
  115. data/test/controller/dispatcher_test.rb +123 -0
  116. data/test/controller/fake_models.rb +5 -0
  117. data/test/controller/filters_test.rb +44 -7
  118. data/test/controller/flash_test.rb +46 -2
  119. data/test/controller/fragment_store_setting_test.rb +10 -8
  120. data/test/controller/helper_test.rb +19 -2
  121. data/test/controller/html-scanner/document_test.rb +124 -0
  122. data/test/controller/html-scanner/node_test.rb +69 -0
  123. data/test/controller/html-scanner/sanitizer_test.rb +250 -0
  124. data/test/controller/html-scanner/tag_node_test.rb +239 -0
  125. data/test/controller/html-scanner/text_node_test.rb +51 -0
  126. data/test/controller/html-scanner/tokenizer_test.rb +125 -0
  127. data/test/controller/http_authentication_test.rb +54 -0
  128. data/test/controller/integration_test.rb +12 -26
  129. data/test/controller/layout_test.rb +64 -12
  130. data/test/controller/mime_responds_test.rb +193 -38
  131. data/test/controller/mime_type_test.rb +30 -8
  132. data/test/controller/new_render_test.rb +104 -22
  133. data/test/controller/polymorphic_routes_test.rb +98 -0
  134. data/test/controller/record_identifier_test.rb +103 -0
  135. data/test/controller/redirect_test.rb +120 -18
  136. data/test/controller/render_test.rb +195 -45
  137. data/test/controller/request_forgery_protection_test.rb +217 -0
  138. data/test/controller/request_test.rb +545 -27
  139. data/test/controller/rescue_test.rb +501 -0
  140. data/test/controller/resources_test.rb +258 -132
  141. data/test/controller/routing_test.rb +502 -106
  142. data/test/controller/selector_test.rb +5 -5
  143. data/test/controller/send_file_test.rb +17 -7
  144. data/test/controller/session/cookie_store_test.rb +246 -0
  145. data/test/controller/session/mem_cache_store_test.rb +182 -0
  146. data/test/controller/session_fixation_test.rb +8 -11
  147. data/test/controller/session_management_test.rb +7 -7
  148. data/test/controller/test_test.rb +150 -38
  149. data/test/controller/url_rewriter_test.rb +87 -12
  150. data/test/controller/verification_test.rb +11 -0
  151. data/test/controller/view_paths_test.rb +137 -0
  152. data/test/controller/webservice_test.rb +11 -75
  153. data/test/fixtures/addresses/{list.rhtml → list.erb} +0 -0
  154. data/test/fixtures/db_definitions/sqlite.sql +2 -1
  155. data/test/fixtures/developer.rb +2 -0
  156. data/test/fixtures/fun/games/{hello_world.rhtml → hello_world.erb} +0 -0
  157. data/test/fixtures/helpers/fun/pdf_helper.rb +1 -1
  158. data/test/fixtures/layout_tests/alt/hello.rhtml +1 -0
  159. data/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb +1 -0
  160. data/test/fixtures/layouts/{builder.rxml → builder.builder} +0 -0
  161. data/test/fixtures/layouts/{standard.rhtml → standard.erb} +0 -0
  162. data/test/fixtures/layouts/{talk_from_action.rhtml → talk_from_action.erb} +0 -0
  163. data/test/fixtures/layouts/{yield.rhtml → yield.erb} +0 -0
  164. data/test/fixtures/multipart/binary_file +0 -0
  165. data/test/fixtures/multipart/bracketed_param +5 -0
  166. data/test/fixtures/override/test/hello_world.erb +1 -0
  167. data/test/fixtures/override2/layouts/test/sub.erb +1 -0
  168. data/test/fixtures/post_test/layouts/post.html.erb +1 -0
  169. data/test/fixtures/post_test/layouts/super_post.iphone.erb +1 -0
  170. data/test/fixtures/post_test/post/index.html.erb +1 -0
  171. data/test/fixtures/post_test/post/index.iphone.erb +1 -0
  172. data/test/fixtures/post_test/super_post/index.html.erb +1 -0
  173. data/test/fixtures/post_test/super_post/index.iphone.erb +1 -0
  174. data/test/fixtures/public/404.html +1 -0
  175. data/test/fixtures/public/500.html +1 -0
  176. data/test/fixtures/public/javascripts/application.js +0 -1
  177. data/test/fixtures/public/javascripts/bank.js +1 -0
  178. data/test/fixtures/public/javascripts/robber.js +1 -0
  179. data/test/fixtures/public/stylesheets/bank.css +1 -0
  180. data/test/fixtures/public/stylesheets/robber.css +1 -0
  181. data/test/fixtures/replies.yml +2 -0
  182. data/test/fixtures/reply.rb +2 -1
  183. data/test/fixtures/respond_to/{all_types_with_layout.rhtml → all_types_with_layout.html.erb} +0 -0
  184. data/test/fixtures/respond_to/{all_types_with_layout.rjs → all_types_with_layout.js.rjs} +0 -0
  185. data/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +1 -0
  186. data/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +1 -0
  187. data/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +1 -0
  188. data/test/fixtures/respond_to/layouts/missing.html.erb +1 -0
  189. data/test/fixtures/respond_to/layouts/standard.html.erb +1 -0
  190. data/test/fixtures/respond_to/layouts/standard.iphone.erb +1 -0
  191. data/test/fixtures/respond_to/{using_defaults.rhtml → using_defaults.html.erb} +0 -0
  192. data/test/fixtures/respond_to/{using_defaults.rjs → using_defaults.js.rjs} +0 -0
  193. data/test/fixtures/respond_to/{using_defaults.rxml → using_defaults.xml.builder} +0 -0
  194. data/test/fixtures/respond_to/{using_defaults_with_type_list.rhtml → using_defaults_with_type_list.html.erb} +0 -0
  195. data/test/fixtures/respond_to/{using_defaults_with_type_list.rjs → using_defaults_with_type_list.js.rjs} +0 -0
  196. data/test/fixtures/respond_to/{using_defaults_with_type_list.rxml → using_defaults_with_type_list.xml.builder} +0 -0
  197. data/test/fixtures/scope/test/{modgreet.rhtml → modgreet.erb} +0 -0
  198. data/test/fixtures/test/{_customer.rhtml → _customer.erb} +0 -0
  199. data/test/fixtures/test/{_customer_greeting.rhtml → _customer_greeting.erb} +0 -0
  200. data/test/fixtures/test/_hash_greeting.erb +1 -0
  201. data/test/fixtures/test/_hash_object.erb +2 -0
  202. data/test/fixtures/test/{_hello.rxml → _hello.builder} +0 -0
  203. data/test/fixtures/test/_layout_for_partial.html.erb +3 -0
  204. data/test/fixtures/test/_partial.erb +1 -0
  205. data/test/fixtures/test/_partial.html.erb +1 -0
  206. data/test/fixtures/test/_partial.js.erb +1 -0
  207. data/test/fixtures/test/_partial_for_use_in_layout.html.erb +1 -0
  208. data/test/fixtures/test/{_partial_only.rhtml → _partial_only.erb} +0 -0
  209. data/test/fixtures/test/{_person.rhtml → _person.erb} +0 -0
  210. data/test/fixtures/test/{action_talk_to_layout.rhtml → action_talk_to_layout.erb} +0 -0
  211. data/test/fixtures/test/{block_content_for.rhtml → block_content_for.erb} +0 -0
  212. data/test/fixtures/test/calling_partial_with_layout.html.erb +1 -0
  213. data/test/fixtures/test/{capturing.rhtml → capturing.erb} +0 -0
  214. data/test/fixtures/test/{content_for.rhtml → content_for.erb} +0 -0
  215. data/test/fixtures/test/content_for_concatenated.erb +3 -0
  216. data/test/fixtures/test/content_for_with_parameter.erb +2 -0
  217. data/test/fixtures/test/dot.directory/{render_file_with_ivar.rhtml → render_file_with_ivar.erb} +0 -0
  218. data/test/fixtures/test/{erb_content_for.rhtml → erb_content_for.erb} +0 -0
  219. data/test/fixtures/test/formatted_html_erb.html.erb +1 -0
  220. data/test/fixtures/test/formatted_xml_erb.builder +1 -0
  221. data/test/fixtures/test/formatted_xml_erb.html.erb +1 -0
  222. data/test/fixtures/test/formatted_xml_erb.xml.erb +1 -0
  223. data/test/fixtures/test/{greeting.rhtml → greeting.erb} +0 -0
  224. data/test/fixtures/test/{hello.rxml → hello.builder} +0 -0
  225. data/test/fixtures/test/{hello_world.rxml → hello_world.builder} +0 -0
  226. data/test/fixtures/test/{hello_world.rhtml → hello_world.erb} +0 -0
  227. data/test/fixtures/test/{hello_world_container.rxml → hello_world_container.builder} +0 -0
  228. data/test/fixtures/test/{hello_world_with_layout_false.rhtml → hello_world_with_layout_false.erb} +0 -0
  229. data/test/fixtures/test/{hello_xml_world.rxml → hello_xml_world.builder} +0 -0
  230. data/test/fixtures/test/list.erb +1 -0
  231. data/test/fixtures/test/{non_erb_block_content_for.rxml → non_erb_block_content_for.builder} +0 -0
  232. data/test/fixtures/test/{potential_conflicts.rhtml → potential_conflicts.erb} +0 -0
  233. data/test/fixtures/test/{render_file_with_ivar.rhtml → render_file_with_ivar.erb} +0 -0
  234. data/test/fixtures/test/{render_file_with_locals.rhtml → render_file_with_locals.erb} +0 -0
  235. data/test/fixtures/test/{render_to_string_test.rhtml → render_to_string_test.erb} +0 -0
  236. data/test/fixtures/test/{update_element_with_capture.rhtml → update_element_with_capture.erb} +0 -0
  237. data/test/fixtures/test/using_layout_around_block.html.erb +1 -0
  238. data/test/fixtures/topic.rb +1 -1
  239. data/test/template/active_record_helper_test.rb +67 -20
  240. data/test/template/asset_tag_helper_test.rb +222 -54
  241. data/test/template/atom_feed_helper_test.rb +101 -0
  242. data/test/template/benchmark_helper_test.rb +2 -2
  243. data/test/template/compiled_templates_test.rb +76 -32
  244. data/test/template/date_helper_test.rb +125 -9
  245. data/test/template/form_helper_test.rb +326 -33
  246. data/test/template/form_options_helper_test.rb +822 -15
  247. data/test/template/form_tag_helper_test.rb +96 -30
  248. data/test/template/javascript_helper_test.rb +61 -13
  249. data/test/template/number_helper_test.rb +12 -11
  250. data/test/template/prototype_helper_test.rb +185 -24
  251. data/test/template/sanitize_helper_test.rb +49 -0
  252. data/test/template/scriptaculous_helper_test.rb +9 -3
  253. data/test/template/tag_helper_test.rb +13 -2
  254. data/test/template/text_helper_test.rb +38 -52
  255. data/test/template/url_helper_test.rb +216 -46
  256. metadata +144 -116
  257. data/examples/.htaccess +0 -24
  258. data/examples/address_book/index.rhtml +0 -33
  259. data/examples/address_book/layout.rhtml +0 -8
  260. data/examples/address_book_controller.cgi +0 -9
  261. data/examples/address_book_controller.fcgi +0 -6
  262. data/examples/address_book_controller.rb +0 -52
  263. data/examples/address_book_controller.rbx +0 -4
  264. data/examples/benchmark.rb +0 -52
  265. data/examples/benchmark_with_ar.fcgi +0 -89
  266. data/examples/blog_controller.cgi +0 -53
  267. data/examples/debate/index.rhtml +0 -14
  268. data/examples/debate/new_topic.rhtml +0 -22
  269. data/examples/debate/topic.rhtml +0 -32
  270. data/examples/debate_controller.cgi +0 -57
  271. data/lib/action_controller/assertions/deprecated_assertions.rb +0 -228
  272. data/lib/action_controller/cgi_ext/cgi_ext.rb +0 -36
  273. data/lib/action_controller/cgi_ext/cgi_methods.rb +0 -211
  274. data/lib/action_controller/cgi_ext/pstore_performance_fix.rb +0 -30
  275. data/lib/action_controller/cgi_ext/raw_post_data_fix.rb +0 -95
  276. data/lib/action_controller/cgi_ext/session_performance_fix.rb +0 -30
  277. data/lib/action_controller/deprecated_dependencies.rb +0 -65
  278. data/lib/action_controller/deprecated_redirects.rb +0 -17
  279. data/lib/action_controller/deprecated_request_methods.rb +0 -34
  280. data/lib/action_controller/macros/auto_complete.rb +0 -53
  281. data/lib/action_controller/macros/in_place_editing.rb +0 -33
  282. data/lib/action_controller/pagination.rb +0 -408
  283. data/lib/action_controller/scaffolding.rb +0 -189
  284. data/lib/action_controller/templates/rescues/_request_and_response.rhtml +0 -44
  285. data/lib/action_controller/templates/scaffolds/edit.rhtml +0 -7
  286. data/lib/action_controller/templates/scaffolds/layout.rhtml +0 -69
  287. data/lib/action_controller/templates/scaffolds/list.rhtml +0 -27
  288. data/lib/action_controller/templates/scaffolds/new.rhtml +0 -6
  289. data/lib/action_controller/templates/scaffolds/show.rhtml +0 -9
  290. data/lib/action_controller/vendor/xml_node.rb +0 -97
  291. data/lib/action_view/helpers/deprecated_helper.rb +0 -37
  292. data/lib/action_view/helpers/java_script_macros_helper.rb +0 -233
  293. data/lib/action_view/helpers/pagination_helper.rb +0 -86
  294. data/test/activerecord/active_record_assertions_test.rb +0 -92
  295. data/test/activerecord/pagination_test.rb +0 -165
  296. data/test/controller/deprecated_instance_variables_test.rb +0 -48
  297. data/test/controller/raw_post_test.rb +0 -68
  298. data/test/fixtures/deprecated_instance_variables/_cookies_ivar.rhtml +0 -1
  299. data/test/fixtures/deprecated_instance_variables/_cookies_method.rhtml +0 -1
  300. data/test/fixtures/deprecated_instance_variables/_flash_ivar.rhtml +0 -1
  301. data/test/fixtures/deprecated_instance_variables/_flash_method.rhtml +0 -1
  302. data/test/fixtures/deprecated_instance_variables/_headers_ivar.rhtml +0 -1
  303. data/test/fixtures/deprecated_instance_variables/_headers_method.rhtml +0 -1
  304. data/test/fixtures/deprecated_instance_variables/_params_ivar.rhtml +0 -1
  305. data/test/fixtures/deprecated_instance_variables/_params_method.rhtml +0 -1
  306. data/test/fixtures/deprecated_instance_variables/_request_ivar.rhtml +0 -1
  307. data/test/fixtures/deprecated_instance_variables/_request_method.rhtml +0 -1
  308. data/test/fixtures/deprecated_instance_variables/_response_ivar.rhtml +0 -1
  309. data/test/fixtures/deprecated_instance_variables/_response_method.rhtml +0 -1
  310. data/test/fixtures/deprecated_instance_variables/_session_ivar.rhtml +0 -1
  311. data/test/fixtures/deprecated_instance_variables/_session_method.rhtml +0 -1
  312. data/test/fixtures/respond_to/layouts/standard.rhtml +0 -1
  313. data/test/fixtures/test/_hash_object.rhtml +0 -1
  314. data/test/fixtures/test/list.rhtml +0 -1
  315. data/test/template/deprecated_helper_test.rb +0 -36
  316. data/test/template/deprecated_instance_variables_test.rb +0 -43
  317. data/test/template/java_script_macros_helper_test.rb +0 -109
@@ -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,8 +0,0 @@
1
- <html>
2
- <head>
3
- <title><%= @title || "Untitled" %></title>
4
- </head>
5
- <body>
6
- <%= @content_for_layout %>
7
- </body>
8
- </html>
@@ -1,9 +0,0 @@
1
- #!/usr/local/bin/ruby
2
-
3
- require "address_book_controller"
4
-
5
- begin
6
- AddressBookController.process_cgi(CGI.new)
7
- rescue => e
8
- CGI.new.out { "#{e.class}: #{e.message}" }
9
- end
@@ -1,6 +0,0 @@
1
- #!/usr/local/bin/ruby
2
-
3
- require "address_book_controller"
4
- require "fcgi"
5
-
6
- FCGI.each_cgi { |cgi| AddressBookController.process_cgi(cgi) }
@@ -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
@@ -1,4 +0,0 @@
1
- #!/usr/local/bin/ruby
2
-
3
- require "address_book_controller"
4
- AddressBookController.process_cgi(CGI.new)
@@ -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
@@ -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>
@@ -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