ibm_db 3.0.4 → 3.0.5

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 (459) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +4 -1
  3. data/LICENSE +1 -1
  4. data/MANIFEST +14 -14
  5. data/README +225 -225
  6. data/ext/Makefile.nt32 +181 -181
  7. data/ext/Makefile.nt32.191 +212 -212
  8. data/ext/extconf.rb +291 -291
  9. data/ext/ibm_db.c +11887 -11884
  10. data/ext/ruby_ibm_db.h +241 -241
  11. data/ext/ruby_ibm_db_cli.c +866 -866
  12. data/ext/ruby_ibm_db_cli.h +500 -500
  13. data/init.rb +41 -41
  14. data/lib/IBM_DB.rb +27 -27
  15. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +3177 -3177
  16. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +1 -1
  17. data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
  18. data/test/active_record/connection_adapters/fake_adapter.rb +46 -46
  19. data/test/assets/example.log +1 -1
  20. data/test/assets/test.txt +1 -1
  21. data/test/cases/adapter_test.rb +276 -261
  22. data/test/cases/aggregations_test.rb +158 -158
  23. data/test/cases/ar_schema_test.rb +161 -161
  24. data/test/cases/associations/association_scope_test.rb +21 -21
  25. data/test/cases/associations/belongs_to_associations_test.rb +1029 -1029
  26. data/test/cases/associations/callbacks_test.rb +192 -192
  27. data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
  28. data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +26 -26
  29. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
  30. data/test/cases/associations/eager_load_nested_include_test.rb +128 -128
  31. data/test/cases/associations/eager_singularization_test.rb +148 -148
  32. data/test/cases/associations/eager_test.rb +1429 -1411
  33. data/test/cases/associations/extension_test.rb +82 -82
  34. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +972 -932
  35. data/test/cases/associations/has_many_associations_test.rb +2182 -2162
  36. data/test/cases/associations/has_many_through_associations_test.rb +1204 -1204
  37. data/test/cases/associations/has_one_associations_test.rb +610 -610
  38. data/test/cases/associations/has_one_through_associations_test.rb +380 -380
  39. data/test/cases/associations/inner_join_association_test.rb +139 -139
  40. data/test/cases/associations/inverse_associations_test.rb +706 -693
  41. data/test/cases/associations/join_model_test.rb +754 -754
  42. data/test/cases/associations/nested_through_associations_test.rb +579 -579
  43. data/test/cases/associations/required_test.rb +82 -82
  44. data/test/cases/associations_test.rb +380 -380
  45. data/test/cases/attribute_decorators_test.rb +125 -125
  46. data/test/cases/attribute_methods/read_test.rb +60 -60
  47. data/test/cases/attribute_methods/serialization_test.rb +29 -29
  48. data/test/cases/attribute_methods_test.rb +952 -952
  49. data/test/cases/attribute_set_test.rb +210 -200
  50. data/test/cases/attribute_test.rb +180 -180
  51. data/test/cases/attributes_test.rb +136 -136
  52. data/test/cases/autosave_association_test.rb +1595 -1595
  53. data/test/cases/base_test.rb +1664 -1638
  54. data/test/cases/batches_test.rb +212 -212
  55. data/test/cases/binary_test.rb +52 -52
  56. data/test/cases/bind_parameter_test.rb +100 -100
  57. data/test/cases/calculations_test.rb +646 -646
  58. data/test/cases/callbacks_test.rb +543 -543
  59. data/test/cases/clone_test.rb +40 -40
  60. data/test/cases/coders/yaml_column_test.rb +63 -63
  61. data/test/cases/column_alias_test.rb +17 -17
  62. data/test/cases/column_definition_test.rb +123 -123
  63. data/test/cases/connection_adapters/adapter_leasing_test.rb +54 -54
  64. data/test/cases/connection_adapters/connection_handler_test.rb +53 -53
  65. data/test/cases/connection_adapters/connection_specification_test.rb +12 -12
  66. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +293 -293
  67. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +65 -65
  68. data/test/cases/connection_adapters/quoting_test.rb +13 -13
  69. data/test/cases/connection_adapters/schema_cache_test.rb +56 -56
  70. data/test/cases/connection_adapters/type_lookup_test.rb +110 -110
  71. data/test/cases/connection_management_test.rb +122 -122
  72. data/test/cases/connection_pool_test.rb +346 -346
  73. data/test/cases/connection_specification/resolver_test.rb +116 -116
  74. data/test/cases/core_test.rb +112 -112
  75. data/test/cases/counter_cache_test.rb +209 -209
  76. data/test/cases/custom_locking_test.rb +17 -17
  77. data/test/cases/database_statements_test.rb +19 -19
  78. data/test/cases/date_time_test.rb +61 -61
  79. data/test/cases/defaults_test.rb +223 -223
  80. data/test/cases/dirty_test.rb +785 -775
  81. data/test/cases/disconnected_test.rb +28 -28
  82. data/test/cases/dup_test.rb +157 -157
  83. data/test/cases/enum_test.rb +290 -290
  84. data/test/cases/explain_subscriber_test.rb +64 -64
  85. data/test/cases/explain_test.rb +76 -76
  86. data/test/cases/finder_respond_to_test.rb +60 -60
  87. data/test/cases/finder_test.rb +1169 -1166
  88. data/test/cases/fixture_set/file_test.rb +138 -138
  89. data/test/cases/fixtures_test.rb +908 -897
  90. data/test/cases/forbidden_attributes_protection_test.rb +99 -99
  91. data/test/cases/habtm_destroy_order_test.rb +61 -61
  92. data/test/cases/helper.rb +210 -210
  93. data/test/cases/hot_compatibility_test.rb +54 -54
  94. data/test/cases/i18n_test.rb +45 -45
  95. data/test/cases/inheritance_test.rb +375 -375
  96. data/test/cases/integration_test.rb +139 -139
  97. data/test/cases/invalid_connection_test.rb +22 -22
  98. data/test/cases/invalid_date_test.rb +32 -32
  99. data/test/cases/invertible_migration_test.rb +295 -295
  100. data/test/cases/json_serialization_test.rb +302 -302
  101. data/test/cases/locking_test.rb +477 -477
  102. data/test/cases/log_subscriber_test.rb +136 -136
  103. data/test/cases/migration/change_schema_test - Copy.rb +448 -448
  104. data/test/cases/migration/change_schema_test.rb +512 -472
  105. data/test/cases/migration/change_table_test.rb +224 -224
  106. data/test/cases/migration/column_attributes_test.rb +192 -192
  107. data/test/cases/migration/column_positioning_test.rb +56 -56
  108. data/test/cases/migration/columns_test.rb +304 -304
  109. data/test/cases/migration/command_recorder_test.rb +305 -305
  110. data/test/cases/migration/create_join_table_test.rb +148 -148
  111. data/test/cases/migration/foreign_key_test - Changed.rb +325 -325
  112. data/test/cases/migration/foreign_key_test.rb +328 -360
  113. data/test/cases/migration/helper.rb +39 -39
  114. data/test/cases/migration/index_test.rb +216 -216
  115. data/test/cases/migration/logger_test.rb +36 -36
  116. data/test/cases/migration/pending_migrations_test.rb +53 -53
  117. data/test/cases/migration/references_foreign_key_test.rb +169 -214
  118. data/test/cases/migration/references_index_test.rb +101 -101
  119. data/test/cases/migration/references_statements_test.rb +116 -116
  120. data/test/cases/migration/rename_table_test.rb +93 -93
  121. data/test/cases/migration/table_and_index_test.rb +24 -24
  122. data/test/cases/migration_test.rb +959 -959
  123. data/test/cases/migrator_test.rb +388 -388
  124. data/test/cases/mixin_test.rb +70 -70
  125. data/test/cases/modules_test.rb +173 -173
  126. data/test/cases/multiparameter_attributes_test.rb +350 -350
  127. data/test/cases/multiple_db_test.rb +115 -115
  128. data/test/cases/nested_attributes_test.rb +1070 -1057
  129. data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
  130. data/test/cases/persistence_test.rb +909 -909
  131. data/test/cases/pooled_connections_test.rb +81 -81
  132. data/test/cases/primary_keys_test.rb +237 -237
  133. data/test/cases/query_cache_test.rb +326 -326
  134. data/test/cases/quoting_test.rb +156 -156
  135. data/test/cases/readonly_test.rb +118 -118
  136. data/test/cases/reaper_test.rb +85 -85
  137. data/test/cases/reflection_test.rb +463 -454
  138. data/test/cases/relation/delegation_test.rb +68 -68
  139. data/test/cases/relation/merging_test.rb +161 -161
  140. data/test/cases/relation/mutation_test.rb +165 -165
  141. data/test/cases/relation/predicate_builder_test.rb +14 -14
  142. data/test/cases/relation/where_chain_test.rb +181 -181
  143. data/test/cases/relation/where_test.rb +300 -300
  144. data/test/cases/relation/where_test2.rb +36 -36
  145. data/test/cases/relation_test.rb +319 -297
  146. data/test/cases/relations_test.rb +1815 -1815
  147. data/test/cases/reload_models_test.rb +22 -22
  148. data/test/cases/result_test.rb +80 -80
  149. data/test/cases/sanitize_test.rb +83 -83
  150. data/test/cases/schema_dumper_test.rb +463 -463
  151. data/test/cases/scoping/default_scoping_test.rb +454 -454
  152. data/test/cases/scoping/named_scoping_test.rb +524 -524
  153. data/test/cases/scoping/relation_scoping_test.rb +357 -357
  154. data/test/cases/serialization_test.rb +104 -104
  155. data/test/cases/serialized_attribute_test.rb +277 -277
  156. data/test/cases/statement_cache_test.rb +98 -98
  157. data/test/cases/store_test.rb +194 -194
  158. data/test/cases/tasks/database_tasks_test.rb +398 -396
  159. data/test/cases/tasks/mysql_rake_test.rb +324 -311
  160. data/test/cases/tasks/postgresql_rake_test.rb +250 -245
  161. data/test/cases/tasks/sqlite_rake_test.rb +193 -193
  162. data/test/cases/test_case.rb +123 -123
  163. data/test/cases/timestamp_test.rb +467 -468
  164. data/test/cases/transaction_callbacks_test.rb +452 -452
  165. data/test/cases/transaction_isolation_test.rb +106 -106
  166. data/test/cases/transactions_test.rb +817 -817
  167. data/test/cases/type/decimal_test.rb +56 -51
  168. data/test/cases/type/integer_test.rb +121 -121
  169. data/test/cases/type/string_test.rb +36 -36
  170. data/test/cases/type/type_map_test.rb +177 -177
  171. data/test/cases/type/unsigned_integer_test.rb +18 -18
  172. data/test/cases/types_test.rb +141 -141
  173. data/test/cases/unconnected_test.rb +33 -33
  174. data/test/cases/validations/association_validation_test.rb +86 -86
  175. data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
  176. data/test/cases/validations/i18n_validation_test.rb +90 -90
  177. data/test/cases/validations/length_validation_test.rb +47 -47
  178. data/test/cases/validations/presence_validation_test.rb +68 -68
  179. data/test/cases/validations/uniqueness_validation_test.rb +457 -434
  180. data/test/cases/validations_repair_helper.rb +23 -23
  181. data/test/cases/validations_test.rb +165 -165
  182. data/test/cases/view_test.rb +119 -113
  183. data/test/cases/xml_serialization_test.rb +457 -457
  184. data/test/cases/yaml_serialization_test.rb +126 -86
  185. data/test/config.rb +5 -5
  186. data/test/config.yml +154 -154
  187. data/test/connections/native_ibm_db/connection.rb +43 -43
  188. data/test/fixtures/accounts.yml +29 -29
  189. data/test/fixtures/admin/accounts.yml +2 -2
  190. data/test/fixtures/admin/randomly_named_a9.yml +7 -7
  191. data/test/fixtures/admin/randomly_named_b0.yml +7 -7
  192. data/test/fixtures/admin/users.yml +10 -10
  193. data/test/fixtures/author_addresses.yml +17 -17
  194. data/test/fixtures/author_favorites.yml +3 -3
  195. data/test/fixtures/authors.yml +23 -23
  196. data/test/fixtures/binaries.yml +133 -133
  197. data/test/fixtures/books.yml +11 -11
  198. data/test/fixtures/bulbs.yml +5 -5
  199. data/test/fixtures/cars.yml +9 -9
  200. data/test/fixtures/categories.yml +19 -19
  201. data/test/fixtures/categories/special_categories.yml +9 -9
  202. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -4
  203. data/test/fixtures/categories_ordered.yml +7 -7
  204. data/test/fixtures/categories_posts.yml +31 -31
  205. data/test/fixtures/categorizations.yml +23 -23
  206. data/test/fixtures/clubs.yml +8 -8
  207. data/test/fixtures/collections.yml +3 -3
  208. data/test/fixtures/colleges.yml +3 -3
  209. data/test/fixtures/comments.yml +65 -65
  210. data/test/fixtures/companies.yml +67 -67
  211. data/test/fixtures/computers.yml +10 -10
  212. data/test/fixtures/courses.yml +8 -8
  213. data/test/fixtures/customers.yml +25 -25
  214. data/test/fixtures/dashboards.yml +6 -6
  215. data/test/fixtures/developers.yml +21 -21
  216. data/test/fixtures/developers_projects.yml +16 -16
  217. data/test/fixtures/dog_lovers.yml +7 -7
  218. data/test/fixtures/dogs.yml +4 -4
  219. data/test/fixtures/doubloons.yml +3 -3
  220. data/test/fixtures/edges.yml +5 -5
  221. data/test/fixtures/entrants.yml +14 -14
  222. data/test/fixtures/essays.yml +6 -6
  223. data/test/fixtures/faces.yml +11 -11
  224. data/test/fixtures/fk_test_has_fk.yml +3 -3
  225. data/test/fixtures/fk_test_has_pk.yml +1 -1
  226. data/test/fixtures/friendships.yml +4 -4
  227. data/test/fixtures/funny_jokes.yml +10 -10
  228. data/test/fixtures/interests.yml +33 -33
  229. data/test/fixtures/items.yml +3 -3
  230. data/test/fixtures/jobs.yml +7 -7
  231. data/test/fixtures/legacy_things.yml +3 -3
  232. data/test/fixtures/mateys.yml +4 -4
  233. data/test/fixtures/member_details.yml +8 -8
  234. data/test/fixtures/member_types.yml +6 -6
  235. data/test/fixtures/members.yml +11 -11
  236. data/test/fixtures/memberships.yml +34 -34
  237. data/test/fixtures/men.yml +5 -5
  238. data/test/fixtures/minimalistics.yml +2 -2
  239. data/test/fixtures/minivans.yml +5 -5
  240. data/test/fixtures/mixed_case_monkeys.yml +6 -6
  241. data/test/fixtures/mixins.yml +29 -29
  242. data/test/fixtures/movies.yml +7 -7
  243. data/test/fixtures/naked/csv/accounts.csv +1 -1
  244. data/test/fixtures/naked/yml/accounts.yml +1 -1
  245. data/test/fixtures/naked/yml/companies.yml +1 -1
  246. data/test/fixtures/naked/yml/courses.yml +1 -1
  247. data/test/fixtures/organizations.yml +5 -5
  248. data/test/fixtures/other_topics.yml +42 -42
  249. data/test/fixtures/owners.yml +9 -9
  250. data/test/fixtures/parrots.yml +27 -27
  251. data/test/fixtures/parrots_pirates.yml +7 -7
  252. data/test/fixtures/people.yml +24 -24
  253. data/test/fixtures/peoples_treasures.yml +3 -3
  254. data/test/fixtures/pets.yml +19 -19
  255. data/test/fixtures/pirates.yml +12 -12
  256. data/test/fixtures/posts.yml +80 -80
  257. data/test/fixtures/price_estimates.yml +7 -7
  258. data/test/fixtures/products.yml +4 -4
  259. data/test/fixtures/projects.yml +7 -7
  260. data/test/fixtures/randomly_named_a9.yml +7 -7
  261. data/test/fixtures/ratings.yml +14 -14
  262. data/test/fixtures/readers.yml +11 -11
  263. data/test/fixtures/references.yml +17 -17
  264. data/test/fixtures/reserved_words/distinct.yml +5 -5
  265. data/test/fixtures/reserved_words/distinct_select.yml +11 -11
  266. data/test/fixtures/reserved_words/group.yml +14 -14
  267. data/test/fixtures/reserved_words/select.yml +8 -8
  268. data/test/fixtures/reserved_words/values.yml +7 -7
  269. data/test/fixtures/ships.yml +6 -6
  270. data/test/fixtures/speedometers.yml +8 -8
  271. data/test/fixtures/sponsors.yml +12 -12
  272. data/test/fixtures/string_key_objects.yml +7 -7
  273. data/test/fixtures/subscribers.yml +10 -10
  274. data/test/fixtures/subscriptions.yml +12 -12
  275. data/test/fixtures/taggings.yml +78 -78
  276. data/test/fixtures/tags.yml +11 -11
  277. data/test/fixtures/tasks.yml +7 -7
  278. data/test/fixtures/teapots.yml +3 -3
  279. data/test/fixtures/to_be_linked/accounts.yml +2 -2
  280. data/test/fixtures/to_be_linked/users.yml +10 -10
  281. data/test/fixtures/topics.yml +49 -49
  282. data/test/fixtures/toys.yml +14 -14
  283. data/test/fixtures/traffic_lights.yml +9 -9
  284. data/test/fixtures/treasures.yml +10 -10
  285. data/test/fixtures/uuid_children.yml +3 -3
  286. data/test/fixtures/uuid_parents.yml +2 -2
  287. data/test/fixtures/variants.yml +4 -4
  288. data/test/fixtures/vegetables.yml +19 -19
  289. data/test/fixtures/vertices.yml +3 -3
  290. data/test/fixtures/warehouse_things.yml +2 -2
  291. data/test/fixtures/zines.yml +5 -5
  292. data/test/ibm_db_test.rb +24 -24
  293. data/test/migrations/10_urban/9_add_expressions.rb +11 -11
  294. data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -15
  295. data/test/migrations/magic/1_currencies_have_symbols.rb +12 -12
  296. data/test/migrations/missing/1000_people_have_middle_names.rb +8 -8
  297. data/test/migrations/missing/1_people_have_last_names.rb +8 -8
  298. data/test/migrations/missing/3_we_need_reminders.rb +11 -11
  299. data/test/migrations/missing/4_innocent_jointable.rb +11 -11
  300. data/test/migrations/rename/1_we_need_things.rb +10 -10
  301. data/test/migrations/rename/2_rename_things.rb +8 -8
  302. data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -9
  303. data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -9
  304. data/test/migrations/to_copy2/1_create_articles.rb +7 -7
  305. data/test/migrations/to_copy2/2_create_comments.rb +7 -7
  306. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -9
  307. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -9
  308. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -9
  309. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -7
  310. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -7
  311. data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -9
  312. data/test/migrations/valid/2_we_need_reminders.rb +11 -11
  313. data/test/migrations/valid/3_innocent_jointable.rb +11 -11
  314. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -9
  315. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +11 -11
  316. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +11 -11
  317. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -9
  318. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -12
  319. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -12
  320. data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -8
  321. data/test/models/admin.rb +4 -4
  322. data/test/models/admin/account.rb +2 -2
  323. data/test/models/admin/randomly_named_c1.rb +3 -3
  324. data/test/models/admin/user.rb +40 -40
  325. data/test/models/aircraft.rb +4 -4
  326. data/test/models/arunit2_model.rb +3 -3
  327. data/test/models/author.rb +212 -212
  328. data/test/models/auto_id.rb +4 -4
  329. data/test/models/autoloadable/extra_firm.rb +2 -2
  330. data/test/models/binary.rb +1 -1
  331. data/test/models/bird.rb +12 -12
  332. data/test/models/book.rb +18 -18
  333. data/test/models/boolean.rb +2 -2
  334. data/test/models/bulb.rb +51 -51
  335. data/test/models/cake_designer.rb +3 -3
  336. data/test/models/car.rb +26 -26
  337. data/test/models/carrier.rb +2 -2
  338. data/test/models/categorization.rb +19 -19
  339. data/test/models/category.rb +35 -35
  340. data/test/models/chef.rb +7 -3
  341. data/test/models/citation.rb +3 -3
  342. data/test/models/club.rb +23 -23
  343. data/test/models/college.rb +10 -10
  344. data/test/models/column.rb +3 -3
  345. data/test/models/column_name.rb +3 -3
  346. data/test/models/comment.rb +64 -64
  347. data/test/models/company.rb +228 -225
  348. data/test/models/company_in_module.rb +98 -98
  349. data/test/models/computer.rb +3 -3
  350. data/test/models/contact.rb +41 -41
  351. data/test/models/contract.rb +20 -20
  352. data/test/models/country.rb +7 -7
  353. data/test/models/course.rb +6 -6
  354. data/test/models/customer.rb +77 -77
  355. data/test/models/customer_carrier.rb +14 -14
  356. data/test/models/dashboard.rb +3 -3
  357. data/test/models/default.rb +2 -2
  358. data/test/models/department.rb +4 -4
  359. data/test/models/developer.rb +255 -252
  360. data/test/models/dog.rb +5 -5
  361. data/test/models/dog_lover.rb +5 -5
  362. data/test/models/doubloon.rb +12 -12
  363. data/test/models/drink_designer.rb +3 -3
  364. data/test/models/edge.rb +5 -5
  365. data/test/models/electron.rb +5 -5
  366. data/test/models/engine.rb +4 -4
  367. data/test/models/entrant.rb +3 -3
  368. data/test/models/essay.rb +5 -5
  369. data/test/models/event.rb +2 -2
  370. data/test/models/eye.rb +37 -37
  371. data/test/models/face.rb +9 -9
  372. data/test/models/friendship.rb +6 -6
  373. data/test/models/guid.rb +1 -1
  374. data/test/models/hotel.rb +9 -6
  375. data/test/models/image.rb +3 -3
  376. data/test/models/interest.rb +5 -5
  377. data/test/models/invoice.rb +4 -4
  378. data/test/models/item.rb +7 -7
  379. data/test/models/job.rb +7 -7
  380. data/test/models/joke.rb +7 -7
  381. data/test/models/keyboard.rb +3 -3
  382. data/test/models/legacy_thing.rb +3 -3
  383. data/test/models/lesson.rb +11 -11
  384. data/test/models/line_item.rb +3 -3
  385. data/test/models/liquid.rb +4 -4
  386. data/test/models/man.rb +11 -11
  387. data/test/models/matey.rb +4 -4
  388. data/test/models/member.rb +41 -41
  389. data/test/models/member_detail.rb +7 -7
  390. data/test/models/member_type.rb +3 -3
  391. data/test/models/membership.rb +35 -35
  392. data/test/models/minimalistic.rb +2 -2
  393. data/test/models/minivan.rb +9 -9
  394. data/test/models/mixed_case_monkey.rb +3 -3
  395. data/test/models/molecule.rb +6 -6
  396. data/test/models/movie.rb +5 -5
  397. data/test/models/order.rb +4 -4
  398. data/test/models/organization.rb +14 -14
  399. data/test/models/owner.rb +34 -34
  400. data/test/models/parrot.rb +29 -29
  401. data/test/models/person.rb +143 -143
  402. data/test/models/personal_legacy_thing.rb +4 -4
  403. data/test/models/pet.rb +15 -15
  404. data/test/models/pirate.rb +92 -92
  405. data/test/models/possession.rb +3 -3
  406. data/test/models/post.rb +264 -264
  407. data/test/models/price_estimate.rb +4 -4
  408. data/test/models/professor.rb +5 -5
  409. data/test/models/project.rb +31 -29
  410. data/test/models/publisher.rb +2 -2
  411. data/test/models/publisher/article.rb +4 -4
  412. data/test/models/publisher/magazine.rb +3 -3
  413. data/test/models/randomly_named_c1.rb +3 -3
  414. data/test/models/rating.rb +4 -4
  415. data/test/models/reader.rb +23 -23
  416. data/test/models/record.rb +2 -2
  417. data/test/models/reference.rb +22 -22
  418. data/test/models/reply.rb +61 -61
  419. data/test/models/ship.rb +33 -33
  420. data/test/models/ship_part.rb +7 -7
  421. data/test/models/shop.rb +17 -17
  422. data/test/models/shop_account.rb +6 -6
  423. data/test/models/speedometer.rb +6 -6
  424. data/test/models/sponsor.rb +7 -7
  425. data/test/models/string_key_object.rb +3 -3
  426. data/test/models/student.rb +4 -4
  427. data/test/models/subject.rb +16 -16
  428. data/test/models/subscriber.rb +8 -8
  429. data/test/models/subscription.rb +4 -4
  430. data/test/models/tag.rb +7 -7
  431. data/test/models/tagging.rb +13 -13
  432. data/test/models/task.rb +5 -5
  433. data/test/models/topic.rb +124 -124
  434. data/test/models/toy.rb +6 -6
  435. data/test/models/traffic_light.rb +4 -4
  436. data/test/models/treasure.rb +14 -14
  437. data/test/models/treaty.rb +7 -7
  438. data/test/models/tyre.rb +11 -11
  439. data/test/models/uuid_child.rb +3 -3
  440. data/test/models/uuid_parent.rb +3 -3
  441. data/test/models/vegetables.rb +24 -24
  442. data/test/models/vehicle.rb +6 -6
  443. data/test/models/vertex.rb +9 -9
  444. data/test/models/warehouse_thing.rb +5 -5
  445. data/test/models/wheel.rb +3 -3
  446. data/test/models/without_table.rb +3 -3
  447. data/test/models/zine.rb +3 -3
  448. data/test/schema/mysql2_specific_schema.rb +58 -58
  449. data/test/schema/mysql_specific_schema.rb +70 -70
  450. data/test/schema/oracle_specific_schema.rb +43 -43
  451. data/test/schema/postgresql_specific_schema.rb +202 -202
  452. data/test/schema/schema.rb +952 -938
  453. data/test/schema/sqlite_specific_schema.rb +21 -21
  454. data/test/support/config.rb +43 -43
  455. data/test/support/connection.rb +22 -22
  456. data/test/support/connection_helper.rb +14 -14
  457. data/test/support/ddl_helper.rb +8 -8
  458. data/test/support/schema_dumping_helper.rb +20 -20
  459. metadata +3 -3
