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