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