@@ -1,350 +1,350 @@
1
- require "cases/helper"
2
- require 'models/topic'
3
- require 'models/customer'
4
-
5
- class MultiParameterAttributeTest < ActiveRecord::TestCase
6
- fixtures :topics
7
-
8
- def test_multiparameter_attributes_on_date
9
- attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "6", "last_read(3i)" => "24" }
10
- topic = Topic.find(1)
11
- topic.attributes = attributes
12
- # note that extra #to_date call allows test to pass for Oracle, which
13
- # treats dates/times the same
14
- assert_date_from_db Date.new(2004, 6, 24), topic.last_read.to_date
15
- end
16
-
17
- def test_multiparameter_attributes_on_date_with_empty_year
18
- attributes = { "last_read(1i)" => "", "last_read(2i)" => "6", "last_read(3i)" => "24" }
19
- topic = Topic.find(1)
20
- topic.attributes = attributes
21
- # note that extra #to_date call allows test to pass for Oracle, which
22
- # treats dates/times the same
23
- assert_nil topic.last_read
24
- end
25
-
26
- def test_multiparameter_attributes_on_date_with_empty_month
27
- attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "", "last_read(3i)" => "24" }
28
- topic = Topic.find(1)
29
- topic.attributes = attributes
30
- # note that extra #to_date call allows test to pass for Oracle, which
31
- # treats dates/times the same
32
- assert_nil topic.last_read
33
- end
34
-
35
- def test_multiparameter_attributes_on_date_with_empty_day
36
- attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "6", "last_read(3i)" => "" }
37
- topic = Topic.find(1)
38
- topic.attributes = attributes
39
- # note that extra #to_date call allows test to pass for Oracle, which
40
- # treats dates/times the same
41
- assert_nil topic.last_read
42
- end
43
-
44
- def test_multiparameter_attributes_on_date_with_empty_day_and_year
45
- attributes = { "last_read(1i)" => "", "last_read(2i)" => "6", "last_read(3i)" => "" }
46
- topic = Topic.find(1)
47
- topic.attributes = attributes
48
- # note that extra #to_date call allows test to pass for Oracle, which
49
- # treats dates/times the same
50
- assert_nil topic.last_read
51
- end
52
-
53
- def test_multiparameter_attributes_on_date_with_empty_day_and_month
54
- attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "", "last_read(3i)" => "" }
55
- topic = Topic.find(1)
56
- topic.attributes = attributes
57
- # note that extra #to_date call allows test to pass for Oracle, which
58
- # treats dates/times the same
59
- assert_nil topic.last_read
60
- end
61
-
62
- def test_multiparameter_attributes_on_date_with_empty_year_and_month
63
- attributes = { "last_read(1i)" => "", "last_read(2i)" => "", "last_read(3i)" => "24" }
64
- topic = Topic.find(1)
65
- topic.attributes = attributes
66
- # note that extra #to_date call allows test to pass for Oracle, which
67
- # treats dates/times the same
68
- assert_nil topic.last_read
69
- end
70
-
71
- def test_multiparameter_attributes_on_date_with_all_empty
72
- attributes = { "last_read(1i)" => "", "last_read(2i)" => "", "last_read(3i)" => "" }
73
- topic = Topic.find(1)
74
- topic.attributes = attributes
75
- assert_nil topic.last_read
76
- end
77
-
78
- def test_multiparameter_attributes_on_time
79
- with_timezone_config default: :local do
80
- attributes = {
81
- "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
82
- "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
83
- }
84
- topic = Topic.find(1)
85
- topic.attributes = attributes
86
- assert_equal Time.local(2004, 6, 24, 16, 24, 0), topic.written_on
87
- end
88
- end
89
-
90
- def test_multiparameter_attributes_on_time_with_no_date
91
- ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
92
- attributes = {
93
- "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
94
- }
95
- topic = Topic.find(1)
96
- topic.attributes = attributes
97
- end
98
- assert_equal("written_on", ex.errors[0].attribute)
99
- end
100
-
101
- def test_multiparameter_attributes_on_time_with_invalid_time_params
102
- ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
103
- attributes = {
104
- "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
105
- "written_on(4i)" => "2004", "written_on(5i)" => "36", "written_on(6i)" => "64",
106
- }
107
- topic = Topic.find(1)
108
- topic.attributes = attributes
109
- end
110
- assert_equal("written_on", ex.errors[0].attribute)
111
- end
112
-
113
- def test_multiparameter_attributes_on_time_with_old_date
114
- attributes = {
115
- "written_on(1i)" => "1850", "written_on(2i)" => "6", "written_on(3i)" => "24",
116
- "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
117
- }
118
- topic = Topic.find(1)
119
- topic.attributes = attributes
120
- # testing against to_s(:db) representation because either a Time or a DateTime might be returned, depending on platform
121
- assert_equal "1850-06-24 16:24:00", topic.written_on.to_s(:db)
122
- end
123
-
124
- def test_multiparameter_attributes_on_time_will_raise_on_big_time_if_missing_date_parts
125
- ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
126
- attributes = {
127
- "written_on(4i)" => "16", "written_on(5i)" => "24"
128
- }
129
- topic = Topic.find(1)
130
- topic.attributes = attributes
131
- end
132
- assert_equal("written_on", ex.errors[0].attribute)
133
- end
134
-
135
- def test_multiparameter_attributes_on_time_with_raise_on_small_time_if_missing_date_parts
136
- ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
137
- attributes = {
138
- "written_on(4i)" => "16", "written_on(5i)" => "12", "written_on(6i)" => "02"
139
- }
140
- topic = Topic.find(1)
141
- topic.attributes = attributes
142
- end
143
- assert_equal("written_on", ex.errors[0].attribute)
144
- end
145
-
146
- def test_multiparameter_attributes_on_time_will_ignore_hour_if_missing
147
- with_timezone_config default: :local do
148
- attributes = {
149
- "written_on(1i)" => "2004", "written_on(2i)" => "12", "written_on(3i)" => "12",
150
- "written_on(5i)" => "12", "written_on(6i)" => "02"
151
- }
152
- topic = Topic.find(1)
153
- topic.attributes = attributes
154
- assert_equal Time.local(2004, 12, 12, 0, 12, 2), topic.written_on
155
- end
156
- end
157
-
158
- def test_multiparameter_attributes_on_time_will_ignore_hour_if_blank
159
- attributes = {
160
- "written_on(1i)" => "", "written_on(2i)" => "", "written_on(3i)" => "",
161
- "written_on(4i)" => "", "written_on(5i)" => "12", "written_on(6i)" => "02"
162
- }
163
- topic = Topic.find(1)
164
- topic.attributes = attributes
165
- assert_nil topic.written_on
166
- end
167
-
168
- def test_multiparameter_attributes_on_time_will_ignore_date_if_empty
169
- attributes = {
170
- "written_on(1i)" => "", "written_on(2i)" => "", "written_on(3i)" => "",
171
- "written_on(4i)" => "16", "written_on(5i)" => "24"
172
- }
173
- topic = Topic.find(1)
174
- topic.attributes = attributes
175
- assert_nil topic.written_on
176
- end
177
-
178
- def test_multiparameter_attributes_on_time_with_seconds_will_ignore_date_if_empty
179
- attributes = {
180
- "written_on(1i)" => "", "written_on(2i)" => "", "written_on(3i)" => "",
181
- "written_on(4i)" => "16", "written_on(5i)" => "12", "written_on(6i)" => "02"
182
- }
183
- topic = Topic.find(1)
184
- topic.attributes = attributes
185
- assert_nil topic.written_on
186
- end
187
-
188
- def test_multiparameter_attributes_on_time_with_utc
189
- with_timezone_config default: :utc do
190
- attributes = {
191
- "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
192
- "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
193
- }
194
- topic = Topic.find(1)
195
- topic.attributes = attributes
196
- assert_equal Time.utc(2004, 6, 24, 16, 24, 0), topic.written_on
197
- end
198
- end
199
-
200
- def test_multiparameter_attributes_on_time_with_time_zone_aware_attributes
201
- with_timezone_config default: :utc, aware_attributes: true, zone: -28800 do
202
- attributes = {
203
- "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
204
- "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
205
- }
206
- topic = Topic.find(1)
207
- topic.attributes = attributes
208
- assert_equal Time.utc(2004, 6, 24, 23, 24, 0), topic.written_on
209
- assert_equal Time.utc(2004, 6, 24, 16, 24, 0), topic.written_on.time
210
- assert_equal Time.zone, topic.written_on.time_zone
211
- end
212
- end
213
-
214
- def test_multiparameter_attributes_on_time_with_time_zone_aware_attributes_false
215
- with_timezone_config default: :local, aware_attributes: false, zone: -28800 do
216
- attributes = {
217
- "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
218
- "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
219
- }
220
- topic = Topic.find(1)
221
- topic.attributes = attributes
222
- assert_equal Time.local(2004, 6, 24, 16, 24, 0), topic.written_on
223
- assert_equal false, topic.written_on.respond_to?(:time_zone)
224
- end
225
- end
226
-
227
- def test_multiparameter_attributes_on_time_with_skip_time_zone_conversion_for_attributes
228
- with_timezone_config default: :utc, aware_attributes: true, zone: -28800 do
229
- Topic.skip_time_zone_conversion_for_attributes = [:written_on]
230
- attributes = {
231
- "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
232
- "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
233
- }
234
- topic = Topic.find(1)
235
- topic.attributes = attributes
236
- assert_equal Time.utc(2004, 6, 24, 16, 24, 0), topic.written_on
237
- assert_equal false, topic.written_on.respond_to?(:time_zone)
238
- end
239
- ensure
240
- Topic.skip_time_zone_conversion_for_attributes = []
241
- end
242
-
243
- # Oracle does not have a TIME datatype.
244
- unless current_adapter?(:OracleAdapter)
245
- def test_multiparameter_attributes_on_time_only_column_with_time_zone_aware_attributes_does_not_do_time_zone_conversion
246
- with_timezone_config default: :utc, aware_attributes: true, zone: -28800 do
247
- attributes = {
248
- "bonus_time(1i)" => "2000", "bonus_time(2i)" => "1", "bonus_time(3i)" => "1",
249
- "bonus_time(4i)" => "16", "bonus_time(5i)" => "24"
250
- }
251
- topic = Topic.find(1)
252
- topic.attributes = attributes
253
- assert_equal Time.utc(2000, 1, 1, 16, 24, 0), topic.bonus_time
254
- assert topic.bonus_time.utc?
255
- end
256
- end
257
- end
258
-
259
- def test_multiparameter_attributes_on_time_with_empty_seconds
260
- with_timezone_config default: :local do
261
- attributes = {
262
- "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
263
- "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => ""
264
- }
265
- topic = Topic.find(1)
266
- topic.attributes = attributes
267
- assert_equal Time.local(2004, 6, 24, 16, 24, 0), topic.written_on
268
- end
269
- end
270
-
271
- unless current_adapter? :OracleAdapter
272
- def test_multiparameter_attributes_setting_time_attribute
273
- topic = Topic.new( "bonus_time(4i)"=> "01", "bonus_time(5i)" => "05" )
274
- assert_equal 1, topic.bonus_time.hour
275
- assert_equal 5, topic.bonus_time.min
276
- end
277
- end
278
-
279
- def test_multiparameter_attributes_setting_date_attribute
280
- topic = Topic.new( "written_on(1i)" => "1952", "written_on(2i)" => "3", "written_on(3i)" => "11" )
281
- assert_equal 1952, topic.written_on.year
282
- assert_equal 3, topic.written_on.month
283
- assert_equal 11, topic.written_on.day
284
- end
285
-
286
- def test_multiparameter_attributes_setting_date_and_time_attribute
287
- topic = Topic.new(
288
- "written_on(1i)" => "1952",
289
- "written_on(2i)" => "3",
290
- "written_on(3i)" => "11",
291
- "written_on(4i)" => "13",
292
- "written_on(5i)" => "55")
293
- assert_equal 1952, topic.written_on.year
294
- assert_equal 3, topic.written_on.month
295
- assert_equal 11, topic.written_on.day
296
- assert_equal 13, topic.written_on.hour
297
- assert_equal 55, topic.written_on.min
298
- end
299
-
300
- def test_multiparameter_attributes_setting_time_but_not_date_on_date_field
301
- assert_raise( ActiveRecord::MultiparameterAssignmentErrors ) do
302
- Topic.new( "written_on(4i)" => "13", "written_on(5i)" => "55" )
303
- end
304
- end
305
-
306
- def test_multiparameter_assignment_of_aggregation
307
- customer = Customer.new
308
- address = Address.new("The Street", "The City", "The Country")
309
- attributes = { "address(1)" => address.street, "address(2)" => address.city, "address(3)" => address.country }
310
- customer.attributes = attributes
311
- assert_equal address, customer.address
312
- end
313
-
314
- def test_multiparameter_assignment_of_aggregation_out_of_order
315
- customer = Customer.new
316
- address = Address.new("The Street", "The City", "The Country")
317
- attributes = { "address(3)" => address.country, "address(2)" => address.city, "address(1)" => address.street }
318
- customer.attributes = attributes
319
- assert_equal address, customer.address
320
- end
321
-
322
- def test_multiparameter_assignment_of_aggregation_with_missing_values
323
- ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
324
- customer = Customer.new
325
- address = Address.new("The Street", "The City", "The Country")
326
- attributes = { "address(2)" => address.city, "address(3)" => address.country }
327
- customer.attributes = attributes
328
- end
329
- assert_equal("address", ex.errors[0].attribute)
330
- end
331
-
332
- def test_multiparameter_assignment_of_aggregation_with_blank_values
333
- customer = Customer.new
334
- address = Address.new("The Street", "The City", "The Country")
335
- attributes = { "address(1)" => "", "address(2)" => address.city, "address(3)" => address.country }
336
- customer.attributes = attributes
337
- assert_equal Address.new(nil, "The City", "The Country"), customer.address
338
- end
339
-
340
- def test_multiparameter_assignment_of_aggregation_with_large_index
341
- ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
342
- customer = Customer.new
343
- address = Address.new("The Street", "The City", "The Country")
344
- attributes = { "address(1)" => "The Street", "address(2)" => address.city, "address(3000)" => address.country }
345
- customer.attributes = attributes
346
- end
347
-
348
- assert_equal("address", ex.errors[0].attribute)
349
- end
350
- end
1
+ require "cases/helper"
2
+ require 'models/topic'
3
+ require 'models/customer'
4
+
5
+ class MultiParameterAttributeTest < ActiveRecord::TestCase
6
+ fixtures :topics
7
+
8
+ def test_multiparameter_attributes_on_date
9
+ attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "6", "last_read(3i)" => "24" }
10
+ topic = Topic.find(1)
11
+ topic.attributes = attributes
12
+ # note that extra #to_date call allows test to pass for Oracle, which
13
+ # treats dates/times the same
14
+ assert_date_from_db Date.new(2004, 6, 24), topic.last_read.to_date
15
+ end
16
+
17
+ def test_multiparameter_attributes_on_date_with_empty_year
18
+ attributes = { "last_read(1i)" => "", "last_read(2i)" => "6", "last_read(3i)" => "24" }
19
+ topic = Topic.find(1)
20
+ topic.attributes = attributes
21
+ # note that extra #to_date call allows test to pass for Oracle, which
22
+ # treats dates/times the same
23
+ assert_nil topic.last_read
24
+ end
25
+
26
+ def test_multiparameter_attributes_on_date_with_empty_month
27
+ attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "", "last_read(3i)" => "24" }
28
+ topic = Topic.find(1)
29
+ topic.attributes = attributes
30
+ # note that extra #to_date call allows test to pass for Oracle, which
31
+ # treats dates/times the same
32
+ assert_nil topic.last_read
33
+ end
34
+
35
+ def test_multiparameter_attributes_on_date_with_empty_day
36
+ attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "6", "last_read(3i)" => "" }
37
+ topic = Topic.find(1)
38
+ topic.attributes = attributes
39
+ # note that extra #to_date call allows test to pass for Oracle, which
40
+ # treats dates/times the same
41
+ assert_nil topic.last_read
42
+ end
43
+
44
+ def test_multiparameter_attributes_on_date_with_empty_day_and_year
45
+ attributes = { "last_read(1i)" => "", "last_read(2i)" => "6", "last_read(3i)" => "" }
46
+ topic = Topic.find(1)
47
+ topic.attributes = attributes
48
+ # note that extra #to_date call allows test to pass for Oracle, which
49
+ # treats dates/times the same
50
+ assert_nil topic.last_read
51
+ end
52
+
53
+ def test_multiparameter_attributes_on_date_with_empty_day_and_month
54
+ attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "", "last_read(3i)" => "" }
55
+ topic = Topic.find(1)
56
+ topic.attributes = attributes
57
+ # note that extra #to_date call allows test to pass for Oracle, which
58
+ # treats dates/times the same
59
+ assert_nil topic.last_read
60
+ end
61
+
62
+ def test_multiparameter_attributes_on_date_with_empty_year_and_month
63
+ attributes = { "last_read(1i)" => "", "last_read(2i)" => "", "last_read(3i)" => "24" }
64
+ topic = Topic.find(1)
65
+ topic.attributes = attributes
66
+ # note that extra #to_date call allows test to pass for Oracle, which
67
+ # treats dates/times the same
68
+ assert_nil topic.last_read
69
+ end
70
+
71
+ def test_multiparameter_attributes_on_date_with_all_empty
72
+ attributes = { "last_read(1i)" => "", "last_read(2i)" => "", "last_read(3i)" => "" }
73
+ topic = Topic.find(1)
74
+ topic.attributes = attributes
75
+ assert_nil topic.last_read
76
+ end
77
+
78
+ def test_multiparameter_attributes_on_time
79
+ with_timezone_config default: :local do
80
+ attributes = {
81
+ "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
82
+ "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
83
+ }
84
+ topic = Topic.find(1)
85
+ topic.attributes = attributes
86
+ assert_equal Time.local(2004, 6, 24, 16, 24, 0), topic.written_on
87
+ end
88
+ end
89
+
90
+ def test_multiparameter_attributes_on_time_with_no_date
91
+ ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
92
+ attributes = {
93
+ "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
94
+ }
95
+ topic = Topic.find(1)
96
+ topic.attributes = attributes
97
+ end
98
+ assert_equal("written_on", ex.errors[0].attribute)
99
+ end
100
+
101
+ def test_multiparameter_attributes_on_time_with_invalid_time_params
102
+ ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
103
+ attributes = {
104
+ "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
105
+ "written_on(4i)" => "2004", "written_on(5i)" => "36", "written_on(6i)" => "64",
106
+ }
107
+ topic = Topic.find(1)
108
+ topic.attributes = attributes
109
+ end
110
+ assert_equal("written_on", ex.errors[0].attribute)
111
+ end
112
+
113
+ def test_multiparameter_attributes_on_time_with_old_date
114
+ attributes = {
115
+ "written_on(1i)" => "1850", "written_on(2i)" => "6", "written_on(3i)" => "24",
116
+ "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
117
+ }
118
+ topic = Topic.find(1)
119
+ topic.attributes = attributes
120
+ # testing against to_s(:db) representation because either a Time or a DateTime might be returned, depending on platform
121
+ assert_equal "1850-06-24 16:24:00", topic.written_on.to_s(:db)
122
+ end
123
+
124
+ def test_multiparameter_attributes_on_time_will_raise_on_big_time_if_missing_date_parts
125
+ ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
126
+ attributes = {
127
+ "written_on(4i)" => "16", "written_on(5i)" => "24"
128
+ }
129
+ topic = Topic.find(1)
130
+ topic.attributes = attributes
131
+ end
132
+ assert_equal("written_on", ex.errors[0].attribute)
133
+ end
134
+
135
+ def test_multiparameter_attributes_on_time_with_raise_on_small_time_if_missing_date_parts
136
+ ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
137
+ attributes = {
138
+ "written_on(4i)" => "16", "written_on(5i)" => "12", "written_on(6i)" => "02"
139
+ }
140
+ topic = Topic.find(1)
141
+ topic.attributes = attributes
142
+ end
143
+ assert_equal("written_on", ex.errors[0].attribute)
144
+ end
145
+
146
+ def test_multiparameter_attributes_on_time_will_ignore_hour_if_missing
147
+ with_timezone_config default: :local do
148
+ attributes = {
149
+ "written_on(1i)" => "2004", "written_on(2i)" => "12", "written_on(3i)" => "12",
150
+ "written_on(5i)" => "12", "written_on(6i)" => "02"
151
+ }
152
+ topic = Topic.find(1)
153
+ topic.attributes = attributes
154
+ assert_equal Time.local(2004, 12, 12, 0, 12, 2), topic.written_on
155
+ end
156
+ end
157
+
158
+ def test_multiparameter_attributes_on_time_will_ignore_hour_if_blank
159
+ attributes = {
160
+ "written_on(1i)" => "", "written_on(2i)" => "", "written_on(3i)" => "",
161
+ "written_on(4i)" => "", "written_on(5i)" => "12", "written_on(6i)" => "02"
162
+ }
163
+ topic = Topic.find(1)
164
+ topic.attributes = attributes
165
+ assert_nil topic.written_on
166
+ end
167
+
168
+ def test_multiparameter_attributes_on_time_will_ignore_date_if_empty
169
+ attributes = {
170
+ "written_on(1i)" => "", "written_on(2i)" => "", "written_on(3i)" => "",
171
+ "written_on(4i)" => "16", "written_on(5i)" => "24"
172
+ }
173
+ topic = Topic.find(1)
174
+ topic.attributes = attributes
175
+ assert_nil topic.written_on
176
+ end
177
+
178
+ def test_multiparameter_attributes_on_time_with_seconds_will_ignore_date_if_empty
179
+ attributes = {
180
+ "written_on(1i)" => "", "written_on(2i)" => "", "written_on(3i)" => "",
181
+ "written_on(4i)" => "16", "written_on(5i)" => "12", "written_on(6i)" => "02"
182
+ }
183
+ topic = Topic.find(1)
184
+ topic.attributes = attributes
185
+ assert_nil topic.written_on
186
+ end
187
+
188
+ def test_multiparameter_attributes_on_time_with_utc
189
+ with_timezone_config default: :utc do
190
+ attributes = {
191
+ "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
192
+ "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
193
+ }
194
+ topic = Topic.find(1)
195
+ topic.attributes = attributes
196
+ assert_equal Time.utc(2004, 6, 24, 16, 24, 0), topic.written_on
197
+ end
198
+ end
199
+
200
+ def test_multiparameter_attributes_on_time_with_time_zone_aware_attributes
201
+ with_timezone_config default: :utc, aware_attributes: true, zone: -28800 do
202
+ attributes = {
203
+ "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
204
+ "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
205
+ }
206
+ topic = Topic.find(1)
207
+ topic.attributes = attributes
208
+ assert_equal Time.utc(2004, 6, 24, 23, 24, 0), topic.written_on
209
+ assert_equal Time.utc(2004, 6, 24, 16, 24, 0), topic.written_on.time
210
+ assert_equal Time.zone, topic.written_on.time_zone
211
+ end
212
+ end
213
+
214
+ def test_multiparameter_attributes_on_time_with_time_zone_aware_attributes_false
215
+ with_timezone_config default: :local, aware_attributes: false, zone: -28800 do
216
+ attributes = {
217
+ "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
218
+ "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
219
+ }
220
+ topic = Topic.find(1)
221
+ topic.attributes = attributes
222
+ assert_equal Time.local(2004, 6, 24, 16, 24, 0), topic.written_on
223
+ assert_equal false, topic.written_on.respond_to?(:time_zone)
224
+ end
225
+ end
226
+
227
+ def test_multiparameter_attributes_on_time_with_skip_time_zone_conversion_for_attributes
228
+ with_timezone_config default: :utc, aware_attributes: true, zone: -28800 do
229
+ Topic.skip_time_zone_conversion_for_attributes = [:written_on]
230
+ attributes = {
231
+ "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
232
+ "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
233
+ }
234
+ topic = Topic.find(1)
235
+ topic.attributes = attributes
236
+ assert_equal Time.utc(2004, 6, 24, 16, 24, 0), topic.written_on
237
+ assert_equal false, topic.written_on.respond_to?(:time_zone)
238
+ end
239
+ ensure
240
+ Topic.skip_time_zone_conversion_for_attributes = []
241
+ end
242
+
243
+ # Oracle does not have a TIME datatype.
244
+ unless current_adapter?(:OracleAdapter)
245
+ def test_multiparameter_attributes_on_time_only_column_with_time_zone_aware_attributes_does_not_do_time_zone_conversion
246
+ with_timezone_config default: :utc, aware_attributes: true, zone: -28800 do
247
+ attributes = {
248
+ "bonus_time(1i)" => "2000", "bonus_time(2i)" => "1", "bonus_time(3i)" => "1",
249
+ "bonus_time(4i)" => "16", "bonus_time(5i)" => "24"
250
+ }
251
+ topic = Topic.find(1)
252
+ topic.attributes = attributes
253
+ assert_equal Time.utc(2000, 1, 1, 16, 24, 0), topic.bonus_time
254
+ assert topic.bonus_time.utc?
255
+ end
256
+ end
257
+ end
258
+
259
+ def test_multiparameter_attributes_on_time_with_empty_seconds
260
+ with_timezone_config default: :local do
261
+ attributes = {
262
+ "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
263
+ "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => ""
264
+ }
265
+ topic = Topic.find(1)
266
+ topic.attributes = attributes
267
+ assert_equal Time.local(2004, 6, 24, 16, 24, 0), topic.written_on
268
+ end
269
+ end
270
+
271
+ unless current_adapter? :OracleAdapter
272
+ def test_multiparameter_attributes_setting_time_attribute
273
+ topic = Topic.new( "bonus_time(4i)"=> "01", "bonus_time(5i)" => "05" )
274
+ assert_equal 1, topic.bonus_time.hour
275
+ assert_equal 5, topic.bonus_time.min
276
+ end
277
+ end
278
+
279
+ def test_multiparameter_attributes_setting_date_attribute
280
+ topic = Topic.new( "written_on(1i)" => "1952", "written_on(2i)" => "3", "written_on(3i)" => "11" )
281
+ assert_equal 1952, topic.written_on.year
282
+ assert_equal 3, topic.written_on.month
283
+ assert_equal 11, topic.written_on.day
284
+ end
285
+
286
+ def test_multiparameter_attributes_setting_date_and_time_attribute
287
+ topic = Topic.new(
288
+ "written_on(1i)" => "1952",
289
+ "written_on(2i)" => "3",
290
+ "written_on(3i)" => "11",
291
+ "written_on(4i)" => "13",
292
+ "written_on(5i)" => "55")
293
+ assert_equal 1952, topic.written_on.year
294
+ assert_equal 3, topic.written_on.month
295
+ assert_equal 11, topic.written_on.day
296
+ assert_equal 13, topic.written_on.hour
297
+ assert_equal 55, topic.written_on.min
298
+ end
299
+
300
+ def test_multiparameter_attributes_setting_time_but_not_date_on_date_field
301
+ assert_raise( ActiveRecord::MultiparameterAssignmentErrors ) do
302
+ Topic.new( "written_on(4i)" => "13", "written_on(5i)" => "55" )
303
+ end
304
+ end
305
+
306
+ def test_multiparameter_assignment_of_aggregation
307
+ customer = Customer.new
308
+ address = Address.new("The Street", "The City", "The Country")
309
+ attributes = { "address(1)" => address.street, "address(2)" => address.city, "address(3)" => address.country }
310
+ customer.attributes = attributes
311
+ assert_equal address, customer.address
312
+ end
313
+
314
+ def test_multiparameter_assignment_of_aggregation_out_of_order
315
+ customer = Customer.new
316
+ address = Address.new("The Street", "The City", "The Country")
317
+ attributes = { "address(3)" => address.country, "address(2)" => address.city, "address(1)" => address.street }
318
+ customer.attributes = attributes
319
+ assert_equal address, customer.address
320
+ end
321
+
322
+ def test_multiparameter_assignment_of_aggregation_with_missing_values
323
+ ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
324
+ customer = Customer.new
325
+ address = Address.new("The Street", "The City", "The Country")
326
+ attributes = { "address(2)" => address.city, "address(3)" => address.country }
327
+ customer.attributes = attributes
328
+ end
329
+ assert_equal("address", ex.errors[0].attribute)
330
+ end
331
+
332
+ def test_multiparameter_assignment_of_aggregation_with_blank_values
333
+ customer = Customer.new
334
+ address = Address.new("The Street", "The City", "The Country")
335
+ attributes = { "address(1)" => "", "address(2)" => address.city, "address(3)" => address.country }
336
+ customer.attributes = attributes
337
+ assert_equal Address.new(nil, "The City", "The Country"), customer.address
338
+ end
339
+
340
+ def test_multiparameter_assignment_of_aggregation_with_large_index
341
+ ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
342
+ customer = Customer.new
343
+ address = Address.new("The Street", "The City", "The Country")
344
+ attributes = { "address(1)" => "The Street", "address(2)" => address.city, "address(3000)" => address.country }
345
+ customer.attributes = attributes
346
+ end
347
+
348
+ assert_equal("address", ex.errors[0].attribute)
349
+ end
350
+ end