ibm_db 4.0.0-x86-mingw32 → 5.0.2-x86-mingw32

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 (570) hide show
  1. checksums.yaml +5 -5
  2. data/MANIFEST +14 -14
  3. data/README +208 -208
  4. data/ext/Makefile +269 -0
  5. data/ext/Makefile.nt32 +181 -181
  6. data/ext/Makefile.nt32.191 +212 -212
  7. data/ext/extconf.rb +322 -291
  8. data/ext/gil_release_version +3 -0
  9. data/ext/ibm_db.c +11879 -11887
  10. data/ext/mkmf.log +110 -0
  11. data/ext/ruby_ibm_db.h +241 -241
  12. data/ext/ruby_ibm_db_cli.c +866 -866
  13. data/ext/ruby_ibm_db_cli.h +500 -500
  14. data/ext/unicode_support_version +3 -0
  15. data/init.rb +41 -41
  16. data/lib/IBM_DB.rb +27 -27
  17. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +3533 -3452
  18. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +5 -5
  19. data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
  20. data/lib/mswin32/ibm_db.rb +90 -90
  21. data/lib/mswin32/rb2x/i386/ibm_db.so +0 -0
  22. data/test/active_record/connection_adapters/fake_adapter.rb +49 -49
  23. data/test/assets/example.log +1 -1
  24. data/test/assets/test.txt +1 -1
  25. data/test/cases/adapter_test.rb +351 -351
  26. data/test/cases/adapters/mysql2/active_schema_test.rb +193 -193
  27. data/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -50
  28. data/test/cases/adapters/mysql2/boolean_test.rb +100 -100
  29. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +63 -63
  30. data/test/cases/adapters/mysql2/charset_collation_test.rb +54 -54
  31. data/test/cases/adapters/mysql2/connection_test.rb +210 -210
  32. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +45 -45
  33. data/test/cases/adapters/mysql2/enum_test.rb +26 -26
  34. data/test/cases/adapters/mysql2/explain_test.rb +21 -21
  35. data/test/cases/adapters/mysql2/json_test.rb +195 -195
  36. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +83 -83
  37. data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -152
  38. data/test/cases/adapters/mysql2/schema_migrations_test.rb +59 -59
  39. data/test/cases/adapters/mysql2/schema_test.rb +126 -126
  40. data/test/cases/adapters/mysql2/sp_test.rb +36 -36
  41. data/test/cases/adapters/mysql2/sql_types_test.rb +14 -14
  42. data/test/cases/adapters/mysql2/table_options_test.rb +42 -42
  43. data/test/cases/adapters/mysql2/unsigned_type_test.rb +66 -66
  44. data/test/cases/adapters/postgresql/active_schema_test.rb +98 -98
  45. data/test/cases/adapters/postgresql/array_test.rb +339 -339
  46. data/test/cases/adapters/postgresql/bit_string_test.rb +82 -82
  47. data/test/cases/adapters/postgresql/bytea_test.rb +134 -134
  48. data/test/cases/adapters/postgresql/case_insensitive_test.rb +26 -26
  49. data/test/cases/adapters/postgresql/change_schema_test.rb +38 -38
  50. data/test/cases/adapters/postgresql/cidr_test.rb +25 -25
  51. data/test/cases/adapters/postgresql/citext_test.rb +78 -78
  52. data/test/cases/adapters/postgresql/collation_test.rb +53 -53
  53. data/test/cases/adapters/postgresql/composite_test.rb +132 -132
  54. data/test/cases/adapters/postgresql/connection_test.rb +257 -257
  55. data/test/cases/adapters/postgresql/datatype_test.rb +92 -92
  56. data/test/cases/adapters/postgresql/domain_test.rb +47 -47
  57. data/test/cases/adapters/postgresql/enum_test.rb +91 -91
  58. data/test/cases/adapters/postgresql/explain_test.rb +20 -20
  59. data/test/cases/adapters/postgresql/extension_migration_test.rb +63 -63
  60. data/test/cases/adapters/postgresql/full_text_test.rb +44 -44
  61. data/test/cases/adapters/postgresql/geometric_test.rb +378 -378
  62. data/test/cases/adapters/postgresql/hstore_test.rb +382 -382
  63. data/test/cases/adapters/postgresql/infinity_test.rb +69 -69
  64. data/test/cases/adapters/postgresql/integer_test.rb +25 -25
  65. data/test/cases/adapters/postgresql/json_test.rb +237 -237
  66. data/test/cases/adapters/postgresql/ltree_test.rb +53 -53
  67. data/test/cases/adapters/postgresql/money_test.rb +96 -96
  68. data/test/cases/adapters/postgresql/network_test.rb +94 -94
  69. data/test/cases/adapters/postgresql/numbers_test.rb +49 -49
  70. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +405 -405
  71. data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -22
  72. data/test/cases/adapters/postgresql/quoting_test.rb +44 -44
  73. data/test/cases/adapters/postgresql/range_test.rb +343 -343
  74. data/test/cases/adapters/postgresql/referential_integrity_test.rb +111 -111
  75. data/test/cases/adapters/postgresql/rename_table_test.rb +34 -34
  76. data/test/cases/adapters/postgresql/schema_authorization_test.rb +119 -119
  77. data/test/cases/adapters/postgresql/schema_test.rb +597 -597
  78. data/test/cases/adapters/postgresql/serial_test.rb +154 -154
  79. data/test/cases/adapters/postgresql/statement_pool_test.rb +41 -41
  80. data/test/cases/adapters/postgresql/timestamp_test.rb +90 -90
  81. data/test/cases/adapters/postgresql/type_lookup_test.rb +33 -33
  82. data/test/cases/adapters/postgresql/utils_test.rb +62 -62
  83. data/test/cases/adapters/postgresql/uuid_test.rb +294 -294
  84. data/test/cases/adapters/postgresql/xml_test.rb +54 -54
  85. data/test/cases/adapters/sqlite3/collation_test.rb +53 -53
  86. data/test/cases/adapters/sqlite3/copy_table_test.rb +98 -98
  87. data/test/cases/adapters/sqlite3/explain_test.rb +21 -21
  88. data/test/cases/adapters/sqlite3/quoting_test.rb +101 -101
  89. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +441 -441
  90. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -24
  91. data/test/cases/adapters/sqlite3/statement_pool_test.rb +20 -20
  92. data/test/cases/aggregations_test.rb +168 -168
  93. data/test/cases/ar_schema_test.rb +146 -146
  94. data/test/cases/associations/association_scope_test.rb +16 -16
  95. data/test/cases/associations/belongs_to_associations_test.rb +1141 -1141
  96. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -41
  97. data/test/cases/associations/callbacks_test.rb +190 -190
  98. data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
  99. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
  100. data/test/cases/associations/eager_load_nested_include_test.rb +126 -126
  101. data/test/cases/associations/eager_singularization_test.rb +148 -148
  102. data/test/cases/associations/eager_test.rb +1514 -1514
  103. data/test/cases/associations/extension_test.rb +87 -87
  104. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +1004 -1004
  105. data/test/cases/associations/has_many_associations_test.rb +2501 -2501
  106. data/test/cases/associations/has_many_through_associations_test.rb +1271 -1271
  107. data/test/cases/associations/has_one_associations_test.rb +707 -707
  108. data/test/cases/associations/has_one_through_associations_test.rb +383 -383
  109. data/test/cases/associations/inner_join_association_test.rb +139 -139
  110. data/test/cases/associations/inverse_associations_test.rb +733 -733
  111. data/test/cases/associations/join_model_test.rb +777 -777
  112. data/test/cases/associations/left_outer_join_association_test.rb +88 -88
  113. data/test/cases/associations/nested_through_associations_test.rb +579 -579
  114. data/test/cases/associations/required_test.rb +102 -102
  115. data/test/cases/associations_test.rb +385 -385
  116. data/test/cases/attribute_decorators_test.rb +126 -125
  117. data/test/cases/attribute_methods/read_test.rb +60 -60
  118. data/test/cases/attribute_methods_test.rb +1009 -1009
  119. data/test/cases/attribute_set_test.rb +270 -270
  120. data/test/cases/attribute_test.rb +246 -246
  121. data/test/cases/attributes_test.rb +253 -253
  122. data/test/cases/autosave_association_test.rb +1708 -1708
  123. data/test/cases/base_test.rb +1713 -1713
  124. data/test/cases/batches_test.rb +489 -489
  125. data/test/cases/binary_test.rb +44 -44
  126. data/test/cases/bind_parameter_test.rb +110 -110
  127. data/test/cases/cache_key_test.rb +26 -25
  128. data/test/cases/calculations_test.rb +798 -798
  129. data/test/cases/callbacks_test.rb +636 -636
  130. data/test/cases/clone_test.rb +40 -40
  131. data/test/cases/coders/json_test.rb +15 -15
  132. data/test/cases/coders/yaml_column_test.rb +63 -63
  133. data/test/cases/collection_cache_key_test.rb +115 -115
  134. data/test/cases/column_alias_test.rb +17 -17
  135. data/test/cases/column_definition_test.rb +92 -92
  136. data/test/cases/comment_test.rb +145 -143
  137. data/test/cases/connection_adapters/adapter_leasing_test.rb +56 -56
  138. data/test/cases/connection_adapters/connection_handler_test.rb +160 -160
  139. data/test/cases/connection_adapters/connection_specification_test.rb +12 -12
  140. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +255 -255
  141. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +69 -69
  142. data/test/cases/connection_adapters/quoting_test.rb +13 -13
  143. data/test/cases/connection_adapters/schema_cache_test.rb +61 -61
  144. data/test/cases/connection_adapters/type_lookup_test.rb +118 -118
  145. data/test/cases/connection_management_test.rb +112 -112
  146. data/test/cases/connection_pool_test.rb +521 -521
  147. data/test/cases/connection_specification/resolver_test.rb +131 -131
  148. data/test/cases/core_test.rb +112 -112
  149. data/test/cases/counter_cache_test.rb +214 -214
  150. data/test/cases/custom_locking_test.rb +17 -17
  151. data/test/cases/database_statements_test.rb +34 -34
  152. data/test/cases/date_test.rb +44 -44
  153. data/test/cases/date_time_precision_test.rb +107 -106
  154. data/test/cases/date_time_test.rb +61 -61
  155. data/test/cases/defaults_test.rb +219 -218
  156. data/test/cases/dirty_test.rb +763 -763
  157. data/test/cases/disconnected_test.rb +30 -30
  158. data/test/cases/dup_test.rb +157 -157
  159. data/test/cases/enum_test.rb +444 -444
  160. data/test/cases/errors_test.rb +16 -16
  161. data/test/cases/explain_subscriber_test.rb +64 -64
  162. data/test/cases/explain_test.rb +87 -87
  163. data/test/cases/finder_respond_to_test.rb +60 -60
  164. data/test/cases/finder_test.rb +1294 -1294
  165. data/test/cases/fixture_set/file_test.rb +156 -156
  166. data/test/cases/fixtures_test.rb +988 -988
  167. data/test/cases/forbidden_attributes_protection_test.rb +165 -165
  168. data/test/cases/habtm_destroy_order_test.rb +61 -61
  169. data/test/cases/helper.rb +204 -204
  170. data/test/cases/hot_compatibility_test.rb +142 -142
  171. data/test/cases/i18n_test.rb +45 -45
  172. data/test/cases/inheritance_test.rb +606 -606
  173. data/test/cases/integration_test.rb +155 -155
  174. data/test/cases/invalid_connection_test.rb +24 -24
  175. data/test/cases/invertible_migration_test.rb +387 -387
  176. data/test/cases/json_serialization_test.rb +311 -311
  177. data/test/cases/locking_test.rb +493 -493
  178. data/test/cases/log_subscriber_test.rb +225 -225
  179. data/test/cases/migration/change_schema_test.rb +458 -458
  180. data/test/cases/migration/change_table_test.rb +256 -256
  181. data/test/cases/migration/column_attributes_test.rb +176 -176
  182. data/test/cases/migration/column_positioning_test.rb +56 -56
  183. data/test/cases/migration/columns_test.rb +310 -310
  184. data/test/cases/migration/command_recorder_test.rb +350 -350
  185. data/test/cases/migration/compatibility_test.rb +118 -118
  186. data/test/cases/migration/create_join_table_test.rb +157 -157
  187. data/test/cases/migration/foreign_key_test.rb +362 -360
  188. data/test/cases/migration/helper.rb +39 -39
  189. data/test/cases/migration/index_test.rb +218 -218
  190. data/test/cases/migration/logger_test.rb +36 -36
  191. data/test/cases/migration/pending_migrations_test.rb +52 -52
  192. data/test/cases/migration/references_foreign_key_test.rb +221 -216
  193. data/test/cases/migration/references_index_test.rb +101 -101
  194. data/test/cases/migration/references_statements_test.rb +136 -136
  195. data/test/cases/migration/rename_table_test.rb +93 -93
  196. data/test/cases/migration_test.rb +1157 -1157
  197. data/test/cases/migrator_test.rb +471 -470
  198. data/test/cases/mixin_test.rb +68 -68
  199. data/test/cases/modules_test.rb +172 -172
  200. data/test/cases/multiparameter_attributes_test.rb +372 -372
  201. data/test/cases/multiple_db_test.rb +122 -122
  202. data/test/cases/nested_attributes_test.rb +1098 -1098
  203. data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
  204. data/test/cases/persistence_test.rb +1001 -1001
  205. data/test/cases/pooled_connections_test.rb +81 -81
  206. data/test/cases/primary_keys_test.rb +376 -376
  207. data/test/cases/query_cache_test.rb +446 -446
  208. data/test/cases/quoting_test.rb +202 -202
  209. data/test/cases/readonly_test.rb +119 -119
  210. data/test/cases/reaper_test.rb +85 -85
  211. data/test/cases/reflection_test.rb +509 -509
  212. data/test/cases/relation/delegation_test.rb +63 -63
  213. data/test/cases/relation/merging_test.rb +157 -157
  214. data/test/cases/relation/mutation_test.rb +183 -183
  215. data/test/cases/relation/or_test.rb +92 -92
  216. data/test/cases/relation/predicate_builder_test.rb +16 -16
  217. data/test/cases/relation/record_fetch_warning_test.rb +40 -40
  218. data/test/cases/relation/where_chain_test.rb +105 -105
  219. data/test/cases/relation/where_clause_test.rb +182 -182
  220. data/test/cases/relation/where_test.rb +322 -322
  221. data/test/cases/relation_test.rb +328 -328
  222. data/test/cases/relations_test.rb +2026 -2026
  223. data/test/cases/reload_models_test.rb +22 -22
  224. data/test/cases/result_test.rb +90 -90
  225. data/test/cases/sanitize_test.rb +176 -176
  226. data/test/cases/schema_dumper_test.rb +457 -457
  227. data/test/cases/schema_loading_test.rb +52 -52
  228. data/test/cases/scoping/default_scoping_test.rb +528 -528
  229. data/test/cases/scoping/named_scoping_test.rb +561 -561
  230. data/test/cases/scoping/relation_scoping_test.rb +400 -400
  231. data/test/cases/secure_token_test.rb +32 -32
  232. data/test/cases/serialization_test.rb +104 -104
  233. data/test/cases/serialized_attribute_test.rb +364 -364
  234. data/test/cases/statement_cache_test.rb +136 -136
  235. data/test/cases/store_test.rb +195 -195
  236. data/test/cases/suppressor_test.rb +63 -63
  237. data/test/cases/tasks/database_tasks_test.rb +462 -462
  238. data/test/cases/tasks/mysql_rake_test.rb +345 -345
  239. data/test/cases/tasks/postgresql_rake_test.rb +304 -304
  240. data/test/cases/tasks/sqlite_rake_test.rb +220 -220
  241. data/test/cases/test_case.rb +131 -131
  242. data/test/cases/test_fixtures_test.rb +36 -36
  243. data/test/cases/time_precision_test.rb +103 -102
  244. data/test/cases/timestamp_test.rb +501 -501
  245. data/test/cases/touch_later_test.rb +121 -121
  246. data/test/cases/transaction_callbacks_test.rb +518 -518
  247. data/test/cases/transaction_isolation_test.rb +106 -106
  248. data/test/cases/transactions_test.rb +835 -834
  249. data/test/cases/type/adapter_specific_registry_test.rb +133 -133
  250. data/test/cases/type/date_time_test.rb +14 -14
  251. data/test/cases/type/integer_test.rb +27 -27
  252. data/test/cases/type/string_test.rb +22 -22
  253. data/test/cases/type/type_map_test.rb +177 -177
  254. data/test/cases/type_test.rb +39 -39
  255. data/test/cases/types_test.rb +24 -24
  256. data/test/cases/unconnected_test.rb +33 -33
  257. data/test/cases/validations/absence_validation_test.rb +73 -73
  258. data/test/cases/validations/association_validation_test.rb +97 -97
  259. data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
  260. data/test/cases/validations/i18n_validation_test.rb +86 -86
  261. data/test/cases/validations/length_validation_test.rb +79 -79
  262. data/test/cases/validations/presence_validation_test.rb +103 -103
  263. data/test/cases/validations/uniqueness_validation_test.rb +548 -548
  264. data/test/cases/validations_repair_helper.rb +19 -19
  265. data/test/cases/validations_test.rb +194 -194
  266. data/test/cases/view_test.rb +216 -216
  267. data/test/cases/yaml_serialization_test.rb +121 -121
  268. data/test/config.example.yml +97 -97
  269. data/test/config.rb +5 -5
  270. data/test/connections/native_ibm_db/connection.rb +44 -0
  271. data/test/fixtures/accounts.yml +29 -29
  272. data/test/fixtures/admin/accounts.yml +2 -2
  273. data/test/fixtures/admin/users.yml +10 -10
  274. data/test/fixtures/author_addresses.yml +17 -17
  275. data/test/fixtures/author_favorites.yml +3 -3
  276. data/test/fixtures/authors.yml +23 -23
  277. data/test/fixtures/bad_posts.yml +9 -9
  278. data/test/fixtures/binaries.yml +133 -133
  279. data/test/fixtures/books.yml +31 -31
  280. data/test/fixtures/bulbs.yml +5 -5
  281. data/test/fixtures/cars.yml +9 -9
  282. data/test/fixtures/categories.yml +19 -19
  283. data/test/fixtures/categories/special_categories.yml +9 -9
  284. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -4
  285. data/test/fixtures/categories_ordered.yml +7 -7
  286. data/test/fixtures/categories_posts.yml +31 -31
  287. data/test/fixtures/categorizations.yml +23 -23
  288. data/test/fixtures/clubs.yml +8 -8
  289. data/test/fixtures/collections.yml +3 -3
  290. data/test/fixtures/colleges.yml +3 -3
  291. data/test/fixtures/comments.yml +65 -65
  292. data/test/fixtures/companies.yml +67 -67
  293. data/test/fixtures/computers.yml +10 -10
  294. data/test/fixtures/content.yml +3 -3
  295. data/test/fixtures/content_positions.yml +3 -3
  296. data/test/fixtures/courses.yml +8 -8
  297. data/test/fixtures/customers.yml +25 -25
  298. data/test/fixtures/dashboards.yml +6 -6
  299. data/test/fixtures/dead_parrots.yml +5 -5
  300. data/test/fixtures/developers.yml +22 -22
  301. data/test/fixtures/developers_projects.yml +16 -16
  302. data/test/fixtures/dog_lovers.yml +7 -7
  303. data/test/fixtures/dogs.yml +4 -4
  304. data/test/fixtures/doubloons.yml +3 -3
  305. data/test/fixtures/edges.yml +5 -5
  306. data/test/fixtures/entrants.yml +14 -14
  307. data/test/fixtures/essays.yml +6 -6
  308. data/test/fixtures/faces.yml +11 -11
  309. data/test/fixtures/fk_test_has_fk.yml +3 -3
  310. data/test/fixtures/fk_test_has_pk.yml +1 -1
  311. data/test/fixtures/friendships.yml +4 -4
  312. data/test/fixtures/funny_jokes.yml +10 -10
  313. data/test/fixtures/interests.yml +33 -33
  314. data/test/fixtures/items.yml +3 -3
  315. data/test/fixtures/jobs.yml +7 -7
  316. data/test/fixtures/legacy_things.yml +3 -3
  317. data/test/fixtures/live_parrots.yml +4 -4
  318. data/test/fixtures/mateys.yml +4 -4
  319. data/test/fixtures/member_details.yml +8 -8
  320. data/test/fixtures/member_types.yml +6 -6
  321. data/test/fixtures/members.yml +11 -11
  322. data/test/fixtures/memberships.yml +34 -34
  323. data/test/fixtures/men.yml +5 -5
  324. data/test/fixtures/minimalistics.yml +2 -2
  325. data/test/fixtures/minivans.yml +5 -5
  326. data/test/fixtures/mixed_case_monkeys.yml +6 -6
  327. data/test/fixtures/mixins.yml +29 -29
  328. data/test/fixtures/movies.yml +7 -7
  329. data/test/fixtures/naked/yml/accounts.yml +1 -1
  330. data/test/fixtures/naked/yml/companies.yml +1 -1
  331. data/test/fixtures/naked/yml/courses.yml +1 -1
  332. data/test/fixtures/naked/yml/parrots.yml +2 -2
  333. data/test/fixtures/naked/yml/trees.yml +3 -3
  334. data/test/fixtures/nodes.yml +29 -29
  335. data/test/fixtures/organizations.yml +5 -5
  336. data/test/fixtures/other_comments.yml +6 -6
  337. data/test/fixtures/other_dogs.yml +2 -2
  338. data/test/fixtures/other_posts.yml +7 -7
  339. data/test/fixtures/other_topics.yml +42 -42
  340. data/test/fixtures/owners.yml +9 -9
  341. data/test/fixtures/parrots.yml +27 -27
  342. data/test/fixtures/parrots_pirates.yml +7 -7
  343. data/test/fixtures/people.yml +24 -24
  344. data/test/fixtures/peoples_treasures.yml +3 -3
  345. data/test/fixtures/pets.yml +19 -19
  346. data/test/fixtures/pirates.yml +12 -15
  347. data/test/fixtures/posts.yml +80 -80
  348. data/test/fixtures/price_estimates.yml +16 -16
  349. data/test/fixtures/products.yml +4 -4
  350. data/test/fixtures/projects.yml +7 -7
  351. data/test/fixtures/ratings.yml +14 -14
  352. data/test/fixtures/readers.yml +11 -11
  353. data/test/fixtures/references.yml +17 -17
  354. data/test/fixtures/reserved_words/distinct.yml +5 -5
  355. data/test/fixtures/reserved_words/distinct_select.yml +11 -11
  356. data/test/fixtures/reserved_words/group.yml +14 -14
  357. data/test/fixtures/reserved_words/select.yml +8 -8
  358. data/test/fixtures/reserved_words/values.yml +7 -7
  359. data/test/fixtures/ships.yml +6 -6
  360. data/test/fixtures/speedometers.yml +8 -8
  361. data/test/fixtures/sponsors.yml +12 -12
  362. data/test/fixtures/string_key_objects.yml +7 -7
  363. data/test/fixtures/subscribers.yml +10 -10
  364. data/test/fixtures/subscriptions.yml +12 -12
  365. data/test/fixtures/taggings.yml +78 -78
  366. data/test/fixtures/tags.yml +11 -11
  367. data/test/fixtures/tasks.yml +7 -7
  368. data/test/fixtures/teapots.yml +3 -3
  369. data/test/fixtures/to_be_linked/accounts.yml +2 -2
  370. data/test/fixtures/to_be_linked/users.yml +10 -10
  371. data/test/fixtures/topics.yml +49 -49
  372. data/test/fixtures/toys.yml +14 -14
  373. data/test/fixtures/traffic_lights.yml +9 -9
  374. data/test/fixtures/treasures.yml +10 -10
  375. data/test/fixtures/trees.yml +3 -3
  376. data/test/fixtures/uuid_children.yml +3 -3
  377. data/test/fixtures/uuid_parents.yml +2 -2
  378. data/test/fixtures/variants.yml +4 -4
  379. data/test/fixtures/vegetables.yml +19 -19
  380. data/test/fixtures/vertices.yml +3 -3
  381. data/test/fixtures/warehouse_things.yml +2 -2
  382. data/test/fixtures/zines.yml +5 -5
  383. data/test/migrations/10_urban/9_add_expressions.rb +11 -11
  384. data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -15
  385. data/test/migrations/magic/1_currencies_have_symbols.rb +12 -12
  386. data/test/migrations/missing/1000_people_have_middle_names.rb +9 -9
  387. data/test/migrations/missing/1_people_have_last_names.rb +9 -9
  388. data/test/migrations/missing/3_we_need_reminders.rb +12 -12
  389. data/test/migrations/missing/4_innocent_jointable.rb +12 -12
  390. data/test/migrations/rename/1_we_need_things.rb +11 -11
  391. data/test/migrations/rename/2_rename_things.rb +9 -9
  392. data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -9
  393. data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -9
  394. data/test/migrations/to_copy2/1_create_articles.rb +7 -7
  395. data/test/migrations/to_copy2/2_create_comments.rb +7 -7
  396. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -9
  397. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -9
  398. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -9
  399. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -7
  400. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -7
  401. data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -9
  402. data/test/migrations/valid/2_we_need_reminders.rb +12 -12
  403. data/test/migrations/valid/3_innocent_jointable.rb +12 -12
  404. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -9
  405. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +12 -12
  406. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +12 -12
  407. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -9
  408. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -12
  409. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -12
  410. data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -8
  411. data/test/models/admin.rb +5 -5
  412. data/test/models/admin/account.rb +3 -3
  413. data/test/models/admin/user.rb +40 -40
  414. data/test/models/aircraft.rb +5 -5
  415. data/test/models/arunit2_model.rb +3 -3
  416. data/test/models/author.rb +209 -209
  417. data/test/models/auto_id.rb +4 -4
  418. data/test/models/autoloadable/extra_firm.rb +2 -2
  419. data/test/models/binary.rb +2 -2
  420. data/test/models/bird.rb +12 -12
  421. data/test/models/book.rb +23 -23
  422. data/test/models/boolean.rb +2 -2
  423. data/test/models/bulb.rb +52 -52
  424. data/test/models/cake_designer.rb +3 -3
  425. data/test/models/car.rb +29 -29
  426. data/test/models/carrier.rb +2 -2
  427. data/test/models/cat.rb +10 -10
  428. data/test/models/categorization.rb +19 -19
  429. data/test/models/category.rb +35 -35
  430. data/test/models/chef.rb +8 -8
  431. data/test/models/citation.rb +3 -3
  432. data/test/models/club.rb +25 -25
  433. data/test/models/college.rb +10 -10
  434. data/test/models/column.rb +3 -3
  435. data/test/models/column_name.rb +3 -3
  436. data/test/models/comment.rb +76 -76
  437. data/test/models/company.rb +230 -230
  438. data/test/models/company_in_module.rb +98 -98
  439. data/test/models/computer.rb +3 -3
  440. data/test/models/contact.rb +41 -41
  441. data/test/models/content.rb +40 -40
  442. data/test/models/contract.rb +20 -20
  443. data/test/models/country.rb +7 -7
  444. data/test/models/course.rb +6 -6
  445. data/test/models/customer.rb +83 -83
  446. data/test/models/customer_carrier.rb +14 -14
  447. data/test/models/dashboard.rb +3 -3
  448. data/test/models/default.rb +2 -2
  449. data/test/models/department.rb +4 -4
  450. data/test/models/developer.rb +274 -274
  451. data/test/models/dog.rb +5 -5
  452. data/test/models/dog_lover.rb +5 -5
  453. data/test/models/doubloon.rb +12 -12
  454. data/test/models/drink_designer.rb +3 -3
  455. data/test/models/edge.rb +5 -5
  456. data/test/models/electron.rb +5 -5
  457. data/test/models/engine.rb +4 -4
  458. data/test/models/entrant.rb +3 -3
  459. data/test/models/essay.rb +5 -5
  460. data/test/models/event.rb +3 -3
  461. data/test/models/eye.rb +37 -37
  462. data/test/models/face.rb +9 -9
  463. data/test/models/friendship.rb +6 -6
  464. data/test/models/guid.rb +2 -2
  465. data/test/models/guitar.rb +4 -4
  466. data/test/models/hotel.rb +11 -11
  467. data/test/models/image.rb +3 -3
  468. data/test/models/interest.rb +5 -5
  469. data/test/models/invoice.rb +4 -4
  470. data/test/models/item.rb +7 -7
  471. data/test/models/job.rb +7 -7
  472. data/test/models/joke.rb +7 -7
  473. data/test/models/keyboard.rb +3 -3
  474. data/test/models/legacy_thing.rb +3 -3
  475. data/test/models/lesson.rb +11 -11
  476. data/test/models/line_item.rb +3 -3
  477. data/test/models/liquid.rb +4 -4
  478. data/test/models/man.rb +11 -11
  479. data/test/models/matey.rb +4 -4
  480. data/test/models/member.rb +42 -42
  481. data/test/models/member_detail.rb +8 -8
  482. data/test/models/member_type.rb +3 -3
  483. data/test/models/membership.rb +35 -35
  484. data/test/models/mentor.rb +2 -2
  485. data/test/models/minimalistic.rb +2 -2
  486. data/test/models/minivan.rb +9 -9
  487. data/test/models/mixed_case_monkey.rb +3 -3
  488. data/test/models/mocktail_designer.rb +2 -2
  489. data/test/models/molecule.rb +6 -6
  490. data/test/models/movie.rb +5 -5
  491. data/test/models/node.rb +5 -5
  492. data/test/models/non_primary_key.rb +2 -2
  493. data/test/models/notification.rb +3 -3
  494. data/test/models/order.rb +4 -4
  495. data/test/models/organization.rb +14 -14
  496. data/test/models/other_dog.rb +5 -5
  497. data/test/models/owner.rb +37 -37
  498. data/test/models/parrot.rb +28 -28
  499. data/test/models/person.rb +142 -142
  500. data/test/models/personal_legacy_thing.rb +4 -4
  501. data/test/models/pet.rb +18 -18
  502. data/test/models/pet_treasure.rb +6 -6
  503. data/test/models/pirate.rb +92 -92
  504. data/test/models/possession.rb +3 -3
  505. data/test/models/post.rb +273 -273
  506. data/test/models/price_estimate.rb +4 -4
  507. data/test/models/professor.rb +5 -5
  508. data/test/models/project.rb +40 -40
  509. data/test/models/publisher.rb +2 -2
  510. data/test/models/publisher/article.rb +4 -4
  511. data/test/models/publisher/magazine.rb +3 -3
  512. data/test/models/rating.rb +4 -4
  513. data/test/models/reader.rb +23 -23
  514. data/test/models/recipe.rb +3 -3
  515. data/test/models/record.rb +2 -2
  516. data/test/models/reference.rb +22 -22
  517. data/test/models/reply.rb +61 -61
  518. data/test/models/ship.rb +39 -39
  519. data/test/models/ship_part.rb +8 -8
  520. data/test/models/shop.rb +17 -17
  521. data/test/models/shop_account.rb +6 -6
  522. data/test/models/speedometer.rb +6 -6
  523. data/test/models/sponsor.rb +7 -7
  524. data/test/models/string_key_object.rb +3 -3
  525. data/test/models/student.rb +4 -4
  526. data/test/models/subject.rb +16 -16
  527. data/test/models/subscriber.rb +8 -8
  528. data/test/models/subscription.rb +4 -4
  529. data/test/models/tag.rb +13 -13
  530. data/test/models/tagging.rb +13 -13
  531. data/test/models/task.rb +5 -5
  532. data/test/models/topic.rb +118 -118
  533. data/test/models/toy.rb +6 -6
  534. data/test/models/traffic_light.rb +4 -4
  535. data/test/models/treasure.rb +14 -14
  536. data/test/models/treaty.rb +7 -7
  537. data/test/models/tree.rb +3 -3
  538. data/test/models/tuning_peg.rb +4 -4
  539. data/test/models/tyre.rb +11 -11
  540. data/test/models/user.rb +14 -14
  541. data/test/models/uuid_child.rb +3 -3
  542. data/test/models/uuid_item.rb +6 -6
  543. data/test/models/uuid_parent.rb +3 -3
  544. data/test/models/vegetables.rb +24 -24
  545. data/test/models/vehicle.rb +6 -6
  546. data/test/models/vertex.rb +9 -9
  547. data/test/models/warehouse_thing.rb +5 -5
  548. data/test/models/wheel.rb +3 -3
  549. data/test/models/without_table.rb +3 -3
  550. data/test/models/zine.rb +3 -3
  551. data/test/schema/i5/ibm_db_specific_schema.rb +137 -0
  552. data/test/schema/ids/ibm_db_specific_schema.rb +140 -0
  553. data/test/schema/luw/ibm_db_specific_schema.rb +137 -0
  554. data/test/schema/mysql2_specific_schema.rb +68 -68
  555. data/test/schema/oracle_specific_schema.rb +40 -40
  556. data/test/schema/postgresql_specific_schema.rb +114 -114
  557. data/test/schema/schema.rb +1057 -1057
  558. data/test/schema/schema.rb.original +1057 -1057
  559. data/test/schema/sqlite_specific_schema.rb +18 -18
  560. data/test/schema/zOS/ibm_db_specific_schema.rb +208 -0
  561. data/test/support/config.rb +43 -43
  562. data/test/support/connection.rb +23 -23
  563. data/test/support/connection_helper.rb +14 -14
  564. data/test/support/ddl_helper.rb +8 -8
  565. data/test/support/schema_dumping_helper.rb +20 -20
  566. data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -22
  567. data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -182
  568. metadata +24 -13
  569. data/test/fixtures/author_addresses.original +0 -11
  570. data/test/fixtures/authors.original +0 -17
