backlog 0.0.3 → 0.0.4

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