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,49 @@
1
+ require 'abstract_unit'
2
+
3
+ class AttributeMethodsTest < Test::Unit::TestCase
4
+ def setup
5
+ @old_suffixes = ActiveRecord::Base.send(:attribute_method_suffixes).dup
6
+ @target = Class.new(ActiveRecord::Base)
7
+ @target.table_name = 'topics'
8
+ end
9
+
10
+ def teardown
11
+ ActiveRecord::Base.send(:attribute_method_suffixes).clear
12
+ ActiveRecord::Base.attribute_method_suffix *@old_suffixes
13
+ end
14
+
15
+
16
+ def test_match_attribute_method_query_returns_match_data
17
+ assert_not_nil md = @target.match_attribute_method?('title=')
18
+ assert_equal 'title', md.pre_match
19
+ assert_equal ['='], md.captures
20
+
21
+ %w(_hello_world ist! _maybe?).each do |suffix|
22
+ @target.class_eval "def attribute#{suffix}(*args) args end"
23
+ @target.attribute_method_suffix suffix
24
+
25
+ assert_not_nil md = @target.match_attribute_method?("title#{suffix}")
26
+ assert_equal 'title', md.pre_match
27
+ assert_equal [suffix], md.captures
28
+ end
29
+ end
30
+
31
+ def test_declared_attribute_method_affects_respond_to_and_method_missing
32
+ topic = @target.new(:title => 'Budget')
33
+ assert topic.respond_to?('title')
34
+ assert_equal 'Budget', topic.title
35
+ assert !topic.respond_to?('title_hello_world')
36
+ assert_raise(NoMethodError) { topic.title_hello_world }
37
+
38
+ %w(_hello_world _it! _candidate= able?).each do |suffix|
39
+ @target.class_eval "def attribute#{suffix}(*args) args end"
40
+ @target.attribute_method_suffix suffix
41
+
42
+ meth = "title#{suffix}"
43
+ assert topic.respond_to?(meth)
44
+ assert_equal ['title'], topic.send(meth)
45
+ assert_equal ['title', 'a'], topic.send(meth, 'a')
46
+ assert_equal ['title', 1, 2, 3], topic.send(meth, 1, 2, 3)
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,1656 @@
1
+ require 'abstract_unit'
2
+ require 'fixtures/topic'
3
+ require 'fixtures/reply'
4
+ require 'fixtures/company'
5
+ require 'fixtures/customer'
6
+ require 'fixtures/developer'
7
+ require 'fixtures/project'
8
+ require 'fixtures/default'
9
+ require 'fixtures/auto_id'
10
+ require 'fixtures/column_name'
11
+ require 'fixtures/subscriber'
12
+ require 'fixtures/keyboard'
13
+ require 'fixtures/post'
14
+
15
+ class Category < ActiveRecord::Base; end
16
+ class Smarts < ActiveRecord::Base; end
17
+ class CreditCard < ActiveRecord::Base
18
+ class PinNumber < ActiveRecord::Base
19
+ class CvvCode < ActiveRecord::Base; end
20
+ class SubCvvCode < CvvCode; end
21
+ end
22
+ class SubPinNumber < PinNumber; end
23
+ class Brand < Category; end
24
+ end
25
+ class MasterCreditCard < ActiveRecord::Base; end
26
+ class Post < ActiveRecord::Base; end
27
+ class Computer < ActiveRecord::Base; end
28
+ class NonExistentTable < ActiveRecord::Base; end
29
+ class TestOracleDefault < ActiveRecord::Base; end
30
+
31
+ class LoosePerson < ActiveRecord::Base
32
+ self.table_name = 'people'
33
+ self.abstract_class = true
34
+ attr_protected :credit_rating, :administrator
35
+ end
36
+
37
+ class LooseDescendant < LoosePerson
38
+ attr_protected :phone_number
39
+ end
40
+
41
+ class TightPerson < ActiveRecord::Base
42
+ self.table_name = 'people'
43
+ attr_accessible :name, :address
44
+ end
45
+
46
+ class TightDescendant < TightPerson
47
+ attr_accessible :phone_number
48
+ end
49
+
50
+ class Booleantest < ActiveRecord::Base; end
51
+
52
+ class Task < ActiveRecord::Base
53
+ attr_protected :starting
54
+ end
55
+
56
+ class BasicsTest < Test::Unit::TestCase
57
+ fixtures :topics, :companies, :developers, :projects, :computers, :accounts
58
+
59
+ def test_table_exists
60
+ assert !NonExistentTable.table_exists?
61
+ assert Topic.table_exists?
62
+ end
63
+
64
+ def test_set_attributes
65
+ topic = Topic.find(1)
66
+ topic.attributes = { "title" => "Budget", "author_name" => "Jason" }
67
+ topic.save
68
+ assert_equal("Budget", topic.title)
69
+ assert_equal("Jason", topic.author_name)
70
+ assert_equal(topics(:first).author_email_address, Topic.find(1).author_email_address)
71
+ end
72
+
73
+ def test_integers_as_nil
74
+ test = AutoId.create('value' => '')
75
+ assert_nil AutoId.find(test.id).value
76
+ end
77
+
78
+ def test_set_attributes_with_block
79
+ topic = Topic.new do |t|
80
+ t.title = "Budget"
81
+ t.author_name = "Jason"
82
+ end
83
+
84
+ assert_equal("Budget", topic.title)
85
+ assert_equal("Jason", topic.author_name)
86
+ end
87
+
88
+ def test_respond_to?
89
+ topic = Topic.find(1)
90
+ assert topic.respond_to?("title")
91
+ assert topic.respond_to?("title?")
92
+ assert topic.respond_to?("title=")
93
+ assert topic.respond_to?(:title)
94
+ assert topic.respond_to?(:title?)
95
+ assert topic.respond_to?(:title=)
96
+ assert topic.respond_to?("author_name")
97
+ assert topic.respond_to?("attribute_names")
98
+ assert !topic.respond_to?("nothingness")
99
+ assert !topic.respond_to?(:nothingness)
100
+ end
101
+
102
+ def test_array_content
103
+ topic = Topic.new
104
+ topic.content = %w( one two three )
105
+ topic.save
106
+
107
+ assert_equal(%w( one two three ), Topic.find(topic.id).content)
108
+ end
109
+
110
+ def test_hash_content
111
+ topic = Topic.new
112
+ topic.content = { "one" => 1, "two" => 2 }
113
+ topic.save
114
+
115
+ assert_equal 2, Topic.find(topic.id).content["two"]
116
+
117
+ topic.content["three"] = 3
118
+ topic.save
119
+
120
+ assert_equal 3, Topic.find(topic.id).content["three"]
121
+ end
122
+
123
+ def test_update_array_content
124
+ topic = Topic.new
125
+ topic.content = %w( one two three )
126
+
127
+ topic.content.push "four"
128
+ assert_equal(%w( one two three four ), topic.content)
129
+
130
+ topic.save
131
+
132
+ topic = Topic.find(topic.id)
133
+ topic.content << "five"
134
+ assert_equal(%w( one two three four five ), topic.content)
135
+ end
136
+
137
+ def test_case_sensitive_attributes_hash
138
+ # DB2 is not case-sensitive
139
+ return true if current_adapter?(:DB2Adapter)
140
+
141
+ assert_equal @loaded_fixtures['computers']['workstation'].to_hash, Computer.find(:first).attributes
142
+ end
143
+
144
+ def test_create
145
+ topic = Topic.new
146
+ topic.title = "New Topic"
147
+ topic.save
148
+ topic_reloaded = Topic.find(topic.id)
149
+ assert_equal("New Topic", topic_reloaded.title)
150
+ end
151
+
152
+ def test_save!
153
+ topic = Topic.new(:title => "New Topic")
154
+ assert topic.save!
155
+
156
+ reply = Reply.new
157
+ assert_raise(ActiveRecord::RecordInvalid) { reply.save! }
158
+ end
159
+
160
+ def test_save_null_string_attributes
161
+ topic = Topic.find(1)
162
+ topic.attributes = { "title" => "null", "author_name" => "null" }
163
+ topic.save!
164
+ topic.reload
165
+ assert_equal("null", topic.title)
166
+ assert_equal("null", topic.author_name)
167
+ end
168
+
169
+ def test_save_nil_string_attributes
170
+ topic = Topic.find(1)
171
+ topic.title = nil
172
+ topic.save!
173
+ topic.reload
174
+ assert_nil topic.title
175
+ end
176
+
177
+ def test_hashes_not_mangled
178
+ new_topic = { :title => "New Topic" }
179
+ new_topic_values = { :title => "AnotherTopic" }
180
+
181
+ topic = Topic.new(new_topic)
182
+ assert_equal new_topic[:title], topic.title
183
+
184
+ topic.attributes= new_topic_values
185
+ assert_equal new_topic_values[:title], topic.title
186
+ end
187
+
188
+ def test_create_many
189
+ topics = Topic.create([ { "title" => "first" }, { "title" => "second" }])
190
+ assert_equal 2, topics.size
191
+ assert_equal "first", topics.first.title
192
+ end
193
+
194
+ def test_create_columns_not_equal_attributes
195
+ topic = Topic.new
196
+ topic.title = 'Another New Topic'
197
+ topic.send :write_attribute, 'does_not_exist', 'test'
198
+ assert_nothing_raised { topic.save }
199
+ end
200
+
201
+ def test_create_through_factory
202
+ topic = Topic.create("title" => "New Topic")
203
+ topicReloaded = Topic.find(topic.id)
204
+ assert_equal(topic, topicReloaded)
205
+ end
206
+
207
+ def test_update
208
+ topic = Topic.new
209
+ topic.title = "Another New Topic"
210
+ topic.written_on = "2003-12-12 23:23:00"
211
+ topic.save
212
+ topicReloaded = Topic.find(topic.id)
213
+ assert_equal("Another New Topic", topicReloaded.title)
214
+
215
+ topicReloaded.title = "Updated topic"
216
+ topicReloaded.save
217
+
218
+ topicReloadedAgain = Topic.find(topic.id)
219
+
220
+ assert_equal("Updated topic", topicReloadedAgain.title)
221
+ end
222
+
223
+ def test_update_columns_not_equal_attributes
224
+ topic = Topic.new
225
+ topic.title = "Still another topic"
226
+ topic.save
227
+
228
+ topicReloaded = Topic.find(topic.id)
229
+ topicReloaded.title = "A New Topic"
230
+ topicReloaded.send :write_attribute, 'does_not_exist', 'test'
231
+ assert_nothing_raised { topicReloaded.save }
232
+ end
233
+
234
+ def test_write_attribute
235
+ topic = Topic.new
236
+ topic.send(:write_attribute, :title, "Still another topic")
237
+ assert_equal "Still another topic", topic.title
238
+
239
+ topic.send(:write_attribute, "title", "Still another topic: part 2")
240
+ assert_equal "Still another topic: part 2", topic.title
241
+ end
242
+
243
+ def test_read_attribute
244
+ topic = Topic.new
245
+ topic.title = "Don't change the topic"
246
+ assert_equal "Don't change the topic", topic.send(:read_attribute, "title")
247
+ assert_equal "Don't change the topic", topic["title"]
248
+
249
+ assert_equal "Don't change the topic", topic.send(:read_attribute, :title)
250
+ assert_equal "Don't change the topic", topic[:title]
251
+ end
252
+
253
+ def test_read_attribute_when_false
254
+ topic = topics(:first)
255
+ topic.approved = false
256
+ assert !topic.approved?, "approved should be false"
257
+ topic.approved = "false"
258
+ assert !topic.approved?, "approved should be false"
259
+ end
260
+
261
+ def test_read_attribute_when_true
262
+ topic = topics(:first)
263
+ topic.approved = true
264
+ assert topic.approved?, "approved should be true"
265
+ topic.approved = "true"
266
+ assert topic.approved?, "approved should be true"
267
+ end
268
+
269
+ def test_read_write_boolean_attribute
270
+ topic = Topic.new
271
+ # puts ""
272
+ # puts "New Topic"
273
+ # puts topic.inspect
274
+ topic.approved = "false"
275
+ # puts "Expecting false"
276
+ # puts topic.inspect
277
+ assert !topic.approved?, "approved should be false"
278
+ topic.approved = "false"
279
+ # puts "Expecting false"
280
+ # puts topic.inspect
281
+ assert !topic.approved?, "approved should be false"
282
+ topic.approved = "true"
283
+ # puts "Expecting true"
284
+ # puts topic.inspect
285
+ assert topic.approved?, "approved should be true"
286
+ topic.approved = "true"
287
+ # puts "Expecting true"
288
+ # puts topic.inspect
289
+ assert topic.approved?, "approved should be true"
290
+ # puts ""
291
+ end
292
+
293
+ def test_query_attribute_string
294
+ [nil, "", " "].each do |value|
295
+ assert_equal false, Topic.new(:author_name => value).author_name?
296
+ end
297
+
298
+ assert_equal true, Topic.new(:author_name => "Name").author_name?
299
+ end
300
+
301
+ def test_query_attribute_number
302
+ [nil, 0, "0"].each do |value|
303
+ assert_equal false, Developer.new(:salary => value).salary?
304
+ end
305
+
306
+ assert_equal true, Developer.new(:salary => 1).salary?
307
+ assert_equal true, Developer.new(:salary => "1").salary?
308
+ end
309
+
310
+ def test_query_attribute_boolean
311
+ [nil, "", false, "false", "f", 0].each do |value|
312
+ assert_equal false, Topic.new(:approved => value).approved?
313
+ end
314
+
315
+ [true, "true", "1", 1].each do |value|
316
+ assert_equal true, Topic.new(:approved => value).approved?
317
+ end
318
+ end
319
+
320
+ def test_query_attribute_with_custom_fields
321
+ object = Company.find_by_sql(<<-SQL).first
322
+ SELECT c1.*, c2.ruby_type as string_value, c2.rating as int_value
323
+ FROM companies c1, companies c2
324
+ WHERE c1.firm_id = c2.id
325
+ AND c1.id = 2
326
+ SQL
327
+
328
+ assert_equal "Firm", object.string_value
329
+ assert object.string_value?
330
+
331
+ object.string_value = " "
332
+ assert !object.string_value?
333
+
334
+ assert_equal 1, object.int_value.to_i
335
+ assert object.int_value?
336
+
337
+ object.int_value = "0"
338
+ assert !object.int_value?
339
+ end
340
+
341
+ def test_reader_generation
342
+ Topic.find(:first).title
343
+ Firm.find(:first).name
344
+ Client.find(:first).name
345
+ if ActiveRecord::Base.generate_read_methods
346
+ assert_readers(Topic, %w(type replies_count))
347
+ assert_readers(Firm, %w(type))
348
+ assert_readers(Client, %w(type ruby_type rating?))
349
+ else
350
+ [Topic, Firm, Client].each {|klass| assert_equal klass.read_methods, {}}
351
+ end
352
+ end
353
+
354
+ def test_reader_for_invalid_column_names
355
+ # column names which aren't legal ruby ids
356
+ topic = Topic.find(:first)
357
+ topic.send(:define_read_method, "mumub-jumbo".to_sym, "mumub-jumbo", nil)
358
+ assert !Topic.read_methods.include?("mumub-jumbo")
359
+ end
360
+
361
+ def test_non_attribute_access_and_assignment
362
+ topic = Topic.new
363
+ assert !topic.respond_to?("mumbo")
364
+ assert_raises(NoMethodError) { topic.mumbo }
365
+ assert_raises(NoMethodError) { topic.mumbo = 5 }
366
+ end
367
+
368
+ def test_preserving_date_objects
369
+ # SQL Server doesn't have a separate column type just for dates, so all are returned as time
370
+ return true if current_adapter?(:SQLServerAdapter)
371
+
372
+ if current_adapter?(:SybaseAdapter, :OracleAdapter)
373
+ # Sybase ctlib does not (yet?) support the date type; use datetime instead.
374
+ # Oracle treats all dates/times as Time.
375
+ assert_kind_of(
376
+ Time, Topic.find(1).last_read,
377
+ "The last_read attribute should be of the Time class"
378
+ )
379
+ else
380
+ assert_kind_of(
381
+ Date, Topic.find(1).last_read,
382
+ "The last_read attribute should be of the Date class"
383
+ )
384
+ end
385
+ end
386
+
387
+ def test_preserving_time_objects
388
+ assert_kind_of(
389
+ Time, Topic.find(1).bonus_time,
390
+ "The bonus_time attribute should be of the Time class"
391
+ )
392
+
393
+ assert_kind_of(
394
+ Time, Topic.find(1).written_on,
395
+ "The written_on attribute should be of the Time class"
396
+ )
397
+
398
+ # For adapters which support microsecond resolution.
399
+ if current_adapter?(:PostgreSQLAdapter)
400
+ assert_equal 11, Topic.find(1).written_on.sec
401
+ assert_equal 223300, Topic.find(1).written_on.usec
402
+ assert_equal 9900, Topic.find(2).written_on.usec
403
+ end
404
+ end
405
+
406
+ def test_destroy
407
+ topic = Topic.find(1)
408
+ assert_equal topic, topic.destroy, 'topic.destroy did not return self'
409
+ assert topic.frozen?, 'topic not frozen after destroy'
410
+ assert_raise(ActiveRecord::RecordNotFound) { Topic.find(topic.id) }
411
+ end
412
+
413
+ def test_record_not_found_exception
414
+ assert_raises(ActiveRecord::RecordNotFound) { topicReloaded = Topic.find(99999) }
415
+ end
416
+
417
+ def test_initialize_with_attributes
418
+ topic = Topic.new({
419
+ "title" => "initialized from attributes", "written_on" => "2003-12-12 23:23"
420
+ })
421
+
422
+ assert_equal("initialized from attributes", topic.title)
423
+ end
424
+
425
+ def test_initialize_with_invalid_attribute
426
+ begin
427
+ topic = Topic.new({ "title" => "test",
428
+ "last_read(1i)" => "2005", "last_read(2i)" => "2", "last_read(3i)" => "31"})
429
+ rescue ActiveRecord::MultiparameterAssignmentErrors => ex
430
+ assert_equal(1, ex.errors.size)
431
+ assert_equal("last_read", ex.errors[0].attribute)
432
+ end
433
+ end
434
+
435
+ def test_load
436
+ topics = Topic.find(:all, :order => 'id')
437
+ assert_equal(2, topics.size)
438
+ assert_equal(topics(:first).title, topics.first.title)
439
+ end
440
+
441
+ def test_load_with_condition
442
+ topics = Topic.find(:all, :conditions => "author_name = 'Mary'")
443
+
444
+ assert_equal(1, topics.size)
445
+ assert_equal(topics(:second).title, topics.first.title)
446
+ end
447
+
448
+ def test_table_name_guesses
449
+ classes = [Category, Smarts, CreditCard, CreditCard::PinNumber, CreditCard::PinNumber::CvvCode, CreditCard::SubPinNumber, CreditCard::Brand, MasterCreditCard]
450
+
451
+ assert_equal "topics", Topic.table_name
452
+
453
+ assert_equal "categories", Category.table_name
454
+ assert_equal "smarts", Smarts.table_name
455
+ assert_equal "credit_cards", CreditCard.table_name
456
+ assert_equal "credit_card_pin_numbers", CreditCard::PinNumber.table_name
457
+ assert_equal "credit_card_pin_number_cvv_codes", CreditCard::PinNumber::CvvCode.table_name
458
+ assert_equal "credit_card_pin_numbers", CreditCard::SubPinNumber.table_name
459
+ assert_equal "categories", CreditCard::Brand.table_name
460
+ assert_equal "master_credit_cards", MasterCreditCard.table_name
461
+
462
+ ActiveRecord::Base.pluralize_table_names = false
463
+ classes.each(&:reset_table_name)
464
+
465
+ assert_equal "category", Category.table_name
466
+ assert_equal "smarts", Smarts.table_name
467
+ assert_equal "credit_card", CreditCard.table_name
468
+ assert_equal "credit_card_pin_number", CreditCard::PinNumber.table_name
469
+ assert_equal "credit_card_pin_number_cvv_code", CreditCard::PinNumber::CvvCode.table_name
470
+ assert_equal "credit_card_pin_number", CreditCard::SubPinNumber.table_name
471
+ assert_equal "category", CreditCard::Brand.table_name
472
+ assert_equal "master_credit_card", MasterCreditCard.table_name
473
+
474
+ ActiveRecord::Base.pluralize_table_names = true
475
+ classes.each(&:reset_table_name)
476
+
477
+ ActiveRecord::Base.table_name_prefix = "test_"
478
+ Category.reset_table_name
479
+ assert_equal "test_categories", Category.table_name
480
+ ActiveRecord::Base.table_name_suffix = "_test"
481
+ Category.reset_table_name
482
+ assert_equal "test_categories_test", Category.table_name
483
+ ActiveRecord::Base.table_name_prefix = ""
484
+ Category.reset_table_name
485
+ assert_equal "categories_test", Category.table_name
486
+ ActiveRecord::Base.table_name_suffix = ""
487
+ Category.reset_table_name
488
+ assert_equal "categories", Category.table_name
489
+
490
+ ActiveRecord::Base.pluralize_table_names = false
491
+ ActiveRecord::Base.table_name_prefix = "test_"
492
+ Category.reset_table_name
493
+ assert_equal "test_category", Category.table_name
494
+ ActiveRecord::Base.table_name_suffix = "_test"
495
+ Category.reset_table_name
496
+ assert_equal "test_category_test", Category.table_name
497
+ ActiveRecord::Base.table_name_prefix = ""
498
+ Category.reset_table_name
499
+ assert_equal "category_test", Category.table_name
500
+ ActiveRecord::Base.table_name_suffix = ""
501
+ Category.reset_table_name
502
+ assert_equal "category", Category.table_name
503
+
504
+ ActiveRecord::Base.pluralize_table_names = true
505
+ classes.each(&:reset_table_name)
506
+ end
507
+
508
+ def test_destroy_all
509
+ assert_equal 2, Topic.count
510
+
511
+ Topic.destroy_all "author_name = 'Mary'"
512
+ assert_equal 1, Topic.count
513
+ end
514
+
515
+ def test_destroy_many
516
+ assert_equal 3, Client.count
517
+ Client.destroy([2, 3])
518
+ assert_equal 1, Client.count
519
+ end
520
+
521
+ def test_delete_many
522
+ Topic.delete([1, 2])
523
+ assert_equal 0, Topic.count
524
+ end
525
+
526
+ def test_boolean_attributes
527
+ assert ! Topic.find(1).approved?
528
+ assert Topic.find(2).approved?
529
+ end
530
+
531
+ def test_increment_counter
532
+ Topic.increment_counter("replies_count", 1)
533
+ assert_equal 2, Topic.find(1).replies_count
534
+
535
+ Topic.increment_counter("replies_count", 1)
536
+ assert_equal 3, Topic.find(1).replies_count
537
+ end
538
+
539
+ def test_decrement_counter
540
+ Topic.decrement_counter("replies_count", 2)
541
+ assert_equal -1, Topic.find(2).replies_count
542
+
543
+ Topic.decrement_counter("replies_count", 2)
544
+ assert_equal -2, Topic.find(2).replies_count
545
+ end
546
+
547
+ # The ADO library doesn't support the number of affected rows
548
+ unless current_adapter?(:SQLServerAdapter)
549
+ def test_update_all
550
+ assert_equal 2, Topic.update_all("content = 'bulk updated!'")
551
+ assert_equal "bulk updated!", Topic.find(1).content
552
+ assert_equal "bulk updated!", Topic.find(2).content
553
+
554
+ assert_equal 2, Topic.update_all(['content = ?', 'bulk updated again!'])
555
+ assert_equal "bulk updated again!", Topic.find(1).content
556
+ assert_equal "bulk updated again!", Topic.find(2).content
557
+
558
+ assert_equal 2, Topic.update_all(['content = ?', nil])
559
+ assert_nil Topic.find(1).content
560
+ end
561
+
562
+ def test_update_all_with_hash
563
+ assert_not_nil Topic.find(1).last_read
564
+ assert_equal 2, Topic.update_all(:content => 'bulk updated with hash!', :last_read => nil)
565
+ assert_equal "bulk updated with hash!", Topic.find(1).content
566
+ assert_equal "bulk updated with hash!", Topic.find(2).content
567
+ assert_nil Topic.find(1).last_read
568
+ assert_nil Topic.find(2).last_read
569
+ end
570
+ end
571
+
572
+ if current_adapter?(:MysqlAdapter)
573
+ def test_update_all_with_order_and_limit
574
+ assert_equal 1, Topic.update_all("content = 'bulk updated!'", nil, :limit => 1, :order => 'id DESC')
575
+ end
576
+ end
577
+
578
+ def test_update_many
579
+ topic_data = { 1 => { "content" => "1 updated" }, 2 => { "content" => "2 updated" } }
580
+ updated = Topic.update(topic_data.keys, topic_data.values)
581
+
582
+ assert_equal 2, updated.size
583
+ assert_equal "1 updated", Topic.find(1).content
584
+ assert_equal "2 updated", Topic.find(2).content
585
+ end
586
+
587
+ def test_delete_all
588
+ # The ADO library doesn't support the number of affected rows
589
+ return true if current_adapter?(:SQLServerAdapter)
590
+
591
+ assert_equal 2, Topic.delete_all
592
+ end
593
+
594
+ def test_update_by_condition
595
+ Topic.update_all "content = 'bulk updated!'", ["approved = ?", true]
596
+ assert_equal "Have a nice day", Topic.find(1).content
597
+ assert_equal "bulk updated!", Topic.find(2).content
598
+ end
599
+
600
+ def test_attribute_present
601
+ t = Topic.new
602
+ t.title = "hello there!"
603
+ t.written_on = Time.now
604
+ assert t.attribute_present?("title")
605
+ assert t.attribute_present?("written_on")
606
+ assert !t.attribute_present?("content")
607
+ end
608
+
609
+ def test_attribute_keys_on_new_instance
610
+ t = Topic.new
611
+ assert_equal nil, t.title, "The topics table has a title column, so it should be nil"
612
+ assert_raise(NoMethodError) { t.title2 }
613
+ end
614
+
615
+ def test_class_name
616
+ assert_equal "Firm", ActiveRecord::Base.class_name("firms")
617
+ assert_equal "Category", ActiveRecord::Base.class_name("categories")
618
+ assert_equal "AccountHolder", ActiveRecord::Base.class_name("account_holder")
619
+
620
+ ActiveRecord::Base.pluralize_table_names = false
621
+ assert_equal "Firms", ActiveRecord::Base.class_name( "firms" )
622
+ ActiveRecord::Base.pluralize_table_names = true
623
+
624
+ ActiveRecord::Base.table_name_prefix = "test_"
625
+ assert_equal "Firm", ActiveRecord::Base.class_name( "test_firms" )
626
+ ActiveRecord::Base.table_name_suffix = "_tests"
627
+ assert_equal "Firm", ActiveRecord::Base.class_name( "test_firms_tests" )
628
+ ActiveRecord::Base.table_name_prefix = ""
629
+ assert_equal "Firm", ActiveRecord::Base.class_name( "firms_tests" )
630
+ ActiveRecord::Base.table_name_suffix = ""
631
+ assert_equal "Firm", ActiveRecord::Base.class_name( "firms" )
632
+ end
633
+
634
+ def test_null_fields
635
+ assert_nil Topic.find(1).parent_id
636
+ assert_nil Topic.create("title" => "Hey you").parent_id
637
+ end
638
+
639
+ def test_default_values
640
+ topic = Topic.new
641
+ assert topic.approved?
642
+ assert_nil topic.written_on
643
+ assert_nil topic.bonus_time
644
+ assert_nil topic.last_read
645
+
646
+ topic.save
647
+
648
+ topic = Topic.find(topic.id)
649
+ assert topic.approved?
650
+ assert_nil topic.last_read
651
+
652
+ # Oracle has some funky default handling, so it requires a bit of
653
+ # extra testing. See ticket #2788.
654
+ if current_adapter?(:OracleAdapter)
655
+ test = TestOracleDefault.new
656
+ assert_equal "X", test.test_char
657
+ assert_equal "hello", test.test_string
658
+ assert_equal 3, test.test_int
659
+ end
660
+ end
661
+
662
+ # Oracle, SQLServer, and Sybase do not have a TIME datatype.
663
+ unless current_adapter?(:SQLServerAdapter, :OracleAdapter, :SybaseAdapter)
664
+ def test_utc_as_time_zone
665
+ Topic.default_timezone = :utc
666
+ attributes = { "bonus_time" => "5:42:00AM" }
667
+ topic = Topic.find(1)
668
+ topic.attributes = attributes
669
+ assert_equal Time.utc(2000, 1, 1, 5, 42, 0), topic.bonus_time
670
+ Topic.default_timezone = :local
671
+ end
672
+
673
+ def test_utc_as_time_zone_and_new
674
+ Topic.default_timezone = :utc
675
+ attributes = { "bonus_time(1i)"=>"2000",
676
+ "bonus_time(2i)"=>"1",
677
+ "bonus_time(3i)"=>"1",
678
+ "bonus_time(4i)"=>"10",
679
+ "bonus_time(5i)"=>"35",
680
+ "bonus_time(6i)"=>"50" }
681
+ topic = Topic.new(attributes)
682
+ assert_equal Time.utc(2000, 1, 1, 10, 35, 50), topic.bonus_time
683
+ Topic.default_timezone = :local
684
+ end
685
+ end
686
+
687
+ def test_default_values_on_empty_strings
688
+ topic = Topic.new
689
+ topic.approved = nil
690
+ topic.last_read = nil
691
+
692
+ topic.save
693
+
694
+ topic = Topic.find(topic.id)
695
+ assert_nil topic.last_read
696
+
697
+ # Sybase adapter does not allow nulls in boolean columns
698
+ if current_adapter?(:SybaseAdapter)
699
+ assert topic.approved == false
700
+ else
701
+ assert_nil topic.approved
702
+ end
703
+ end
704
+
705
+ def test_equality
706
+ assert_equal Topic.find(1), Topic.find(2).topic
707
+ end
708
+
709
+ def test_equality_of_new_records
710
+ assert_not_equal Topic.new, Topic.new
711
+ end
712
+
713
+ def test_hashing
714
+ assert_equal [ Topic.find(1) ], [ Topic.find(2).topic ] & [ Topic.find(1) ]
715
+ end
716
+
717
+ def test_destroy_new_record
718
+ client = Client.new
719
+ client.destroy
720
+ assert client.frozen?
721
+ end
722
+
723
+ def test_destroy_record_with_associations
724
+ client = Client.find(3)
725
+ client.destroy
726
+ assert client.frozen?
727
+ assert_kind_of Firm, client.firm
728
+ assert_raises(TypeError) { client.name = "something else" }
729
+ end
730
+
731
+ def test_update_attribute
732
+ assert !Topic.find(1).approved?
733
+ Topic.find(1).update_attribute("approved", true)
734
+ assert Topic.find(1).approved?
735
+
736
+ Topic.find(1).update_attribute(:approved, false)
737
+ assert !Topic.find(1).approved?
738
+ end
739
+
740
+ def test_update_attributes
741
+ topic = Topic.find(1)
742
+ assert !topic.approved?
743
+ assert_equal "The First Topic", topic.title
744
+
745
+ topic.update_attributes("approved" => true, "title" => "The First Topic Updated")
746
+ topic.reload
747
+ assert topic.approved?
748
+ assert_equal "The First Topic Updated", topic.title
749
+
750
+ topic.update_attributes(:approved => false, :title => "The First Topic")
751
+ topic.reload
752
+ assert !topic.approved?
753
+ assert_equal "The First Topic", topic.title
754
+ end
755
+
756
+ def test_update_attributes!
757
+ reply = Reply.find(2)
758
+ assert_equal "The Second Topic's of the day", reply.title
759
+ assert_equal "Have a nice day", reply.content
760
+
761
+ reply.update_attributes!("title" => "The Second Topic's of the day updated", "content" => "Have a nice evening")
762
+ reply.reload
763
+ assert_equal "The Second Topic's of the day updated", reply.title
764
+ assert_equal "Have a nice evening", reply.content
765
+
766
+ reply.update_attributes!(:title => "The Second Topic's of the day", :content => "Have a nice day")
767
+ reply.reload
768
+ assert_equal "The Second Topic's of the day", reply.title
769
+ assert_equal "Have a nice day", reply.content
770
+
771
+ assert_raise(ActiveRecord::RecordInvalid) { reply.update_attributes!(:title => nil, :content => "Have a nice evening") }
772
+ end
773
+
774
+ def test_mass_assignment_protection
775
+ firm = Firm.new
776
+ firm.attributes = { "name" => "Next Angle", "rating" => 5 }
777
+ assert_equal 1, firm.rating
778
+ end
779
+
780
+ def test_mass_assignment_protection_against_class_attribute_writers
781
+ [:logger, :configurations, :primary_key_prefix_type, :table_name_prefix, :table_name_suffix, :pluralize_table_names, :colorize_logging,
782
+ :default_timezone, :allow_concurrency, :generate_read_methods, :schema_format, :verification_timeout, :lock_optimistically, :record_timestamps].each do |method|
783
+ assert Task.respond_to?(method)
784
+ assert Task.respond_to?("#{method}=")
785
+ assert Task.new.respond_to?(method)
786
+ assert !Task.new.respond_to?("#{method}=")
787
+ end
788
+ end
789
+
790
+ def test_customized_primary_key_remains_protected
791
+ subscriber = Subscriber.new(:nick => 'webster123', :name => 'nice try')
792
+ assert_nil subscriber.id
793
+
794
+ keyboard = Keyboard.new(:key_number => 9, :name => 'nice try')
795
+ assert_nil keyboard.id
796
+ end
797
+
798
+ def test_customized_primary_key_remains_protected_when_refered_to_as_id
799
+ subscriber = Subscriber.new(:id => 'webster123', :name => 'nice try')
800
+ assert_nil subscriber.id
801
+
802
+ keyboard = Keyboard.new(:id => 9, :name => 'nice try')
803
+ assert_nil keyboard.id
804
+ end
805
+
806
+ def test_mass_assignment_protection_on_defaults
807
+ firm = Firm.new
808
+ firm.attributes = { "id" => 5, "type" => "Client" }
809
+ assert_nil firm.id
810
+ assert_equal "Firm", firm[:type]
811
+ end
812
+
813
+ def test_mass_assignment_accessible
814
+ reply = Reply.new("title" => "hello", "content" => "world", "approved" => true)
815
+ reply.save
816
+
817
+ assert reply.approved?
818
+
819
+ reply.approved = false
820
+ reply.save
821
+
822
+ assert !reply.approved?
823
+ end
824
+
825
+ def test_mass_assignment_protection_inheritance
826
+ assert_nil LoosePerson.accessible_attributes
827
+ assert_equal [ :credit_rating, :administrator ], LoosePerson.protected_attributes
828
+
829
+ assert_nil LooseDescendant.accessible_attributes
830
+ assert_equal [ :credit_rating, :administrator, :phone_number ], LooseDescendant.protected_attributes
831
+
832
+ assert_nil TightPerson.protected_attributes
833
+ assert_equal [ :name, :address ], TightPerson.accessible_attributes
834
+
835
+ assert_nil TightDescendant.protected_attributes
836
+ assert_equal [ :name, :address, :phone_number ], TightDescendant.accessible_attributes
837
+ end
838
+
839
+ def test_multiparameter_attributes_on_date
840
+ attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "6", "last_read(3i)" => "24" }
841
+ topic = Topic.find(1)
842
+ topic.attributes = attributes
843
+ # note that extra #to_date call allows test to pass for Oracle, which
844
+ # treats dates/times the same
845
+ assert_date_from_db Date.new(2004, 6, 24), topic.last_read.to_date
846
+ end
847
+
848
+ def test_multiparameter_attributes_on_date_with_empty_date
849
+ attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "6", "last_read(3i)" => "" }
850
+ topic = Topic.find(1)
851
+ topic.attributes = attributes
852
+ # note that extra #to_date call allows test to pass for Oracle, which
853
+ # treats dates/times the same
854
+ assert_date_from_db Date.new(2004, 6, 1), topic.last_read.to_date
855
+ end
856
+
857
+ def test_multiparameter_attributes_on_date_with_all_empty
858
+ attributes = { "last_read(1i)" => "", "last_read(2i)" => "", "last_read(3i)" => "" }
859
+ topic = Topic.find(1)
860
+ topic.attributes = attributes
861
+ assert_nil topic.last_read
862
+ end
863
+
864
+ def test_multiparameter_attributes_on_time
865
+ attributes = {
866
+ "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
867
+ "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
868
+ }
869
+ topic = Topic.find(1)
870
+ topic.attributes = attributes
871
+ assert_equal Time.local(2004, 6, 24, 16, 24, 0), topic.written_on
872
+ end
873
+
874
+ def test_multiparameter_attributes_on_time_with_empty_seconds
875
+ attributes = {
876
+ "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
877
+ "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => ""
878
+ }
879
+ topic = Topic.find(1)
880
+ topic.attributes = attributes
881
+ assert_equal Time.local(2004, 6, 24, 16, 24, 0), topic.written_on
882
+ end
883
+
884
+ def test_multiparameter_mass_assignment_protector
885
+ task = Task.new
886
+ time = Time.mktime(2000, 1, 1, 1)
887
+ task.starting = time
888
+ attributes = { "starting(1i)" => "2004", "starting(2i)" => "6", "starting(3i)" => "24" }
889
+ task.attributes = attributes
890
+ assert_equal time, task.starting
891
+ end
892
+
893
+ def test_multiparameter_assignment_of_aggregation
894
+ customer = Customer.new
895
+ address = Address.new("The Street", "The City", "The Country")
896
+ attributes = { "address(1)" => address.street, "address(2)" => address.city, "address(3)" => address.country }
897
+ customer.attributes = attributes
898
+ assert_equal address, customer.address
899
+ end
900
+
901
+ def test_attributes_on_dummy_time
902
+ # Oracle, SQL Server, and Sybase do not have a TIME datatype.
903
+ return true if current_adapter?(:SQLServerAdapter, :OracleAdapter, :SybaseAdapter)
904
+
905
+ attributes = {
906
+ "bonus_time" => "5:42:00AM"
907
+ }
908
+ topic = Topic.find(1)
909
+ topic.attributes = attributes
910
+ assert_equal Time.local(2000, 1, 1, 5, 42, 0), topic.bonus_time
911
+ end
912
+
913
+ def test_boolean
914
+ b_false = Booleantest.create({ "value" => false })
915
+ false_id = b_false.id
916
+ b_true = Booleantest.create({ "value" => true })
917
+ true_id = b_true.id
918
+
919
+ b_false = Booleantest.find(false_id)
920
+ assert !b_false.value?
921
+ b_true = Booleantest.find(true_id)
922
+ assert b_true.value?
923
+ end
924
+
925
+ def test_boolean_cast_from_string
926
+ b_false = Booleantest.create({ "value" => "0" })
927
+ false_id = b_false.id
928
+ b_true = Booleantest.create({ "value" => "1" })
929
+ true_id = b_true.id
930
+
931
+ b_false = Booleantest.find(false_id)
932
+ assert !b_false.value?
933
+ b_true = Booleantest.find(true_id)
934
+ assert b_true.value?
935
+ end
936
+
937
+ def test_clone
938
+ topic = Topic.find(1)
939
+ cloned_topic = nil
940
+ assert_nothing_raised { cloned_topic = topic.clone }
941
+ assert_equal topic.title, cloned_topic.title
942
+ assert cloned_topic.new_record?
943
+
944
+ # test if the attributes have been cloned
945
+ topic.title = "a"
946
+ cloned_topic.title = "b"
947
+ assert_equal "a", topic.title
948
+ assert_equal "b", cloned_topic.title
949
+
950
+ # test if the attribute values have been cloned
951
+ topic.title = {"a" => "b"}
952
+ cloned_topic = topic.clone
953
+ cloned_topic.title["a"] = "c"
954
+ assert_equal "b", topic.title["a"]
955
+
956
+ cloned_topic.save
957
+ assert !cloned_topic.new_record?
958
+ assert cloned_topic.id != topic.id
959
+ end
960
+
961
+ def test_clone_with_aggregate_of_same_name_as_attribute
962
+ dev = DeveloperWithAggregate.find(1)
963
+ assert_kind_of DeveloperSalary, dev.salary
964
+
965
+ clone = nil
966
+ assert_nothing_raised { clone = dev.clone }
967
+ assert_kind_of DeveloperSalary, clone.salary
968
+ assert_equal dev.salary.amount, clone.salary.amount
969
+ assert clone.new_record?
970
+
971
+ # test if the attributes have been cloned
972
+ original_amount = clone.salary.amount
973
+ dev.salary.amount = 1
974
+ assert_equal original_amount, clone.salary.amount
975
+
976
+ assert clone.save
977
+ assert !clone.new_record?
978
+ assert clone.id != dev.id
979
+ end
980
+
981
+ def test_clone_preserves_subtype
982
+ clone = nil
983
+ assert_nothing_raised { clone = Company.find(3).clone }
984
+ assert_kind_of Client, clone
985
+ end
986
+
987
+ def test_bignum
988
+ company = Company.find(1)
989
+ company.rating = 2147483647
990
+ company.save
991
+ company = Company.find(1)
992
+ assert_equal 2147483647, company.rating
993
+ end
994
+
995
+ # TODO: extend defaults tests to other databases!
996
+ if current_adapter?(:PostgreSQLAdapter)
997
+ def test_default
998
+ default = Default.new
999
+
1000
+ # fixed dates / times
1001
+ assert_equal Date.new(2004, 1, 1), default.fixed_date
1002
+ assert_equal Time.local(2004, 1,1,0,0,0,0), default.fixed_time
1003
+
1004
+ # char types
1005
+ assert_equal 'Y', default.char1
1006
+ assert_equal 'a varchar field', default.char2
1007
+ assert_equal 'a text field', default.char3
1008
+ end
1009
+
1010
+ class Geometric < ActiveRecord::Base; end
1011
+ def test_geometric_content
1012
+
1013
+ # accepted format notes:
1014
+ # ()'s aren't required
1015
+ # values can be a mix of float or integer
1016
+
1017
+ g = Geometric.new(
1018
+ :a_point => '(5.0, 6.1)',
1019
+ #:a_line => '((2.0, 3), (5.5, 7.0))' # line type is currently unsupported in postgresql
1020
+ :a_line_segment => '(2.0, 3), (5.5, 7.0)',
1021
+ :a_box => '2.0, 3, 5.5, 7.0',
1022
+ :a_path => '[(2.0, 3), (5.5, 7.0), (8.5, 11.0)]', # [ ] is an open path
1023
+ :a_polygon => '((2.0, 3), (5.5, 7.0), (8.5, 11.0))',
1024
+ :a_circle => '<(5.3, 10.4), 2>'
1025
+ )
1026
+
1027
+ assert g.save
1028
+
1029
+ # Reload and check that we have all the geometric attributes.
1030
+ h = Geometric.find(g.id)
1031
+
1032
+ assert_equal '(5,6.1)', h.a_point
1033
+ assert_equal '[(2,3),(5.5,7)]', h.a_line_segment
1034
+ assert_equal '(5.5,7),(2,3)', h.a_box # reordered to store upper right corner then bottom left corner
1035
+ assert_equal '[(2,3),(5.5,7),(8.5,11)]', h.a_path
1036
+ assert_equal '((2,3),(5.5,7),(8.5,11))', h.a_polygon
1037
+ assert_equal '<(5.3,10.4),2>', h.a_circle
1038
+
1039
+ # use a geometric function to test for an open path
1040
+ objs = Geometric.find_by_sql ["select isopen(a_path) from geometrics where id = ?", g.id]
1041
+ assert_equal objs[0].isopen, 't'
1042
+
1043
+ # test alternate formats when defining the geometric types
1044
+
1045
+ g = Geometric.new(
1046
+ :a_point => '5.0, 6.1',
1047
+ #:a_line => '((2.0, 3), (5.5, 7.0))' # line type is currently unsupported in postgresql
1048
+ :a_line_segment => '((2.0, 3), (5.5, 7.0))',
1049
+ :a_box => '(2.0, 3), (5.5, 7.0)',
1050
+ :a_path => '((2.0, 3), (5.5, 7.0), (8.5, 11.0))', # ( ) is a closed path
1051
+ :a_polygon => '2.0, 3, 5.5, 7.0, 8.5, 11.0',
1052
+ :a_circle => '((5.3, 10.4), 2)'
1053
+ )
1054
+
1055
+ assert g.save
1056
+
1057
+ # Reload and check that we have all the geometric attributes.
1058
+ h = Geometric.find(g.id)
1059
+
1060
+ assert_equal '(5,6.1)', h.a_point
1061
+ assert_equal '[(2,3),(5.5,7)]', h.a_line_segment
1062
+ assert_equal '(5.5,7),(2,3)', h.a_box # reordered to store upper right corner then bottom left corner
1063
+ assert_equal '((2,3),(5.5,7),(8.5,11))', h.a_path
1064
+ assert_equal '((2,3),(5.5,7),(8.5,11))', h.a_polygon
1065
+ assert_equal '<(5.3,10.4),2>', h.a_circle
1066
+
1067
+ # use a geometric function to test for an closed path
1068
+ objs = Geometric.find_by_sql ["select isclosed(a_path) from geometrics where id = ?", g.id]
1069
+ assert_equal objs[0].isclosed, 't'
1070
+ end
1071
+ end
1072
+
1073
+ class NumericData < ActiveRecord::Base
1074
+ self.table_name = 'numeric_data'
1075
+ end
1076
+
1077
+ def test_numeric_fields
1078
+ m = NumericData.new(
1079
+ :bank_balance => 1586.43,
1080
+ :big_bank_balance => BigDecimal("1000234000567.95"),
1081
+ :world_population => 6000000000,
1082
+ :my_house_population => 3
1083
+ )
1084
+ assert m.save
1085
+
1086
+ m1 = NumericData.find(m.id)
1087
+ assert_not_nil m1
1088
+
1089
+ # As with migration_test.rb, we should make world_population >= 2**62
1090
+ # to cover 64-bit platforms and test it is a Bignum, but the main thing
1091
+ # is that it's an Integer.
1092
+ assert_kind_of Integer, m1.world_population
1093
+ assert_equal 6000000000, m1.world_population
1094
+
1095
+ assert_kind_of Fixnum, m1.my_house_population
1096
+ assert_equal 3, m1.my_house_population
1097
+
1098
+ assert_kind_of BigDecimal, m1.bank_balance
1099
+ assert_equal BigDecimal("1586.43"), m1.bank_balance
1100
+
1101
+ assert_kind_of BigDecimal, m1.big_bank_balance
1102
+ assert_equal BigDecimal("1000234000567.95"), m1.big_bank_balance
1103
+ end
1104
+
1105
+ def test_auto_id
1106
+ auto = AutoId.new
1107
+ auto.save
1108
+ assert (auto.id > 0)
1109
+ end
1110
+
1111
+ def quote_column_name(name)
1112
+ "<#{name}>"
1113
+ end
1114
+
1115
+ def test_quote_keys
1116
+ ar = AutoId.new
1117
+ source = {"foo" => "bar", "baz" => "quux"}
1118
+ actual = ar.send(:quote_columns, self, source)
1119
+ inverted = actual.invert
1120
+ assert_equal("<foo>", inverted["bar"])
1121
+ assert_equal("<baz>", inverted["quux"])
1122
+ end
1123
+
1124
+ def test_sql_injection_via_find
1125
+ assert_raises(ActiveRecord::RecordNotFound, ActiveRecord::StatementInvalid) do
1126
+ Topic.find("123456 OR id > 0")
1127
+ end
1128
+ end
1129
+
1130
+ def test_column_name_properly_quoted
1131
+ col_record = ColumnName.new
1132
+ col_record.references = 40
1133
+ assert col_record.save
1134
+ col_record.references = 41
1135
+ assert col_record.save
1136
+ assert_not_nil c2 = ColumnName.find(col_record.id)
1137
+ assert_equal(41, c2.references)
1138
+ end
1139
+
1140
+ def test_quoting_arrays
1141
+ replies = Reply.find(:all, :conditions => [ "id IN (?)", topics(:first).replies.collect(&:id) ])
1142
+ assert_equal topics(:first).replies.size, replies.size
1143
+
1144
+ replies = Reply.find(:all, :conditions => [ "id IN (?)", [] ])
1145
+ assert_equal 0, replies.size
1146
+ end
1147
+
1148
+ MyObject = Struct.new :attribute1, :attribute2
1149
+
1150
+ def test_serialized_attribute
1151
+ myobj = MyObject.new('value1', 'value2')
1152
+ topic = Topic.create("content" => myobj)
1153
+ Topic.serialize("content", MyObject)
1154
+ assert_equal(myobj, topic.content)
1155
+ end
1156
+
1157
+ def test_serialized_attribute_with_class_constraint
1158
+ myobj = MyObject.new('value1', 'value2')
1159
+ topic = Topic.create("content" => myobj)
1160
+ Topic.serialize(:content, Hash)
1161
+
1162
+ assert_raise(ActiveRecord::SerializationTypeMismatch) { Topic.find(topic.id).content }
1163
+
1164
+ settings = { "color" => "blue" }
1165
+ Topic.find(topic.id).update_attribute("content", settings)
1166
+ assert_equal(settings, Topic.find(topic.id).content)
1167
+ Topic.serialize(:content)
1168
+ end
1169
+
1170
+ def test_quote
1171
+ author_name = "\\ \001 ' \n \\n \""
1172
+ topic = Topic.create('author_name' => author_name)
1173
+ assert_equal author_name, Topic.find(topic.id).author_name
1174
+ end
1175
+
1176
+ def test_quote_chars
1177
+ str = 'The Narrator'
1178
+ topic = Topic.create(:author_name => str)
1179
+ assert_equal str, topic.author_name
1180
+
1181
+ assert_kind_of ActiveSupport::Multibyte::Chars, str.chars
1182
+ topic = Topic.find_by_author_name(str.chars)
1183
+
1184
+ assert_kind_of Topic, topic
1185
+ assert_equal str, topic.author_name, "The right topic should have been found by name even with name passed as Chars"
1186
+ end
1187
+
1188
+ def test_class_level_destroy
1189
+ should_be_destroyed_reply = Reply.create("title" => "hello", "content" => "world")
1190
+ Topic.find(1).replies << should_be_destroyed_reply
1191
+
1192
+ Topic.destroy(1)
1193
+ assert_raise(ActiveRecord::RecordNotFound) { Topic.find(1) }
1194
+ assert_raise(ActiveRecord::RecordNotFound) { Reply.find(should_be_destroyed_reply.id) }
1195
+ end
1196
+
1197
+ def test_class_level_delete
1198
+ should_be_destroyed_reply = Reply.create("title" => "hello", "content" => "world")
1199
+ Topic.find(1).replies << should_be_destroyed_reply
1200
+
1201
+ Topic.delete(1)
1202
+ assert_raise(ActiveRecord::RecordNotFound) { Topic.find(1) }
1203
+ assert_nothing_raised { Reply.find(should_be_destroyed_reply.id) }
1204
+ end
1205
+
1206
+ def test_increment_attribute
1207
+ assert_equal 1, topics(:first).replies_count
1208
+ topics(:first).increment! :replies_count
1209
+ assert_equal 2, topics(:first, :reload).replies_count
1210
+
1211
+ topics(:first).increment(:replies_count).increment!(:replies_count)
1212
+ assert_equal 4, topics(:first, :reload).replies_count
1213
+ end
1214
+
1215
+ def test_increment_nil_attribute
1216
+ assert_nil topics(:first).parent_id
1217
+ topics(:first).increment! :parent_id
1218
+ assert_equal 1, topics(:first).parent_id
1219
+ end
1220
+
1221
+ def test_decrement_attribute
1222
+ topics(:first).increment(:replies_count).increment!(:replies_count)
1223
+ assert_equal 3, topics(:first).replies_count
1224
+
1225
+ topics(:first).decrement!(:replies_count)
1226
+ assert_equal 2, topics(:first, :reload).replies_count
1227
+
1228
+ topics(:first).decrement(:replies_count).decrement!(:replies_count)
1229
+ assert_equal 0, topics(:first, :reload).replies_count
1230
+ end
1231
+
1232
+ def test_toggle_attribute
1233
+ assert !topics(:first).approved?
1234
+ topics(:first).toggle!(:approved)
1235
+ assert topics(:first).approved?
1236
+ topic = topics(:first)
1237
+ topic.toggle(:approved)
1238
+ assert !topic.approved?
1239
+ topic.reload
1240
+ assert topic.approved?
1241
+ end
1242
+
1243
+ def test_reload
1244
+ t1 = Topic.find(1)
1245
+ t2 = Topic.find(1)
1246
+ t1.title = "something else"
1247
+ t1.save
1248
+ t2.reload
1249
+ assert_equal t1.title, t2.title
1250
+ end
1251
+
1252
+ def test_define_attr_method_with_value
1253
+ k = Class.new( ActiveRecord::Base )
1254
+ k.send(:define_attr_method, :table_name, "foo")
1255
+ assert_equal "foo", k.table_name
1256
+ end
1257
+
1258
+ def test_define_attr_method_with_block
1259
+ k = Class.new( ActiveRecord::Base )
1260
+ k.send(:define_attr_method, :primary_key) { "sys_" + original_primary_key }
1261
+ assert_equal "sys_id", k.primary_key
1262
+ end
1263
+
1264
+ def test_set_table_name_with_value
1265
+ k = Class.new( ActiveRecord::Base )
1266
+ k.table_name = "foo"
1267
+ assert_equal "foo", k.table_name
1268
+ k.set_table_name "bar"
1269
+ assert_equal "bar", k.table_name
1270
+ end
1271
+
1272
+ def test_set_table_name_with_block
1273
+ k = Class.new( ActiveRecord::Base )
1274
+ k.set_table_name { "ks" }
1275
+ assert_equal "ks", k.table_name
1276
+ end
1277
+
1278
+ def test_set_primary_key_with_value
1279
+ k = Class.new( ActiveRecord::Base )
1280
+ k.primary_key = "foo"
1281
+ assert_equal "foo", k.primary_key
1282
+ k.set_primary_key "bar"
1283
+ assert_equal "bar", k.primary_key
1284
+ end
1285
+
1286
+ def test_set_primary_key_with_block
1287
+ k = Class.new( ActiveRecord::Base )
1288
+ k.set_primary_key { "sys_" + original_primary_key }
1289
+ assert_equal "sys_id", k.primary_key
1290
+ end
1291
+
1292
+ def test_set_inheritance_column_with_value
1293
+ k = Class.new( ActiveRecord::Base )
1294
+ k.inheritance_column = "foo"
1295
+ assert_equal "foo", k.inheritance_column
1296
+ k.set_inheritance_column "bar"
1297
+ assert_equal "bar", k.inheritance_column
1298
+ end
1299
+
1300
+ def test_set_inheritance_column_with_block
1301
+ k = Class.new( ActiveRecord::Base )
1302
+ k.set_inheritance_column { original_inheritance_column + "_id" }
1303
+ assert_equal "type_id", k.inheritance_column
1304
+ end
1305
+
1306
+ def test_count_with_join
1307
+ res = Post.count_by_sql "SELECT COUNT(*) FROM posts LEFT JOIN comments ON posts.id=comments.post_id WHERE posts.#{QUOTED_TYPE} = 'Post'"
1308
+ res2 = nil
1309
+ assert_deprecated 'count' do
1310
+ res2 = Post.count("posts.#{QUOTED_TYPE} = 'Post'",
1311
+ "LEFT JOIN comments ON posts.id=comments.post_id")
1312
+ end
1313
+ assert_equal res, res2
1314
+
1315
+ res3 = nil
1316
+ assert_nothing_raised do
1317
+ res3 = Post.count(:conditions => "posts.#{QUOTED_TYPE} = 'Post'",
1318
+ :joins => "LEFT JOIN comments ON posts.id=comments.post_id")
1319
+ end
1320
+ assert_equal res, res3
1321
+
1322
+ res4 = Post.count_by_sql "SELECT COUNT(p.id) FROM posts p, comments co WHERE p.#{QUOTED_TYPE} = 'Post' AND p.id=co.post_id"
1323
+ res5 = nil
1324
+ assert_nothing_raised do
1325
+ res5 = Post.count(:conditions => "p.#{QUOTED_TYPE} = 'Post' AND p.id=co.post_id",
1326
+ :joins => "p, comments co",
1327
+ :select => "p.id")
1328
+ end
1329
+
1330
+ assert_equal res4, res5
1331
+
1332
+ unless current_adapter?(:SQLite2Adapter, :DeprecatedSQLiteAdapter)
1333
+ res6 = Post.count_by_sql "SELECT COUNT(DISTINCT p.id) FROM posts p, comments co WHERE p.#{QUOTED_TYPE} = 'Post' AND p.id=co.post_id"
1334
+ res7 = nil
1335
+ assert_nothing_raised do
1336
+ res7 = Post.count(:conditions => "p.#{QUOTED_TYPE} = 'Post' AND p.id=co.post_id",
1337
+ :joins => "p, comments co",
1338
+ :select => "p.id",
1339
+ :distinct => true)
1340
+ end
1341
+ assert_equal res6, res7
1342
+ end
1343
+ end
1344
+
1345
+ def test_clear_association_cache_stored
1346
+ firm = Firm.find(1)
1347
+ assert_kind_of Firm, firm
1348
+
1349
+ firm.clear_association_cache
1350
+ assert_equal Firm.find(1).clients.collect{ |x| x.name }.sort, firm.clients.collect{ |x| x.name }.sort
1351
+ end
1352
+
1353
+ def test_clear_association_cache_new_record
1354
+ firm = Firm.new
1355
+ client_stored = Client.find(3)
1356
+ client_new = Client.new
1357
+ client_new.name = "The Joneses"
1358
+ clients = [ client_stored, client_new ]
1359
+
1360
+ firm.clients << clients
1361
+ assert_equal clients.map(&:name).to_set, firm.clients.map(&:name).to_set
1362
+
1363
+ firm.clear_association_cache
1364
+ assert_equal clients.map(&:name).to_set, firm.clients.map(&:name).to_set
1365
+ end
1366
+
1367
+ def test_interpolate_sql
1368
+ assert_nothing_raised { Category.new.send(:interpolate_sql, 'foo@bar') }
1369
+ assert_nothing_raised { Category.new.send(:interpolate_sql, 'foo bar) baz') }
1370
+ assert_nothing_raised { Category.new.send(:interpolate_sql, 'foo bar} baz') }
1371
+ end
1372
+
1373
+ def test_scoped_find_conditions
1374
+ scoped_developers = Developer.with_scope(:find => { :conditions => 'salary > 90000' }) do
1375
+ Developer.find(:all, :conditions => 'id < 5')
1376
+ end
1377
+ assert !scoped_developers.include?(developers(:david)) # David's salary is less than 90,000
1378
+ assert_equal 3, scoped_developers.size
1379
+ end
1380
+
1381
+ def test_scoped_find_limit_offset
1382
+ scoped_developers = Developer.with_scope(:find => { :limit => 3, :offset => 2 }) do
1383
+ Developer.find(:all, :order => 'id')
1384
+ end
1385
+ assert !scoped_developers.include?(developers(:david))
1386
+ assert !scoped_developers.include?(developers(:jamis))
1387
+ assert_equal 3, scoped_developers.size
1388
+
1389
+ # Test without scoped find conditions to ensure we get the whole thing
1390
+ developers = Developer.find(:all, :order => 'id')
1391
+ assert_equal Developer.count, developers.size
1392
+ end
1393
+
1394
+ def test_scoped_find_order
1395
+ # Test order in scope
1396
+ scoped_developers = Developer.with_scope(:find => { :limit => 1, :order => 'salary DESC' }) do
1397
+ Developer.find(:all)
1398
+ end
1399
+ assert_equal 'Jamis', scoped_developers.first.name
1400
+ assert scoped_developers.include?(developers(:jamis))
1401
+ # Test scope without order and order in find
1402
+ scoped_developers = Developer.with_scope(:find => { :limit => 1 }) do
1403
+ Developer.find(:all, :order => 'salary DESC')
1404
+ end
1405
+ # Test scope order + find order, find has priority
1406
+ scoped_developers = Developer.with_scope(:find => { :limit => 3, :order => 'id DESC' }) do
1407
+ Developer.find(:all, :order => 'salary ASC')
1408
+ end
1409
+ assert scoped_developers.include?(developers(:poor_jamis))
1410
+ assert scoped_developers.include?(developers(:david))
1411
+ assert scoped_developers.include?(developers(:dev_10))
1412
+ # Test without scoped find conditions to ensure we get the right thing
1413
+ developers = Developer.find(:all, :order => 'id', :limit => 1)
1414
+ assert scoped_developers.include?(developers(:david))
1415
+ end
1416
+
1417
+ def test_scoped_find_limit_offset_including_has_many_association
1418
+ topics = Topic.with_scope(:find => {:limit => 1, :offset => 1, :include => :replies}) do
1419
+ Topic.find(:all, :order => "topics.id")
1420
+ end
1421
+ assert_equal 1, topics.size
1422
+ assert_equal 2, topics.first.id
1423
+ end
1424
+
1425
+ def test_scoped_find_order_including_has_many_association
1426
+ developers = Developer.with_scope(:find => { :order => 'developers.salary DESC', :include => :projects }) do
1427
+ Developer.find(:all)
1428
+ end
1429
+ assert developers.size >= 2
1430
+ for i in 1...developers.size
1431
+ assert developers[i-1].salary >= developers[i].salary
1432
+ end
1433
+ end
1434
+
1435
+ def test_abstract_class
1436
+ assert !ActiveRecord::Base.abstract_class?
1437
+ assert LoosePerson.abstract_class?
1438
+ assert !LooseDescendant.abstract_class?
1439
+ end
1440
+
1441
+ def test_base_class
1442
+ assert_equal LoosePerson, LoosePerson.base_class
1443
+ assert_equal LooseDescendant, LooseDescendant.base_class
1444
+ assert_equal TightPerson, TightPerson.base_class
1445
+ assert_equal TightPerson, TightDescendant.base_class
1446
+
1447
+ assert_equal Post, Post.base_class
1448
+ assert_equal Post, SpecialPost.base_class
1449
+ assert_equal Post, StiPost.base_class
1450
+ assert_equal SubStiPost, SubStiPost.base_class
1451
+ end
1452
+
1453
+ def test_descends_from_active_record
1454
+ # Tries to call Object.abstract_class?
1455
+ assert_raise(NoMethodError) do
1456
+ ActiveRecord::Base.descends_from_active_record?
1457
+ end
1458
+
1459
+ # Abstract subclass of AR::Base.
1460
+ assert LoosePerson.descends_from_active_record?
1461
+
1462
+ # Concrete subclass of an abstract class.
1463
+ assert LooseDescendant.descends_from_active_record?
1464
+
1465
+ # Concrete subclass of AR::Base.
1466
+ assert TightPerson.descends_from_active_record?
1467
+
1468
+ # Concrete subclass of a concrete class but has no type column.
1469
+ assert TightDescendant.descends_from_active_record?
1470
+
1471
+ # Concrete subclass of AR::Base.
1472
+ assert Post.descends_from_active_record?
1473
+
1474
+ # Abstract subclass of a concrete class which has a type column.
1475
+ # This is pathological, as you'll never have Sub < Abstract < Concrete.
1476
+ assert !StiPost.descends_from_active_record?
1477
+
1478
+ # Concrete subclasses an abstract class which has a type column.
1479
+ assert !SubStiPost.descends_from_active_record?
1480
+ end
1481
+
1482
+ def test_find_on_abstract_base_class_doesnt_use_type_condition
1483
+ old_class = LooseDescendant
1484
+ Object.send :remove_const, :LooseDescendant
1485
+
1486
+ descendant = old_class.create!
1487
+ assert_not_nil LoosePerson.find(descendant.id), "Should have found instance of LooseDescendant when finding abstract LoosePerson: #{descendant.inspect}"
1488
+ ensure
1489
+ unless Object.const_defined?(:LooseDescendant)
1490
+ Object.const_set :LooseDescendant, old_class
1491
+ end
1492
+ end
1493
+
1494
+ def test_assert_queries
1495
+ query = lambda { ActiveRecord::Base.connection.execute 'select count(*) from developers' }
1496
+ assert_queries(2) { 2.times { query.call } }
1497
+ assert_queries 1, &query
1498
+ assert_no_queries { assert true }
1499
+ end
1500
+
1501
+ def test_to_xml
1502
+ xml = topics(:first).to_xml(:indent => 0, :skip_instruct => true)
1503
+ bonus_time_in_current_timezone = topics(:first).bonus_time.xmlschema
1504
+ written_on_in_current_timezone = topics(:first).written_on.xmlschema
1505
+ last_read_in_current_timezone = topics(:first).last_read.xmlschema
1506
+ assert_equal "<topic>", xml.first(7)
1507
+ assert xml.include?(%(<title>The First Topic</title>))
1508
+ assert xml.include?(%(<author-name>David</author-name>))
1509
+ assert xml.include?(%(<id type="integer">1</id>))
1510
+ assert xml.include?(%(<replies-count type="integer">1</replies-count>))
1511
+ assert xml.include?(%(<written-on type="datetime">#{written_on_in_current_timezone}</written-on>))
1512
+ assert xml.include?(%(<content type="yaml">--- Have a nice day\n</content>))
1513
+ assert xml.include?(%(<author-email-address>david@loudthinking.com</author-email-address>))
1514
+ assert xml.match(%(<parent-id type="integer"></parent-id>))
1515
+ if current_adapter?(:SybaseAdapter, :SQLServerAdapter, :OracleAdapter)
1516
+ assert xml.include?(%(<last-read type="datetime">#{last_read_in_current_timezone}</last-read>))
1517
+ else
1518
+ assert xml.include?(%(<last-read type="date">2004-04-15</last-read>))
1519
+ end
1520
+ # Oracle and DB2 don't have true boolean or time-only fields
1521
+ unless current_adapter?(:OracleAdapter, :DB2Adapter)
1522
+ assert xml.include?(%(<approved type="boolean">false</approved>)), "Approved should be a boolean"
1523
+ assert xml.include?(%(<bonus-time type="datetime">#{bonus_time_in_current_timezone}</bonus-time>))
1524
+ end
1525
+ end
1526
+
1527
+ def test_to_xml_skipping_attributes
1528
+ xml = topics(:first).to_xml(:indent => 0, :skip_instruct => true, :except => [:title, :replies_count])
1529
+ assert_equal "<topic>", xml.first(7)
1530
+ assert !xml.include?(%(<title>The First Topic</title>))
1531
+ assert xml.include?(%(<author-name>David</author-name>))
1532
+
1533
+ xml = topics(:first).to_xml(:indent => 0, :skip_instruct => true, :except => [:title, :author_name, :replies_count])
1534
+ assert !xml.include?(%(<title>The First Topic</title>))
1535
+ assert !xml.include?(%(<author-name>David</author-name>))
1536
+ end
1537
+
1538
+ def test_to_xml_including_has_many_association
1539
+ xml = topics(:first).to_xml(:indent => 0, :skip_instruct => true, :include => :replies, :except => :replies_count)
1540
+ assert_equal "<topic>", xml.first(7)
1541
+ assert xml.include?(%(<replies><reply>))
1542
+ assert xml.include?(%(<title>The Second Topic's of the day</title>))
1543
+ end
1544
+
1545
+ def test_array_to_xml_including_has_many_association
1546
+ xml = [ topics(:first), topics(:second) ].to_xml(:indent => 0, :skip_instruct => true, :include => :replies)
1547
+ assert xml.include?(%(<replies><reply>))
1548
+ end
1549
+
1550
+ def test_array_to_xml_including_methods
1551
+ xml = [ topics(:first), topics(:second) ].to_xml(:indent => 0, :skip_instruct => true, :methods => [ :topic_id ])
1552
+ assert xml.include?(%(<topic-id type="integer">#{topics(:first).topic_id}</topic-id>)), xml
1553
+ assert xml.include?(%(<topic-id type="integer">#{topics(:second).topic_id}</topic-id>)), xml
1554
+ end
1555
+
1556
+ def test_array_to_xml_including_has_one_association
1557
+ xml = [ companies(:first_firm), companies(:rails_core) ].to_xml(:indent => 0, :skip_instruct => true, :include => :account)
1558
+ assert xml.include?(companies(:first_firm).account.to_xml(:indent => 0, :skip_instruct => true))
1559
+ assert xml.include?(companies(:rails_core).account.to_xml(:indent => 0, :skip_instruct => true))
1560
+ end
1561
+
1562
+ def test_array_to_xml_including_belongs_to_association
1563
+ xml = [ companies(:first_client), companies(:second_client), companies(:another_client) ].to_xml(:indent => 0, :skip_instruct => true, :include => :firm)
1564
+ assert xml.include?(companies(:first_client).to_xml(:indent => 0, :skip_instruct => true))
1565
+ assert xml.include?(companies(:second_client).firm.to_xml(:indent => 0, :skip_instruct => true))
1566
+ assert xml.include?(companies(:another_client).firm.to_xml(:indent => 0, :skip_instruct => true))
1567
+ end
1568
+
1569
+ def test_to_xml_including_belongs_to_association
1570
+ xml = companies(:first_client).to_xml(:indent => 0, :skip_instruct => true, :include => :firm)
1571
+ assert !xml.include?("<firm>")
1572
+
1573
+ xml = companies(:second_client).to_xml(:indent => 0, :skip_instruct => true, :include => :firm)
1574
+ assert xml.include?("<firm>")
1575
+ end
1576
+
1577
+ def test_to_xml_including_multiple_associations
1578
+ xml = companies(:first_firm).to_xml(:indent => 0, :skip_instruct => true, :include => [ :clients, :account ])
1579
+ assert_equal "<firm>", xml.first(6)
1580
+ assert xml.include?(%(<account>))
1581
+ assert xml.include?(%(<clients><client>))
1582
+ end
1583
+
1584
+ def test_to_xml_including_multiple_associations_with_options
1585
+ xml = companies(:first_firm).to_xml(
1586
+ :indent => 0, :skip_instruct => true,
1587
+ :include => { :clients => { :only => :name } }
1588
+ )
1589
+
1590
+ assert_equal "<firm>", xml.first(6)
1591
+ assert xml.include?(%(<client><name>Summit</name></client>))
1592
+ assert xml.include?(%(<clients><client>))
1593
+ end
1594
+
1595
+ def test_to_xml_including_methods
1596
+ xml = Company.new.to_xml(:methods => :arbitrary_method, :skip_instruct => true)
1597
+ assert_equal "<company>", xml.first(9)
1598
+ assert xml.include?(%(<arbitrary-method>I am Jack's profound disappointment</arbitrary-method>))
1599
+ end
1600
+
1601
+ def test_except_attributes
1602
+ assert_equal(
1603
+ %w( author_name type id approved replies_count bonus_time written_on content author_email_address parent_id last_read),
1604
+ topics(:first).attributes(:except => :title).keys
1605
+ )
1606
+
1607
+ assert_equal(
1608
+ %w( replies_count bonus_time written_on content author_email_address parent_id last_read),
1609
+ topics(:first).attributes(:except => [ :title, :id, :type, :approved, :author_name ]).keys
1610
+ )
1611
+ end
1612
+
1613
+ def test_include_attributes
1614
+ assert_equal(%w( title ), topics(:first).attributes(:only => :title).keys)
1615
+ assert_equal(%w( title author_name type id approved ), topics(:first).attributes(:only => [ :title, :id, :type, :approved, :author_name ]).keys)
1616
+ end
1617
+
1618
+ def test_type_name_with_module_should_handle_beginning
1619
+ assert_equal 'ActiveRecord::Person', ActiveRecord::Base.send(:type_name_with_module, 'Person')
1620
+ assert_equal '::Person', ActiveRecord::Base.send(:type_name_with_module, '::Person')
1621
+ end
1622
+
1623
+ def test_to_param_should_return_string
1624
+ assert_kind_of String, Client.find(:first).to_param
1625
+ end
1626
+
1627
+ # FIXME: this test ought to run, but it needs to run sandboxed so that it
1628
+ # doesn't b0rk the current test environment by undefing everything.
1629
+ #
1630
+ #def test_dev_mode_memory_leak
1631
+ # counts = []
1632
+ # 2.times do
1633
+ # require_dependency 'fixtures/company'
1634
+ # Firm.find(:first)
1635
+ # Dependencies.clear
1636
+ # ActiveRecord::Base.reset_subclasses
1637
+ # Dependencies.remove_subclasses_for(ActiveRecord::Base)
1638
+ #
1639
+ # GC.start
1640
+ #
1641
+ # count = 0
1642
+ # ObjectSpace.each_object(Proc) { count += 1 }
1643
+ # counts << count
1644
+ # end
1645
+ # assert counts.last <= counts.first,
1646
+ # "expected last count (#{counts.last}) to be <= first count (#{counts.first})"
1647
+ #end
1648
+
1649
+ private
1650
+ def assert_readers(model, exceptions)
1651
+ expected_readers = Set.new(model.column_names - ['id'])
1652
+ expected_readers += expected_readers.map { |col| "#{col}?" }
1653
+ expected_readers -= exceptions
1654
+ assert_equal expected_readers, model.read_methods
1655
+ end
1656
+ end