radiant 0.5.2 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of radiant might be problematic. Click here for more details.

Files changed (1442) hide show
  1. data/CHANGELOG +70 -1
  2. data/CONTRIBUTORS +22 -5
  3. data/INSTALL +36 -0
  4. data/LICENSE +16 -4
  5. data/README +17 -54
  6. data/Rakefile +6 -5
  7. data/app/controllers/admin/{model_controller.rb → abstract_model_controller.rb} +32 -21
  8. data/app/controllers/admin/export_controller.rb +1 -3
  9. data/app/controllers/admin/extension_controller.rb +10 -0
  10. data/app/controllers/admin/layout_controller.rb +1 -3
  11. data/app/controllers/admin/page_controller.rb +58 -56
  12. data/app/controllers/admin/snippet_controller.rb +1 -4
  13. data/app/controllers/admin/user_controller.rb +3 -5
  14. data/app/controllers/admin/welcome_controller.rb +8 -10
  15. data/app/controllers/application.rb +13 -7
  16. data/app/controllers/site_controller.rb +14 -8
  17. data/app/helpers/admin/export_helper.rb +1 -1
  18. data/app/helpers/admin/extension_helper.rb +2 -0
  19. data/app/helpers/admin/page_helper.rb +29 -4
  20. data/app/helpers/application_helper.rb +30 -13
  21. data/app/models/archive_day_index_page.rb +28 -0
  22. data/app/models/archive_finder.rb +7 -4
  23. data/app/models/archive_month_index_page.rb +28 -0
  24. data/app/models/archive_page.rb +36 -0
  25. data/app/models/archive_year_index_page.rb +28 -0
  26. data/app/{behaviors/env_behavior.rb → models/env_dump_page.rb} +5 -6
  27. data/app/models/file_not_found_page.rb +28 -0
  28. data/app/models/layout.rb +4 -1
  29. data/app/models/page.rb +193 -30
  30. data/app/models/page_context.rb +6 -493
  31. data/app/models/page_part.rb +5 -1
  32. data/app/models/radiant/config.rb +18 -5
  33. data/app/models/radiant/extension_meta.rb +5 -0
  34. data/app/models/response_cache.rb +89 -28
  35. data/app/models/snippet.rb +5 -2
  36. data/app/models/standard_tags.rb +601 -0
  37. data/app/models/status.rb +2 -2
  38. data/app/models/text_filter.rb +20 -6
  39. data/app/models/user.rb +3 -0
  40. data/app/views/admin/extension/index.rhtml +45 -0
  41. data/app/views/admin/layout/{new.rhtml → edit.rhtml} +6 -4
  42. data/app/views/admin/layout/index.rhtml +3 -3
  43. data/app/views/admin/layout/remove.rhtml +1 -1
  44. data/app/views/admin/page/_meta_row.rhtml +4 -0
  45. data/app/views/admin/page/_node.rhtml +9 -9
  46. data/app/views/admin/page/_part.rhtml +3 -2
  47. data/app/views/admin/page/_tag_reference.rhtml +4 -0
  48. data/app/views/admin/page/{new.rhtml → edit.rhtml} +223 -164
  49. data/app/views/admin/page/filter_reference.rjs +5 -0
  50. data/app/views/admin/page/index.rhtml +3 -168
  51. data/app/views/admin/page/tag_reference.rjs +5 -0
  52. data/app/views/admin/snippet/{new.rhtml → edit.rhtml} +2 -1
  53. data/app/views/admin/snippet/index.rhtml +3 -3
  54. data/app/views/admin/user/{new.rhtml → edit.rhtml} +7 -1
  55. data/app/views/admin/user/index.rhtml +2 -2
  56. data/app/views/layouts/application.rhtml +45 -37
  57. data/bin/radiant +44 -421
  58. data/config/boot.rb +14 -60
  59. data/config/database.mysql.yml +5 -0
  60. data/config/database.postgresql.yml +5 -0
  61. data/config/database.sqlite.yml +11 -15
  62. data/config/database.sqlserver.yml +20 -0
  63. data/config/environment.rb +13 -18
  64. data/config/environments/production.rb +1 -3
  65. data/config/environments/test.rb +2 -0
  66. data/config/routes.rb +8 -0
  67. data/db/migrate/001_create_radiant_tables.rb +6 -6
  68. data/db/migrate/002_insert_initial_data.rb +5 -45
  69. data/db/migrate/006_integer_columns_to_boolean.rb +26 -1
  70. data/db/migrate/010_merge_behaviors_and_pages.rb +57 -0
  71. data/db/migrate/011_rename_type_column_on_page_to_class_name.rb +9 -0
  72. data/db/migrate/012_create_extension_meta.rb +13 -0
  73. data/db/migrate/013_add_notes_field_to_user.rb +9 -0
  74. data/db/migrate/014_rename_config_default_parts_key.rb +17 -0
  75. data/db/migrate/015_add_optimistic_locking.rb +15 -0
  76. data/db/schema.rb +54 -43
  77. data/db/templates/simple-blog.yml +3 -3
  78. data/db/templates/styled-blog.yml +3 -3
  79. data/lib/annotatable.rb +52 -0
  80. data/lib/archive_index_tags_and_methods.rb +57 -0
  81. data/lib/generators/extension/USAGE +28 -0
  82. data/lib/generators/extension/extension_generator.rb +38 -0
  83. data/lib/generators/extension/templates/README +3 -0
  84. data/lib/generators/extension/templates/Rakefile +25 -0
  85. data/lib/generators/extension/templates/extension.rb +21 -0
  86. data/lib/generators/extension/templates/functional_test.rb +15 -0
  87. data/lib/generators/extension/templates/migration.rb +9 -0
  88. data/lib/generators/extension/templates/tasks.rake +17 -0
  89. data/lib/generators/extension/templates/test_helper.rb +18 -0
  90. data/lib/generators/extension_controller/USAGE +34 -0
  91. data/lib/generators/extension_controller/extension_controller_generator.rb +26 -0
  92. data/lib/generators/extension_controller/templates/controller.rb +14 -0
  93. data/lib/generators/extension_controller/templates/functional_test.rb +17 -0
  94. data/lib/generators/extension_controller/templates/helper.rb +2 -0
  95. data/lib/generators/extension_controller/templates/view.rhtml +2 -0
  96. data/lib/generators/extension_model/USAGE +34 -0
  97. data/lib/generators/extension_model/extension_model_generator.rb +26 -0
  98. data/lib/generators/extension_model/templates/fixtures.yml +11 -0
  99. data/lib/generators/extension_model/templates/migration.rb +13 -0
  100. data/lib/generators/extension_model/templates/model.rb +2 -0
  101. data/lib/generators/extension_model/templates/unit_test.rb +10 -0
  102. data/lib/generators/instance/instance_generator.rb +116 -0
  103. data/lib/generators/instance/templates/databases/mysql.yml +47 -0
  104. data/lib/generators/instance/templates/databases/postgresql.yml +44 -0
  105. data/lib/generators/instance/templates/databases/sqlite3.yml +16 -0
  106. data/lib/generators/instance/templates/databases/sqlserver.yml +20 -0
  107. data/lib/generators/instance/templates/instance_boot.rb +41 -0
  108. data/lib/generators/instance/templates/instance_environment.rb +6 -0
  109. data/lib/generators/instance/templates/instance_generate +16 -0
  110. data/lib/generators/instance/templates/instance_rakefile +3 -0
  111. data/lib/generators/instance/templates/instance_routes.rb +1 -0
  112. data/lib/inheritable_class_attributes.rb +1 -1
  113. data/lib/login_system.rb +2 -2
  114. data/lib/method_observer.rb +50 -0
  115. data/lib/plugins/active_record_extensions/init.rb +1 -0
  116. data/lib/plugins/active_record_extensions/lib/active_record_extensions.rb +18 -0
  117. data/lib/plugins/extension_patches/init.rb +5 -0
  118. data/lib/plugins/extension_patches/lib/fixture_loading_extension.rb +49 -0
  119. data/lib/plugins/extension_patches/lib/generator_base_extension.rb +24 -0
  120. data/lib/plugins/extension_patches/lib/mailer_view_paths_extension.rb +88 -0
  121. data/lib/plugins/extension_patches/lib/routing_extension.rb +31 -0
  122. data/lib/plugins/extension_patches/lib/view_paths_extension.rb +23 -0
  123. data/lib/plugins/object_extensions/init.rb +1 -0
  124. data/lib/plugins/object_extensions/lib/object_extensions.rb +5 -0
  125. data/lib/plugins/response_cache_timeout/init.rb +3 -0
  126. data/lib/plugins/string_extensions/init.rb +1 -0
  127. data/lib/plugins/string_extensions/lib/string_extensions.rb +11 -0
  128. data/lib/radiant.rb +9 -3
  129. data/lib/radiant/admin_ui.rb +82 -0
  130. data/lib/radiant/extension.rb +77 -0
  131. data/lib/radiant/extension_loader.rb +107 -0
  132. data/lib/radiant/extension_migrator.rb +47 -0
  133. data/lib/radiant/initializer.rb +66 -0
  134. data/lib/radiant/setup.rb +209 -0
  135. data/lib/radiant/taggable.rb +74 -0
  136. data/lib/simpleton.rb +21 -0
  137. data/lib/tasks/database.rake +32 -0
  138. data/lib/tasks/environments.rake +11 -0
  139. data/lib/tasks/extensions.rake +27 -0
  140. data/lib/tasks/framework.rake +123 -0
  141. data/lib/tasks/instance.rake +23 -0
  142. data/lib/tasks/release.rake +27 -26
  143. data/lib/tasks/undefine.rake +24 -0
  144. data/log/.keep +0 -0
  145. data/public/images/{add-child.png → admin/add-child.png} +0 -0
  146. data/public/images/{brown-bottom-line.gif → admin/brown-bottom-line.gif} +0 -0
  147. data/public/images/{clear-page-cache.png → admin/clear-page-cache.png} +0 -0
  148. data/public/images/{collapse.png → admin/collapse.png} +0 -0
  149. data/public/images/{expand.png → admin/expand.png} +0 -0
  150. data/public/images/{layout.png → admin/layout.png} +0 -0
  151. data/public/images/{minus.png → admin/minus.png} +0 -0
  152. data/public/images/{new-homepage.png → admin/new-homepage.png} +0 -0
  153. data/public/images/{new-layout.png → admin/new-layout.png} +0 -0
  154. data/public/images/{new-snippet.png → admin/new-snippet.png} +0 -0
  155. data/public/images/{new-user.png → admin/new-user.png} +0 -0
  156. data/public/images/{page.png → admin/page.png} +0 -0
  157. data/public/images/{plus.png → admin/plus.png} +0 -0
  158. data/public/images/{remove-disabled.png → admin/remove-disabled.png} +0 -0
  159. data/public/images/{remove.png → admin/remove.png} +0 -0
  160. data/public/images/{snippet.png → admin/snippet.png} +0 -0
  161. data/public/images/{spinner.gif → admin/spinner.gif} +0 -0
  162. data/public/images/{view-site.gif → admin/view-site.gif} +0 -0
  163. data/public/images/{virtual-page.png → admin/virtual-page.png} +0 -0
  164. data/public/javascripts/controls.js +41 -23
  165. data/public/javascripts/dragdrop.js +105 -76
  166. data/public/javascripts/effects.js +293 -163
  167. data/public/javascripts/pngfix.js +1 -40
  168. data/public/javascripts/prototype.js +679 -300
  169. data/public/javascripts/sitemap.js +176 -0
  170. data/public/javascripts/tag_reference_search.js +30 -0
  171. data/public/stylesheets/{admin.css → admin/main.css} +167 -21
  172. data/script/process/inspector +3 -0
  173. data/test/fixtures/extensions/basic/app/controllers/basic_extension_controller.rb +7 -0
  174. data/test/fixtures/extensions/basic/app/models/basic_extension_mailer.rb +4 -0
  175. data/test/fixtures/extensions/basic/app/models/basic_extension_model.rb +2 -0
  176. data/test/fixtures/extensions/basic/app/views/basic_extension/index.rhtml +1 -0
  177. data/test/fixtures/extensions/basic/app/views/basic_extension/override.rhtml +1 -0
  178. data/test/fixtures/extensions/basic/app/views/basic_extension_mailer/message.rhtml +1 -0
  179. data/test/fixtures/extensions/basic/basic_extension.rb +17 -0
  180. data/test/fixtures/extensions/basic/db/migrate/001_create_initial_schema.rb +8 -0
  181. data/test/fixtures/extensions/basic/db/migrate/002_modify_initial_schema.rb +8 -0
  182. data/test/fixtures/extensions/overriding/app/views/basic_extension/override.rhtml +1 -0
  183. data/test/fixtures/extensions/overriding/overriding_extension.rb +11 -0
  184. data/test/fixtures/pages.yml +14 -12
  185. data/test/fixtures/sample.txt +1 -0
  186. data/test/fixtures/snippets.yml +9 -1
  187. data/test/functional/admin/abstract_model_controller_test.rb +125 -0
  188. data/test/functional/admin/export_controller_test.rb +3 -3
  189. data/test/functional/admin/extension_controller_test.rb +40 -0
  190. data/test/functional/admin/layout_controller_test.rb +3 -3
  191. data/test/functional/admin/page_controller_test.rb +54 -6
  192. data/test/functional/admin/user_controller_test.rb +6 -6
  193. data/test/functional/admin/welcome_controller_test.rb +6 -6
  194. data/test/functional/application_controller_test.rb +11 -11
  195. data/test/functional/extension_initialization_test.rb +94 -0
  196. data/test/functional/login_system_test.rb +45 -72
  197. data/test/functional/site_controller_test.rb +20 -13
  198. data/test/helpers/archive_index_test_helper.rb +2 -0
  199. data/test/helpers/extension_fixture_test_helper.rb +40 -0
  200. data/test/helpers/extension_tag_test_helper.rb +17 -0
  201. data/test/helpers/page_test_helper.rb +33 -1
  202. data/test/helpers/render_test_helper.rb +57 -0
  203. data/test/helpers/routing_test_helper.rb +19 -0
  204. data/test/test_helper.rb +26 -7
  205. data/test/unit/admin_ui_test.rb +93 -0
  206. data/test/unit/annotatable_test.rb +76 -0
  207. data/test/unit/{behaviors/archive_day_index_behavior_test.rb → archive_day_index_page_test.rb} +4 -3
  208. data/test/unit/{behaviors/archive_month_index_behavior_test.rb → archive_month_index_page_test.rb} +5 -4
  209. data/test/unit/{behaviors/archive_behavior_test.rb → archive_page_test.rb} +3 -2
  210. data/test/unit/{behaviors/archive_year_index_behavior_test.rb → archive_year_index_page_test.rb} +5 -4
  211. data/test/unit/extension_migrator_test.rb +17 -0
  212. data/test/unit/extension_test.rb +42 -0
  213. data/test/unit/{behaviors/page_missing_behavior_test.rb → file_not_found_page_test.rb} +4 -4
  214. data/test/unit/method_observer_test.rb +53 -0
  215. data/test/unit/page_context_test.rb +8 -356
  216. data/test/unit/page_test.rb +250 -64
  217. data/test/unit/radiant/config_test.rb +11 -0
  218. data/test/unit/radiant/taggable_test.rb +105 -0
  219. data/test/unit/response_cache_test.rb +69 -15
  220. data/test/unit/simpleton_test.rb +42 -0
  221. data/test/unit/standard_tags_test.rb +424 -0
  222. data/test/unit/text_filter_test.rb +31 -3
  223. data/test/unit/user_test.rb +1 -2
  224. data/vendor/bluecloth/CHANGES +366 -0
  225. data/vendor/bluecloth/LICENSE +340 -0
  226. data/vendor/bluecloth/README +99 -0
  227. data/vendor/bluecloth/bin/bluecloth +83 -0
  228. data/vendor/bluecloth/install.rb +150 -0
  229. data/vendor/bluecloth/lib/bluecloth.rb +1144 -0
  230. data/vendor/bluecloth/test.rb +117 -0
  231. data/vendor/bluecloth/tests/00_Class.tests.rb +71 -0
  232. data/vendor/bluecloth/tests/05_Markdown.tests.rb +1527 -0
  233. data/vendor/bluecloth/tests/10_Bug.tests.rb +57 -0
  234. data/vendor/bluecloth/tests/15_Contrib.tests.rb +132 -0
  235. data/vendor/bluecloth/tests/bctestcase.rb +274 -0
  236. data/vendor/bluecloth/tests/data/antsugar.txt +34 -0
  237. data/vendor/bluecloth/tests/data/ml-announce.txt +17 -0
  238. data/vendor/bluecloth/tests/data/re-overflow.txt +67 -0
  239. data/vendor/bluecloth/tests/data/re-overflow2.txt +281 -0
  240. data/vendor/bluecloth/utils.rb +553 -0
  241. data/vendor/extensions/markdown_filter/README +1 -0
  242. data/vendor/extensions/markdown_filter/Rakefile +25 -0
  243. data/vendor/extensions/markdown_filter/lib/markdown_filter.rb +9 -0
  244. data/vendor/extensions/markdown_filter/lib/smarty_pants_filter.rb +9 -0
  245. data/vendor/extensions/markdown_filter/lib/tasks/textile_filter_extension_tasks.rake +0 -0
  246. data/vendor/extensions/markdown_filter/markdown.html +123 -0
  247. data/vendor/extensions/markdown_filter/markdown_filter_extension.rb +10 -0
  248. data/vendor/extensions/markdown_filter/smartypants.html +47 -0
  249. data/vendor/extensions/markdown_filter/test/test_helper.rb +10 -0
  250. data/vendor/extensions/markdown_filter/test/unit/markdown_filter_test.rb +18 -0
  251. data/vendor/extensions/markdown_filter/test/unit/smarty_pants_filter_test.rb +14 -0
  252. data/vendor/extensions/textile_filter/README +1 -0
  253. data/vendor/extensions/textile_filter/Rakefile +25 -0
  254. data/vendor/extensions/textile_filter/lib/tasks/textile_filter_extension_tasks.rake +0 -0
  255. data/vendor/extensions/textile_filter/lib/textile_filter.rb +8 -0
  256. data/vendor/extensions/textile_filter/test/test_helper.rb +10 -0
  257. data/vendor/extensions/textile_filter/test/unit/textile_filter_test.rb +13 -0
  258. data/vendor/extensions/textile_filter/textile.html +115 -0
  259. data/vendor/extensions/textile_filter/textile_filter_extension.rb +9 -0
  260. data/vendor/highline/AUTHORS +2 -0
  261. data/vendor/highline/CHANGELOG +183 -0
  262. data/vendor/highline/COPYING +340 -0
  263. data/vendor/highline/INSTALL +35 -0
  264. data/vendor/highline/LICENSE +7 -0
  265. data/vendor/highline/README +63 -0
  266. data/vendor/highline/Rakefile +82 -0
  267. data/vendor/highline/TODO +6 -0
  268. data/vendor/highline/examples/ansi_colors.rb +38 -0
  269. data/vendor/highline/examples/asking_for_arrays.rb +18 -0
  270. data/vendor/highline/examples/basic_usage.rb +75 -0
  271. data/vendor/highline/examples/color_scheme.rb +32 -0
  272. data/vendor/highline/examples/menus.rb +65 -0
  273. data/vendor/highline/examples/overwrite.rb +19 -0
  274. data/vendor/highline/examples/page_and_wrap.rb +322 -0
  275. data/vendor/highline/examples/password.rb +7 -0
  276. data/vendor/highline/examples/trapping_eof.rb +22 -0
  277. data/vendor/highline/examples/using_readline.rb +17 -0
  278. data/vendor/highline/lib/highline.rb +704 -0
  279. data/vendor/highline/lib/highline/color_scheme.rb +120 -0
  280. data/vendor/highline/lib/highline/import.rb +43 -0
  281. data/vendor/highline/lib/highline/menu.rb +395 -0
  282. data/vendor/highline/lib/highline/question.rb +462 -0
  283. data/vendor/highline/lib/highline/system_extensions.rb +125 -0
  284. data/vendor/highline/setup.rb +1360 -0
  285. data/vendor/highline/site/highline.css +65 -0
  286. data/vendor/highline/site/images/logo.png +0 -0
  287. data/vendor/highline/site/index.html +59 -0
  288. data/vendor/highline/test/tc_color_scheme.rb +56 -0
  289. data/vendor/highline/test/tc_highline.rb +780 -0
  290. data/vendor/highline/test/tc_import.rb +54 -0
  291. data/vendor/highline/test/tc_menu.rb +429 -0
  292. data/vendor/highline/test/ts_all.rb +15 -0
  293. data/vendor/plugins/default_order/README +35 -0
  294. data/vendor/plugins/default_order/Rakefile +22 -0
  295. data/vendor/plugins/default_order/init.rb +1 -0
  296. data/vendor/plugins/default_order/lib/default_order.rb +32 -0
  297. data/vendor/plugins/default_order/test/default_order_test.rb +5 -0
  298. data/vendor/radius/CHANGELOG +25 -0
  299. data/vendor/radius/QUICKSTART +323 -0
  300. data/vendor/radius/README +97 -0
  301. data/vendor/radius/ROADMAP +12 -0
  302. data/vendor/radius/Rakefile +86 -0
  303. data/vendor/radius/lib/radius.rb +497 -0
  304. data/vendor/radius/test/radius_test.rb +321 -0
  305. data/vendor/rails/actionmailer/CHANGELOG +297 -0
  306. data/vendor/rails/actionmailer/MIT-LICENSE +21 -0
  307. data/vendor/rails/actionmailer/README +145 -0
  308. data/vendor/rails/actionmailer/Rakefile +95 -0
  309. data/vendor/rails/actionmailer/install.rb +30 -0
  310. data/vendor/rails/actionmailer/lib/action_mailer.rb +50 -0
  311. data/vendor/rails/actionmailer/lib/action_mailer/adv_attr_accessor.rb +30 -0
  312. data/vendor/rails/actionmailer/lib/action_mailer/base.rb +582 -0
  313. data/vendor/rails/actionmailer/lib/action_mailer/helpers.rb +111 -0
  314. data/vendor/rails/actionmailer/lib/action_mailer/mail_helper.rb +19 -0
  315. data/vendor/rails/actionmailer/lib/action_mailer/part.rb +113 -0
  316. data/vendor/rails/actionmailer/lib/action_mailer/part_container.rb +51 -0
  317. data/vendor/rails/actionmailer/lib/action_mailer/quoting.rb +59 -0
  318. data/vendor/rails/actionmailer/lib/action_mailer/utils.rb +8 -0
  319. data/vendor/rails/actionmailer/lib/action_mailer/vendor/text/format.rb +1466 -0
  320. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail.rb +3 -0
  321. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail/address.rb +242 -0
  322. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail/attachments.rb +39 -0
  323. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail/base64.rb +71 -0
  324. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail/config.rb +69 -0
  325. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail/encode.rb +467 -0
  326. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail/facade.rb +552 -0
  327. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail/header.rb +914 -0
  328. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail/info.rb +35 -0
  329. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail/loader.rb +1 -0
  330. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail/mail.rb +447 -0
  331. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail/mailbox.rb +433 -0
  332. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail/mbox.rb +1 -0
  333. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail/net.rb +280 -0
  334. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail/obsolete.rb +135 -0
  335. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail/parser.rb +1522 -0
  336. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail/port.rb +377 -0
  337. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail/quoting.rb +131 -0
  338. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail/scanner.rb +41 -0
  339. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail/scanner_r.rb +263 -0
  340. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail/stringio.rb +277 -0
  341. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail/tmail.rb +1 -0
  342. data/vendor/rails/actionmailer/lib/action_mailer/vendor/tmail/utils.rb +238 -0
  343. data/vendor/rails/actionmailer/lib/action_mailer/version.rb +9 -0
  344. data/vendor/rails/actionmailer/test/abstract_unit.rb +30 -0
  345. data/vendor/rails/actionmailer/test/fixtures/first_mailer/share.rhtml +1 -0
  346. data/vendor/rails/actionmailer/test/fixtures/helper_mailer/use_helper.rhtml +1 -0
  347. data/vendor/rails/actionmailer/test/fixtures/helper_mailer/use_helper_method.rhtml +1 -0
  348. data/vendor/rails/actionmailer/test/fixtures/helper_mailer/use_mail_helper.rhtml +5 -0
  349. data/vendor/rails/actionmailer/test/fixtures/helper_mailer/use_test_helper.rhtml +1 -0
  350. data/vendor/rails/actionmailer/test/fixtures/helpers/test_helper.rb +5 -0
  351. data/vendor/rails/actionmailer/test/fixtures/path.with.dots/funky_path_mailer/multipart_with_template_path_with_dots.rhtml +1 -0
  352. data/vendor/rails/actionmailer/test/fixtures/path.with.dots/multipart_with_template_path_with_dots.rhtml +0 -0
  353. data/vendor/rails/actionmailer/test/fixtures/raw_email +14 -0
  354. data/vendor/rails/actionmailer/test/fixtures/raw_email10 +20 -0
  355. data/vendor/rails/actionmailer/test/fixtures/raw_email11 +34 -0
  356. data/vendor/rails/actionmailer/test/fixtures/raw_email12 +32 -0
  357. data/vendor/rails/actionmailer/test/fixtures/raw_email13 +29 -0
  358. data/vendor/rails/actionmailer/test/fixtures/raw_email2 +114 -0
  359. data/vendor/rails/actionmailer/test/fixtures/raw_email3 +70 -0
  360. data/vendor/rails/actionmailer/test/fixtures/raw_email4 +59 -0
  361. data/vendor/rails/actionmailer/test/fixtures/raw_email5 +19 -0
  362. data/vendor/rails/actionmailer/test/fixtures/raw_email6 +20 -0
  363. data/vendor/rails/actionmailer/test/fixtures/raw_email7 +66 -0
  364. data/vendor/rails/actionmailer/test/fixtures/raw_email8 +47 -0
  365. data/vendor/rails/actionmailer/test/fixtures/raw_email9 +28 -0
  366. data/vendor/rails/actionmailer/test/fixtures/raw_email_quoted_with_0d0a +14 -0
  367. data/vendor/rails/actionmailer/test/fixtures/raw_email_with_partially_quoted_subject +14 -0
  368. data/vendor/rails/actionmailer/test/fixtures/second_mailer/share.rhtml +1 -0
  369. data/vendor/rails/actionmailer/test/fixtures/templates/signed_up.rhtml +3 -0
  370. data/vendor/rails/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.ignored.rhtml +1 -0
  371. data/vendor/rails/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.text.html.rhtml +10 -0
  372. data/vendor/rails/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.text.plain.rhtml +2 -0
  373. data/vendor/rails/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.text.yaml.rhtml +1 -0
  374. data/vendor/rails/actionmailer/test/fixtures/test_mailer/signed_up.rhtml +3 -0
  375. data/vendor/rails/actionmailer/test/fixtures/test_mailer/signed_up_with_url.rhtml +3 -0
  376. data/vendor/rails/actionmailer/test/mail_helper_test.rb +91 -0
  377. data/vendor/rails/actionmailer/test/mail_render_test.rb +79 -0
  378. data/vendor/rails/actionmailer/test/mail_service_test.rb +816 -0
  379. data/vendor/rails/actionmailer/test/quoting_test.rb +57 -0
  380. data/vendor/rails/actionmailer/test/tmail_test.rb +13 -0
  381. data/vendor/rails/actionmailer/test/url_test.rb +68 -0
  382. data/vendor/rails/actionpack/CHANGELOG +3138 -0
  383. data/vendor/rails/actionpack/MIT-LICENSE +21 -0
  384. data/vendor/rails/actionpack/README +469 -0
  385. data/vendor/rails/actionpack/RUNNING_UNIT_TESTS +25 -0
  386. data/vendor/rails/actionpack/Rakefile +154 -0
  387. data/vendor/rails/actionpack/examples/address_book/index.rhtml +33 -0
  388. data/vendor/rails/actionpack/examples/address_book/layout.rhtml +8 -0
  389. data/vendor/rails/actionpack/examples/address_book_controller.cgi +9 -0
  390. data/vendor/rails/actionpack/examples/address_book_controller.fcgi +6 -0
  391. data/vendor/rails/actionpack/examples/address_book_controller.rb +52 -0
  392. data/vendor/rails/actionpack/examples/address_book_controller.rbx +4 -0
  393. data/vendor/rails/actionpack/examples/benchmark.rb +52 -0
  394. data/vendor/rails/actionpack/examples/benchmark_with_ar.fcgi +89 -0
  395. data/vendor/rails/actionpack/examples/blog_controller.cgi +53 -0
  396. data/vendor/rails/actionpack/examples/debate/index.rhtml +14 -0
  397. data/vendor/rails/actionpack/examples/debate/new_topic.rhtml +22 -0
  398. data/vendor/rails/actionpack/examples/debate/topic.rhtml +32 -0
  399. data/vendor/rails/actionpack/examples/debate_controller.cgi +57 -0
  400. data/vendor/rails/actionpack/install.rb +30 -0
  401. data/vendor/rails/actionpack/lib/action_controller.rb +83 -0
  402. data/vendor/rails/actionpack/lib/action_controller/assertions.rb +82 -0
  403. data/vendor/rails/actionpack/lib/action_controller/assertions/deprecated_assertions.rb +228 -0
  404. data/vendor/rails/actionpack/lib/action_controller/assertions/dom_assertions.rb +25 -0
  405. data/vendor/rails/actionpack/lib/action_controller/assertions/model_assertions.rb +12 -0
  406. data/vendor/rails/actionpack/lib/action_controller/assertions/response_assertions.rb +140 -0
  407. data/vendor/rails/actionpack/lib/action_controller/assertions/routing_assertions.rb +98 -0
  408. data/vendor/rails/actionpack/lib/action_controller/assertions/selector_assertions.rb +571 -0
  409. data/vendor/rails/actionpack/lib/action_controller/assertions/tag_assertions.rb +117 -0
  410. data/vendor/rails/actionpack/lib/action_controller/base.rb +1231 -0
  411. data/vendor/rails/actionpack/lib/action_controller/benchmarking.rb +89 -0
  412. data/vendor/rails/actionpack/lib/action_controller/caching.rb +616 -0
  413. data/vendor/rails/actionpack/lib/action_controller/cgi_ext/cgi_ext.rb +36 -0
  414. data/vendor/rails/actionpack/lib/action_controller/cgi_ext/cgi_methods.rb +211 -0
  415. data/vendor/rails/actionpack/lib/action_controller/cgi_ext/cookie_performance_fix.rb +125 -0
  416. data/vendor/rails/actionpack/lib/action_controller/cgi_ext/raw_post_data_fix.rb +95 -0
  417. data/vendor/rails/actionpack/lib/action_controller/cgi_ext/session_performance_fix.rb +30 -0
  418. data/vendor/rails/actionpack/lib/action_controller/cgi_process.rb +231 -0
  419. data/vendor/rails/actionpack/lib/action_controller/components.rb +182 -0
  420. data/vendor/rails/actionpack/lib/action_controller/cookies.rb +78 -0
  421. data/vendor/rails/actionpack/lib/action_controller/deprecated_dependencies.rb +65 -0
  422. data/vendor/rails/actionpack/lib/action_controller/deprecated_redirects.rb +17 -0
  423. data/vendor/rails/actionpack/lib/action_controller/deprecated_request_methods.rb +34 -0
  424. data/vendor/rails/actionpack/lib/action_controller/filters.rb +667 -0
  425. data/vendor/rails/actionpack/lib/action_controller/flash.rb +182 -0
  426. data/vendor/rails/actionpack/lib/action_controller/helpers.rb +131 -0
  427. data/vendor/rails/actionpack/lib/action_controller/integration.rb +552 -0
  428. data/vendor/rails/actionpack/lib/action_controller/layout.rb +313 -0
  429. data/vendor/rails/actionpack/lib/action_controller/macros/auto_complete.rb +53 -0
  430. data/vendor/rails/actionpack/lib/action_controller/macros/in_place_editing.rb +33 -0
  431. data/vendor/rails/actionpack/lib/action_controller/mime_responds.rb +181 -0
  432. data/vendor/rails/actionpack/lib/action_controller/mime_type.rb +200 -0
  433. data/vendor/rails/actionpack/lib/action_controller/pagination.rb +402 -0
  434. data/vendor/rails/actionpack/lib/action_controller/request.rb +265 -0
  435. data/vendor/rails/actionpack/lib/action_controller/rescue.rb +142 -0
  436. data/vendor/rails/actionpack/lib/action_controller/resources.rb +405 -0
  437. data/vendor/rails/actionpack/lib/action_controller/response.rb +35 -0
  438. data/vendor/rails/actionpack/lib/action_controller/routing.rb +1340 -0
  439. data/vendor/rails/actionpack/lib/action_controller/scaffolding.rb +189 -0
  440. data/vendor/rails/actionpack/lib/action_controller/session/active_record_store.rb +335 -0
  441. data/vendor/rails/actionpack/lib/action_controller/session/drb_server.rb +32 -0
  442. data/vendor/rails/actionpack/lib/action_controller/session/drb_store.rb +35 -0
  443. data/vendor/rails/actionpack/lib/action_controller/session/mem_cache_store.rb +105 -0
  444. data/vendor/rails/actionpack/lib/action_controller/session_management.rb +142 -0
  445. data/vendor/rails/actionpack/lib/action_controller/status_codes.rb +88 -0
  446. data/vendor/rails/actionpack/lib/action_controller/streaming.rb +138 -0
  447. data/vendor/rails/actionpack/lib/action_controller/templates/rescues/_request_and_response.rhtml +44 -0
  448. data/vendor/rails/actionpack/lib/action_controller/templates/rescues/_trace.rhtml +26 -0
  449. data/vendor/rails/actionpack/lib/action_controller/templates/rescues/diagnostics.rhtml +11 -0
  450. data/vendor/rails/actionpack/lib/action_controller/templates/rescues/layout.rhtml +29 -0
  451. data/vendor/rails/actionpack/lib/action_controller/templates/rescues/missing_template.rhtml +2 -0
  452. data/vendor/rails/actionpack/lib/action_controller/templates/rescues/routing_error.rhtml +10 -0
  453. data/vendor/rails/actionpack/lib/action_controller/templates/rescues/template_error.rhtml +21 -0
  454. data/vendor/rails/actionpack/lib/action_controller/templates/rescues/unknown_action.rhtml +2 -0
  455. data/vendor/rails/actionpack/lib/action_controller/templates/scaffolds/edit.rhtml +7 -0
  456. data/vendor/rails/actionpack/lib/action_controller/templates/scaffolds/layout.rhtml +69 -0
  457. data/vendor/rails/actionpack/lib/action_controller/templates/scaffolds/list.rhtml +27 -0
  458. data/vendor/rails/actionpack/lib/action_controller/templates/scaffolds/new.rhtml +6 -0
  459. data/vendor/rails/actionpack/lib/action_controller/templates/scaffolds/show.rhtml +9 -0
  460. data/vendor/rails/actionpack/lib/action_controller/test_process.rb +504 -0
  461. data/vendor/rails/actionpack/lib/action_controller/url_rewriter.rb +108 -0
  462. data/vendor/rails/actionpack/lib/action_controller/vendor/html-scanner/html/node.rb +530 -0
  463. data/vendor/rails/actionpack/lib/action_controller/vendor/html-scanner/html/selector.rb +823 -0
  464. data/vendor/rails/actionpack/lib/action_controller/vendor/html-scanner/html/tokenizer.rb +105 -0
  465. data/vendor/rails/actionpack/lib/action_controller/vendor/html-scanner/html/version.rb +11 -0
  466. data/vendor/rails/actionpack/lib/action_controller/vendor/xml_node.rb +97 -0
  467. data/vendor/rails/actionpack/lib/action_controller/verification.rb +107 -0
  468. data/vendor/rails/actionpack/lib/action_pack.rb +24 -0
  469. data/vendor/rails/actionpack/lib/action_pack/version.rb +9 -0
  470. data/vendor/rails/actionpack/lib/action_view.rb +32 -0
  471. data/vendor/rails/actionpack/lib/action_view/base.rb +538 -0
  472. data/vendor/rails/actionpack/lib/action_view/compiled_templates.rb +70 -0
  473. data/vendor/rails/actionpack/lib/action_view/helpers/active_record_helper.rb +237 -0
  474. data/vendor/rails/actionpack/lib/action_view/helpers/asset_tag_helper.rb +218 -0
  475. data/vendor/rails/actionpack/lib/action_view/helpers/benchmark_helper.rb +24 -0
  476. data/vendor/rails/actionpack/lib/action_view/helpers/cache_helper.rb +10 -0
  477. data/vendor/rails/actionpack/lib/action_view/helpers/capture_helper.rb +128 -0
  478. data/vendor/rails/actionpack/lib/action_view/helpers/date_helper.rb +429 -0
  479. data/vendor/rails/actionpack/lib/action_view/helpers/debug_helper.rb +17 -0
  480. data/vendor/rails/actionpack/lib/action_view/helpers/deprecated_helper.rb +34 -0
  481. data/vendor/rails/actionpack/lib/action_view/helpers/form_helper.rb +446 -0
  482. data/vendor/rails/actionpack/lib/action_view/helpers/form_options_helper.rb +363 -0
  483. data/vendor/rails/actionpack/lib/action_view/helpers/form_tag_helper.rb +176 -0
  484. data/vendor/rails/actionpack/lib/action_view/helpers/java_script_macros_helper.rb +233 -0
  485. data/vendor/rails/actionpack/lib/action_view/helpers/javascript_helper.rb +193 -0
  486. data/vendor/rails/actionpack/lib/action_view/helpers/javascripts/controls.js +833 -0
  487. data/vendor/rails/actionpack/lib/action_view/helpers/javascripts/dragdrop.js +942 -0
  488. data/vendor/rails/actionpack/lib/action_view/helpers/javascripts/effects.js +1088 -0
  489. data/vendor/rails/actionpack/lib/action_view/helpers/javascripts/prototype.js +2515 -0
  490. data/vendor/rails/actionpack/lib/action_view/helpers/number_helper.rb +155 -0
  491. data/vendor/rails/actionpack/lib/action_view/helpers/pagination_helper.rb +86 -0
  492. data/vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb +876 -0
  493. data/vendor/rails/actionpack/lib/action_view/helpers/scriptaculous_helper.rb +140 -0
  494. data/vendor/rails/actionpack/lib/action_view/helpers/tag_helper.rb +103 -0
  495. data/vendor/rails/actionpack/lib/action_view/helpers/text_helper.rb +406 -0
  496. data/vendor/rails/actionpack/lib/action_view/helpers/url_helper.rb +406 -0
  497. data/vendor/rails/actionpack/lib/action_view/partials.rb +128 -0
  498. data/vendor/rails/actionpack/lib/action_view/template_error.rb +110 -0
  499. data/vendor/rails/actionpack/test/abstract_unit.rb +16 -0
  500. data/vendor/rails/actionpack/test/active_record_unit.rb +116 -0
  501. data/vendor/rails/actionpack/test/activerecord/active_record_assertions_test.rb +92 -0
  502. data/vendor/rails/actionpack/test/activerecord/active_record_store_test.rb +142 -0
  503. data/vendor/rails/actionpack/test/activerecord/pagination_test.rb +156 -0
  504. data/vendor/rails/actionpack/test/controller/action_pack_assertions_test.rb +610 -0
  505. data/vendor/rails/actionpack/test/controller/addresses_render_test.rb +45 -0
  506. data/vendor/rails/actionpack/test/controller/assert_select_test.rb +576 -0
  507. data/vendor/rails/actionpack/test/controller/base_test.rb +136 -0
  508. data/vendor/rails/actionpack/test/controller/benchmark_test.rb +33 -0
  509. data/vendor/rails/actionpack/test/controller/caching_test.rb +228 -0
  510. data/vendor/rails/actionpack/test/controller/capture_test.rb +82 -0
  511. data/vendor/rails/actionpack/test/controller/cgi_test.rb +440 -0
  512. data/vendor/rails/actionpack/test/controller/components_test.rb +151 -0
  513. data/vendor/rails/actionpack/test/controller/content_type_test.rb +139 -0
  514. data/vendor/rails/actionpack/test/controller/controller_fixtures/app/controllers/admin/user_controller.rb +0 -0
  515. data/vendor/rails/actionpack/test/controller/controller_fixtures/app/controllers/user_controller.rb +0 -0
  516. data/vendor/rails/actionpack/test/controller/controller_fixtures/vendor/plugins/bad_plugin/lib/plugin_controller.rb +0 -0
  517. data/vendor/rails/actionpack/test/controller/cookie_test.rb +88 -0
  518. data/vendor/rails/actionpack/test/controller/custom_handler_test.rb +41 -0
  519. data/vendor/rails/actionpack/test/controller/deprecated_instance_variables_test.rb +48 -0
  520. data/vendor/rails/actionpack/test/controller/deprecation/deprecated_base_methods_test.rb +60 -0
  521. data/vendor/rails/actionpack/test/controller/fake_controllers.rb +16 -0
  522. data/vendor/rails/actionpack/test/controller/filter_params_test.rb +42 -0
  523. data/vendor/rails/actionpack/test/controller/filters_test.rb +695 -0
  524. data/vendor/rails/actionpack/test/controller/flash_test.rb +102 -0
  525. data/vendor/rails/actionpack/test/controller/fragment_store_setting_test.rb +45 -0
  526. data/vendor/rails/actionpack/test/controller/helper_test.rb +187 -0
  527. data/vendor/rails/actionpack/test/controller/integration_test.rb +154 -0
  528. data/vendor/rails/actionpack/test/controller/layout_test.rb +187 -0
  529. data/vendor/rails/actionpack/test/controller/mime_responds_test.rb +351 -0
  530. data/vendor/rails/actionpack/test/controller/mime_type_test.rb +33 -0
  531. data/vendor/rails/actionpack/test/controller/new_render_test.rb +750 -0
  532. data/vendor/rails/actionpack/test/controller/raw_post_test.rb +68 -0
  533. data/vendor/rails/actionpack/test/controller/redirect_test.rb +156 -0
  534. data/vendor/rails/actionpack/test/controller/render_test.rb +293 -0
  535. data/vendor/rails/actionpack/test/controller/request_test.rb +317 -0
  536. data/vendor/rails/actionpack/test/controller/resources_test.rb +482 -0
  537. data/vendor/rails/actionpack/test/controller/routing_test.rb +1801 -0
  538. data/vendor/rails/actionpack/test/controller/selector_test.rb +628 -0
  539. data/vendor/rails/actionpack/test/controller/send_file_test.rb +117 -0
  540. data/vendor/rails/actionpack/test/controller/session_management_test.rb +156 -0
  541. data/vendor/rails/actionpack/test/controller/test_test.rb +495 -0
  542. data/vendor/rails/actionpack/test/controller/url_rewriter_test.rb +115 -0
  543. data/vendor/rails/actionpack/test/controller/verification_test.rb +227 -0
  544. data/vendor/rails/actionpack/test/controller/webservice_test.rb +248 -0
  545. data/vendor/rails/actionpack/test/fixtures/addresses/list.rhtml +1 -0
  546. data/vendor/rails/actionpack/test/fixtures/companies.yml +24 -0
  547. data/vendor/rails/actionpack/test/fixtures/company.rb +9 -0
  548. data/vendor/rails/actionpack/test/fixtures/content_type/render_default_content_types_for_respond_to.rhtml +1 -0
  549. data/vendor/rails/actionpack/test/fixtures/content_type/render_default_for_rhtml.rhtml +1 -0
  550. data/vendor/rails/actionpack/test/fixtures/content_type/render_default_for_rjs.rjs +1 -0
  551. data/vendor/rails/actionpack/test/fixtures/content_type/render_default_for_rxml.rxml +1 -0
  552. data/vendor/rails/actionpack/test/fixtures/db_definitions/sqlite.sql +42 -0
  553. data/vendor/rails/actionpack/test/fixtures/deprecated_instance_variables/_cookies_ivar.rhtml +1 -0
  554. data/vendor/rails/actionpack/test/fixtures/deprecated_instance_variables/_cookies_method.rhtml +1 -0
  555. data/vendor/rails/actionpack/test/fixtures/deprecated_instance_variables/_flash_ivar.rhtml +1 -0
  556. data/vendor/rails/actionpack/test/fixtures/deprecated_instance_variables/_flash_method.rhtml +1 -0
  557. data/vendor/rails/actionpack/test/fixtures/deprecated_instance_variables/_headers_ivar.rhtml +1 -0
  558. data/vendor/rails/actionpack/test/fixtures/deprecated_instance_variables/_headers_method.rhtml +1 -0
  559. data/vendor/rails/actionpack/test/fixtures/deprecated_instance_variables/_params_ivar.rhtml +1 -0
  560. data/vendor/rails/actionpack/test/fixtures/deprecated_instance_variables/_params_method.rhtml +1 -0
  561. data/vendor/rails/actionpack/test/fixtures/deprecated_instance_variables/_request_ivar.rhtml +1 -0
  562. data/vendor/rails/actionpack/test/fixtures/deprecated_instance_variables/_request_method.rhtml +1 -0
  563. data/vendor/rails/actionpack/test/fixtures/deprecated_instance_variables/_response_ivar.rhtml +1 -0
  564. data/vendor/rails/actionpack/test/fixtures/deprecated_instance_variables/_response_method.rhtml +1 -0
  565. data/vendor/rails/actionpack/test/fixtures/deprecated_instance_variables/_session_ivar.rhtml +1 -0
  566. data/vendor/rails/actionpack/test/fixtures/deprecated_instance_variables/_session_method.rhtml +1 -0
  567. data/vendor/rails/actionpack/test/fixtures/developer.rb +7 -0
  568. data/vendor/rails/actionpack/test/fixtures/developers.yml +21 -0
  569. data/vendor/rails/actionpack/test/fixtures/developers_projects.yml +13 -0
  570. data/vendor/rails/actionpack/test/fixtures/fun/games/hello_world.rhtml +1 -0
  571. data/vendor/rails/actionpack/test/fixtures/helpers/abc_helper.rb +5 -0
  572. data/vendor/rails/actionpack/test/fixtures/helpers/fun/games_helper.rb +3 -0
  573. data/vendor/rails/actionpack/test/fixtures/helpers/fun/pdf_helper.rb +3 -0
  574. data/vendor/rails/actionpack/test/fixtures/layout_tests/layouts/controller_name_space/nested.rhtml +1 -0
  575. data/vendor/rails/actionpack/test/fixtures/layout_tests/layouts/item.rhtml +1 -0
  576. data/vendor/rails/actionpack/test/fixtures/layout_tests/layouts/layout_test.rhtml +1 -0
  577. data/vendor/rails/actionpack/test/fixtures/layout_tests/layouts/third_party_template_library.mab +1 -0
  578. data/vendor/rails/actionpack/test/fixtures/layout_tests/views/hello.rhtml +1 -0
  579. data/vendor/rails/actionpack/test/fixtures/layouts/builder.rxml +3 -0
  580. data/vendor/rails/actionpack/test/fixtures/layouts/standard.rhtml +1 -0
  581. data/vendor/rails/actionpack/test/fixtures/layouts/talk_from_action.rhtml +2 -0
  582. data/vendor/rails/actionpack/test/fixtures/layouts/yield.rhtml +2 -0
  583. data/vendor/rails/actionpack/test/fixtures/multipart/binary_file +0 -0
  584. data/vendor/rails/actionpack/test/fixtures/multipart/large_text_file +10 -0
  585. data/vendor/rails/actionpack/test/fixtures/multipart/mixed_files +0 -0
  586. data/vendor/rails/actionpack/test/fixtures/multipart/mona_lisa.jpg +0 -0
  587. data/vendor/rails/actionpack/test/fixtures/multipart/single_parameter +5 -0
  588. data/vendor/rails/actionpack/test/fixtures/multipart/text_file +10 -0
  589. data/vendor/rails/actionpack/test/fixtures/project.rb +3 -0
  590. data/vendor/rails/actionpack/test/fixtures/projects.yml +7 -0
  591. data/vendor/rails/actionpack/test/fixtures/public/images/rails.png +0 -0
  592. data/vendor/rails/actionpack/test/fixtures/public/javascripts/application.js +1 -0
  593. data/vendor/rails/actionpack/test/fixtures/replies.yml +13 -0
  594. data/vendor/rails/actionpack/test/fixtures/reply.rb +5 -0
  595. data/vendor/rails/actionpack/test/fixtures/respond_to/all_types_with_layout.rhtml +1 -0
  596. data/vendor/rails/actionpack/test/fixtures/respond_to/all_types_with_layout.rjs +1 -0
  597. data/vendor/rails/actionpack/test/fixtures/respond_to/layouts/standard.rhtml +1 -0
  598. data/vendor/rails/actionpack/test/fixtures/respond_to/using_defaults.rhtml +1 -0
  599. data/vendor/rails/actionpack/test/fixtures/respond_to/using_defaults.rjs +1 -0
  600. data/vendor/rails/actionpack/test/fixtures/respond_to/using_defaults.rxml +1 -0
  601. data/vendor/rails/actionpack/test/fixtures/respond_to/using_defaults_with_type_list.rhtml +1 -0
  602. data/vendor/rails/actionpack/test/fixtures/respond_to/using_defaults_with_type_list.rjs +1 -0
  603. data/vendor/rails/actionpack/test/fixtures/respond_to/using_defaults_with_type_list.rxml +1 -0
  604. data/vendor/rails/actionpack/test/fixtures/scope/test/modgreet.rhtml +1 -0
  605. data/vendor/rails/actionpack/test/fixtures/test/_customer.rhtml +1 -0
  606. data/vendor/rails/actionpack/test/fixtures/test/_customer_greeting.rhtml +1 -0
  607. data/vendor/rails/actionpack/test/fixtures/test/_hash_object.rhtml +1 -0
  608. data/vendor/rails/actionpack/test/fixtures/test/_hello.rxml +1 -0
  609. data/vendor/rails/actionpack/test/fixtures/test/_partial_only.rhtml +1 -0
  610. data/vendor/rails/actionpack/test/fixtures/test/_person.rhtml +2 -0
  611. data/vendor/rails/actionpack/test/fixtures/test/action_talk_to_layout.rhtml +2 -0
  612. data/vendor/rails/actionpack/test/fixtures/test/block_content_for.rhtml +2 -0
  613. data/vendor/rails/actionpack/test/fixtures/test/capturing.rhtml +4 -0
  614. data/vendor/rails/actionpack/test/fixtures/test/content_for.rhtml +2 -0
  615. data/vendor/rails/actionpack/test/fixtures/test/delete_with_js.rjs +2 -0
  616. data/vendor/rails/actionpack/test/fixtures/test/dot.directory/render_file_with_ivar.rhtml +1 -0
  617. data/vendor/rails/actionpack/test/fixtures/test/enum_rjs_test.rjs +6 -0
  618. data/vendor/rails/actionpack/test/fixtures/test/erb_content_for.rhtml +2 -0
  619. data/vendor/rails/actionpack/test/fixtures/test/greeting.rhtml +1 -0
  620. data/vendor/rails/actionpack/test/fixtures/test/hello.rxml +4 -0
  621. data/vendor/rails/actionpack/test/fixtures/test/hello_world.rhtml +1 -0
  622. data/vendor/rails/actionpack/test/fixtures/test/hello_world.rxml +3 -0
  623. data/vendor/rails/actionpack/test/fixtures/test/hello_world_container.rxml +3 -0
  624. data/vendor/rails/actionpack/test/fixtures/test/hello_world_with_layout_false.rhtml +1 -0
  625. data/vendor/rails/actionpack/test/fixtures/test/hello_xml_world.rxml +11 -0
  626. data/vendor/rails/actionpack/test/fixtures/test/list.rhtml +1 -0
  627. data/vendor/rails/actionpack/test/fixtures/test/non_erb_block_content_for.rxml +4 -0
  628. data/vendor/rails/actionpack/test/fixtures/test/potential_conflicts.rhtml +4 -0
  629. data/vendor/rails/actionpack/test/fixtures/test/render_file_with_ivar.rhtml +1 -0
  630. data/vendor/rails/actionpack/test/fixtures/test/render_file_with_locals.rhtml +1 -0
  631. data/vendor/rails/actionpack/test/fixtures/test/render_to_string_test.rhtml +1 -0
  632. data/vendor/rails/actionpack/test/fixtures/test/update_element_with_capture.rhtml +9 -0
  633. data/vendor/rails/actionpack/test/fixtures/topic.rb +3 -0
  634. data/vendor/rails/actionpack/test/fixtures/topics.yml +22 -0
  635. data/vendor/rails/actionpack/test/template/active_record_helper_test.rb +204 -0
  636. data/vendor/rails/actionpack/test/template/asset_tag_helper_test.rb +232 -0
  637. data/vendor/rails/actionpack/test/template/benchmark_helper_test.rb +72 -0
  638. data/vendor/rails/actionpack/test/template/compiled_templates_test.rb +135 -0
  639. data/vendor/rails/actionpack/test/template/date_helper_test.rb +1322 -0
  640. data/vendor/rails/actionpack/test/template/deprecated_helper_test.rb +36 -0
  641. data/vendor/rails/actionpack/test/template/deprecated_instance_variables_test.rb +43 -0
  642. data/vendor/rails/actionpack/test/template/form_helper_test.rb +499 -0
  643. data/vendor/rails/actionpack/test/template/form_options_helper_test.rb +489 -0
  644. data/vendor/rails/actionpack/test/template/form_tag_helper_test.rb +172 -0
  645. data/vendor/rails/actionpack/test/template/java_script_macros_helper_test.rb +109 -0
  646. data/vendor/rails/actionpack/test/template/javascript_helper_test.rb +67 -0
  647. data/vendor/rails/actionpack/test/template/number_helper_test.rb +92 -0
  648. data/vendor/rails/actionpack/test/template/prototype_helper_test.rb +466 -0
  649. data/vendor/rails/actionpack/test/template/scriptaculous_helper_test.rb +90 -0
  650. data/vendor/rails/actionpack/test/template/tag_helper_test.rb +69 -0
  651. data/vendor/rails/actionpack/test/template/text_helper_test.rb +349 -0
  652. data/vendor/rails/actionpack/test/template/url_helper_test.rb +366 -0
  653. data/vendor/rails/actionpack/test/testing_sandbox.rb +11 -0
  654. data/vendor/rails/actionwebservice/CHANGELOG +279 -0
  655. data/vendor/rails/actionwebservice/MIT-LICENSE +21 -0
  656. data/vendor/rails/actionwebservice/README +364 -0
  657. data/vendor/rails/actionwebservice/Rakefile +171 -0
  658. data/vendor/rails/actionwebservice/TODO +32 -0
  659. data/vendor/rails/actionwebservice/examples/googlesearch/README +143 -0
  660. data/vendor/rails/actionwebservice/examples/googlesearch/autoloading/google_search_api.rb +50 -0
  661. data/vendor/rails/actionwebservice/examples/googlesearch/autoloading/google_search_controller.rb +57 -0
  662. data/vendor/rails/actionwebservice/examples/googlesearch/delegated/google_search_service.rb +108 -0
  663. data/vendor/rails/actionwebservice/examples/googlesearch/delegated/search_controller.rb +7 -0
  664. data/vendor/rails/actionwebservice/examples/googlesearch/direct/google_search_api.rb +50 -0
  665. data/vendor/rails/actionwebservice/examples/googlesearch/direct/search_controller.rb +58 -0
  666. data/vendor/rails/actionwebservice/examples/metaWeblog/README +17 -0
  667. data/vendor/rails/actionwebservice/examples/metaWeblog/apis/blogger_api.rb +60 -0
  668. data/vendor/rails/actionwebservice/examples/metaWeblog/apis/blogger_service.rb +34 -0
  669. data/vendor/rails/actionwebservice/examples/metaWeblog/apis/meta_weblog_api.rb +67 -0
  670. data/vendor/rails/actionwebservice/examples/metaWeblog/apis/meta_weblog_service.rb +48 -0
  671. data/vendor/rails/actionwebservice/examples/metaWeblog/controllers/xmlrpc_controller.rb +16 -0
  672. data/vendor/rails/actionwebservice/install.rb +30 -0
  673. data/vendor/rails/actionwebservice/lib/action_web_service.rb +66 -0
  674. data/vendor/rails/actionwebservice/lib/action_web_service/api.rb +249 -0
  675. data/vendor/rails/actionwebservice/lib/action_web_service/base.rb +42 -0
  676. data/vendor/rails/actionwebservice/lib/action_web_service/casting.rb +136 -0
  677. data/vendor/rails/actionwebservice/lib/action_web_service/client.rb +3 -0
  678. data/vendor/rails/actionwebservice/lib/action_web_service/client/base.rb +28 -0
  679. data/vendor/rails/actionwebservice/lib/action_web_service/client/soap_client.rb +113 -0
  680. data/vendor/rails/actionwebservice/lib/action_web_service/client/xmlrpc_client.rb +58 -0
  681. data/vendor/rails/actionwebservice/lib/action_web_service/container.rb +3 -0
  682. data/vendor/rails/actionwebservice/lib/action_web_service/container/action_controller_container.rb +93 -0
  683. data/vendor/rails/actionwebservice/lib/action_web_service/container/delegated_container.rb +86 -0
  684. data/vendor/rails/actionwebservice/lib/action_web_service/container/direct_container.rb +69 -0
  685. data/vendor/rails/actionwebservice/lib/action_web_service/dispatcher.rb +2 -0
  686. data/vendor/rails/actionwebservice/lib/action_web_service/dispatcher/abstract.rb +203 -0
  687. data/vendor/rails/actionwebservice/lib/action_web_service/dispatcher/action_controller_dispatcher.rb +376 -0
  688. data/vendor/rails/actionwebservice/lib/action_web_service/invocation.rb +202 -0
  689. data/vendor/rails/actionwebservice/lib/action_web_service/protocol.rb +4 -0
  690. data/vendor/rails/actionwebservice/lib/action_web_service/protocol/abstract.rb +112 -0
  691. data/vendor/rails/actionwebservice/lib/action_web_service/protocol/discovery.rb +37 -0
  692. data/vendor/rails/actionwebservice/lib/action_web_service/protocol/soap_protocol.rb +176 -0
  693. data/vendor/rails/actionwebservice/lib/action_web_service/protocol/soap_protocol/marshaler.rb +241 -0
  694. data/vendor/rails/actionwebservice/lib/action_web_service/protocol/xmlrpc_protocol.rb +110 -0
  695. data/vendor/rails/actionwebservice/lib/action_web_service/scaffolding.rb +283 -0
  696. data/vendor/rails/actionwebservice/lib/action_web_service/struct.rb +68 -0
  697. data/vendor/rails/actionwebservice/lib/action_web_service/support/class_inheritable_options.rb +26 -0
  698. data/vendor/rails/actionwebservice/lib/action_web_service/support/signature_types.rb +222 -0
  699. data/vendor/rails/actionwebservice/lib/action_web_service/templates/scaffolds/layout.rhtml +65 -0
  700. data/vendor/rails/actionwebservice/lib/action_web_service/templates/scaffolds/methods.rhtml +6 -0
  701. data/vendor/rails/actionwebservice/lib/action_web_service/templates/scaffolds/parameters.rhtml +29 -0
  702. data/vendor/rails/actionwebservice/lib/action_web_service/templates/scaffolds/result.rhtml +30 -0
  703. data/vendor/rails/actionwebservice/lib/action_web_service/test_invoke.rb +110 -0
  704. data/vendor/rails/actionwebservice/lib/action_web_service/version.rb +9 -0
  705. data/vendor/rails/actionwebservice/setup.rb +1379 -0
  706. data/vendor/rails/actionwebservice/test/abstract_client.rb +183 -0
  707. data/vendor/rails/actionwebservice/test/abstract_dispatcher.rb +505 -0
  708. data/vendor/rails/actionwebservice/test/abstract_unit.rb +45 -0
  709. data/vendor/rails/actionwebservice/test/api_test.rb +102 -0
  710. data/vendor/rails/actionwebservice/test/apis/auto_load_api.rb +3 -0
  711. data/vendor/rails/actionwebservice/test/apis/broken_auto_load_api.rb +2 -0
  712. data/vendor/rails/actionwebservice/test/base_test.rb +42 -0
  713. data/vendor/rails/actionwebservice/test/casting_test.rb +86 -0
  714. data/vendor/rails/actionwebservice/test/client_soap_test.rb +152 -0
  715. data/vendor/rails/actionwebservice/test/client_xmlrpc_test.rb +151 -0
  716. data/vendor/rails/actionwebservice/test/container_test.rb +73 -0
  717. data/vendor/rails/actionwebservice/test/dispatcher_action_controller_soap_test.rb +137 -0
  718. data/vendor/rails/actionwebservice/test/dispatcher_action_controller_xmlrpc_test.rb +59 -0
  719. data/vendor/rails/actionwebservice/test/fixtures/db_definitions/mysql.sql +7 -0
  720. data/vendor/rails/actionwebservice/test/fixtures/users.yml +10 -0
  721. data/vendor/rails/actionwebservice/test/gencov +3 -0
  722. data/vendor/rails/actionwebservice/test/invocation_test.rb +185 -0
  723. data/vendor/rails/actionwebservice/test/run +6 -0
  724. data/vendor/rails/actionwebservice/test/scaffolded_controller_test.rb +146 -0
  725. data/vendor/rails/actionwebservice/test/struct_test.rb +52 -0
  726. data/vendor/rails/actionwebservice/test/test_invoke_test.rb +112 -0
  727. data/vendor/rails/activerecord/CHANGELOG +3043 -0
  728. data/vendor/rails/activerecord/MIT-LICENSE +20 -0
  729. data/vendor/rails/activerecord/README +360 -0
  730. data/vendor/rails/activerecord/RUNNING_UNIT_TESTS +64 -0
  731. data/vendor/rails/activerecord/Rakefile +226 -0
  732. data/vendor/rails/activerecord/benchmarks/benchmark.rb +26 -0
  733. data/vendor/rails/activerecord/benchmarks/mysql_benchmark.rb +19 -0
  734. data/vendor/rails/activerecord/examples/associations.png +0 -0
  735. data/vendor/rails/activerecord/examples/associations.rb +87 -0
  736. data/vendor/rails/activerecord/examples/shared_setup.rb +15 -0
  737. data/vendor/rails/activerecord/examples/validation.rb +85 -0
  738. data/vendor/rails/activerecord/install.rb +30 -0
  739. data/vendor/rails/activerecord/lib/active_record.rb +85 -0
  740. data/vendor/rails/activerecord/lib/active_record/acts/list.rb +244 -0
  741. data/vendor/rails/activerecord/lib/active_record/acts/nested_set.rb +211 -0
  742. data/vendor/rails/activerecord/lib/active_record/acts/tree.rb +89 -0
  743. data/vendor/rails/activerecord/lib/active_record/aggregations.rb +191 -0
  744. data/vendor/rails/activerecord/lib/active_record/associations.rb +1627 -0
  745. data/vendor/rails/activerecord/lib/active_record/associations/association_collection.rb +190 -0
  746. data/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb +158 -0
  747. data/vendor/rails/activerecord/lib/active_record/associations/belongs_to_association.rb +56 -0
  748. data/vendor/rails/activerecord/lib/active_record/associations/belongs_to_polymorphic_association.rb +50 -0
  749. data/vendor/rails/activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb +169 -0
  750. data/vendor/rails/activerecord/lib/active_record/associations/has_many_association.rb +210 -0
  751. data/vendor/rails/activerecord/lib/active_record/associations/has_many_through_association.rb +247 -0
  752. data/vendor/rails/activerecord/lib/active_record/associations/has_one_association.rb +80 -0
  753. data/vendor/rails/activerecord/lib/active_record/attribute_methods.rb +75 -0
  754. data/vendor/rails/activerecord/lib/active_record/base.rb +2164 -0
  755. data/vendor/rails/activerecord/lib/active_record/calculations.rb +270 -0
  756. data/vendor/rails/activerecord/lib/active_record/callbacks.rb +367 -0
  757. data/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb +279 -0
  758. data/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb +130 -0
  759. data/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb +58 -0
  760. data/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb +343 -0
  761. data/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb +303 -0
  762. data/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb +161 -0
  763. data/vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb +228 -0
  764. data/vendor/rails/activerecord/lib/active_record/connection_adapters/firebird_adapter.rb +728 -0
  765. data/vendor/rails/activerecord/lib/active_record/connection_adapters/frontbase_adapter.rb +861 -0
  766. data/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb +414 -0
  767. data/vendor/rails/activerecord/lib/active_record/connection_adapters/openbase_adapter.rb +350 -0
  768. data/vendor/rails/activerecord/lib/active_record/connection_adapters/oracle_adapter.rb +689 -0
  769. data/vendor/rails/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +584 -0
  770. data/vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb +407 -0
  771. data/vendor/rails/activerecord/lib/active_record/connection_adapters/sqlserver_adapter.rb +591 -0
  772. data/vendor/rails/activerecord/lib/active_record/connection_adapters/sybase_adapter.rb +662 -0
  773. data/vendor/rails/activerecord/lib/active_record/deprecated_associations.rb +104 -0
  774. data/vendor/rails/activerecord/lib/active_record/deprecated_finders.rb +44 -0
  775. data/vendor/rails/activerecord/lib/active_record/fixtures.rb +628 -0
  776. data/vendor/rails/activerecord/lib/active_record/locking/optimistic.rb +106 -0
  777. data/vendor/rails/activerecord/lib/active_record/locking/pessimistic.rb +77 -0
  778. data/vendor/rails/activerecord/lib/active_record/migration.rb +394 -0
  779. data/vendor/rails/activerecord/lib/active_record/observer.rb +178 -0
  780. data/vendor/rails/activerecord/lib/active_record/query_cache.rb +64 -0
  781. data/vendor/rails/activerecord/lib/active_record/reflection.rb +222 -0
  782. data/vendor/rails/activerecord/lib/active_record/schema.rb +58 -0
  783. data/vendor/rails/activerecord/lib/active_record/schema_dumper.rb +149 -0
  784. data/vendor/rails/activerecord/lib/active_record/timestamp.rb +51 -0
  785. data/vendor/rails/activerecord/lib/active_record/transactions.rb +136 -0
  786. data/vendor/rails/activerecord/lib/active_record/validations.rb +843 -0
  787. data/vendor/rails/activerecord/lib/active_record/vendor/db2.rb +362 -0
  788. data/vendor/rails/activerecord/lib/active_record/vendor/mysql.rb +1214 -0
  789. data/vendor/rails/activerecord/lib/active_record/vendor/simple.rb +693 -0
  790. data/vendor/rails/activerecord/lib/active_record/version.rb +9 -0
  791. data/vendor/rails/activerecord/lib/active_record/wrappers/yaml_wrapper.rb +15 -0
  792. data/vendor/rails/activerecord/lib/active_record/wrappings.rb +58 -0
  793. data/vendor/rails/activerecord/lib/active_record/xml_serialization.rb +308 -0
  794. data/vendor/rails/activerecord/test/aaa_create_tables_test.rb +59 -0
  795. data/vendor/rails/activerecord/test/abstract_unit.rb +77 -0
  796. data/vendor/rails/activerecord/test/active_schema_test_mysql.rb +31 -0
  797. data/vendor/rails/activerecord/test/adapter_test.rb +87 -0
  798. data/vendor/rails/activerecord/test/adapter_test_sqlserver.rb +81 -0
  799. data/vendor/rails/activerecord/test/aggregations_test.rb +95 -0
  800. data/vendor/rails/activerecord/test/all.sh +8 -0
  801. data/vendor/rails/activerecord/test/ar_schema_test.rb +33 -0
  802. data/vendor/rails/activerecord/test/association_inheritance_reload.rb +14 -0
  803. data/vendor/rails/activerecord/test/associations/callbacks_test.rb +126 -0
  804. data/vendor/rails/activerecord/test/associations/cascaded_eager_loading_test.rb +138 -0
  805. data/vendor/rails/activerecord/test/associations/eager_test.rb +393 -0
  806. data/vendor/rails/activerecord/test/associations/extension_test.rb +42 -0
  807. data/vendor/rails/activerecord/test/associations/join_model_test.rb +497 -0
  808. data/vendor/rails/activerecord/test/associations_test.rb +1809 -0
  809. data/vendor/rails/activerecord/test/attribute_methods_test.rb +49 -0
  810. data/vendor/rails/activerecord/test/base_test.rb +1586 -0
  811. data/vendor/rails/activerecord/test/binary_test.rb +37 -0
  812. data/vendor/rails/activerecord/test/calculations_test.rb +219 -0
  813. data/vendor/rails/activerecord/test/callbacks_test.rb +377 -0
  814. data/vendor/rails/activerecord/test/class_inheritable_attributes_test.rb +32 -0
  815. data/vendor/rails/activerecord/test/column_alias_test.rb +17 -0
  816. data/vendor/rails/activerecord/test/connection_test_firebird.rb +8 -0
  817. data/vendor/rails/activerecord/test/connections/native_db2/connection.rb +25 -0
  818. data/vendor/rails/activerecord/test/connections/native_firebird/connection.rb +26 -0
  819. data/vendor/rails/activerecord/test/connections/native_frontbase/connection.rb +27 -0
  820. data/vendor/rails/activerecord/test/connections/native_mysql/connection.rb +24 -0
  821. data/vendor/rails/activerecord/test/connections/native_openbase/connection.rb +21 -0
  822. data/vendor/rails/activerecord/test/connections/native_oracle/connection.rb +27 -0
  823. data/vendor/rails/activerecord/test/connections/native_postgresql/connection.rb +23 -0
  824. data/vendor/rails/activerecord/test/connections/native_sqlite/connection.rb +34 -0
  825. data/vendor/rails/activerecord/test/connections/native_sqlite3/connection.rb +34 -0
  826. data/vendor/rails/activerecord/test/connections/native_sqlite3/in_memory_connection.rb +18 -0
  827. data/vendor/rails/activerecord/test/connections/native_sqlserver/connection.rb +23 -0
  828. data/vendor/rails/activerecord/test/connections/native_sqlserver_odbc/connection.rb +25 -0
  829. data/vendor/rails/activerecord/test/connections/native_sybase/connection.rb +23 -0
  830. data/vendor/rails/activerecord/test/copy_table_sqlite.rb +64 -0
  831. data/vendor/rails/activerecord/test/datatype_test_postgresql.rb +52 -0
  832. data/vendor/rails/activerecord/test/default_test_firebird.rb +16 -0
  833. data/vendor/rails/activerecord/test/defaults_test.rb +60 -0
  834. data/vendor/rails/activerecord/test/deprecated_associations_test.rb +396 -0
  835. data/vendor/rails/activerecord/test/deprecated_finder_test.rb +151 -0
  836. data/vendor/rails/activerecord/test/empty_date_time_test.rb +25 -0
  837. data/vendor/rails/activerecord/test/finder_test.rb +504 -0
  838. data/vendor/rails/activerecord/test/fixtures/accounts.yml +28 -0
  839. data/vendor/rails/activerecord/test/fixtures/author.rb +99 -0
  840. data/vendor/rails/activerecord/test/fixtures/author_favorites.yml +4 -0
  841. data/vendor/rails/activerecord/test/fixtures/authors.yml +7 -0
  842. data/vendor/rails/activerecord/test/fixtures/auto_id.rb +4 -0
  843. data/vendor/rails/activerecord/test/fixtures/bad_fixtures/attr_with_numeric_first_char +1 -0
  844. data/vendor/rails/activerecord/test/fixtures/bad_fixtures/attr_with_spaces +1 -0
  845. data/vendor/rails/activerecord/test/fixtures/bad_fixtures/blank_line +3 -0
  846. data/vendor/rails/activerecord/test/fixtures/bad_fixtures/duplicate_attributes +3 -0
  847. data/vendor/rails/activerecord/test/fixtures/bad_fixtures/missing_value +1 -0
  848. data/vendor/rails/activerecord/test/fixtures/binary.rb +2 -0
  849. data/vendor/rails/activerecord/test/fixtures/categories.yml +14 -0
  850. data/vendor/rails/activerecord/test/fixtures/categories/special_categories.yml +9 -0
  851. data/vendor/rails/activerecord/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -0
  852. data/vendor/rails/activerecord/test/fixtures/categories_ordered.yml +7 -0
  853. data/vendor/rails/activerecord/test/fixtures/categories_posts.yml +23 -0
  854. data/vendor/rails/activerecord/test/fixtures/categorization.rb +5 -0
  855. data/vendor/rails/activerecord/test/fixtures/categorizations.yml +17 -0
  856. data/vendor/rails/activerecord/test/fixtures/category.rb +20 -0
  857. data/vendor/rails/activerecord/test/fixtures/column_name.rb +3 -0
  858. data/vendor/rails/activerecord/test/fixtures/comment.rb +23 -0
  859. data/vendor/rails/activerecord/test/fixtures/comments.yml +59 -0
  860. data/vendor/rails/activerecord/test/fixtures/companies.yml +55 -0
  861. data/vendor/rails/activerecord/test/fixtures/company.rb +107 -0
  862. data/vendor/rails/activerecord/test/fixtures/company_in_module.rb +59 -0
  863. data/vendor/rails/activerecord/test/fixtures/computer.rb +3 -0
  864. data/vendor/rails/activerecord/test/fixtures/computers.yml +4 -0
  865. data/vendor/rails/activerecord/test/fixtures/course.rb +3 -0
  866. data/vendor/rails/activerecord/test/fixtures/courses.yml +7 -0
  867. data/vendor/rails/activerecord/test/fixtures/customer.rb +55 -0
  868. data/vendor/rails/activerecord/test/fixtures/customers.yml +17 -0
  869. data/vendor/rails/activerecord/test/fixtures/db_definitions/db2.drop.sql +32 -0
  870. data/vendor/rails/activerecord/test/fixtures/db_definitions/db2.sql +231 -0
  871. data/vendor/rails/activerecord/test/fixtures/db_definitions/db22.drop.sql +2 -0
  872. data/vendor/rails/activerecord/test/fixtures/db_definitions/db22.sql +5 -0
  873. data/vendor/rails/activerecord/test/fixtures/db_definitions/firebird.drop.sql +63 -0
  874. data/vendor/rails/activerecord/test/fixtures/db_definitions/firebird.sql +304 -0
  875. data/vendor/rails/activerecord/test/fixtures/db_definitions/firebird2.drop.sql +2 -0
  876. data/vendor/rails/activerecord/test/fixtures/db_definitions/firebird2.sql +6 -0
  877. data/vendor/rails/activerecord/test/fixtures/db_definitions/frontbase.drop.sql +32 -0
  878. data/vendor/rails/activerecord/test/fixtures/db_definitions/frontbase.sql +268 -0
  879. data/vendor/rails/activerecord/test/fixtures/db_definitions/frontbase2.drop.sql +1 -0
  880. data/vendor/rails/activerecord/test/fixtures/db_definitions/frontbase2.sql +4 -0
  881. data/vendor/rails/activerecord/test/fixtures/db_definitions/mysql.drop.sql +32 -0
  882. data/vendor/rails/activerecord/test/fixtures/db_definitions/mysql.sql +234 -0
  883. data/vendor/rails/activerecord/test/fixtures/db_definitions/mysql2.drop.sql +2 -0
  884. data/vendor/rails/activerecord/test/fixtures/db_definitions/mysql2.sql +5 -0
  885. data/vendor/rails/activerecord/test/fixtures/db_definitions/openbase.drop.sql +2 -0
  886. data/vendor/rails/activerecord/test/fixtures/db_definitions/openbase.sql +302 -0
  887. data/vendor/rails/activerecord/test/fixtures/db_definitions/openbase2.drop.sql +2 -0
  888. data/vendor/rails/activerecord/test/fixtures/db_definitions/openbase2.sql +7 -0
  889. data/vendor/rails/activerecord/test/fixtures/db_definitions/oracle.drop.sql +65 -0
  890. data/vendor/rails/activerecord/test/fixtures/db_definitions/oracle.sql +325 -0
  891. data/vendor/rails/activerecord/test/fixtures/db_definitions/oracle2.drop.sql +2 -0
  892. data/vendor/rails/activerecord/test/fixtures/db_definitions/oracle2.sql +6 -0
  893. data/vendor/rails/activerecord/test/fixtures/db_definitions/postgresql.drop.sql +37 -0
  894. data/vendor/rails/activerecord/test/fixtures/db_definitions/postgresql.sql +263 -0
  895. data/vendor/rails/activerecord/test/fixtures/db_definitions/postgresql2.drop.sql +2 -0
  896. data/vendor/rails/activerecord/test/fixtures/db_definitions/postgresql2.sql +5 -0
  897. data/vendor/rails/activerecord/test/fixtures/db_definitions/schema.rb +60 -0
  898. data/vendor/rails/activerecord/test/fixtures/db_definitions/sqlite.drop.sql +32 -0
  899. data/vendor/rails/activerecord/test/fixtures/db_definitions/sqlite.sql +215 -0
  900. data/vendor/rails/activerecord/test/fixtures/db_definitions/sqlite2.drop.sql +2 -0
  901. data/vendor/rails/activerecord/test/fixtures/db_definitions/sqlite2.sql +5 -0
  902. data/vendor/rails/activerecord/test/fixtures/db_definitions/sqlserver.drop.sql +34 -0
  903. data/vendor/rails/activerecord/test/fixtures/db_definitions/sqlserver.sql +243 -0
  904. data/vendor/rails/activerecord/test/fixtures/db_definitions/sqlserver2.drop.sql +2 -0
  905. data/vendor/rails/activerecord/test/fixtures/db_definitions/sqlserver2.sql +5 -0
  906. data/vendor/rails/activerecord/test/fixtures/db_definitions/sybase.drop.sql +34 -0
  907. data/vendor/rails/activerecord/test/fixtures/db_definitions/sybase.sql +218 -0
  908. data/vendor/rails/activerecord/test/fixtures/db_definitions/sybase2.drop.sql +4 -0
  909. data/vendor/rails/activerecord/test/fixtures/db_definitions/sybase2.sql +5 -0
  910. data/vendor/rails/activerecord/test/fixtures/default.rb +2 -0
  911. data/vendor/rails/activerecord/test/fixtures/developer.rb +52 -0
  912. data/vendor/rails/activerecord/test/fixtures/developers.yml +21 -0
  913. data/vendor/rails/activerecord/test/fixtures/developers_projects.yml +17 -0
  914. data/vendor/rails/activerecord/test/fixtures/developers_projects/david_action_controller +3 -0
  915. data/vendor/rails/activerecord/test/fixtures/developers_projects/david_active_record +3 -0
  916. data/vendor/rails/activerecord/test/fixtures/developers_projects/jamis_active_record +2 -0
  917. data/vendor/rails/activerecord/test/fixtures/edge.rb +5 -0
  918. data/vendor/rails/activerecord/test/fixtures/edges.yml +6 -0
  919. data/vendor/rails/activerecord/test/fixtures/entrant.rb +3 -0
  920. data/vendor/rails/activerecord/test/fixtures/entrants.yml +14 -0
  921. data/vendor/rails/activerecord/test/fixtures/fk_test_has_fk.yml +3 -0
  922. data/vendor/rails/activerecord/test/fixtures/fk_test_has_pk.yml +2 -0
  923. data/vendor/rails/activerecord/test/fixtures/flowers.jpg +0 -0
  924. data/vendor/rails/activerecord/test/fixtures/funny_jokes.yml +10 -0
  925. data/vendor/rails/activerecord/test/fixtures/joke.rb +6 -0
  926. data/vendor/rails/activerecord/test/fixtures/keyboard.rb +3 -0
  927. data/vendor/rails/activerecord/test/fixtures/legacy_thing.rb +3 -0
  928. data/vendor/rails/activerecord/test/fixtures/legacy_things.yml +3 -0
  929. data/vendor/rails/activerecord/test/fixtures/migrations/1_people_have_last_names.rb +9 -0
  930. data/vendor/rails/activerecord/test/fixtures/migrations/2_we_need_reminders.rb +12 -0
  931. data/vendor/rails/activerecord/test/fixtures/migrations/3_innocent_jointable.rb +12 -0
  932. data/vendor/rails/activerecord/test/fixtures/migrations_with_decimal/1_give_me_big_numbers.rb +15 -0
  933. data/vendor/rails/activerecord/test/fixtures/migrations_with_duplicate/1_people_have_last_names.rb +9 -0
  934. data/vendor/rails/activerecord/test/fixtures/migrations_with_duplicate/2_we_need_reminders.rb +12 -0
  935. data/vendor/rails/activerecord/test/fixtures/migrations_with_duplicate/3_foo.rb +7 -0
  936. data/vendor/rails/activerecord/test/fixtures/migrations_with_duplicate/3_innocent_jointable.rb +12 -0
  937. data/vendor/rails/activerecord/test/fixtures/migrations_with_missing_versions/1000_people_have_middle_names.rb +9 -0
  938. data/vendor/rails/activerecord/test/fixtures/migrations_with_missing_versions/1_people_have_last_names.rb +9 -0
  939. data/vendor/rails/activerecord/test/fixtures/migrations_with_missing_versions/3_we_need_reminders.rb +12 -0
  940. data/vendor/rails/activerecord/test/fixtures/migrations_with_missing_versions/4_innocent_jointable.rb +12 -0
  941. data/vendor/rails/activerecord/test/fixtures/mixed_case_monkey.rb +3 -0
  942. data/vendor/rails/activerecord/test/fixtures/mixed_case_monkeys.yml +6 -0
  943. data/vendor/rails/activerecord/test/fixtures/mixin.rb +63 -0
  944. data/vendor/rails/activerecord/test/fixtures/mixins.yml +127 -0
  945. data/vendor/rails/activerecord/test/fixtures/movie.rb +5 -0
  946. data/vendor/rails/activerecord/test/fixtures/movies.yml +7 -0
  947. data/vendor/rails/activerecord/test/fixtures/naked/csv/accounts.csv +1 -0
  948. data/vendor/rails/activerecord/test/fixtures/naked/yml/accounts.yml +1 -0
  949. data/vendor/rails/activerecord/test/fixtures/naked/yml/companies.yml +1 -0
  950. data/vendor/rails/activerecord/test/fixtures/naked/yml/courses.yml +1 -0
  951. data/vendor/rails/activerecord/test/fixtures/order.rb +4 -0
  952. data/vendor/rails/activerecord/test/fixtures/people.yml +3 -0
  953. data/vendor/rails/activerecord/test/fixtures/person.rb +4 -0
  954. data/vendor/rails/activerecord/test/fixtures/post.rb +58 -0
  955. data/vendor/rails/activerecord/test/fixtures/posts.yml +48 -0
  956. data/vendor/rails/activerecord/test/fixtures/project.rb +27 -0
  957. data/vendor/rails/activerecord/test/fixtures/projects.yml +7 -0
  958. data/vendor/rails/activerecord/test/fixtures/reader.rb +4 -0
  959. data/vendor/rails/activerecord/test/fixtures/readers.yml +4 -0
  960. data/vendor/rails/activerecord/test/fixtures/reply.rb +37 -0
  961. data/vendor/rails/activerecord/test/fixtures/subject.rb +4 -0
  962. data/vendor/rails/activerecord/test/fixtures/subscriber.rb +6 -0
  963. data/vendor/rails/activerecord/test/fixtures/subscribers/first +2 -0
  964. data/vendor/rails/activerecord/test/fixtures/subscribers/second +2 -0
  965. data/vendor/rails/activerecord/test/fixtures/tag.rb +7 -0
  966. data/vendor/rails/activerecord/test/fixtures/tagging.rb +6 -0
  967. data/vendor/rails/activerecord/test/fixtures/taggings.yml +18 -0
  968. data/vendor/rails/activerecord/test/fixtures/tags.yml +7 -0
  969. data/vendor/rails/activerecord/test/fixtures/task.rb +3 -0
  970. data/vendor/rails/activerecord/test/fixtures/tasks.yml +7 -0
  971. data/vendor/rails/activerecord/test/fixtures/topic.rb +25 -0
  972. data/vendor/rails/activerecord/test/fixtures/topics.yml +22 -0
  973. data/vendor/rails/activerecord/test/fixtures/vertex.rb +9 -0
  974. data/vendor/rails/activerecord/test/fixtures/vertices.yml +4 -0
  975. data/vendor/rails/activerecord/test/fixtures_test.rb +401 -0
  976. data/vendor/rails/activerecord/test/inheritance_test.rb +205 -0
  977. data/vendor/rails/activerecord/test/lifecycle_test.rb +137 -0
  978. data/vendor/rails/activerecord/test/locking_test.rb +190 -0
  979. data/vendor/rails/activerecord/test/method_scoping_test.rb +416 -0
  980. data/vendor/rails/activerecord/test/migration_test.rb +768 -0
  981. data/vendor/rails/activerecord/test/migration_test_firebird.rb +124 -0
  982. data/vendor/rails/activerecord/test/mixin_nested_set_test.rb +196 -0
  983. data/vendor/rails/activerecord/test/mixin_test.rb +550 -0
  984. data/vendor/rails/activerecord/test/modules_test.rb +34 -0
  985. data/vendor/rails/activerecord/test/multiple_db_test.rb +60 -0
  986. data/vendor/rails/activerecord/test/pk_test.rb +104 -0
  987. data/vendor/rails/activerecord/test/readonly_test.rb +107 -0
  988. data/vendor/rails/activerecord/test/reflection_test.rb +159 -0
  989. data/vendor/rails/activerecord/test/schema_authorization_test_postgresql.rb +75 -0
  990. data/vendor/rails/activerecord/test/schema_dumper_test.rb +96 -0
  991. data/vendor/rails/activerecord/test/schema_test_postgresql.rb +64 -0
  992. data/vendor/rails/activerecord/test/synonym_test_oracle.rb +17 -0
  993. data/vendor/rails/activerecord/test/table_name_test_sqlserver.rb +23 -0
  994. data/vendor/rails/activerecord/test/threaded_connections_test.rb +48 -0
  995. data/vendor/rails/activerecord/test/transactions_test.rb +230 -0
  996. data/vendor/rails/activerecord/test/unconnected_test.rb +32 -0
  997. data/vendor/rails/activerecord/test/validations_test.rb +1097 -0
  998. data/vendor/rails/activerecord/test/xml_serialization_test.rb +125 -0
  999. data/vendor/rails/activesupport/CHANGELOG +703 -0
  1000. data/vendor/rails/activesupport/MIT-LICENSE +20 -0
  1001. data/vendor/rails/activesupport/README +43 -0
  1002. data/vendor/rails/activesupport/Rakefile +82 -0
  1003. data/vendor/rails/activesupport/install.rb +30 -0
  1004. data/vendor/rails/activesupport/lib/active_support.rb +44 -0
  1005. data/vendor/rails/activesupport/lib/active_support/binding_of_caller.rb +84 -0
  1006. data/vendor/rails/activesupport/lib/active_support/breakpoint.rb +528 -0
  1007. data/vendor/rails/activesupport/lib/active_support/caching_tools.rb +62 -0
  1008. data/vendor/rails/activesupport/lib/active_support/clean_logger.rb +38 -0
  1009. data/vendor/rails/activesupport/lib/active_support/core_ext.rb +1 -0
  1010. data/vendor/rails/activesupport/lib/active_support/core_ext/array.rb +7 -0
  1011. data/vendor/rails/activesupport/lib/active_support/core_ext/array/conversions.rb +72 -0
  1012. data/vendor/rails/activesupport/lib/active_support/core_ext/array/grouping.rb +55 -0
  1013. data/vendor/rails/activesupport/lib/active_support/core_ext/bigdecimal.rb +3 -0
  1014. data/vendor/rails/activesupport/lib/active_support/core_ext/bigdecimal/formatting.rb +7 -0
  1015. data/vendor/rails/activesupport/lib/active_support/core_ext/blank.rb +50 -0
  1016. data/vendor/rails/activesupport/lib/active_support/core_ext/cgi.rb +5 -0
  1017. data/vendor/rails/activesupport/lib/active_support/core_ext/cgi/escape_skipping_slashes.rb +14 -0
  1018. data/vendor/rails/activesupport/lib/active_support/core_ext/class.rb +3 -0
  1019. data/vendor/rails/activesupport/lib/active_support/core_ext/class/attribute_accessors.rb +48 -0
  1020. data/vendor/rails/activesupport/lib/active_support/core_ext/class/inheritable_attributes.rb +140 -0
  1021. data/vendor/rails/activesupport/lib/active_support/core_ext/class/removal.rb +24 -0
  1022. data/vendor/rails/activesupport/lib/active_support/core_ext/date.rb +6 -0
  1023. data/vendor/rails/activesupport/lib/active_support/core_ext/date/conversions.rb +39 -0
  1024. data/vendor/rails/activesupport/lib/active_support/core_ext/enumerable.rb +62 -0
  1025. data/vendor/rails/activesupport/lib/active_support/core_ext/exception.rb +33 -0
  1026. data/vendor/rails/activesupport/lib/active_support/core_ext/hash.rb +13 -0
  1027. data/vendor/rails/activesupport/lib/active_support/core_ext/hash/conversions.rb +155 -0
  1028. data/vendor/rails/activesupport/lib/active_support/core_ext/hash/diff.rb +11 -0
  1029. data/vendor/rails/activesupport/lib/active_support/core_ext/hash/indifferent_access.rb +88 -0
  1030. data/vendor/rails/activesupport/lib/active_support/core_ext/hash/keys.rb +53 -0
  1031. data/vendor/rails/activesupport/lib/active_support/core_ext/hash/reverse_merge.rb +25 -0
  1032. data/vendor/rails/activesupport/lib/active_support/core_ext/integer.rb +7 -0
  1033. data/vendor/rails/activesupport/lib/active_support/core_ext/integer/even_odd.rb +24 -0
  1034. data/vendor/rails/activesupport/lib/active_support/core_ext/integer/inflections.rb +21 -0
  1035. data/vendor/rails/activesupport/lib/active_support/core_ext/kernel.rb +4 -0
  1036. data/vendor/rails/activesupport/lib/active_support/core_ext/kernel/agnostics.rb +11 -0
  1037. data/vendor/rails/activesupport/lib/active_support/core_ext/kernel/daemonizing.rb +15 -0
  1038. data/vendor/rails/activesupport/lib/active_support/core_ext/kernel/reporting.rb +51 -0
  1039. data/vendor/rails/activesupport/lib/active_support/core_ext/kernel/requires.rb +24 -0
  1040. data/vendor/rails/activesupport/lib/active_support/core_ext/load_error.rb +38 -0
  1041. data/vendor/rails/activesupport/lib/active_support/core_ext/logger.rb +16 -0
  1042. data/vendor/rails/activesupport/lib/active_support/core_ext/module.rb +7 -0
  1043. data/vendor/rails/activesupport/lib/active_support/core_ext/module/aliasing.rb +58 -0
  1044. data/vendor/rails/activesupport/lib/active_support/core_ext/module/attr_internal.rb +31 -0
  1045. data/vendor/rails/activesupport/lib/active_support/core_ext/module/attribute_accessors.rb +48 -0
  1046. data/vendor/rails/activesupport/lib/active_support/core_ext/module/delegation.rb +41 -0
  1047. data/vendor/rails/activesupport/lib/active_support/core_ext/module/inclusion.rb +11 -0
  1048. data/vendor/rails/activesupport/lib/active_support/core_ext/module/introspection.rb +21 -0
  1049. data/vendor/rails/activesupport/lib/active_support/core_ext/module/loading.rb +13 -0
  1050. data/vendor/rails/activesupport/lib/active_support/core_ext/name_error.rb +17 -0
  1051. data/vendor/rails/activesupport/lib/active_support/core_ext/numeric.rb +7 -0
  1052. data/vendor/rails/activesupport/lib/active_support/core_ext/numeric/bytes.rb +44 -0
  1053. data/vendor/rails/activesupport/lib/active_support/core_ext/numeric/time.rb +72 -0
  1054. data/vendor/rails/activesupport/lib/active_support/core_ext/object.rb +2 -0
  1055. data/vendor/rails/activesupport/lib/active_support/core_ext/object/extending.rb +47 -0
  1056. data/vendor/rails/activesupport/lib/active_support/core_ext/object/misc.rb +34 -0
  1057. data/vendor/rails/activesupport/lib/active_support/core_ext/pathname.rb +7 -0
  1058. data/vendor/rails/activesupport/lib/active_support/core_ext/pathname/clean_within.rb +14 -0
  1059. data/vendor/rails/activesupport/lib/active_support/core_ext/proc.rb +12 -0
  1060. data/vendor/rails/activesupport/lib/active_support/core_ext/range.rb +5 -0
  1061. data/vendor/rails/activesupport/lib/active_support/core_ext/range/conversions.rb +21 -0
  1062. data/vendor/rails/activesupport/lib/active_support/core_ext/string.rb +15 -0
  1063. data/vendor/rails/activesupport/lib/active_support/core_ext/string/access.rb +58 -0
  1064. data/vendor/rails/activesupport/lib/active_support/core_ext/string/conversions.rb +19 -0
  1065. data/vendor/rails/activesupport/lib/active_support/core_ext/string/inflections.rb +153 -0
  1066. data/vendor/rails/activesupport/lib/active_support/core_ext/string/iterators.rb +17 -0
  1067. data/vendor/rails/activesupport/lib/active_support/core_ext/string/starts_ends_with.rb +20 -0
  1068. data/vendor/rails/activesupport/lib/active_support/core_ext/string/unicode.rb +42 -0
  1069. data/vendor/rails/activesupport/lib/active_support/core_ext/symbol.rb +12 -0
  1070. data/vendor/rails/activesupport/lib/active_support/core_ext/time.rb +17 -0
  1071. data/vendor/rails/activesupport/lib/active_support/core_ext/time/calculations.rb +191 -0
  1072. data/vendor/rails/activesupport/lib/active_support/core_ext/time/conversions.rb +33 -0
  1073. data/vendor/rails/activesupport/lib/active_support/dependencies.rb +539 -0
  1074. data/vendor/rails/activesupport/lib/active_support/deprecation.rb +202 -0
  1075. data/vendor/rails/activesupport/lib/active_support/inflections.rb +52 -0
  1076. data/vendor/rails/activesupport/lib/active_support/inflector.rb +275 -0
  1077. data/vendor/rails/activesupport/lib/active_support/json.rb +48 -0
  1078. data/vendor/rails/activesupport/lib/active_support/json/encoders.rb +25 -0
  1079. data/vendor/rails/activesupport/lib/active_support/json/encoders/core.rb +68 -0
  1080. data/vendor/rails/activesupport/lib/active_support/multibyte.rb +7 -0
  1081. data/vendor/rails/activesupport/lib/active_support/multibyte/chars.rb +129 -0
  1082. data/vendor/rails/activesupport/lib/active_support/multibyte/generators/generate_tables.rb +149 -0
  1083. data/vendor/rails/activesupport/lib/active_support/multibyte/handlers/passthru_handler.rb +9 -0
  1084. data/vendor/rails/activesupport/lib/active_support/multibyte/handlers/utf8_handler.rb +454 -0
  1085. data/vendor/rails/activesupport/lib/active_support/multibyte/handlers/utf8_handler_proc.rb +43 -0
  1086. data/vendor/rails/activesupport/lib/active_support/option_merger.rb +25 -0
  1087. data/vendor/rails/activesupport/lib/active_support/ordered_options.rb +44 -0
  1088. data/vendor/rails/activesupport/lib/active_support/reloadable.rb +60 -0
  1089. data/vendor/rails/activesupport/lib/active_support/values/time_zone.rb +180 -0
  1090. data/vendor/rails/activesupport/lib/active_support/values/unicode_tables.dat +0 -0
  1091. data/vendor/rails/activesupport/lib/active_support/vendor/builder.rb +13 -0
  1092. data/vendor/rails/activesupport/lib/active_support/vendor/builder/blankslate.rb +63 -0
  1093. data/vendor/rails/activesupport/lib/active_support/vendor/builder/xchar.rb +112 -0
  1094. data/vendor/rails/activesupport/lib/active_support/vendor/builder/xmlbase.rb +145 -0
  1095. data/vendor/rails/activesupport/lib/active_support/vendor/builder/xmlevents.rb +63 -0
  1096. data/vendor/rails/activesupport/lib/active_support/vendor/builder/xmlmarkup.rb +327 -0
  1097. data/vendor/rails/activesupport/lib/active_support/vendor/xml_simple.rb +1021 -0
  1098. data/vendor/rails/activesupport/lib/active_support/version.rb +9 -0
  1099. data/vendor/rails/activesupport/lib/active_support/whiny_nil.rb +38 -0
  1100. data/vendor/rails/activesupport/test/abstract_unit.rb +7 -0
  1101. data/vendor/rails/activesupport/test/autoloading_fixtures/a/b.rb +2 -0
  1102. data/vendor/rails/activesupport/test/autoloading_fixtures/a/c/d.rb +2 -0
  1103. data/vendor/rails/activesupport/test/autoloading_fixtures/a/c/e/f.rb +2 -0
  1104. data/vendor/rails/activesupport/test/autoloading_fixtures/application.rb +1 -0
  1105. data/vendor/rails/activesupport/test/autoloading_fixtures/class_folder.rb +3 -0
  1106. data/vendor/rails/activesupport/test/autoloading_fixtures/class_folder/class_folder_subclass.rb +3 -0
  1107. data/vendor/rails/activesupport/test/autoloading_fixtures/class_folder/inline_class.rb +2 -0
  1108. data/vendor/rails/activesupport/test/autoloading_fixtures/class_folder/nested_class.rb +7 -0
  1109. data/vendor/rails/activesupport/test/autoloading_fixtures/conflict.rb +1 -0
  1110. data/vendor/rails/activesupport/test/autoloading_fixtures/counting_loader.rb +5 -0
  1111. data/vendor/rails/activesupport/test/autoloading_fixtures/cross_site_dependency.rb +2 -0
  1112. data/vendor/rails/activesupport/test/autoloading_fixtures/e.rb +2 -0
  1113. data/vendor/rails/activesupport/test/autoloading_fixtures/module_folder/inline_class.rb +2 -0
  1114. data/vendor/rails/activesupport/test/autoloading_fixtures/module_folder/nested_class.rb +4 -0
  1115. data/vendor/rails/activesupport/test/autoloading_fixtures/module_folder/nested_sibling.rb +2 -0
  1116. data/vendor/rails/activesupport/test/autoloading_fixtures/module_with_custom_const_missing/a/b.rb +1 -0
  1117. data/vendor/rails/activesupport/test/autoloading_fixtures/multiple_constant_file.rb +2 -0
  1118. data/vendor/rails/activesupport/test/autoloading_fixtures/raises_name_error.rb +3 -0
  1119. data/vendor/rails/activesupport/test/autoloading_fixtures/raises_no_method_error.rb +3 -0
  1120. data/vendor/rails/activesupport/test/caching_tools_test.rb +79 -0
  1121. data/vendor/rails/activesupport/test/clean_logger_test.rb +80 -0
  1122. data/vendor/rails/activesupport/test/core_ext/array_ext_test.rb +182 -0
  1123. data/vendor/rails/activesupport/test/core_ext/blank_test.rb +11 -0
  1124. data/vendor/rails/activesupport/test/core_ext/cgi_ext_test.rb +14 -0
  1125. data/vendor/rails/activesupport/test/core_ext/class/attribute_accessor_test.rb +31 -0
  1126. data/vendor/rails/activesupport/test/core_ext/class/class_inheritable_attributes_test.rb +208 -0
  1127. data/vendor/rails/activesupport/test/core_ext/class_test.rb +36 -0
  1128. data/vendor/rails/activesupport/test/core_ext/date_ext_test.rb +20 -0
  1129. data/vendor/rails/activesupport/test/core_ext/enumerable_test.rb +61 -0
  1130. data/vendor/rails/activesupport/test/core_ext/exception_test.rb +64 -0
  1131. data/vendor/rails/activesupport/test/core_ext/hash_ext_test.rb +472 -0
  1132. data/vendor/rails/activesupport/test/core_ext/integer_ext_test.rb +37 -0
  1133. data/vendor/rails/activesupport/test/core_ext/kernel_test.rb +43 -0
  1134. data/vendor/rails/activesupport/test/core_ext/load_error_tests.rb +16 -0
  1135. data/vendor/rails/activesupport/test/core_ext/module/attr_accessor_with_default.rb +30 -0
  1136. data/vendor/rails/activesupport/test/core_ext/module/attr_internal_test.rb +52 -0
  1137. data/vendor/rails/activesupport/test/core_ext/module/attribute_accessor_test.rb +33 -0
  1138. data/vendor/rails/activesupport/test/core_ext/module/attribute_aliasing_test.rb +31 -0
  1139. data/vendor/rails/activesupport/test/core_ext/module_test.rb +221 -0
  1140. data/vendor/rails/activesupport/test/core_ext/name_error_test.rb +24 -0
  1141. data/vendor/rails/activesupport/test/core_ext/numeric_ext_test.rb +57 -0
  1142. data/vendor/rails/activesupport/test/core_ext/object_and_class_ext_test.rb +151 -0
  1143. data/vendor/rails/activesupport/test/core_ext/pathname_test.rb +9 -0
  1144. data/vendor/rails/activesupport/test/core_ext/proc_test.rb +11 -0
  1145. data/vendor/rails/activesupport/test/core_ext/range_ext_test.rb +13 -0
  1146. data/vendor/rails/activesupport/test/core_ext/string_ext_test.rb +152 -0
  1147. data/vendor/rails/activesupport/test/core_ext/symbol_test.rb +9 -0
  1148. data/vendor/rails/activesupport/test/core_ext/time_ext_test.rb +335 -0
  1149. data/vendor/rails/activesupport/test/dependencies/check_warnings.rb +2 -0
  1150. data/vendor/rails/activesupport/test/dependencies/conflict.rb +1 -0
  1151. data/vendor/rails/activesupport/test/dependencies/cross_site_depender.rb +3 -0
  1152. data/vendor/rails/activesupport/test/dependencies/mutual_one.rb +4 -0
  1153. data/vendor/rails/activesupport/test/dependencies/mutual_two.rb +4 -0
  1154. data/vendor/rails/activesupport/test/dependencies/raises_exception.rb +3 -0
  1155. data/vendor/rails/activesupport/test/dependencies/requires_nonexistent0.rb +1 -0
  1156. data/vendor/rails/activesupport/test/dependencies/requires_nonexistent1.rb +1 -0
  1157. data/vendor/rails/activesupport/test/dependencies/service_one.rb +5 -0
  1158. data/vendor/rails/activesupport/test/dependencies/service_two.rb +2 -0
  1159. data/vendor/rails/activesupport/test/dependencies_test.rb +741 -0
  1160. data/vendor/rails/activesupport/test/deprecation_test.rb +151 -0
  1161. data/vendor/rails/activesupport/test/inflector_test.rb +404 -0
  1162. data/vendor/rails/activesupport/test/json.rb +87 -0
  1163. data/vendor/rails/activesupport/test/multibyte_chars_test.rb +164 -0
  1164. data/vendor/rails/activesupport/test/multibyte_conformance.rb +141 -0
  1165. data/vendor/rails/activesupport/test/multibyte_handler_test.rb +274 -0
  1166. data/vendor/rails/activesupport/test/option_merger_test.rb +50 -0
  1167. data/vendor/rails/activesupport/test/ordered_options_test.rb +80 -0
  1168. data/vendor/rails/activesupport/test/reloadable_test.rb +123 -0
  1169. data/vendor/rails/activesupport/test/time_zone_test.rb +91 -0
  1170. data/vendor/rails/activesupport/test/whiny_nil_test.rb +38 -0
  1171. data/vendor/rails/cleanlogs.sh +1 -0
  1172. data/vendor/rails/pushgems.rb +15 -0
  1173. data/vendor/rails/railties/CHANGELOG +1366 -0
  1174. data/vendor/rails/railties/MIT-LICENSE +20 -0
  1175. data/vendor/rails/railties/README +182 -0
  1176. data/vendor/rails/railties/Rakefile +334 -0
  1177. data/vendor/rails/railties/bin/about +3 -0
  1178. data/vendor/rails/railties/bin/breakpointer +3 -0
  1179. data/vendor/rails/railties/bin/console +3 -0
  1180. data/vendor/rails/railties/bin/destroy +3 -0
  1181. data/vendor/rails/railties/bin/generate +3 -0
  1182. data/vendor/rails/railties/bin/performance/benchmarker +3 -0
  1183. data/vendor/rails/railties/bin/performance/profiler +3 -0
  1184. data/vendor/rails/railties/bin/plugin +3 -0
  1185. data/vendor/rails/railties/bin/process/inspector +3 -0
  1186. data/vendor/rails/railties/bin/process/reaper +3 -0
  1187. data/vendor/rails/railties/bin/process/spawner +3 -0
  1188. data/vendor/rails/railties/bin/rails +19 -0
  1189. data/vendor/rails/railties/bin/runner +3 -0
  1190. data/vendor/rails/railties/bin/server +3 -0
  1191. data/vendor/rails/railties/builtin/rails_info/rails/info.rb +123 -0
  1192. data/vendor/rails/railties/builtin/rails_info/rails/info_controller.rb +9 -0
  1193. data/vendor/rails/railties/builtin/rails_info/rails/info_helper.rb +2 -0
  1194. data/vendor/rails/railties/builtin/rails_info/rails_info_controller.rb +2 -0
  1195. data/vendor/rails/railties/configs/apache.conf +40 -0
  1196. data/vendor/rails/railties/configs/databases/frontbase.yml +28 -0
  1197. data/vendor/rails/railties/configs/databases/mysql.yml +48 -0
  1198. data/vendor/rails/railties/configs/databases/oracle.yml +39 -0
  1199. data/vendor/rails/railties/configs/databases/postgresql.yml +44 -0
  1200. data/vendor/rails/railties/configs/databases/sqlite2.yml +16 -0
  1201. data/vendor/rails/railties/configs/databases/sqlite3.yml +19 -0
  1202. data/vendor/rails/railties/configs/empty.log +0 -0
  1203. data/vendor/rails/railties/configs/lighttpd.conf +54 -0
  1204. data/vendor/rails/railties/configs/routes.rb +23 -0
  1205. data/vendor/rails/railties/dispatches/dispatch.fcgi +24 -0
  1206. data/vendor/rails/railties/dispatches/dispatch.rb +10 -0
  1207. data/vendor/rails/railties/dispatches/gateway.cgi +97 -0
  1208. data/vendor/rails/railties/environments/boot.rb +45 -0
  1209. data/vendor/rails/railties/environments/development.rb +21 -0
  1210. data/vendor/rails/railties/environments/environment.rb +60 -0
  1211. data/vendor/rails/railties/environments/production.rb +18 -0
  1212. data/vendor/rails/railties/environments/test.rb +19 -0
  1213. data/vendor/rails/railties/fresh_rakefile +10 -0
  1214. data/vendor/rails/railties/helpers/application.rb +7 -0
  1215. data/vendor/rails/railties/helpers/application_helper.rb +3 -0
  1216. data/vendor/rails/railties/helpers/test_helper.rb +28 -0
  1217. data/vendor/rails/railties/html/404.html +30 -0
  1218. data/vendor/rails/railties/html/500.html +30 -0
  1219. data/vendor/rails/railties/html/favicon.ico +0 -0
  1220. data/vendor/rails/railties/html/images/rails.png +0 -0
  1221. data/vendor/rails/railties/html/index.html +277 -0
  1222. data/vendor/rails/railties/html/javascripts/application.js +2 -0
  1223. data/vendor/rails/railties/html/javascripts/controls.js +833 -0
  1224. data/vendor/rails/railties/html/javascripts/dragdrop.js +942 -0
  1225. data/vendor/rails/railties/html/javascripts/effects.js +1088 -0
  1226. data/vendor/rails/railties/html/javascripts/prototype.js +2515 -0
  1227. data/vendor/rails/railties/html/robots.txt +1 -0
  1228. data/vendor/rails/railties/lib/binding_of_caller.rb +85 -0
  1229. data/vendor/rails/railties/lib/breakpoint.rb +553 -0
  1230. data/vendor/rails/railties/lib/breakpoint_client.rb +196 -0
  1231. data/vendor/rails/railties/lib/code_statistics.rb +107 -0
  1232. data/vendor/rails/railties/lib/commands.rb +17 -0
  1233. data/vendor/rails/railties/lib/commands/about.rb +2 -0
  1234. data/vendor/rails/railties/lib/commands/breakpointer.rb +1 -0
  1235. data/vendor/rails/railties/lib/commands/console.rb +25 -0
  1236. data/vendor/rails/railties/lib/commands/destroy.rb +6 -0
  1237. data/vendor/rails/railties/lib/commands/generate.rb +6 -0
  1238. data/vendor/rails/railties/lib/commands/ncgi/listener +86 -0
  1239. data/vendor/rails/railties/lib/commands/ncgi/tracker +69 -0
  1240. data/vendor/rails/railties/lib/commands/performance/benchmarker.rb +24 -0
  1241. data/vendor/rails/railties/lib/commands/performance/profiler.rb +50 -0
  1242. data/vendor/rails/railties/lib/commands/plugin.rb +918 -0
  1243. data/vendor/rails/railties/lib/commands/process/inspector.rb +68 -0
  1244. data/vendor/rails/railties/lib/commands/process/reaper.rb +149 -0
  1245. data/vendor/rails/railties/lib/commands/process/spawner.rb +209 -0
  1246. data/vendor/rails/railties/lib/commands/process/spinner.rb +57 -0
  1247. data/vendor/rails/railties/lib/commands/runner.rb +48 -0
  1248. data/vendor/rails/railties/lib/commands/server.rb +39 -0
  1249. data/vendor/rails/railties/lib/commands/servers/base.rb +19 -0
  1250. data/vendor/rails/railties/lib/commands/servers/lighttpd.rb +94 -0
  1251. data/vendor/rails/railties/lib/commands/servers/mongrel.rb +65 -0
  1252. data/vendor/rails/railties/lib/commands/servers/webrick.rb +59 -0
  1253. data/vendor/rails/railties/lib/commands/update.rb +4 -0
  1254. data/vendor/rails/railties/lib/console_app.rb +27 -0
  1255. data/vendor/rails/railties/lib/console_sandbox.rb +6 -0
  1256. data/vendor/rails/railties/lib/console_with_helpers.rb +23 -0
  1257. data/vendor/rails/railties/lib/dispatcher.rb +173 -0
  1258. data/vendor/rails/railties/lib/fcgi_handler.rb +225 -0
  1259. data/vendor/rails/railties/lib/initializer.rb +702 -0
  1260. data/vendor/rails/railties/lib/rails/version.rb +9 -0
  1261. data/vendor/rails/railties/lib/rails_generator.rb +43 -0
  1262. data/vendor/rails/railties/lib/rails_generator/base.rb +261 -0
  1263. data/vendor/rails/railties/lib/rails_generator/commands.rb +581 -0
  1264. data/vendor/rails/railties/lib/rails_generator/generated_attribute.rb +42 -0
  1265. data/vendor/rails/railties/lib/rails_generator/generators/applications/app/USAGE +16 -0
  1266. data/vendor/rails/railties/lib/rails_generator/generators/applications/app/app_generator.rb +160 -0
  1267. data/vendor/rails/railties/lib/rails_generator/generators/components/controller/USAGE +30 -0
  1268. data/vendor/rails/railties/lib/rails_generator/generators/components/controller/controller_generator.rb +37 -0
  1269. data/vendor/rails/railties/lib/rails_generator/generators/components/controller/templates/controller.rb +10 -0
  1270. data/vendor/rails/railties/lib/rails_generator/generators/components/controller/templates/functional_test.rb +18 -0
  1271. data/vendor/rails/railties/lib/rails_generator/generators/components/controller/templates/helper.rb +2 -0
  1272. data/vendor/rails/railties/lib/rails_generator/generators/components/controller/templates/view.rhtml +2 -0
  1273. data/vendor/rails/railties/lib/rails_generator/generators/components/integration_test/USAGE +14 -0
  1274. data/vendor/rails/railties/lib/rails_generator/generators/components/integration_test/integration_test_generator.rb +16 -0
  1275. data/vendor/rails/railties/lib/rails_generator/generators/components/integration_test/templates/integration_test.rb +10 -0
  1276. data/vendor/rails/railties/lib/rails_generator/generators/components/mailer/USAGE +18 -0
  1277. data/vendor/rails/railties/lib/rails_generator/generators/components/mailer/mailer_generator.rb +34 -0
  1278. data/vendor/rails/railties/lib/rails_generator/generators/components/mailer/templates/fixture.rhtml +3 -0
  1279. data/vendor/rails/railties/lib/rails_generator/generators/components/mailer/templates/mailer.rb +13 -0
  1280. data/vendor/rails/railties/lib/rails_generator/generators/components/mailer/templates/unit_test.rb +37 -0
  1281. data/vendor/rails/railties/lib/rails_generator/generators/components/mailer/templates/view.rhtml +3 -0
  1282. data/vendor/rails/railties/lib/rails_generator/generators/components/migration/USAGE +14 -0
  1283. data/vendor/rails/railties/lib/rails_generator/generators/components/migration/migration_generator.rb +7 -0
  1284. data/vendor/rails/railties/lib/rails_generator/generators/components/migration/templates/migration.rb +7 -0
  1285. data/vendor/rails/railties/lib/rails_generator/generators/components/model/USAGE +26 -0
  1286. data/vendor/rails/railties/lib/rails_generator/generators/components/model/model_generator.rb +38 -0
  1287. data/vendor/rails/railties/lib/rails_generator/generators/components/model/templates/fixtures.yml +11 -0
  1288. data/vendor/rails/railties/lib/rails_generator/generators/components/model/templates/migration.rb +13 -0
  1289. data/vendor/rails/railties/lib/rails_generator/generators/components/model/templates/model.rb +2 -0
  1290. data/vendor/rails/railties/lib/rails_generator/generators/components/model/templates/unit_test.rb +10 -0
  1291. data/vendor/rails/railties/lib/rails_generator/generators/components/observer/USAGE +15 -0
  1292. data/vendor/rails/railties/lib/rails_generator/generators/components/observer/observer_generator.rb +16 -0
  1293. data/vendor/rails/railties/lib/rails_generator/generators/components/observer/templates/observer.rb +2 -0
  1294. data/vendor/rails/railties/lib/rails_generator/generators/components/observer/templates/unit_test.rb +10 -0
  1295. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/USAGE +35 -0
  1296. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/plugin_generator.rb +38 -0
  1297. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/templates/README +4 -0
  1298. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/templates/Rakefile +22 -0
  1299. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/templates/USAGE +8 -0
  1300. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/templates/generator.rb +8 -0
  1301. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/templates/init.rb +1 -0
  1302. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/templates/install.rb +1 -0
  1303. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/templates/plugin.rb +1 -0
  1304. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/templates/tasks.rake +4 -0
  1305. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/templates/uninstall.rb +1 -0
  1306. data/vendor/rails/railties/lib/rails_generator/generators/components/plugin/templates/unit_test.rb +8 -0
  1307. data/vendor/rails/railties/lib/rails_generator/generators/components/resource/resource_generator.rb +76 -0
  1308. data/vendor/rails/railties/lib/rails_generator/generators/components/resource/templates/USAGE +18 -0
  1309. data/vendor/rails/railties/lib/rails_generator/generators/components/resource/templates/controller.rb +2 -0
  1310. data/vendor/rails/railties/lib/rails_generator/generators/components/resource/templates/fixtures.yml +11 -0
  1311. data/vendor/rails/railties/lib/rails_generator/generators/components/resource/templates/functional_test.rb +20 -0
  1312. data/vendor/rails/railties/lib/rails_generator/generators/components/resource/templates/helper.rb +2 -0
  1313. data/vendor/rails/railties/lib/rails_generator/generators/components/resource/templates/migration.rb +13 -0
  1314. data/vendor/rails/railties/lib/rails_generator/generators/components/resource/templates/model.rb +2 -0
  1315. data/vendor/rails/railties/lib/rails_generator/generators/components/resource/templates/unit_test.rb +10 -0
  1316. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/USAGE +32 -0
  1317. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb +193 -0
  1318. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/templates/controller.rb +58 -0
  1319. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/templates/form.rhtml +3 -0
  1320. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/templates/form_scaffolding.rhtml +1 -0
  1321. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb +102 -0
  1322. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/templates/helper.rb +2 -0
  1323. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/templates/layout.rhtml +17 -0
  1324. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/templates/style.css +74 -0
  1325. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/templates/view_edit.rhtml +9 -0
  1326. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/templates/view_list.rhtml +27 -0
  1327. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/templates/view_new.rhtml +8 -0
  1328. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/templates/view_show.rhtml +8 -0
  1329. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold_resource/USAGE +29 -0
  1330. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold_resource/scaffold_resource_generator.rb +92 -0
  1331. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold_resource/templates/controller.rb +79 -0
  1332. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold_resource/templates/fixtures.yml +11 -0
  1333. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold_resource/templates/functional_test.rb +57 -0
  1334. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold_resource/templates/helper.rb +2 -0
  1335. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold_resource/templates/layout.rhtml +17 -0
  1336. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold_resource/templates/migration.rb +13 -0
  1337. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold_resource/templates/model.rb +2 -0
  1338. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold_resource/templates/style.css +74 -0
  1339. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold_resource/templates/unit_test.rb +10 -0
  1340. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold_resource/templates/view_edit.rhtml +19 -0
  1341. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold_resource/templates/view_index.rhtml +24 -0
  1342. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold_resource/templates/view_new.rhtml +18 -0
  1343. data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold_resource/templates/view_show.rhtml +10 -0
  1344. data/vendor/rails/railties/lib/rails_generator/generators/components/session_migration/USAGE +15 -0
  1345. data/vendor/rails/railties/lib/rails_generator/generators/components/session_migration/session_migration_generator.rb +18 -0
  1346. data/vendor/rails/railties/lib/rails_generator/generators/components/session_migration/templates/migration.rb +16 -0
  1347. data/vendor/rails/railties/lib/rails_generator/generators/components/web_service/USAGE +28 -0
  1348. data/vendor/rails/railties/lib/rails_generator/generators/components/web_service/templates/api_definition.rb +5 -0
  1349. data/vendor/rails/railties/lib/rails_generator/generators/components/web_service/templates/controller.rb +8 -0
  1350. data/vendor/rails/railties/lib/rails_generator/generators/components/web_service/templates/functional_test.rb +19 -0
  1351. data/vendor/rails/railties/lib/rails_generator/generators/components/web_service/web_service_generator.rb +29 -0
  1352. data/vendor/rails/railties/lib/rails_generator/lookup.rb +209 -0
  1353. data/vendor/rails/railties/lib/rails_generator/manifest.rb +53 -0
  1354. data/vendor/rails/railties/lib/rails_generator/options.rb +143 -0
  1355. data/vendor/rails/railties/lib/rails_generator/scripts.rb +83 -0
  1356. data/vendor/rails/railties/lib/rails_generator/scripts/destroy.rb +7 -0
  1357. data/vendor/rails/railties/lib/rails_generator/scripts/generate.rb +7 -0
  1358. data/vendor/rails/railties/lib/rails_generator/scripts/update.rb +12 -0
  1359. data/vendor/rails/railties/lib/rails_generator/simple_logger.rb +46 -0
  1360. data/vendor/rails/railties/lib/rails_generator/spec.rb +44 -0
  1361. data/vendor/rails/railties/lib/railties_path.rb +1 -0
  1362. data/vendor/rails/railties/lib/ruby_version_check.rb +17 -0
  1363. data/vendor/rails/railties/lib/rubyprof_ext.rb +35 -0
  1364. data/vendor/rails/railties/lib/tasks/databases.rake +187 -0
  1365. data/vendor/rails/railties/lib/tasks/framework.rake +112 -0
  1366. data/vendor/rails/railties/lib/tasks/log.rake +9 -0
  1367. data/vendor/rails/railties/lib/tasks/misc.rake +4 -0
  1368. data/vendor/rails/railties/lib/tasks/pre_namespace_aliases.rake +53 -0
  1369. data/vendor/rails/railties/lib/tasks/rails.rb +8 -0
  1370. data/vendor/rails/railties/lib/tasks/statistics.rake +18 -0
  1371. data/vendor/rails/railties/lib/tasks/testing.rake +120 -0
  1372. data/vendor/rails/railties/lib/test_help.rb +19 -0
  1373. data/vendor/rails/railties/lib/webrick_server.rb +166 -0
  1374. data/vendor/rails/railties/test/abstract_unit.rb +20 -0
  1375. data/vendor/rails/railties/test/dispatcher_test.rb +141 -0
  1376. data/vendor/rails/railties/test/fcgi_dispatcher_test.rb +294 -0
  1377. data/vendor/rails/railties/test/fixtures/environment_with_constant.rb +1 -0
  1378. data/vendor/rails/railties/test/fixtures/lib/generators/missing_class/missing_class_generator.rb +0 -0
  1379. data/vendor/rails/railties/test/fixtures/lib/generators/working/working_generator.rb +2 -0
  1380. data/vendor/rails/railties/test/fixtures/plugins/default/stubby/init.rb +7 -0
  1381. data/vendor/rails/railties/test/fixtures/plugins/default/stubby/lib/stubby_mixin.rb +2 -0
  1382. data/vendor/rails/railties/test/initializer_test.rb +33 -0
  1383. data/vendor/rails/railties/test/mocks/dispatcher.rb +13 -0
  1384. data/vendor/rails/railties/test/mocks/fcgi.rb +15 -0
  1385. data/vendor/rails/railties/test/mocks/routes.rb +6 -0
  1386. data/vendor/rails/railties/test/mocks/stubbed_breakpoint.rb +2 -0
  1387. data/vendor/rails/railties/test/mocks/stubbed_kernel.rb +5 -0
  1388. data/vendor/rails/railties/test/plugin_test.rb +111 -0
  1389. data/vendor/rails/railties/test/rails_generator_test.rb +127 -0
  1390. data/vendor/rails/railties/test/rails_info_controller_test.rb +48 -0
  1391. data/vendor/rails/railties/test/rails_info_test.rb +98 -0
  1392. data/vendor/rails/release.rb +25 -0
  1393. data/vendor/redcloth/Rakefile +196 -0
  1394. data/vendor/redcloth/bin/redcloth +3 -0
  1395. data/vendor/redcloth/lib/rctodb.rb +1107 -0
  1396. data/vendor/redcloth/lib/redcloth.rb +1130 -0
  1397. data/vendor/redcloth/run-tests.rb +28 -0
  1398. data/vendor/redcloth/setup.rb +1376 -0
  1399. data/vendor/redcloth/tests/code.yml +105 -0
  1400. data/vendor/redcloth/tests/images.yml +171 -0
  1401. data/vendor/redcloth/tests/instiki.yml +39 -0
  1402. data/vendor/redcloth/tests/links.yml +155 -0
  1403. data/vendor/redcloth/tests/lists.yml +77 -0
  1404. data/vendor/redcloth/tests/markdown.yml +218 -0
  1405. data/vendor/redcloth/tests/poignant.yml +64 -0
  1406. data/vendor/redcloth/tests/table.yml +198 -0
  1407. data/vendor/redcloth/tests/textism.yml +406 -0
  1408. data/vendor/rubypants/README +114 -0
  1409. data/vendor/rubypants/Rakefile +84 -0
  1410. data/vendor/rubypants/install.rb +9 -0
  1411. data/vendor/rubypants/rubypants.rb +490 -0
  1412. data/vendor/rubypants/test_rubypants.rb +162 -0
  1413. metadata +1701 -114
  1414. data/app/behaviors/archive_behavior.rb +0 -42
  1415. data/app/behaviors/archive_day_index_behavior.rb +0 -30
  1416. data/app/behaviors/archive_month_index_behavior.rb +0 -30
  1417. data/app/behaviors/archive_year_index_behavior.rb +0 -30
  1418. data/app/behaviors/page_missing_behavior.rb +0 -31
  1419. data/app/filters/markdown_filter.rb +0 -9
  1420. data/app/filters/textile_filter.rb +0 -9
  1421. data/app/models/behavior.rb +0 -194
  1422. data/db/development_structure.sql +0 -80
  1423. data/lib/advanced_delegation.rb +0 -21
  1424. data/lib/archive_index_behavior_tags_and_methods.rb +0 -48
  1425. data/lib/generators/behavior/USAGE +0 -16
  1426. data/lib/generators/behavior/behavior_generator.rb +0 -22
  1427. data/lib/generators/behavior/templates/model.rb.template +0 -9
  1428. data/lib/generators/behavior/templates/unit_test.rb.template +0 -16
  1429. data/lib/generators/filter/USAGE +0 -16
  1430. data/lib/generators/filter/filter_generator.rb +0 -22
  1431. data/lib/generators/filter/templates/model.rb.template +0 -8
  1432. data/lib/generators/filter/templates/unit_test.rb.template +0 -7
  1433. data/lib/plugins/index_quoting_fix/init.rb +0 -32
  1434. data/lib/registerable.rb +0 -70
  1435. data/script/setup_database +0 -297
  1436. data/test/functional/admin/model_controller_test.rb +0 -152
  1437. data/test/helpers/behavior_render_test_helper.rb +0 -34
  1438. data/test/helpers/behavior_test_helper.rb +0 -47
  1439. data/test/unit/behavior_test.rb +0 -196
  1440. data/test/unit/filters/markdown_filter_test.rb +0 -14
  1441. data/test/unit/filters/textile_filter_test.rb +0 -14
  1442. data/test/unit/registerable_test.rb +0 -68