@@ -1,372 +1,372 @@
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
- Topic.reset_column_information
203
- attributes = {
204
- "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
205
- "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
206
- }
207
- topic = Topic.find(1)
208
- topic.attributes = attributes
209
- assert_equal Time.utc(2004, 6, 24, 23, 24, 0), topic.written_on
210
- assert_equal Time.utc(2004, 6, 24, 16, 24, 0), topic.written_on.time
211
- assert_equal Time.zone, topic.written_on.time_zone
212
- end
213
- ensure
214
- Topic.reset_column_information
215
- end
216
-
217
- def test_multiparameter_attributes_on_time_with_time_zone_aware_attributes_and_invalid_time_params
218
- with_timezone_config aware_attributes: true do
219
- Topic.reset_column_information
220
- attributes = {
221
- "written_on(1i)" => "2004", "written_on(2i)" => "", "written_on(3i)" => ""
222
- }
223
- topic = Topic.find(1)
224
- topic.attributes = attributes
225
- assert_nil topic.written_on
226
- end
227
- ensure
228
- Topic.reset_column_information
229
- end
230
-
231
- def test_multiparameter_attributes_on_time_with_time_zone_aware_attributes_false
232
- with_timezone_config default: :local, aware_attributes: false, zone: -28800 do
233
- attributes = {
234
- "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
235
- "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
236
- }
237
- topic = Topic.find(1)
238
- topic.attributes = attributes
239
- assert_equal Time.local(2004, 6, 24, 16, 24, 0), topic.written_on
240
- assert_equal false, topic.written_on.respond_to?(:time_zone)
241
- end
242
- end
243
-
244
- def test_multiparameter_attributes_on_time_with_skip_time_zone_conversion_for_attributes
245
- with_timezone_config default: :utc, aware_attributes: true, zone: -28800 do
246
- Topic.skip_time_zone_conversion_for_attributes = [:written_on]
247
- Topic.reset_column_information
248
- attributes = {
249
- "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
250
- "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
251
- }
252
- topic = Topic.find(1)
253
- topic.attributes = attributes
254
- assert_equal Time.utc(2004, 6, 24, 16, 24, 0), topic.written_on
255
- assert_equal false, topic.written_on.respond_to?(:time_zone)
256
- end
257
- ensure
258
- Topic.skip_time_zone_conversion_for_attributes = []
259
- Topic.reset_column_information
260
- end
261
-
262
- # Oracle does not have a TIME datatype.
263
- unless current_adapter?(:OracleAdapter)
264
- def test_multiparameter_attributes_on_time_only_column_with_time_zone_aware_attributes_does_not_do_time_zone_conversion
265
- with_timezone_config default: :utc, aware_attributes: true, zone: -28800 do
266
- Topic.reset_column_information
267
- attributes = {
268
- "bonus_time(1i)" => "2000", "bonus_time(2i)" => "1", "bonus_time(3i)" => "1",
269
- "bonus_time(4i)" => "16", "bonus_time(5i)" => "24"
270
- }
271
- topic = Topic.find(1)
272
- topic.attributes = attributes
273
- assert_equal Time.zone.local(2000, 1, 1, 16, 24, 0), topic.bonus_time
274
- assert_not topic.bonus_time.utc?
275
- end
276
- ensure
277
- Topic.reset_column_information
278
- end
279
- end
280
-
281
- def test_multiparameter_attributes_on_time_with_empty_seconds
282
- with_timezone_config default: :local do
283
- attributes = {
284
- "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
285
- "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => ""
286
- }
287
- topic = Topic.find(1)
288
- topic.attributes = attributes
289
- assert_equal Time.local(2004, 6, 24, 16, 24, 0), topic.written_on
290
- end
291
- end
292
-
293
- unless current_adapter? :OracleAdapter
294
- def test_multiparameter_attributes_setting_time_attribute
295
- topic = Topic.new( "bonus_time(4i)"=> "01", "bonus_time(5i)" => "05" )
296
- assert_equal 1, topic.bonus_time.hour
297
- assert_equal 5, topic.bonus_time.min
298
- end
299
- end
300
-
301
- def test_multiparameter_attributes_setting_date_attribute
302
- topic = Topic.new( "written_on(1i)" => "1952", "written_on(2i)" => "3", "written_on(3i)" => "11" )
303
- assert_equal 1952, topic.written_on.year
304
- assert_equal 3, topic.written_on.month
305
- assert_equal 11, topic.written_on.day
306
- end
307
-
308
- def test_multiparameter_attributes_setting_date_and_time_attribute
309
- topic = Topic.new(
310
- "written_on(1i)" => "1952",
311
- "written_on(2i)" => "3",
312
- "written_on(3i)" => "11",
313
- "written_on(4i)" => "13",
314
- "written_on(5i)" => "55")
315
- assert_equal 1952, topic.written_on.year
316
- assert_equal 3, topic.written_on.month
317
- assert_equal 11, topic.written_on.day
318
- assert_equal 13, topic.written_on.hour
319
- assert_equal 55, topic.written_on.min
320
- end
321
-
322
- def test_multiparameter_attributes_setting_time_but_not_date_on_date_field
323
- assert_raise( ActiveRecord::MultiparameterAssignmentErrors ) do
324
- Topic.new( "written_on(4i)" => "13", "written_on(5i)" => "55" )
325
- end
326
- end
327
-
328
- def test_multiparameter_assignment_of_aggregation
329
- customer = Customer.new
330
- address = Address.new("The Street", "The City", "The Country")
331
- attributes = { "address(1)" => address.street, "address(2)" => address.city, "address(3)" => address.country }
332
- customer.attributes = attributes
333
- assert_equal address, customer.address
334
- end
335
-
336
- def test_multiparameter_assignment_of_aggregation_out_of_order
337
- customer = Customer.new
338
- address = Address.new("The Street", "The City", "The Country")
339
- attributes = { "address(3)" => address.country, "address(2)" => address.city, "address(1)" => address.street }
340
- customer.attributes = attributes
341
- assert_equal address, customer.address
342
- end
343
-
344
- def test_multiparameter_assignment_of_aggregation_with_missing_values
345
- ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
346
- customer = Customer.new
347
- address = Address.new("The Street", "The City", "The Country")
348
- attributes = { "address(2)" => address.city, "address(3)" => address.country }
349
- customer.attributes = attributes
350
- end
351
- assert_equal("address", ex.errors[0].attribute)
352
- end
353
-
354
- def test_multiparameter_assignment_of_aggregation_with_blank_values
355
- customer = Customer.new
356
- address = Address.new("The Street", "The City", "The Country")
357
- attributes = { "address(1)" => "", "address(2)" => address.city, "address(3)" => address.country }
358
- customer.attributes = attributes
359
- assert_equal Address.new(nil, "The City", "The Country"), customer.address
360
- end
361
-
362
- def test_multiparameter_assignment_of_aggregation_with_large_index
363
- ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
364
- customer = Customer.new
365
- address = Address.new("The Street", "The City", "The Country")
366
- attributes = { "address(1)" => "The Street", "address(2)" => address.city, "address(3000)" => address.country }
367
- customer.attributes = attributes
368
- end
369
-
370
- assert_equal("address", ex.errors[0].attribute)
371
- end
372
- 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
+ Topic.reset_column_information
203
+ attributes = {
204
+ "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
205
+ "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
206
+ }
207
+ topic = Topic.find(1)
208
+ topic.attributes = attributes
209
+ assert_equal Time.utc(2004, 6, 24, 23, 24, 0), topic.written_on
210
+ assert_equal Time.utc(2004, 6, 24, 16, 24, 0), topic.written_on.time
211
+ assert_equal Time.zone, topic.written_on.time_zone
212
+ end
213
+ ensure
214
+ Topic.reset_column_information
215
+ end
216
+
217
+ def test_multiparameter_attributes_on_time_with_time_zone_aware_attributes_and_invalid_time_params
218
+ with_timezone_config aware_attributes: true do
219
+ Topic.reset_column_information
220
+ attributes = {
221
+ "written_on(1i)" => "2004", "written_on(2i)" => "", "written_on(3i)" => ""
222
+ }
223
+ topic = Topic.find(1)
224
+ topic.attributes = attributes
225
+ assert_nil topic.written_on
226
+ end
227
+ ensure
228
+ Topic.reset_column_information
229
+ end
230
+
231
+ def test_multiparameter_attributes_on_time_with_time_zone_aware_attributes_false
232
+ with_timezone_config default: :local, aware_attributes: false, zone: -28800 do
233
+ attributes = {
234
+ "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
235
+ "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
236
+ }
237
+ topic = Topic.find(1)
238
+ topic.attributes = attributes
239
+ assert_equal Time.local(2004, 6, 24, 16, 24, 0), topic.written_on
240
+ assert_equal false, topic.written_on.respond_to?(:time_zone)
241
+ end
242
+ end
243
+
244
+ def test_multiparameter_attributes_on_time_with_skip_time_zone_conversion_for_attributes
245
+ with_timezone_config default: :utc, aware_attributes: true, zone: -28800 do
246
+ Topic.skip_time_zone_conversion_for_attributes = [:written_on]
247
+ Topic.reset_column_information
248
+ attributes = {
249
+ "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
250
+ "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
251
+ }
252
+ topic = Topic.find(1)
253
+ topic.attributes = attributes
254
+ assert_equal Time.utc(2004, 6, 24, 16, 24, 0), topic.written_on
255
+ assert_equal false, topic.written_on.respond_to?(:time_zone)
256
+ end
257
+ ensure
258
+ Topic.skip_time_zone_conversion_for_attributes = []
259
+ Topic.reset_column_information
260
+ end
261
+
262
+ # Oracle does not have a TIME datatype.
263
+ unless current_adapter?(:OracleAdapter)
264
+ def test_multiparameter_attributes_on_time_only_column_with_time_zone_aware_attributes_does_not_do_time_zone_conversion
265
+ with_timezone_config default: :utc, aware_attributes: true, zone: -28800 do
266
+ Topic.reset_column_information
267
+ attributes = {
268
+ "bonus_time(1i)" => "2000", "bonus_time(2i)" => "1", "bonus_time(3i)" => "1",
269
+ "bonus_time(4i)" => "16", "bonus_time(5i)" => "24"
270
+ }
271
+ topic = Topic.find(1)
272
+ topic.attributes = attributes
273
+ assert_equal Time.zone.local(2000, 1, 1, 16, 24, 0), topic.bonus_time
274
+ assert_not topic.bonus_time.utc?
275
+ end
276
+ ensure
277
+ Topic.reset_column_information
278
+ end
279
+ end
280
+
281
+ def test_multiparameter_attributes_on_time_with_empty_seconds
282
+ with_timezone_config default: :local do
283
+ attributes = {
284
+ "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
285
+ "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => ""
286
+ }
287
+ topic = Topic.find(1)
288
+ topic.attributes = attributes
289
+ assert_equal Time.local(2004, 6, 24, 16, 24, 0), topic.written_on
290
+ end
291
+ end
292
+
293
+ unless current_adapter? :OracleAdapter
294
+ def test_multiparameter_attributes_setting_time_attribute
295
+ topic = Topic.new( "bonus_time(4i)"=> "01", "bonus_time(5i)" => "05" )
296
+ assert_equal 1, topic.bonus_time.hour
297
+ assert_equal 5, topic.bonus_time.min
298
+ end
299
+ end
300
+
301
+ def test_multiparameter_attributes_setting_date_attribute
302
+ topic = Topic.new( "written_on(1i)" => "1952", "written_on(2i)" => "3", "written_on(3i)" => "11" )
303
+ assert_equal 1952, topic.written_on.year
304
+ assert_equal 3, topic.written_on.month
305
+ assert_equal 11, topic.written_on.day
306
+ end
307
+
308
+ def test_multiparameter_attributes_setting_date_and_time_attribute
309
+ topic = Topic.new(
310
+ "written_on(1i)" => "1952",
311
+ "written_on(2i)" => "3",
312
+ "written_on(3i)" => "11",
313
+ "written_on(4i)" => "13",
314
+ "written_on(5i)" => "55")
315
+ assert_equal 1952, topic.written_on.year
316
+ assert_equal 3, topic.written_on.month
317
+ assert_equal 11, topic.written_on.day
318
+ assert_equal 13, topic.written_on.hour
319
+ assert_equal 55, topic.written_on.min
320
+ end
321
+
322
+ def test_multiparameter_attributes_setting_time_but_not_date_on_date_field
323
+ assert_raise( ActiveRecord::MultiparameterAssignmentErrors ) do
324
+ Topic.new( "written_on(4i)" => "13", "written_on(5i)" => "55" )
325
+ end
326
+ end
327
+
328
+ def test_multiparameter_assignment_of_aggregation
329
+ customer = Customer.new
330
+ address = Address.new("The Street", "The City", "The Country")
331
+ attributes = { "address(1)" => address.street, "address(2)" => address.city, "address(3)" => address.country }
332
+ customer.attributes = attributes
333
+ assert_equal address, customer.address
334
+ end
335
+
336
+ def test_multiparameter_assignment_of_aggregation_out_of_order
337
+ customer = Customer.new
338
+ address = Address.new("The Street", "The City", "The Country")
339
+ attributes = { "address(3)" => address.country, "address(2)" => address.city, "address(1)" => address.street }
340
+ customer.attributes = attributes
341
+ assert_equal address, customer.address
342
+ end
343
+
344
+ def test_multiparameter_assignment_of_aggregation_with_missing_values
345
+ ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
346
+ customer = Customer.new
347
+ address = Address.new("The Street", "The City", "The Country")
348
+ attributes = { "address(2)" => address.city, "address(3)" => address.country }
349
+ customer.attributes = attributes
350
+ end
351
+ assert_equal("address", ex.errors[0].attribute)
352
+ end
353
+
354
+ def test_multiparameter_assignment_of_aggregation_with_blank_values
355
+ customer = Customer.new
356
+ address = Address.new("The Street", "The City", "The Country")
357
+ attributes = { "address(1)" => "", "address(2)" => address.city, "address(3)" => address.country }
358
+ customer.attributes = attributes
359
+ assert_equal Address.new(nil, "The City", "The Country"), customer.address
360
+ end
361
+
362
+ def test_multiparameter_assignment_of_aggregation_with_large_index
363
+ ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
364
+ customer = Customer.new
365
+ address = Address.new("The Street", "The City", "The Country")
366
+ attributes = { "address(1)" => "The Street", "address(2)" => address.city, "address(3000)" => address.country }
367
+ customer.attributes = attributes
368
+ end
369
+
370
+ assert_equal("address", ex.errors[0].attribute)
371
+ end
372
+ end