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.
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,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,6 +0,0 @@
1
- <h1>New <%= @scaffold_singular_name %></h1>
2
-
3
- <%= error_messages_for(@scaffold_singular_name) %>
4
- <%= form(@scaffold_singular_name, :action => "create#{@scaffold_suffix}") %>
5
-
6
- <%= link_to "Back", :action => "list#{@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