@@ -0,0 +1,1809 @@
1
+ require 'abstract_unit'
2
+ require 'fixtures/developer'
3
+ require 'fixtures/project'
4
+ require 'fixtures/company'
5
+ require 'fixtures/topic'
6
+ require 'fixtures/reply'
7
+ require 'fixtures/computer'
8
+ require 'fixtures/customer'
9
+ require 'fixtures/order'
10
+ require 'fixtures/category'
11
+ require 'fixtures/post'
12
+ require 'fixtures/author'
13
+
14
+
15
+ class AssociationsTest < Test::Unit::TestCase
16
+ fixtures :accounts, :companies, :developers, :projects, :developers_projects,
17
+ :computers
18
+
19
+ def test_bad_collection_keys
20
+ assert_raise(ArgumentError, 'ActiveRecord should have barked on bad collection keys') do
21
+ Class.new(ActiveRecord::Base).has_many(:wheels, :name => 'wheels')
22
+ end
23
+ end
24
+
25
+ def test_force_reload
26
+ firm = Firm.new("name" => "A New Firm, Inc")
27
+ firm.save
28
+ firm.clients.each {|c|} # forcing to load all clients
29
+ assert firm.clients.empty?, "New firm shouldn't have client objects"
30
+ assert_deprecated do
31
+ assert !firm.has_clients?, "New firm shouldn't have clients"
32
+ end
33
+ assert_equal 0, firm.clients.size, "New firm should have 0 clients"
34
+
35
+ client = Client.new("name" => "TheClient.com", "firm_id" => firm.id)
36
+ client.save
37
+
38
+ assert firm.clients.empty?, "New firm should have cached no client objects"
39
+ assert_deprecated do
40
+ assert !firm.has_clients?, "New firm should have cached a no-clients response"
41
+ end
42
+ assert_equal 0, firm.clients.size, "New firm should have cached 0 clients count"
43
+
44
+ assert !firm.clients(true).empty?, "New firm should have reloaded client objects"
45
+ assert_equal 1, firm.clients(true).size, "New firm should have reloaded clients count"
46
+ end
47
+
48
+ def test_storing_in_pstore
49
+ require "tmpdir"
50
+ store_filename = File.join(Dir.tmpdir, "ar-pstore-association-test")
51
+ File.delete(store_filename) if File.exists?(store_filename)
52
+ require "pstore"
53
+ apple = Firm.create("name" => "Apple")
54
+ natural = Client.new("name" => "Natural Company")
55
+ apple.clients << natural
56
+
57
+ db = PStore.new(store_filename)
58
+ db.transaction do
59
+ db["apple"] = apple
60
+ end
61
+
62
+ db = PStore.new(store_filename)
63
+ db.transaction do
64
+ assert_equal "Natural Company", db["apple"].clients.first.name
65
+ end
66
+ end
67
+ end
68
+
69
+ class AssociationProxyTest < Test::Unit::TestCase
70
+ fixtures :authors, :posts
71
+
72
+ def test_proxy_accessors
73
+ welcome = posts(:welcome)
74
+ assert_equal welcome, welcome.author.proxy_owner
75
+ assert_equal welcome.class.reflect_on_association(:author), welcome.author.proxy_reflection
76
+ welcome.author.class # force load target
77
+ assert_equal welcome.author, welcome.author.proxy_target
78
+
79
+ david = authors(:david)
80
+ assert_equal david, david.posts.proxy_owner
81
+ assert_equal david.class.reflect_on_association(:posts), david.posts.proxy_reflection
82
+ david.posts.first # force load target
83
+ assert_equal david.posts, david.posts.proxy_target
84
+
85
+ assert_equal david, david.posts_with_extension.testing_proxy_owner
86
+ assert_equal david.class.reflect_on_association(:posts_with_extension), david.posts_with_extension.testing_proxy_reflection
87
+ david.posts_with_extension.first # force load target
88
+ assert_equal david.posts_with_extension, david.posts_with_extension.testing_proxy_target
89
+ end
90
+ end
91
+
92
+ class HasOneAssociationsTest < Test::Unit::TestCase
93
+ fixtures :accounts, :companies, :developers, :projects, :developers_projects
94
+
95
+ def setup
96
+ Account.destroyed_account_ids.clear
97
+ end
98
+
99
+ def test_has_one
100
+ assert_equal companies(:first_firm).account, Account.find(1)
101
+ assert_equal Account.find(1).credit_limit, companies(:first_firm).account.credit_limit
102
+ end
103
+
104
+ def test_has_one_cache_nils
105
+ firm = companies(:another_firm)
106
+ assert_queries(1) { assert_nil firm.account }
107
+ assert_queries(0) { assert_nil firm.account }
108
+
109
+ firms = Firm.find(:all, :include => :account)
110
+ assert_queries(0) { firms.each(&:account) }
111
+ end
112
+
113
+ def test_can_marshal_has_one_association_with_nil_target
114
+ firm = Firm.new
115
+ assert_nothing_raised do
116
+ assert_equal firm.attributes, Marshal.load(Marshal.dump(firm)).attributes
117
+ end
118
+
119
+ firm.account
120
+ assert_nothing_raised do
121
+ assert_equal firm.attributes, Marshal.load(Marshal.dump(firm)).attributes
122
+ end
123
+ end
124
+
125
+ def test_proxy_assignment
126
+ company = companies(:first_firm)
127
+ assert_nothing_raised { company.account = company.account }
128
+ end
129
+
130
+ def test_triple_equality
131
+ assert Account === companies(:first_firm).account
132
+ assert companies(:first_firm).account === Account
133
+ end
134
+
135
+ def test_type_mismatch
136
+ assert_raises(ActiveRecord::AssociationTypeMismatch) { companies(:first_firm).account = 1 }
137
+ assert_raises(ActiveRecord::AssociationTypeMismatch) { companies(:first_firm).account = Project.find(1) }
138
+ end
139
+
140
+ def test_natural_assignment
141
+ apple = Firm.create("name" => "Apple")
142
+ citibank = Account.create("credit_limit" => 10)
143
+ apple.account = citibank
144
+ assert_equal apple.id, citibank.firm_id
145
+ end
146
+
147
+ def test_natural_assignment_to_nil
148
+ old_account_id = companies(:first_firm).account.id
149
+ companies(:first_firm).account = nil
150
+ companies(:first_firm).save
151
+ assert_nil companies(:first_firm).account
152
+ # account is dependent, therefore is destroyed when reference to owner is lost
153
+ assert_raises(ActiveRecord::RecordNotFound) { Account.find(old_account_id) }
154
+ end
155
+
156
+ def test_assignment_without_replacement
157
+ apple = Firm.create("name" => "Apple")
158
+ citibank = Account.create("credit_limit" => 10)
159
+ apple.account = citibank
160
+ assert_equal apple.id, citibank.firm_id
161
+
162
+ hsbc = apple.build_account({ :credit_limit => 20}, false)
163
+ assert_equal apple.id, hsbc.firm_id
164
+ hsbc.save
165
+ assert_equal apple.id, citibank.firm_id
166
+
167
+ nykredit = apple.create_account({ :credit_limit => 30}, false)
168
+ assert_equal apple.id, nykredit.firm_id
169
+ assert_equal apple.id, citibank.firm_id
170
+ assert_equal apple.id, hsbc.firm_id
171
+ end
172
+
173
+ def test_assignment_without_replacement_on_create
174
+ apple = Firm.create("name" => "Apple")
175
+ citibank = Account.create("credit_limit" => 10)
176
+ apple.account = citibank
177
+ assert_equal apple.id, citibank.firm_id
178
+
179
+ hsbc = apple.create_account({:credit_limit => 10}, false)
180
+ assert_equal apple.id, hsbc.firm_id
181
+ hsbc.save
182
+ assert_equal apple.id, citibank.firm_id
183
+ end
184
+
185
+ def test_dependence
186
+ num_accounts = Account.count
187
+
188
+ firm = Firm.find(1)
189
+ assert !firm.account.nil?
190
+ account_id = firm.account.id
191
+ assert_equal [], Account.destroyed_account_ids[firm.id]
192
+
193
+ firm.destroy
194
+ assert_equal num_accounts - 1, Account.count
195
+ assert_equal [account_id], Account.destroyed_account_ids[firm.id]
196
+ end
197
+
198
+ def test_deprecated_exclusive_dependence
199
+ assert_deprecated(/:exclusively_dependent.*:dependent => :delete_all/) do
200
+ Firm.has_many :deprecated_exclusively_dependent_clients, :class_name => 'Client', :exclusively_dependent => true
201
+ end
202
+ end
203
+
204
+ def test_exclusive_dependence
205
+ num_accounts = Account.count
206
+
207
+ firm = ExclusivelyDependentFirm.find(9)
208
+ assert !firm.account.nil?
209
+ account_id = firm.account.id
210
+ assert_equal [], Account.destroyed_account_ids[firm.id]
211
+
212
+ firm.destroy
213
+ assert_equal num_accounts - 1, Account.count
214
+ assert_equal [], Account.destroyed_account_ids[firm.id]
215
+ end
216
+
217
+ def test_dependence_with_nil_associate
218
+ firm = DependentFirm.new(:name => 'nullify')
219
+ firm.save!
220
+ assert_nothing_raised { firm.destroy }
221
+ end
222
+
223
+ def test_succesful_build_association
224
+ firm = Firm.new("name" => "GlobalMegaCorp")
225
+ firm.save
226
+
227
+ account = firm.build_account("credit_limit" => 1000)
228
+ assert account.save
229
+ assert_equal account, firm.account
230
+ end
231
+
232
+ def test_failing_build_association
233
+ firm = Firm.new("name" => "GlobalMegaCorp")
234
+ firm.save
235
+
236
+ account = firm.build_account
237
+ assert !account.save
238
+ assert_equal "can't be empty", account.errors.on("credit_limit")
239
+ end
240
+
241
+ def test_build_association_twice_without_saving_affects_nothing
242
+ count_of_account = Account.count
243
+ firm = Firm.find(:first)
244
+ account1 = firm.build_account("credit_limit" => 1000)
245
+ account2 = firm.build_account("credit_limit" => 2000)
246
+
247
+ assert_equal count_of_account, Account.count
248
+ end
249
+
250
+ def test_create_association
251
+ firm = Firm.new("name" => "GlobalMegaCorp")
252
+ firm.save
253
+ assert_equal firm.create_account("credit_limit" => 1000), firm.account
254
+ end
255
+
256
+ def test_build
257
+ firm = Firm.new("name" => "GlobalMegaCorp")
258
+ firm.save
259
+
260
+ firm.account = account = Account.new("credit_limit" => 1000)
261
+ assert_equal account, firm.account
262
+ assert account.save
263
+ assert_equal account, firm.account
264
+ end
265
+
266
+ def test_build_before_child_saved
267
+ firm = Firm.find(1)
268
+
269
+ account = firm.account.build("credit_limit" => 1000)
270
+ assert_equal account, firm.account
271
+ assert account.new_record?
272
+ assert firm.save
273
+ assert_equal account, firm.account
274
+ assert !account.new_record?
275
+ end
276
+
277
+ def test_build_before_either_saved
278
+ firm = Firm.new("name" => "GlobalMegaCorp")
279
+
280
+ firm.account = account = Account.new("credit_limit" => 1000)
281
+ assert_equal account, firm.account
282
+ assert account.new_record?
283
+ assert firm.save
284
+ assert_equal account, firm.account
285
+ assert !account.new_record?
286
+ end
287
+
288
+ def test_failing_build_association
289
+ firm = Firm.new("name" => "GlobalMegaCorp")
290
+ firm.save
291
+
292
+ firm.account = account = Account.new
293
+ assert_equal account, firm.account
294
+ assert !account.save
295
+ assert_equal account, firm.account
296
+ assert_equal "can't be empty", account.errors.on("credit_limit")
297
+ end
298
+
299
+ def test_create
300
+ firm = Firm.new("name" => "GlobalMegaCorp")
301
+ firm.save
302
+ firm.account = account = Account.create("credit_limit" => 1000)
303
+ assert_equal account, firm.account
304
+ end
305
+
306
+ def test_create_before_save
307
+ firm = Firm.new("name" => "GlobalMegaCorp")
308
+ firm.account = account = Account.create("credit_limit" => 1000)
309
+ assert_equal account, firm.account
310
+ end
311
+
312
+ def test_dependence_with_missing_association
313
+ Account.destroy_all
314
+ firm = Firm.find(1)
315
+ assert firm.account.nil?
316
+ firm.destroy
317
+ end
318
+
319
+ def test_assignment_before_parent_saved
320
+ firm = Firm.new("name" => "GlobalMegaCorp")
321
+ firm.account = a = Account.find(1)
322
+ assert firm.new_record?
323
+ assert_equal a, firm.account
324
+ assert firm.save
325
+ assert_equal a, firm.account
326
+ assert_equal a, firm.account(true)
327
+ end
328
+
329
+ def test_finding_with_interpolated_condition
330
+ firm = Firm.find(:first)
331
+ superior = firm.clients.create(:name => 'SuperiorCo')
332
+ superior.rating = 10
333
+ superior.save
334
+ assert_equal 10, firm.clients_with_interpolated_conditions.first.rating
335
+ end
336
+
337
+ def test_assignment_before_child_saved
338
+ firm = Firm.find(1)
339
+ firm.account = a = Account.new("credit_limit" => 1000)
340
+ assert !a.new_record?
341
+ assert_equal a, firm.account
342
+ assert_equal a, firm.account
343
+ assert_equal a, firm.account(true)
344
+ end
345
+
346
+ def test_assignment_before_either_saved
347
+ firm = Firm.new("name" => "GlobalMegaCorp")
348
+ firm.account = a = Account.new("credit_limit" => 1000)
349
+ assert firm.new_record?
350
+ assert a.new_record?
351
+ assert_equal a, firm.account
352
+ assert firm.save
353
+ assert !firm.new_record?
354
+ assert !a.new_record?
355
+ assert_equal a, firm.account
356
+ assert_equal a, firm.account(true)
357
+ end
358
+
359
+ def test_not_resaved_when_unchanged
360
+ firm = Firm.find(:first, :include => :account)
361
+ assert_queries(1) { firm.save! }
362
+
363
+ firm = Firm.find(:first)
364
+ firm.account = Account.find(:first)
365
+ assert_queries(1) { firm.save! }
366
+
367
+ firm = Firm.find(:first).clone
368
+ firm.account = Account.find(:first)
369
+ assert_queries(2) { firm.save! }
370
+
371
+ firm = Firm.find(:first).clone
372
+ firm.account = Account.find(:first).clone
373
+ assert_queries(2) { firm.save! }
374
+ end
375
+
376
+ def test_save_still_works_after_accessing_nil_has_one
377
+ jp = Company.new :name => 'Jaded Pixel'
378
+ jp.dummy_account.nil?
379
+
380
+ assert_nothing_raised do
381
+ jp.save!
382
+ end
383
+ end
384
+
385
+ def test_deprecated_inferred_foreign_key
386
+ assert_not_deprecated { Company.belongs_to :firm }
387
+ assert_not_deprecated { Company.belongs_to :client, :foreign_key => "firm_id" }
388
+ assert_not_deprecated { Company.belongs_to :firm, :class_name => "Firm", :foreign_key => "client_of" }
389
+ assert_deprecated("inferred foreign_key name") { Company.belongs_to :client, :class_name => "Firm" }
390
+ end
391
+
392
+ end
393
+
394
+
395
+ class HasManyAssociationsTest < Test::Unit::TestCase
396
+ fixtures :accounts, :companies, :developers, :projects,
397
+ :developers_projects, :topics
398
+
399
+ def setup
400
+ Client.destroyed_client_ids.clear
401
+ end
402
+
403
+ def force_signal37_to_load_all_clients_of_firm
404
+ companies(:first_firm).clients_of_firm.each {|f| }
405
+ end
406
+
407
+ def test_counting_with_counter_sql
408
+ assert_equal 2, Firm.find(:first).clients.count
409
+ end
410
+
411
+ def test_counting
412
+ assert_equal 2, Firm.find(:first).plain_clients.count
413
+ end
414
+
415
+ def test_counting_with_single_conditions
416
+ assert_deprecated 'count' do
417
+ assert_equal 2, Firm.find(:first).plain_clients.count('1=1')
418
+ end
419
+ end
420
+
421
+ def test_counting_with_single_hash
422
+ assert_equal 2, Firm.find(:first).plain_clients.count(:conditions => '1=1')
423
+ end
424
+
425
+ def test_counting_with_column_name_and_hash
426
+ assert_equal 2, Firm.find(:first).plain_clients.count(:all, :conditions => '1=1')
427
+ end
428
+
429
+ def test_finding
430
+ assert_equal 2, Firm.find(:first).clients.length
431
+ end
432
+
433
+ def test_find_many_with_merged_options
434
+ assert_equal 1, companies(:first_firm).limited_clients.size
435
+ assert_equal 1, companies(:first_firm).limited_clients.find(:all).size
436
+ assert_equal 2, companies(:first_firm).limited_clients.find(:all, :limit => nil).size
437
+ end
438
+
439
+ def test_triple_equality
440
+ assert !(Array === Firm.find(:first).clients)
441
+ assert Firm.find(:first).clients === Array
442
+ end
443
+
444
+ def test_finding_default_orders
445
+ assert_equal "Summit", Firm.find(:first).clients.first.name
446
+ end
447
+
448
+ def test_finding_with_different_class_name_and_order
449
+ assert_equal "Microsoft", Firm.find(:first).clients_sorted_desc.first.name
450
+ end
451
+
452
+ def test_finding_with_foreign_key
453
+ assert_equal "Microsoft", Firm.find(:first).clients_of_firm.first.name
454
+ end
455
+
456
+ def test_finding_with_condition
457
+ assert_equal "Microsoft", Firm.find(:first).clients_like_ms.first.name
458
+ end
459
+
460
+ def test_finding_with_condition_hash
461
+ assert_equal "Microsoft", Firm.find(:first).clients_like_ms_with_hash_conditions.first.name
462
+ end
463
+
464
+ def test_finding_using_sql
465
+ firm = Firm.find(:first)
466
+ first_client = firm.clients_using_sql.first
467
+ assert_not_nil first_client
468
+ assert_equal "Microsoft", first_client.name
469
+ assert_equal 1, firm.clients_using_sql.size
470
+ assert_equal 1, Firm.find(:first).clients_using_sql.size
471
+ end
472
+
473
+ def test_counting_using_sql
474
+ assert_equal 1, Firm.find(:first).clients_using_counter_sql.size
475
+ assert_equal 0, Firm.find(:first).clients_using_zero_counter_sql.size
476
+ end
477
+
478
+ def test_counting_non_existant_items_using_sql
479
+ assert_equal 0, Firm.find(:first).no_clients_using_counter_sql.size
480
+ end
481
+
482
+ def test_belongs_to_sanity
483
+ c = Client.new
484
+ assert_nil c.firm
485
+
486
+ if c.firm
487
+ assert false, "belongs_to failed if check"
488
+ end
489
+
490
+ unless c.firm
491
+ else
492
+ assert false, "belongs_to failed unless check"
493
+ end
494
+ end
495
+
496
+ def test_find_ids
497
+ firm = Firm.find(:first)
498
+
499
+ assert_raises(ActiveRecord::RecordNotFound) { firm.clients.find }
500
+
501
+ client = firm.clients.find(2)
502
+ assert_kind_of Client, client
503
+
504
+ client_ary = firm.clients.find([2])
505
+ assert_kind_of Array, client_ary
506
+ assert_equal client, client_ary.first
507
+
508
+ client_ary = firm.clients.find(2, 3)
509
+ assert_kind_of Array, client_ary
510
+ assert_equal 2, client_ary.size
511
+ assert_equal client, client_ary.first
512
+
513
+ assert_raises(ActiveRecord::RecordNotFound) { firm.clients.find(2, 99) }
514
+ end
515
+
516
+ def test_find_all
517
+ assert_deprecated 'find_all' do
518
+ firm = Firm.find_first
519
+ assert_equal firm.clients, firm.clients.find_all
520
+ assert_equal 2, firm.clients.find(:all, :conditions => "#{QUOTED_TYPE} = 'Client'").length
521
+ assert_equal 1, firm.clients.find(:all, :conditions => "name = 'Summit'").length
522
+ end
523
+ end
524
+
525
+ def test_find_all_sanitized
526
+ assert_deprecated 'find_all' do
527
+ firm = Firm.find_first
528
+ assert_equal firm.clients.find_all("name = 'Summit'"), firm.clients.find_all(["name = '%s'", "Summit"])
529
+ summit = firm.clients.find(:all, :conditions => "name = 'Summit'")
530
+ assert_equal summit, firm.clients.find(:all, :conditions => ["name = ?", "Summit"])
531
+ assert_equal summit, firm.clients.find(:all, :conditions => ["name = :name", { :name => "Summit" }])
532
+ end
533
+ end
534
+
535
+ def test_find_first
536
+ assert_deprecated 'find_first' do
537
+ firm = Firm.find_first
538
+ client2 = Client.find(2)
539
+ assert_equal firm.clients.first, firm.clients.find_first
540
+ assert_equal client2, firm.clients.find_first("#{QUOTED_TYPE} = 'Client'")
541
+ assert_equal client2, firm.clients.find(:first, :conditions => "#{QUOTED_TYPE} = 'Client'")
542
+ end
543
+ end
544
+
545
+ def test_find_first_sanitized
546
+ assert_deprecated 'find_first' do
547
+ firm = Firm.find_first
548
+ client2 = Client.find(2)
549
+ assert_deprecated(/find_first/) do
550
+ assert_equal client2, firm.clients.find_first(["#{QUOTED_TYPE} = ?", "Client"])
551
+ end
552
+ assert_equal client2, firm.clients.find(:first, :conditions => ["#{QUOTED_TYPE} = ?", 'Client'])
553
+ assert_equal client2, firm.clients.find(:first, :conditions => ["#{QUOTED_TYPE} = :type", { :type => 'Client' }])
554
+ end
555
+ end
556
+
557
+ def test_find_in_collection
558
+ assert_equal Client.find(2).name, companies(:first_firm).clients.find(2).name
559
+ assert_raises(ActiveRecord::RecordNotFound) { companies(:first_firm).clients.find(6) }
560
+ end
561
+
562
+ def test_find_grouped
563
+ all_clients_of_firm1 = Client.find(:all, :conditions => "firm_id = 1")
564
+ grouped_clients_of_firm1 = Client.find(:all, :conditions => "firm_id = 1", :group => "firm_id", :select => 'firm_id, count(id) as clients_count')
565
+ assert_equal 2, all_clients_of_firm1.size
566
+ assert_equal 1, grouped_clients_of_firm1.size
567
+ end
568
+
569
+ def test_adding
570
+ force_signal37_to_load_all_clients_of_firm
571
+ natural = Client.new("name" => "Natural Company")
572
+ companies(:first_firm).clients_of_firm << natural
573
+ assert_equal 2, companies(:first_firm).clients_of_firm.size # checking via the collection
574
+ assert_equal 2, companies(:first_firm).clients_of_firm(true).size # checking using the db
575
+ assert_equal natural, companies(:first_firm).clients_of_firm.last
576
+ end
577
+
578
+ def test_adding_using_create
579
+ first_firm = companies(:first_firm)
580
+ assert_equal 2, first_firm.plain_clients.size
581
+ natural = first_firm.plain_clients.create(:name => "Natural Company")
582
+ assert_equal 3, first_firm.plain_clients.length
583
+ assert_equal 3, first_firm.plain_clients.size
584
+ end
585
+
586
+ def test_adding_a_mismatch_class
587
+ assert_raises(ActiveRecord::AssociationTypeMismatch) { companies(:first_firm).clients_of_firm << nil }
588
+ assert_raises(ActiveRecord::AssociationTypeMismatch) { companies(:first_firm).clients_of_firm << 1 }
589
+ assert_raises(ActiveRecord::AssociationTypeMismatch) { companies(:first_firm).clients_of_firm << Topic.find(1) }
590
+ end
591
+
592
+ def test_adding_a_collection
593
+ force_signal37_to_load_all_clients_of_firm
594
+ companies(:first_firm).clients_of_firm.concat([Client.new("name" => "Natural Company"), Client.new("name" => "Apple")])
595
+ assert_equal 3, companies(:first_firm).clients_of_firm.size
596
+ assert_equal 3, companies(:first_firm).clients_of_firm(true).size
597
+ end
598
+
599
+ def test_adding_before_save
600
+ no_of_firms = Firm.count
601
+ no_of_clients = Client.count
602
+ new_firm = Firm.new("name" => "A New Firm, Inc")
603
+ new_firm.clients_of_firm.push Client.new("name" => "Natural Company")
604
+ new_firm.clients_of_firm << (c = Client.new("name" => "Apple"))
605
+ assert new_firm.new_record?
606
+ assert c.new_record?
607
+ assert_equal 2, new_firm.clients_of_firm.size
608
+ assert_equal no_of_firms, Firm.count # Firm was not saved to database.
609
+ assert_equal no_of_clients, Client.count # Clients were not saved to database.
610
+ assert new_firm.save
611
+ assert !new_firm.new_record?
612
+ assert !c.new_record?
613
+ assert_equal new_firm, c.firm
614
+ assert_equal no_of_firms+1, Firm.count # Firm was saved to database.
615
+ assert_equal no_of_clients+2, Client.count # Clients were saved to database.
616
+ assert_equal 2, new_firm.clients_of_firm.size
617
+ assert_equal 2, new_firm.clients_of_firm(true).size
618
+ end
619
+
620
+ def test_invalid_adding
621
+ firm = Firm.find(1)
622
+ assert !(firm.clients_of_firm << c = Client.new)
623
+ assert c.new_record?
624
+ assert !firm.valid?
625
+ assert !firm.save
626
+ assert c.new_record?
627
+ end
628
+
629
+ def test_invalid_adding_before_save
630
+ no_of_firms = Firm.count
631
+ no_of_clients = Client.count
632
+ new_firm = Firm.new("name" => "A New Firm, Inc")
633
+ new_firm.clients_of_firm.concat([c = Client.new, Client.new("name" => "Apple")])
634
+ assert c.new_record?
635
+ assert !c.valid?
636
+ assert !new_firm.valid?
637
+ assert !new_firm.save
638
+ assert c.new_record?
639
+ assert new_firm.new_record?
640
+ end
641
+
642
+ def test_build
643
+ new_client = companies(:first_firm).clients_of_firm.build("name" => "Another Client")
644
+ assert_equal "Another Client", new_client.name
645
+ assert new_client.new_record?
646
+ assert_equal new_client, companies(:first_firm).clients_of_firm.last
647
+ assert companies(:first_firm).save
648
+ assert !new_client.new_record?
649
+ assert_equal 2, companies(:first_firm).clients_of_firm(true).size
650
+ end
651
+
652
+ def test_build_many
653
+ new_clients = companies(:first_firm).clients_of_firm.build([{"name" => "Another Client"}, {"name" => "Another Client II"}])
654
+ assert_equal 2, new_clients.size
655
+
656
+ assert companies(:first_firm).save
657
+ assert_equal 3, companies(:first_firm).clients_of_firm(true).size
658
+ end
659
+
660
+ def test_build_without_loading_association
661
+ first_topic = topics(:first)
662
+ Reply.column_names
663
+
664
+ assert_equal 1, first_topic.replies.length
665
+
666
+ assert_no_queries do
667
+ first_topic.replies.build(:title => "Not saved", :content => "Superstars")
668
+ assert_equal 2, first_topic.replies.size
669
+ end
670
+
671
+ assert_equal 2, first_topic.replies.to_ary.size
672
+ end
673
+
674
+ def test_create_without_loading_association
675
+ first_firm = companies(:first_firm)
676
+ Firm.column_names
677
+ Client.column_names
678
+
679
+ assert_equal 1, first_firm.clients_of_firm.size
680
+ first_firm.clients_of_firm.reset
681
+
682
+ assert_queries(1) do
683
+ first_firm.clients_of_firm.create(:name => "Superstars")
684
+ end
685
+
686
+ assert_equal 2, first_firm.clients_of_firm.size
687
+ end
688
+
689
+ def test_invalid_build
690
+ new_client = companies(:first_firm).clients_of_firm.build
691
+ assert new_client.new_record?
692
+ assert !new_client.valid?
693
+ assert_equal new_client, companies(:first_firm).clients_of_firm.last
694
+ assert !companies(:first_firm).save
695
+ assert new_client.new_record?
696
+ assert_equal 1, companies(:first_firm).clients_of_firm(true).size
697
+ end
698
+
699
+ def test_create
700
+ force_signal37_to_load_all_clients_of_firm
701
+ new_client = companies(:first_firm).clients_of_firm.create("name" => "Another Client")
702
+ assert !new_client.new_record?
703
+ assert_equal new_client, companies(:first_firm).clients_of_firm.last
704
+ assert_equal new_client, companies(:first_firm).clients_of_firm(true).last
705
+ end
706
+
707
+ def test_create_many
708
+ companies(:first_firm).clients_of_firm.create([{"name" => "Another Client"}, {"name" => "Another Client II"}])
709
+ assert_equal 3, companies(:first_firm).clients_of_firm(true).size
710
+ end
711
+
712
+ def test_find_or_create
713
+ number_of_clients = companies(:first_firm).clients.size
714
+ the_client = companies(:first_firm).clients.find_or_create_by_name("Yet another client")
715
+ assert_equal number_of_clients + 1, companies(:first_firm, :refresh).clients.size
716
+ assert_equal the_client, companies(:first_firm).clients.find_or_create_by_name("Yet another client")
717
+ assert_equal number_of_clients + 1, companies(:first_firm, :refresh).clients.size
718
+ end
719
+
720
+ def test_deleting
721
+ force_signal37_to_load_all_clients_of_firm
722
+ companies(:first_firm).clients_of_firm.delete(companies(:first_firm).clients_of_firm.first)
723
+ assert_equal 0, companies(:first_firm).clients_of_firm.size
724
+ assert_equal 0, companies(:first_firm).clients_of_firm(true).size
725
+ end
726
+
727
+ def test_deleting_before_save
728
+ new_firm = Firm.new("name" => "A New Firm, Inc.")
729
+ new_client = new_firm.clients_of_firm.build("name" => "Another Client")
730
+ assert_equal 1, new_firm.clients_of_firm.size
731
+ new_firm.clients_of_firm.delete(new_client)
732
+ assert_equal 0, new_firm.clients_of_firm.size
733
+ end
734
+
735
+ def test_deleting_a_collection
736
+ force_signal37_to_load_all_clients_of_firm
737
+ companies(:first_firm).clients_of_firm.create("name" => "Another Client")
738
+ assert_equal 2, companies(:first_firm).clients_of_firm.size
739
+ companies(:first_firm).clients_of_firm.delete([companies(:first_firm).clients_of_firm[0], companies(:first_firm).clients_of_firm[1]])
740
+ assert_equal 0, companies(:first_firm).clients_of_firm.size
741
+ assert_equal 0, companies(:first_firm).clients_of_firm(true).size
742
+ end
743
+
744
+ def test_delete_all
745
+ force_signal37_to_load_all_clients_of_firm
746
+ companies(:first_firm).clients_of_firm.create("name" => "Another Client")
747
+ assert_equal 2, companies(:first_firm).clients_of_firm.size
748
+ companies(:first_firm).clients_of_firm.delete_all
749
+ assert_equal 0, companies(:first_firm).clients_of_firm.size
750
+ assert_equal 0, companies(:first_firm).clients_of_firm(true).size
751
+ end
752
+
753
+ def test_delete_all_with_not_yet_loaded_association_collection
754
+ force_signal37_to_load_all_clients_of_firm
755
+ companies(:first_firm).clients_of_firm.create("name" => "Another Client")
756
+ assert_equal 2, companies(:first_firm).clients_of_firm.size
757
+ companies(:first_firm).clients_of_firm.reset
758
+ companies(:first_firm).clients_of_firm.delete_all
759
+ assert_equal 0, companies(:first_firm).clients_of_firm.size
760
+ assert_equal 0, companies(:first_firm).clients_of_firm(true).size
761
+ end
762
+
763
+ def test_clearing_an_association_collection
764
+ firm = companies(:first_firm)
765
+ client_id = firm.clients_of_firm.first.id
766
+ assert_equal 1, firm.clients_of_firm.size
767
+
768
+ firm.clients_of_firm.clear
769
+
770
+ assert_equal 0, firm.clients_of_firm.size
771
+ assert_equal 0, firm.clients_of_firm(true).size
772
+ assert_equal [], Client.destroyed_client_ids[firm.id]
773
+
774
+ # Should not be destroyed since the association is not dependent.
775
+ assert_nothing_raised do
776
+ assert Client.find(client_id).firm.nil?
777
+ end
778
+ end
779
+
780
+ def test_clearing_a_dependent_association_collection
781
+ firm = companies(:first_firm)
782
+ client_id = firm.dependent_clients_of_firm.first.id
783
+ assert_equal 1, firm.dependent_clients_of_firm.size
784
+
785
+ # :dependent means destroy is called on each client
786
+ firm.dependent_clients_of_firm.clear
787
+
788
+ assert_equal 0, firm.dependent_clients_of_firm.size
789
+ assert_equal 0, firm.dependent_clients_of_firm(true).size
790
+ assert_equal [client_id], Client.destroyed_client_ids[firm.id]
791
+
792
+ # Should be destroyed since the association is dependent.
793
+ assert Client.find_by_id(client_id).nil?
794
+ end
795
+
796
+ def test_clearing_an_exclusively_dependent_association_collection
797
+ firm = companies(:first_firm)
798
+ client_id = firm.exclusively_dependent_clients_of_firm.first.id
799
+ assert_equal 1, firm.exclusively_dependent_clients_of_firm.size
800
+
801
+ assert_equal [], Client.destroyed_client_ids[firm.id]
802
+
803
+ # :exclusively_dependent means each client is deleted directly from
804
+ # the database without looping through them calling destroy.
805
+ firm.exclusively_dependent_clients_of_firm.clear
806
+
807
+ assert_equal 0, firm.exclusively_dependent_clients_of_firm.size
808
+ assert_equal 0, firm.exclusively_dependent_clients_of_firm(true).size
809
+ assert_equal [3], Client.destroyed_client_ids[firm.id]
810
+
811
+ # Should be destroyed since the association is exclusively dependent.
812
+ assert Client.find_by_id(client_id).nil?
813
+ end
814
+
815
+ def test_clearing_without_initial_access
816
+ firm = companies(:first_firm)
817
+
818
+ firm.clients_of_firm.clear
819
+
820
+ assert_equal 0, firm.clients_of_firm.size
821
+ assert_equal 0, firm.clients_of_firm(true).size
822
+ end
823
+
824
+ def test_deleting_a_item_which_is_not_in_the_collection
825
+ force_signal37_to_load_all_clients_of_firm
826
+ summit = Client.find_by_name('Summit')
827
+ companies(:first_firm).clients_of_firm.delete(summit)
828
+ assert_equal 1, companies(:first_firm).clients_of_firm.size
829
+ assert_equal 1, companies(:first_firm).clients_of_firm(true).size
830
+ assert_equal 2, summit.client_of
831
+ end
832
+
833
+ def test_deleting_type_mismatch
834
+ david = Developer.find(1)
835
+ david.projects.reload
836
+ assert_raises(ActiveRecord::AssociationTypeMismatch) { david.projects.delete(1) }
837
+ end
838
+
839
+ def test_deleting_self_type_mismatch
840
+ david = Developer.find(1)
841
+ david.projects.reload
842
+ assert_raises(ActiveRecord::AssociationTypeMismatch) { david.projects.delete(Project.find(1).developers) }
843
+ end
844
+
845
+ def test_destroy_all
846
+ force_signal37_to_load_all_clients_of_firm
847
+ assert !companies(:first_firm).clients_of_firm.empty?, "37signals has clients after load"
848
+ companies(:first_firm).clients_of_firm.destroy_all
849
+ assert companies(:first_firm).clients_of_firm.empty?, "37signals has no clients after destroy all"
850
+ assert companies(:first_firm).clients_of_firm(true).empty?, "37signals has no clients after destroy all and refresh"
851
+ end
852
+
853
+ def test_dependence
854
+ firm = companies(:first_firm)
855
+ assert_equal 2, firm.clients.size
856
+ firm.destroy
857
+ assert Client.find(:all, :conditions => "firm_id=#{firm.id}").empty?
858
+ end
859
+
860
+ def test_destroy_dependent_when_deleted_from_association
861
+ firm = Firm.find(:first)
862
+ assert_equal 2, firm.clients.size
863
+
864
+ client = firm.clients.first
865
+ firm.clients.delete(client)
866
+
867
+ assert_raise(ActiveRecord::RecordNotFound) { Client.find(client.id) }
868
+ assert_raise(ActiveRecord::RecordNotFound) { firm.clients.find(client.id) }
869
+ assert_equal 1, firm.clients.size
870
+ end
871
+
872
+ def test_three_levels_of_dependence
873
+ topic = Topic.create "title" => "neat and simple"
874
+ reply = topic.replies.create "title" => "neat and simple", "content" => "still digging it"
875
+ silly_reply = reply.replies.create "title" => "neat and simple", "content" => "ain't complaining"
876
+
877
+ assert_nothing_raised { topic.destroy }
878
+ end
879
+
880
+ uses_transaction :test_dependence_with_transaction_support_on_failure
881
+ def test_dependence_with_transaction_support_on_failure
882
+ firm = companies(:first_firm)
883
+ clients = firm.clients
884
+ assert_equal 2, clients.length
885
+ clients.last.instance_eval { def before_destroy() raise "Trigger rollback" end }
886
+
887
+ firm.destroy rescue "do nothing"
888
+
889
+ assert_equal 2, Client.find(:all, :conditions => "firm_id=#{firm.id}").size
890
+ end
891
+
892
+ def test_dependence_on_account
893
+ num_accounts = Account.count
894
+ companies(:first_firm).destroy
895
+ assert_equal num_accounts - 1, Account.count
896
+ end
897
+
898
+ def test_depends_and_nullify
899
+ num_accounts = Account.count
900
+ num_companies = Company.count
901
+
902
+ core = companies(:rails_core)
903
+ assert_equal accounts(:rails_core_account), core.account
904
+ assert_equal [companies(:leetsoft), companies(:jadedpixel)], core.companies
905
+ core.destroy
906
+ assert_nil accounts(:rails_core_account).reload.firm_id
907
+ assert_nil companies(:leetsoft).reload.client_of
908
+ assert_nil companies(:jadedpixel).reload.client_of
909
+
910
+
911
+ assert_equal num_accounts, Account.count
912
+ end
913
+
914
+ def test_included_in_collection
915
+ assert companies(:first_firm).clients.include?(Client.find(2))
916
+ end
917
+
918
+ def test_adding_array_and_collection
919
+ assert_nothing_raised { Firm.find(:first).clients + Firm.find(:all).last.clients }
920
+ end
921
+
922
+ def test_find_all_without_conditions
923
+ firm = companies(:first_firm)
924
+ assert_equal 2, firm.clients.find(:all).length
925
+ end
926
+
927
+ def test_replace_with_less
928
+ firm = Firm.find(:first)
929
+ firm.clients = [companies(:first_client)]
930
+ assert firm.save, "Could not save firm"
931
+ firm.reload
932
+ assert_equal 1, firm.clients.length
933
+ end
934
+
935
+
936
+ def test_replace_with_new
937
+ firm = Firm.find(:first)
938
+ new_client = Client.new("name" => "New Client")
939
+ firm.clients = [companies(:second_client),new_client]
940
+ firm.save
941
+ firm.reload
942
+ assert_equal 2, firm.clients.length
943
+ assert !firm.clients.include?(:first_client)
944
+ end
945
+
946
+ def test_replace_on_new_object
947
+ firm = Firm.new("name" => "New Firm")
948
+ firm.clients = [companies(:second_client), Client.new("name" => "New Client")]
949
+ assert firm.save
950
+ firm.reload
951
+ assert_equal 2, firm.clients.length
952
+ assert firm.clients.include?(Client.find_by_name("New Client"))
953
+ end
954
+
955
+ def test_get_ids
956
+ assert_equal [companies(:first_client).id, companies(:second_client).id], companies(:first_firm).client_ids
957
+ end
958
+
959
+ def test_assign_ids
960
+ firm = Firm.new("name" => "Apple")
961
+ firm.client_ids = [companies(:first_client).id, companies(:second_client).id]
962
+ firm.save
963
+ firm.reload
964
+ assert_equal 2, firm.clients.length
965
+ assert firm.clients.include?(companies(:second_client))
966
+ end
967
+
968
+ def test_assign_ids_ignoring_blanks
969
+ firm = Firm.new("name" => "Apple")
970
+ firm.client_ids = [companies(:first_client).id, nil, companies(:second_client).id, '']
971
+ firm.save
972
+ firm.reload
973
+ assert_equal 2, firm.clients.length
974
+ assert firm.clients.include?(companies(:second_client))
975
+ end
976
+
977
+ end
978
+
979
+ class BelongsToAssociationsTest < Test::Unit::TestCase
980
+ fixtures :accounts, :companies, :developers, :projects, :topics,
981
+ :developers_projects, :computers, :authors, :posts
982
+
983
+ def test_belongs_to
984
+ Client.find(3).firm.name
985
+ assert_equal companies(:first_firm).name, Client.find(3).firm.name
986
+ assert !Client.find(3).firm.nil?, "Microsoft should have a firm"
987
+ end
988
+
989
+ def test_proxy_assignment
990
+ account = Account.find(1)
991
+ assert_nothing_raised { account.firm = account.firm }
992
+ end
993
+
994
+ def test_triple_equality
995
+ assert Client.find(3).firm === Firm
996
+ assert Firm === Client.find(3).firm
997
+ end
998
+
999
+ def test_type_mismatch
1000
+ assert_raise(ActiveRecord::AssociationTypeMismatch) { Account.find(1).firm = 1 }
1001
+ assert_raise(ActiveRecord::AssociationTypeMismatch) { Account.find(1).firm = Project.find(1) }
1002
+ end
1003
+
1004
+ def test_natural_assignment
1005
+ apple = Firm.create("name" => "Apple")
1006
+ citibank = Account.create("credit_limit" => 10)
1007
+ citibank.firm = apple
1008
+ assert_equal apple.id, citibank.firm_id
1009
+ end
1010
+
1011
+ def test_creating_the_belonging_object
1012
+ citibank = Account.create("credit_limit" => 10)
1013
+ apple = citibank.create_firm("name" => "Apple")
1014
+ assert_equal apple, citibank.firm
1015
+ citibank.save
1016
+ citibank.reload
1017
+ assert_equal apple, citibank.firm
1018
+ end
1019
+
1020
+ def test_building_the_belonging_object
1021
+ citibank = Account.create("credit_limit" => 10)
1022
+ apple = citibank.build_firm("name" => "Apple")
1023
+ citibank.save
1024
+ assert_equal apple.id, citibank.firm_id
1025
+ end
1026
+
1027
+ def test_natural_assignment_to_nil
1028
+ client = Client.find(3)
1029
+ client.firm = nil
1030
+ client.save
1031
+ assert_nil client.firm(true)
1032
+ assert_nil client.client_of
1033
+ end
1034
+
1035
+ def test_with_different_class_name
1036
+ assert_equal Company.find(1).name, Company.find(3).firm_with_other_name.name
1037
+ assert_not_nil Company.find(3).firm_with_other_name, "Microsoft should have a firm"
1038
+ end
1039
+
1040
+ def test_with_condition
1041
+ assert_equal Company.find(1).name, Company.find(3).firm_with_condition.name
1042
+ assert_not_nil Company.find(3).firm_with_condition, "Microsoft should have a firm"
1043
+ end
1044
+
1045
+ def test_belongs_to_counter
1046
+ debate = Topic.create("title" => "debate")
1047
+ assert_equal 0, debate.send(:read_attribute, "replies_count"), "No replies yet"
1048
+
1049
+ trash = debate.replies.create("title" => "blah!", "content" => "world around!")
1050
+ assert_equal 1, Topic.find(debate.id).send(:read_attribute, "replies_count"), "First reply created"
1051
+
1052
+ trash.destroy
1053
+ assert_equal 0, Topic.find(debate.id).send(:read_attribute, "replies_count"), "First reply deleted"
1054
+ end
1055
+
1056
+ def test_belongs_to_counter_with_reassigning
1057
+ t1 = Topic.create("title" => "t1")
1058
+ t2 = Topic.create("title" => "t2")
1059
+ r1 = Reply.new("title" => "r1", "content" => "r1")
1060
+ r1.topic = t1
1061
+
1062
+ assert r1.save
1063
+ assert_equal 1, Topic.find(t1.id).replies.size
1064
+ assert_equal 0, Topic.find(t2.id).replies.size
1065
+
1066
+ r1.topic = Topic.find(t2.id)
1067
+
1068
+ assert r1.save
1069
+ assert_equal 0, Topic.find(t1.id).replies.size
1070
+ assert_equal 1, Topic.find(t2.id).replies.size
1071
+
1072
+ r1.topic = nil
1073
+
1074
+ assert_equal 0, Topic.find(t1.id).replies.size
1075
+ assert_equal 0, Topic.find(t2.id).replies.size
1076
+
1077
+ r1.topic = t1
1078
+
1079
+ assert_equal 1, Topic.find(t1.id).replies.size
1080
+ assert_equal 0, Topic.find(t2.id).replies.size
1081
+
1082
+ r1.destroy
1083
+
1084
+ assert_equal 0, Topic.find(t1.id).replies.size
1085
+ assert_equal 0, Topic.find(t2.id).replies.size
1086
+ end
1087
+
1088
+ def test_assignment_before_parent_saved
1089
+ client = Client.find(:first)
1090
+ apple = Firm.new("name" => "Apple")
1091
+ client.firm = apple
1092
+ assert_equal apple, client.firm
1093
+ assert apple.new_record?
1094
+ assert client.save
1095
+ assert apple.save
1096
+ assert !apple.new_record?
1097
+ assert_equal apple, client.firm
1098
+ assert_equal apple, client.firm(true)
1099
+ end
1100
+
1101
+ def test_assignment_before_child_saved
1102
+ final_cut = Client.new("name" => "Final Cut")
1103
+ firm = Firm.find(1)
1104
+ final_cut.firm = firm
1105
+ assert final_cut.new_record?
1106
+ assert final_cut.save
1107
+ assert !final_cut.new_record?
1108
+ assert !firm.new_record?
1109
+ assert_equal firm, final_cut.firm
1110
+ assert_equal firm, final_cut.firm(true)
1111
+ end
1112
+
1113
+ def test_assignment_before_either_saved
1114
+ final_cut = Client.new("name" => "Final Cut")
1115
+ apple = Firm.new("name" => "Apple")
1116
+ final_cut.firm = apple
1117
+ assert final_cut.new_record?
1118
+ assert apple.new_record?
1119
+ assert final_cut.save
1120
+ assert !final_cut.new_record?
1121
+ assert !apple.new_record?
1122
+ assert_equal apple, final_cut.firm
1123
+ assert_equal apple, final_cut.firm(true)
1124
+ end
1125
+
1126
+ def test_new_record_with_foreign_key_but_no_object
1127
+ c = Client.new("firm_id" => 1)
1128
+ assert_equal Firm.find(:first), c.firm_with_basic_id
1129
+ end
1130
+
1131
+ def test_forgetting_the_load_when_foreign_key_enters_late
1132
+ c = Client.new
1133
+ assert_nil c.firm_with_basic_id
1134
+
1135
+ c.firm_id = 1
1136
+ assert_equal Firm.find(:first), c.firm_with_basic_id
1137
+ end
1138
+
1139
+ def test_field_name_same_as_foreign_key
1140
+ computer = Computer.find(1)
1141
+ assert_not_nil computer.developer, ":foreign key == attribute didn't lock up" # '
1142
+ end
1143
+
1144
+ def test_counter_cache
1145
+ topic = Topic.create :title => "Zoom-zoom-zoom"
1146
+ assert_equal 0, topic[:replies_count]
1147
+
1148
+ reply = Reply.create(:title => "re: zoom", :content => "speedy quick!")
1149
+ reply.topic = topic
1150
+
1151
+ assert_equal 1, topic.reload[:replies_count]
1152
+ assert_equal 1, topic.replies.size
1153
+
1154
+ topic[:replies_count] = 15
1155
+ assert_equal 15, topic.replies.size
1156
+ end
1157
+
1158
+ def test_custom_counter_cache
1159
+ reply = Reply.create(:title => "re: zoom", :content => "speedy quick!")
1160
+ assert_equal 0, reply[:replies_count]
1161
+
1162
+ silly = SillyReply.create(:title => "gaga", :content => "boo-boo")
1163
+ silly.reply = reply
1164
+
1165
+ assert_equal 1, reply.reload[:replies_count]
1166
+ assert_equal 1, reply.replies.size
1167
+
1168
+ reply[:replies_count] = 17
1169
+ assert_equal 17, reply.replies.size
1170
+ end
1171
+
1172
+ def test_store_two_association_with_one_save
1173
+ num_orders = Order.count
1174
+ num_customers = Customer.count
1175
+ order = Order.new
1176
+
1177
+ customer1 = order.billing = Customer.new
1178
+ customer2 = order.shipping = Customer.new
1179
+ assert order.save
1180
+ assert_equal customer1, order.billing
1181
+ assert_equal customer2, order.shipping
1182
+
1183
+ order.reload
1184
+
1185
+ assert_equal customer1, order.billing
1186
+ assert_equal customer2, order.shipping
1187
+
1188
+ assert_equal num_orders +1, Order.count
1189
+ assert_equal num_customers +2, Customer.count
1190
+ end
1191
+
1192
+
1193
+ def test_store_association_in_two_relations_with_one_save
1194
+ num_orders = Order.count
1195
+ num_customers = Customer.count
1196
+ order = Order.new
1197
+
1198
+ customer = order.billing = order.shipping = Customer.new
1199
+ assert order.save
1200
+ assert_equal customer, order.billing
1201
+ assert_equal customer, order.shipping
1202
+
1203
+ order.reload
1204
+
1205
+ assert_equal customer, order.billing
1206
+ assert_equal customer, order.shipping
1207
+
1208
+ assert_equal num_orders +1, Order.count
1209
+ assert_equal num_customers +1, Customer.count
1210
+ end
1211
+
1212
+ def test_store_association_in_two_relations_with_one_save_in_existing_object
1213
+ num_orders = Order.count
1214
+ num_customers = Customer.count
1215
+ order = Order.create
1216
+
1217
+ customer = order.billing = order.shipping = Customer.new
1218
+ assert order.save
1219
+ assert_equal customer, order.billing
1220
+ assert_equal customer, order.shipping
1221
+
1222
+ order.reload
1223
+
1224
+ assert_equal customer, order.billing
1225
+ assert_equal customer, order.shipping
1226
+
1227
+ assert_equal num_orders +1, Order.count
1228
+ assert_equal num_customers +1, Customer.count
1229
+ end
1230
+
1231
+ def test_store_association_in_two_relations_with_one_save_in_existing_object_with_values
1232
+ num_orders = Order.count
1233
+ num_customers = Customer.count
1234
+ order = Order.create
1235
+
1236
+ customer = order.billing = order.shipping = Customer.new
1237
+ assert order.save
1238
+ assert_equal customer, order.billing
1239
+ assert_equal customer, order.shipping
1240
+
1241
+ order.reload
1242
+
1243
+ customer = order.billing = order.shipping = Customer.new
1244
+
1245
+ assert order.save
1246
+ order.reload
1247
+
1248
+ assert_equal customer, order.billing
1249
+ assert_equal customer, order.shipping
1250
+
1251
+ assert_equal num_orders +1, Order.count
1252
+ assert_equal num_customers +2, Customer.count
1253
+ end
1254
+
1255
+
1256
+ def test_association_assignment_sticks
1257
+ post = Post.find(:first)
1258
+
1259
+ author1, author2 = Author.find(:all, :limit => 2)
1260
+ assert_not_nil author1
1261
+ assert_not_nil author2
1262
+
1263
+ # make sure the association is loaded
1264
+ post.author
1265
+
1266
+ # set the association by id, directly
1267
+ post.author_id = author2.id
1268
+
1269
+ # save and reload
1270
+ post.save!
1271
+ post.reload
1272
+
1273
+ # the author id of the post should be the id we set
1274
+ assert_equal post.author_id, author2.id
1275
+ end
1276
+
1277
+ end
1278
+
1279
+
1280
+ class ProjectWithAfterCreateHook < ActiveRecord::Base
1281
+ set_table_name 'projects'
1282
+ has_and_belongs_to_many :developers,
1283
+ :class_name => "DeveloperForProjectWithAfterCreateHook",
1284
+ :join_table => "developers_projects",
1285
+ :foreign_key => "project_id",
1286
+ :association_foreign_key => "developer_id"
1287
+
1288
+ after_create :add_david
1289
+
1290
+ def add_david
1291
+ david = DeveloperForProjectWithAfterCreateHook.find_by_name('David')
1292
+ david.projects << self
1293
+ end
1294
+ end
1295
+
1296
+ class DeveloperForProjectWithAfterCreateHook < ActiveRecord::Base
1297
+ set_table_name 'developers'
1298
+ has_and_belongs_to_many :projects,
1299
+ :class_name => "ProjectWithAfterCreateHook",
1300
+ :join_table => "developers_projects",
1301
+ :association_foreign_key => "project_id",
1302
+ :foreign_key => "developer_id"
1303
+ end
1304
+
1305
+
1306
+ class HasAndBelongsToManyAssociationsTest < Test::Unit::TestCase
1307
+ fixtures :accounts, :companies, :categories, :posts, :categories_posts, :developers, :projects, :developers_projects
1308
+
1309
+ def test_has_and_belongs_to_many
1310
+ david = Developer.find(1)
1311
+
1312
+ assert !david.projects.empty?
1313
+ assert_equal 2, david.projects.size
1314
+
1315
+ active_record = Project.find(1)
1316
+ assert !active_record.developers.empty?
1317
+ assert_equal 3, active_record.developers.size
1318
+ assert active_record.developers.include?(david)
1319
+ end
1320
+
1321
+ def test_triple_equality
1322
+ assert !(Array === Developer.find(1).projects)
1323
+ assert Developer.find(1).projects === Array
1324
+ end
1325
+
1326
+ def test_adding_single
1327
+ jamis = Developer.find(2)
1328
+ jamis.projects.reload # causing the collection to load
1329
+ action_controller = Project.find(2)
1330
+ assert_equal 1, jamis.projects.size
1331
+ assert_equal 1, action_controller.developers.size
1332
+
1333
+ jamis.projects << action_controller
1334
+
1335
+ assert_equal 2, jamis.projects.size
1336
+ assert_equal 2, jamis.projects(true).size
1337
+ assert_equal 2, action_controller.developers(true).size
1338
+ end
1339
+
1340
+ def test_adding_type_mismatch
1341
+ jamis = Developer.find(2)
1342
+ assert_raise(ActiveRecord::AssociationTypeMismatch) { jamis.projects << nil }
1343
+ assert_raise(ActiveRecord::AssociationTypeMismatch) { jamis.projects << 1 }
1344
+ end
1345
+
1346
+ def test_adding_from_the_project
1347
+ jamis = Developer.find(2)
1348
+ action_controller = Project.find(2)
1349
+ action_controller.developers.reload
1350
+ assert_equal 1, jamis.projects.size
1351
+ assert_equal 1, action_controller.developers.size
1352
+
1353
+ action_controller.developers << jamis
1354
+
1355
+ assert_equal 2, jamis.projects(true).size
1356
+ assert_equal 2, action_controller.developers.size
1357
+ assert_equal 2, action_controller.developers(true).size
1358
+ end
1359
+
1360
+ def test_adding_from_the_project_fixed_timestamp
1361
+ jamis = Developer.find(2)
1362
+ action_controller = Project.find(2)
1363
+ action_controller.developers.reload
1364
+ assert_equal 1, jamis.projects.size
1365
+ assert_equal 1, action_controller.developers.size
1366
+ updated_at = jamis.updated_at
1367
+
1368
+ action_controller.developers << jamis
1369
+
1370
+ assert_equal updated_at, jamis.updated_at
1371
+ assert_equal 2, jamis.projects(true).size
1372
+ assert_equal 2, action_controller.developers.size
1373
+ assert_equal 2, action_controller.developers(true).size
1374
+ end
1375
+
1376
+ def test_adding_multiple
1377
+ aredridel = Developer.new("name" => "Aredridel")
1378
+ aredridel.save
1379
+ aredridel.projects.reload
1380
+ aredridel.projects.push(Project.find(1), Project.find(2))
1381
+ assert_equal 2, aredridel.projects.size
1382
+ assert_equal 2, aredridel.projects(true).size
1383
+ end
1384
+
1385
+ def test_adding_a_collection
1386
+ aredridel = Developer.new("name" => "Aredridel")
1387
+ aredridel.save
1388
+ aredridel.projects.reload
1389
+ aredridel.projects.concat([Project.find(1), Project.find(2)])
1390
+ assert_equal 2, aredridel.projects.size
1391
+ assert_equal 2, aredridel.projects(true).size
1392
+ end
1393
+
1394
+ def test_adding_uses_default_values_on_join_table
1395
+ ac = projects(:action_controller)
1396
+ assert !developers(:jamis).projects.include?(ac)
1397
+ developers(:jamis).projects << ac
1398
+
1399
+ assert developers(:jamis, :reload).projects.include?(ac)
1400
+ project = developers(:jamis).projects.detect { |p| p == ac }
1401
+ assert_equal 1, project.access_level.to_i
1402
+ end
1403
+
1404
+ def test_adding_uses_explicit_values_on_join_table
1405
+ ac = projects(:action_controller)
1406
+ assert !developers(:jamis).projects.include?(ac)
1407
+ assert_deprecated do
1408
+ developers(:jamis).projects.push_with_attributes(ac, :access_level => 3)
1409
+ end
1410
+
1411
+ assert developers(:jamis, :reload).projects.include?(ac)
1412
+ project = developers(:jamis).projects.detect { |p| p == ac }
1413
+ assert_equal 3, project.access_level.to_i
1414
+ end
1415
+
1416
+ def test_hatbm_attribute_access_and_respond_to
1417
+ project = developers(:jamis).projects[0]
1418
+ assert project.has_attribute?("name")
1419
+ assert project.has_attribute?("joined_on")
1420
+ assert project.has_attribute?("access_level")
1421
+ assert project.respond_to?("name")
1422
+ assert project.respond_to?("name=")
1423
+ assert project.respond_to?("name?")
1424
+ assert project.respond_to?("joined_on")
1425
+ assert project.respond_to?("joined_on=")
1426
+ assert project.respond_to?("joined_on?")
1427
+ assert project.respond_to?("access_level")
1428
+ assert project.respond_to?("access_level=")
1429
+ assert project.respond_to?("access_level?")
1430
+ end
1431
+
1432
+ def test_habtm_adding_before_save
1433
+ no_of_devels = Developer.count
1434
+ no_of_projects = Project.count
1435
+ aredridel = Developer.new("name" => "Aredridel")
1436
+ aredridel.projects.concat([Project.find(1), p = Project.new("name" => "Projekt")])
1437
+ assert aredridel.new_record?
1438
+ assert p.new_record?
1439
+ assert aredridel.save
1440
+ assert !aredridel.new_record?
1441
+ assert_equal no_of_devels+1, Developer.count
1442
+ assert_equal no_of_projects+1, Project.count
1443
+ assert_equal 2, aredridel.projects.size
1444
+ assert_equal 2, aredridel.projects(true).size
1445
+ end
1446
+
1447
+ def test_habtm_adding_before_save_with_join_attributes
1448
+ no_of_devels = Developer.count
1449
+ no_of_projects = Project.count
1450
+ now = Date.today
1451
+ ken = Developer.new("name" => "Ken")
1452
+ assert_deprecated do
1453
+ ken.projects.push_with_attributes( Project.find(1), :joined_on => now )
1454
+ end
1455
+ p = Project.new("name" => "Foomatic")
1456
+ assert_deprecated do
1457
+ ken.projects.push_with_attributes( p, :joined_on => now )
1458
+ end
1459
+ assert ken.new_record?
1460
+ assert p.new_record?
1461
+ assert ken.save
1462
+ assert !ken.new_record?
1463
+ assert_equal no_of_devels+1, Developer.count
1464
+ assert_equal no_of_projects+1, Project.count
1465
+ assert_equal 2, ken.projects.size
1466
+ assert_equal 2, ken.projects(true).size
1467
+
1468
+ kenReloaded = Developer.find_by_name 'Ken'
1469
+ kenReloaded.projects.each {|prj| assert_date_from_db(now, prj.joined_on)}
1470
+ end
1471
+
1472
+ def test_habtm_saving_multiple_relationships
1473
+ new_project = Project.new("name" => "Grimetime")
1474
+ amount_of_developers = 4
1475
+ developers = (0...amount_of_developers).collect {|i| Developer.create(:name => "JME #{i}") }.reverse
1476
+
1477
+ new_project.developer_ids = [developers[0].id, developers[1].id]
1478
+ new_project.developers_with_callback_ids = [developers[2].id, developers[3].id]
1479
+ assert new_project.save
1480
+
1481
+ new_project.reload
1482
+ assert_equal amount_of_developers, new_project.developers.size
1483
+ assert_equal developers, new_project.developers
1484
+ end
1485
+
1486
+ def test_habtm_unique_order_preserved
1487
+ assert_equal [developers(:poor_jamis), developers(:jamis), developers(:david)], projects(:active_record).non_unique_developers
1488
+ assert_equal [developers(:poor_jamis), developers(:jamis), developers(:david)], projects(:active_record).developers
1489
+ end
1490
+
1491
+ def test_build
1492
+ devel = Developer.find(1)
1493
+ proj = devel.projects.build("name" => "Projekt")
1494
+ assert_equal devel.projects.last, proj
1495
+ assert proj.new_record?
1496
+ devel.save
1497
+ assert !proj.new_record?
1498
+ assert_equal devel.projects.last, proj
1499
+ assert_equal Developer.find(1).projects.sort_by(&:id).last, proj # prove join table is updated
1500
+ end
1501
+
1502
+ def test_build_by_new_record
1503
+ devel = Developer.new(:name => "Marcel", :salary => 75000)
1504
+ proj1 = devel.projects.build(:name => "Make bed")
1505
+ proj2 = devel.projects.build(:name => "Lie in it")
1506
+ assert_equal devel.projects.last, proj2
1507
+ assert proj2.new_record?
1508
+ devel.save
1509
+ assert !devel.new_record?
1510
+ assert !proj2.new_record?
1511
+ assert_equal devel.projects.last, proj2
1512
+ assert_equal Developer.find_by_name("Marcel").projects.last, proj2 # prove join table is updated
1513
+ end
1514
+
1515
+ def test_create
1516
+ devel = Developer.find(1)
1517
+ proj = devel.projects.create("name" => "Projekt")
1518
+ assert_equal devel.projects.last, proj
1519
+ assert !proj.new_record?
1520
+ assert_equal Developer.find(1).projects.sort_by(&:id).last, proj # prove join table is updated
1521
+ end
1522
+
1523
+ def test_create_by_new_record
1524
+ devel = Developer.new(:name => "Marcel", :salary => 75000)
1525
+ proj1 = devel.projects.create(:name => "Make bed")
1526
+ proj2 = devel.projects.create(:name => "Lie in it")
1527
+ assert_equal devel.projects.last, proj2
1528
+ assert proj2.new_record?
1529
+ devel.save
1530
+ assert !devel.new_record?
1531
+ assert !proj2.new_record?
1532
+ assert_equal devel.projects.last, proj2
1533
+ assert_equal Developer.find_by_name("Marcel").projects.last, proj2 # prove join table is updated
1534
+ end
1535
+
1536
+ def test_uniq_after_the_fact
1537
+ developers(:jamis).projects << projects(:active_record)
1538
+ developers(:jamis).projects << projects(:active_record)
1539
+ assert_equal 3, developers(:jamis).projects.size
1540
+ assert_equal 1, developers(:jamis).projects.uniq.size
1541
+ end
1542
+
1543
+ def test_uniq_before_the_fact
1544
+ projects(:active_record).developers << developers(:jamis)
1545
+ projects(:active_record).developers << developers(:david)
1546
+ assert_equal 3, projects(:active_record, :reload).developers.size
1547
+ end
1548
+
1549
+ def test_deleting
1550
+ david = Developer.find(1)
1551
+ active_record = Project.find(1)
1552
+ david.projects.reload
1553
+ assert_equal 2, david.projects.size
1554
+ assert_equal 3, active_record.developers.size
1555
+
1556
+ david.projects.delete(active_record)
1557
+
1558
+ assert_equal 1, david.projects.size
1559
+ assert_equal 1, david.projects(true).size
1560
+ assert_equal 2, active_record.developers(true).size
1561
+ end
1562
+
1563
+ def test_deleting_array
1564
+ david = Developer.find(1)
1565
+ david.projects.reload
1566
+ david.projects.delete(Project.find(:all))
1567
+ assert_equal 0, david.projects.size
1568
+ assert_equal 0, david.projects(true).size
1569
+ end
1570
+
1571
+ def test_deleting_with_sql
1572
+ david = Developer.find(1)
1573
+ active_record = Project.find(1)
1574
+ active_record.developers.reload
1575
+ assert_equal 3, active_record.developers_by_sql.size
1576
+
1577
+ active_record.developers_by_sql.delete(david)
1578
+ assert_equal 2, active_record.developers_by_sql(true).size
1579
+ end
1580
+
1581
+ def test_deleting_array_with_sql
1582
+ active_record = Project.find(1)
1583
+ active_record.developers.reload
1584
+ assert_equal 3, active_record.developers_by_sql.size
1585
+
1586
+ active_record.developers_by_sql.delete(Developer.find(:all))
1587
+ assert_equal 0, active_record.developers_by_sql(true).size
1588
+ end
1589
+
1590
+ def test_deleting_all
1591
+ david = Developer.find(1)
1592
+ david.projects.reload
1593
+ david.projects.clear
1594
+ assert_equal 0, david.projects.size
1595
+ assert_equal 0, david.projects(true).size
1596
+ end
1597
+
1598
+ def test_removing_associations_on_destroy
1599
+ david = DeveloperWithBeforeDestroyRaise.find(1)
1600
+ assert !david.projects.empty?
1601
+ assert_nothing_raised { david.destroy }
1602
+ assert david.projects.empty?
1603
+ assert DeveloperWithBeforeDestroyRaise.connection.select_all("SELECT * FROM developers_projects WHERE developer_id = 1").empty?
1604
+ end
1605
+
1606
+ def test_additional_columns_from_join_table
1607
+ assert_date_from_db Date.new(2004, 10, 10), Developer.find(1).projects.first.joined_on
1608
+ end
1609
+
1610
+ def test_destroy_all
1611
+ david = Developer.find(1)
1612
+ david.projects.reload
1613
+ assert !david.projects.empty?
1614
+ david.projects.destroy_all
1615
+ assert david.projects.empty?
1616
+ assert david.projects(true).empty?
1617
+ end
1618
+
1619
+ def test_rich_association
1620
+ jamis = developers(:jamis)
1621
+ assert_deprecated 'push_with_attributes' do
1622
+ jamis.projects.push_with_attributes(projects(:action_controller), :joined_on => Date.today)
1623
+ end
1624
+
1625
+ assert_date_from_db Date.today, jamis.projects.select { |p| p.name == projects(:action_controller).name }.first.joined_on
1626
+ assert_date_from_db Date.today, developers(:jamis).projects.select { |p| p.name == projects(:action_controller).name }.first.joined_on
1627
+ end
1628
+
1629
+ def test_associations_with_conditions
1630
+ assert_equal 3, projects(:active_record).developers.size
1631
+ assert_equal 1, projects(:active_record).developers_named_david.size
1632
+ assert_equal 1, projects(:active_record).developers_named_david_with_hash_conditions.size
1633
+
1634
+ assert_equal developers(:david), projects(:active_record).developers_named_david.find(developers(:david).id)
1635
+ assert_equal developers(:david), projects(:active_record).developers_named_david_with_hash_conditions.find(developers(:david).id)
1636
+ assert_equal developers(:david), projects(:active_record).salaried_developers.find(developers(:david).id)
1637
+
1638
+ projects(:active_record).developers_named_david.clear
1639
+ assert_equal 2, projects(:active_record, :reload).developers.size
1640
+ end
1641
+
1642
+ def test_find_in_association
1643
+ # Using sql
1644
+ assert_equal developers(:david), projects(:active_record).developers.find(developers(:david).id), "SQL find"
1645
+
1646
+ # Using ruby
1647
+ active_record = projects(:active_record)
1648
+ active_record.developers.reload
1649
+ assert_equal developers(:david), active_record.developers.find(developers(:david).id), "Ruby find"
1650
+ end
1651
+
1652
+ def test_find_in_association_with_custom_finder_sql
1653
+ assert_equal developers(:david), projects(:active_record).developers_with_finder_sql.find(developers(:david).id), "SQL find"
1654
+
1655
+ active_record = projects(:active_record)
1656
+ active_record.developers_with_finder_sql.reload
1657
+ assert_equal developers(:david), active_record.developers_with_finder_sql.find(developers(:david).id), "Ruby find"
1658
+ end
1659
+
1660
+ def test_find_in_association_with_custom_finder_sql_and_string_id
1661
+ assert_equal developers(:david), projects(:active_record).developers_with_finder_sql.find(developers(:david).id.to_s), "SQL find"
1662
+ end
1663
+
1664
+ def test_find_with_merged_options
1665
+ assert_equal 1, projects(:active_record).limited_developers.size
1666
+ assert_equal 1, projects(:active_record).limited_developers.find(:all).size
1667
+ assert_equal 3, projects(:active_record).limited_developers.find(:all, :limit => nil).size
1668
+ end
1669
+
1670
+ def test_new_with_values_in_collection
1671
+ jamis = DeveloperForProjectWithAfterCreateHook.find_by_name('Jamis')
1672
+ david = DeveloperForProjectWithAfterCreateHook.find_by_name('David')
1673
+ project = ProjectWithAfterCreateHook.new(:name => "Cooking with Bertie")
1674
+ project.developers << jamis
1675
+ project.save!
1676
+ project.reload
1677
+
1678
+ assert project.developers.include?(jamis)
1679
+ assert project.developers.include?(david)
1680
+ end
1681
+
1682
+ def test_find_in_association_with_options
1683
+ developers = projects(:active_record).developers.find(:all)
1684
+ assert_equal 3, developers.size
1685
+
1686
+ assert_equal developers(:poor_jamis), projects(:active_record).developers.find(:first, :conditions => "salary < 10000")
1687
+ assert_equal developers(:jamis), projects(:active_record).developers.find(:first, :order => "salary DESC")
1688
+ end
1689
+
1690
+ def test_replace_with_less
1691
+ david = developers(:david)
1692
+ david.projects = [projects(:action_controller)]
1693
+ assert david.save
1694
+ assert_equal 1, david.projects.length
1695
+ end
1696
+
1697
+ def test_replace_with_new
1698
+ david = developers(:david)
1699
+ david.projects = [projects(:action_controller), Project.new("name" => "ActionWebSearch")]
1700
+ david.save
1701
+ assert_equal 2, david.projects.length
1702
+ assert !david.projects.include?(projects(:active_record))
1703
+ end
1704
+
1705
+ def test_replace_on_new_object
1706
+ new_developer = Developer.new("name" => "Matz")
1707
+ new_developer.projects = [projects(:action_controller), Project.new("name" => "ActionWebSearch")]
1708
+ new_developer.save
1709
+ assert_equal 2, new_developer.projects.length
1710
+ end
1711
+
1712
+ def test_consider_type
1713
+ developer = Developer.find(:first)
1714
+ special_project = SpecialProject.create("name" => "Special Project")
1715
+
1716
+ other_project = developer.projects.first
1717
+ developer.special_projects << special_project
1718
+ developer.reload
1719
+
1720
+ assert developer.projects.include?(special_project)
1721
+ assert developer.special_projects.include?(special_project)
1722
+ assert !developer.special_projects.include?(other_project)
1723
+ end
1724
+
1725
+ def test_update_attributes_after_push_without_duplicate_join_table_rows
1726
+ developer = Developer.new("name" => "Kano")
1727
+ project = SpecialProject.create("name" => "Special Project")
1728
+ assert developer.save
1729
+ developer.projects << project
1730
+ developer.update_attribute("name", "Bruza")
1731
+ assert_equal 1, Developer.connection.select_value(<<-end_sql).to_i
1732
+ SELECT count(*) FROM developers_projects
1733
+ WHERE project_id = #{project.id}
1734
+ AND developer_id = #{developer.id}
1735
+ end_sql
1736
+ end
1737
+
1738
+ def test_updating_attributes_on_non_rich_associations
1739
+ welcome = categories(:technology).posts.first
1740
+ welcome.title = "Something else"
1741
+ assert welcome.save!
1742
+ end
1743
+
1744
+ def test_updating_attributes_on_rich_associations
1745
+ david = projects(:action_controller).developers.first
1746
+ david.name = "DHH"
1747
+ assert_raises(ActiveRecord::ReadOnlyRecord) { david.save! }
1748
+ end
1749
+
1750
+
1751
+ def test_updating_attributes_on_rich_associations_with_limited_find
1752
+ david = projects(:action_controller).developers.find(:all, :select => "developers.*").first
1753
+ david.name = "DHH"
1754
+ assert david.save!
1755
+ end
1756
+
1757
+ def test_join_table_alias
1758
+ assert_equal 3, Developer.find(:all, :include => {:projects => :developers}, :conditions => 'developers_projects_join.joined_on IS NOT NULL').size
1759
+ end
1760
+
1761
+ def test_join_with_group
1762
+ group = Developer.columns.inject([]) do |g, c|
1763
+ g << "developers.#{c.name}"
1764
+ g << "developers_projects_2.#{c.name}"
1765
+ end
1766
+ Project.columns.each { |c| group << "projects.#{c.name}" }
1767
+
1768
+ assert_equal 3, Developer.find(:all, :include => {:projects => :developers}, :conditions => 'developers_projects_join.joined_on IS NOT NULL', :group => group.join(",")).size
1769
+ end
1770
+
1771
+ def test_get_ids
1772
+ assert_equal [projects(:active_record).id, projects(:action_controller).id], developers(:david).project_ids
1773
+ assert_equal [projects(:active_record).id], developers(:jamis).project_ids
1774
+ end
1775
+
1776
+ def test_assign_ids
1777
+ developer = Developer.new("name" => "Joe")
1778
+ developer.project_ids = [projects(:active_record).id, projects(:action_controller).id]
1779
+ developer.save
1780
+ developer.reload
1781
+ assert_equal 2, developer.projects.length
1782
+ assert_equal projects(:active_record), developer.projects[0]
1783
+ assert_equal projects(:action_controller), developer.projects[1]
1784
+ end
1785
+
1786
+ def test_assign_ids_ignoring_blanks
1787
+ developer = Developer.new("name" => "Joe")
1788
+ developer.project_ids = [projects(:active_record).id, nil, projects(:action_controller).id, '']
1789
+ developer.save
1790
+ developer.reload
1791
+ assert_equal 2, developer.projects.length
1792
+ assert_equal projects(:active_record), developer.projects[0]
1793
+ assert_equal projects(:action_controller), developer.projects[1]
1794
+ end
1795
+
1796
+ def test_select_limited_ids_list
1797
+ # Set timestamps
1798
+ Developer.transaction do
1799
+ Developer.find(:all, :order => 'id').each_with_index do |record, i|
1800
+ record.update_attributes(:created_at => 5.years.ago + (i * 5.minutes))
1801
+ end
1802
+ end
1803
+
1804
+ join_base = ActiveRecord::Associations::ClassMethods::JoinDependency::JoinBase.new(Project)
1805
+ join_dep = ActiveRecord::Associations::ClassMethods::JoinDependency.new(join_base, :developers, nil)
1806
+ projects = Project.send(:select_limited_ids_list, {:order => 'developers.created_at'}, join_dep)
1807
+ assert_equal %w(1 2), projects.scan(/\d/).sort
1808
+ end
1809
+ end