ibm_db 5.2.0-x86-mingw32 → 5.4.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 (625) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +9 -0
  3. data/LICENSE +55 -18
  4. data/README +1 -1
  5. data/debug.log +1 -0
  6. data/ext/Makefile +28 -24
  7. data/ext/ibm_db.c +66 -65
  8. data/ext/ibm_db.o +0 -0
  9. data/ext/ibm_db.so +0 -0
  10. data/ext/mkmf.log +26 -24
  11. data/ext/ruby_ibm_db_cli.c +1 -0
  12. data/ext/ruby_ibm_db_cli.o +0 -0
  13. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +1520 -1282
  14. data/lib/ibm_db.so +1 -0
  15. data/lib/mswin32/ibm_db.rb +3 -1
  16. data/lib/mswin32/rb3x/i386/ruby30/ibm_db.so +0 -0
  17. data/lib/mswin32/rb3x/i386/ruby31/ibm_db.so +0 -0
  18. data/test/active_record/connection_adapters/fake_adapter.rb +5 -2
  19. data/test/activejob/destroy_association_async_test.rb +305 -0
  20. data/test/activejob/destroy_async_job_not_present_test.rb +31 -0
  21. data/test/activejob/helper.rb +15 -0
  22. data/test/assets/schema_dump_5_1.yml +345 -0
  23. data/test/cases/adapter_prevent_writes_test.rb +334 -0
  24. data/test/cases/adapter_test.rb +432 -218
  25. data/test/cases/adapters/mysql2/active_schema_test.rb +85 -75
  26. data/test/cases/adapters/mysql2/auto_increment_test.rb +34 -0
  27. data/test/cases/adapters/mysql2/bind_parameter_test.rb +5 -3
  28. data/test/cases/adapters/mysql2/boolean_test.rb +6 -4
  29. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +26 -24
  30. data/test/cases/adapters/mysql2/charset_collation_test.rb +20 -17
  31. data/test/cases/adapters/mysql2/connection_test.rb +48 -50
  32. data/test/cases/adapters/mysql2/count_deleted_rows_with_lock_test.rb +28 -0
  33. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +23 -19
  34. data/test/cases/adapters/mysql2/enum_test.rb +32 -11
  35. data/test/cases/adapters/mysql2/explain_test.rb +13 -11
  36. data/test/cases/adapters/mysql2/json_test.rb +17 -188
  37. data/test/cases/adapters/mysql2/mysql2_adapter_prevent_writes_test.rb +208 -0
  38. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +183 -28
  39. data/test/cases/adapters/mysql2/nested_deadlock_test.rb +75 -0
  40. data/test/cases/adapters/mysql2/optimizer_hints_test.rb +69 -0
  41. data/test/cases/adapters/mysql2/schema_migrations_test.rb +26 -21
  42. data/test/cases/adapters/mysql2/schema_test.rb +24 -22
  43. data/test/cases/adapters/mysql2/set_test.rb +32 -0
  44. data/test/cases/adapters/mysql2/sp_test.rb +10 -8
  45. data/test/cases/adapters/mysql2/sql_types_test.rb +8 -6
  46. data/test/cases/adapters/mysql2/table_options_test.rb +93 -10
  47. data/test/cases/adapters/mysql2/transaction_test.rb +151 -0
  48. data/test/cases/adapters/mysql2/unsigned_type_test.rb +11 -9
  49. data/test/cases/adapters/mysql2/virtual_column_test.rb +66 -0
  50. data/test/cases/adapters/postgresql/active_schema_test.rb +40 -25
  51. data/test/cases/adapters/postgresql/array_test.rb +118 -63
  52. data/test/cases/adapters/postgresql/bit_string_test.rb +12 -10
  53. data/test/cases/adapters/postgresql/bytea_test.rb +26 -25
  54. data/test/cases/adapters/postgresql/case_insensitive_test.rb +10 -9
  55. data/test/cases/adapters/postgresql/change_schema_test.rb +7 -5
  56. data/test/cases/adapters/postgresql/cidr_test.rb +2 -0
  57. data/test/cases/adapters/postgresql/citext_test.rb +58 -58
  58. data/test/cases/adapters/postgresql/collation_test.rb +17 -15
  59. data/test/cases/adapters/postgresql/composite_test.rb +25 -23
  60. data/test/cases/adapters/postgresql/connection_test.rb +73 -85
  61. data/test/cases/adapters/postgresql/create_unlogged_tables_test.rb +74 -0
  62. data/test/cases/adapters/postgresql/datatype_test.rb +19 -22
  63. data/test/cases/adapters/postgresql/date_test.rb +42 -0
  64. data/test/cases/adapters/postgresql/domain_test.rb +9 -7
  65. data/test/cases/adapters/postgresql/enum_test.rb +12 -10
  66. data/test/cases/adapters/postgresql/explain_test.rb +10 -8
  67. data/test/cases/adapters/postgresql/extension_migration_test.rb +13 -12
  68. data/test/cases/adapters/postgresql/foreign_table_test.rb +109 -0
  69. data/test/cases/adapters/postgresql/full_text_test.rb +8 -6
  70. data/test/cases/adapters/postgresql/geometric_test.rb +57 -63
  71. data/test/cases/adapters/postgresql/hstore_test.rb +288 -280
  72. data/test/cases/adapters/postgresql/infinity_test.rb +54 -15
  73. data/test/cases/adapters/postgresql/integer_test.rb +2 -0
  74. data/test/cases/adapters/postgresql/interval_test.rb +99 -0
  75. data/test/cases/adapters/postgresql/json_test.rb +16 -201
  76. data/test/cases/adapters/postgresql/ltree_test.rb +14 -16
  77. data/test/cases/adapters/postgresql/money_test.rb +47 -16
  78. data/test/cases/adapters/postgresql/network_test.rb +36 -28
  79. data/test/cases/adapters/postgresql/numbers_test.rb +7 -5
  80. data/test/cases/adapters/postgresql/optimizer_hints_test.rb +71 -0
  81. data/test/cases/adapters/postgresql/partitions_test.rb +22 -0
  82. data/test/cases/adapters/postgresql/postgresql_adapter_prevent_writes_test.rb +205 -0
  83. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +178 -136
  84. data/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +27 -0
  85. data/test/cases/adapters/postgresql/quoting_test.rb +12 -6
  86. data/test/cases/adapters/postgresql/range_test.rb +406 -292
  87. data/test/cases/adapters/postgresql/referential_integrity_test.rb +16 -15
  88. data/test/cases/adapters/postgresql/rename_table_test.rb +9 -8
  89. data/test/cases/adapters/postgresql/schema_authorization_test.rb +14 -23
  90. data/test/cases/adapters/postgresql/schema_test.rb +207 -91
  91. data/test/cases/adapters/postgresql/serial_test.rb +9 -7
  92. data/test/cases/adapters/postgresql/statement_pool_test.rb +26 -6
  93. data/test/cases/adapters/postgresql/timestamp_test.rb +17 -15
  94. data/test/cases/adapters/postgresql/transaction_nested_test.rb +114 -0
  95. data/test/cases/adapters/postgresql/transaction_test.rb +189 -0
  96. data/test/cases/adapters/postgresql/type_lookup_test.rb +12 -10
  97. data/test/cases/adapters/postgresql/utils_test.rb +11 -9
  98. data/test/cases/adapters/postgresql/uuid_test.rb +226 -109
  99. data/test/cases/adapters/postgresql/xml_test.rb +10 -14
  100. data/test/cases/adapters/sqlite3/collation_test.rb +26 -15
  101. data/test/cases/adapters/sqlite3/copy_table_test.rb +31 -28
  102. data/test/cases/adapters/sqlite3/explain_test.rb +13 -11
  103. data/test/cases/adapters/sqlite3/json_test.rb +29 -0
  104. data/test/cases/adapters/sqlite3/quoting_test.rb +35 -57
  105. data/test/cases/adapters/sqlite3/sqlite3_adapter_prevent_writes_test.rb +186 -0
  106. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +318 -131
  107. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +11 -11
  108. data/test/cases/adapters/sqlite3/statement_pool_test.rb +7 -6
  109. data/test/cases/adapters/sqlite3/transaction_test.rb +123 -0
  110. data/test/cases/aggregations_test.rb +14 -12
  111. data/test/cases/annotate_test.rb +46 -0
  112. data/test/cases/ar_schema_test.rb +153 -86
  113. data/test/cases/arel/attributes/attribute_test.rb +1145 -0
  114. data/test/cases/arel/attributes/math_test.rb +83 -0
  115. data/test/cases/arel/attributes_test.rb +27 -0
  116. data/test/cases/arel/collectors/bind_test.rb +40 -0
  117. data/test/cases/arel/collectors/composite_test.rb +47 -0
  118. data/test/cases/arel/collectors/sql_string_test.rb +41 -0
  119. data/test/cases/arel/collectors/substitute_bind_collector_test.rb +48 -0
  120. data/test/cases/arel/crud_test.rb +65 -0
  121. data/test/cases/arel/delete_manager_test.rb +53 -0
  122. data/test/cases/arel/factory_methods_test.rb +46 -0
  123. data/test/cases/arel/helper.rb +45 -0
  124. data/test/cases/arel/insert_manager_test.rb +241 -0
  125. data/test/cases/arel/nodes/and_test.rb +30 -0
  126. data/test/cases/arel/nodes/as_test.rb +36 -0
  127. data/test/cases/arel/nodes/ascending_test.rb +46 -0
  128. data/test/cases/arel/nodes/bin_test.rb +35 -0
  129. data/test/cases/arel/nodes/binary_test.rb +29 -0
  130. data/test/cases/arel/nodes/bind_param_test.rb +22 -0
  131. data/test/cases/arel/nodes/case_test.rb +96 -0
  132. data/test/cases/arel/nodes/casted_test.rb +18 -0
  133. data/test/cases/arel/nodes/comment_test.rb +22 -0
  134. data/test/cases/arel/nodes/count_test.rb +35 -0
  135. data/test/cases/arel/nodes/delete_statement_test.rb +36 -0
  136. data/test/cases/arel/nodes/descending_test.rb +46 -0
  137. data/test/cases/arel/nodes/distinct_test.rb +21 -0
  138. data/test/cases/arel/nodes/equality_test.rb +62 -0
  139. data/test/cases/arel/nodes/extract_test.rb +43 -0
  140. data/test/cases/arel/nodes/false_test.rb +21 -0
  141. data/test/cases/arel/nodes/grouping_test.rb +26 -0
  142. data/test/cases/arel/nodes/infix_operation_test.rb +42 -0
  143. data/test/cases/arel/nodes/insert_statement_test.rb +44 -0
  144. data/test/cases/arel/nodes/named_function_test.rb +48 -0
  145. data/test/cases/arel/nodes/node_test.rb +22 -0
  146. data/test/cases/arel/nodes/not_test.rb +31 -0
  147. data/test/cases/arel/nodes/or_test.rb +36 -0
  148. data/test/cases/arel/nodes/over_test.rb +69 -0
  149. data/test/cases/arel/nodes/select_core_test.rb +79 -0
  150. data/test/cases/arel/nodes/select_statement_test.rb +51 -0
  151. data/test/cases/arel/nodes/sql_literal_test.rb +75 -0
  152. data/test/cases/arel/nodes/sum_test.rb +35 -0
  153. data/test/cases/arel/nodes/table_alias_test.rb +29 -0
  154. data/test/cases/arel/nodes/true_test.rb +21 -0
  155. data/test/cases/arel/nodes/unary_operation_test.rb +41 -0
  156. data/test/cases/arel/nodes/update_statement_test.rb +60 -0
  157. data/test/cases/arel/nodes/window_test.rb +81 -0
  158. data/test/cases/arel/nodes_test.rb +34 -0
  159. data/test/cases/arel/select_manager_test.rb +1238 -0
  160. data/test/cases/arel/support/fake_record.rb +135 -0
  161. data/test/cases/arel/table_test.rb +216 -0
  162. data/test/cases/arel/update_manager_test.rb +126 -0
  163. data/test/cases/arel/visitors/dispatch_contamination_test.rb +78 -0
  164. data/test/cases/arel/visitors/dot_test.rb +90 -0
  165. data/test/cases/arel/visitors/mysql_test.rb +157 -0
  166. data/test/cases/arel/visitors/postgres_test.rb +366 -0
  167. data/test/cases/arel/visitors/sqlite_test.rb +75 -0
  168. data/test/cases/arel/visitors/to_sql_test.rb +750 -0
  169. data/test/cases/associations/belongs_to_associations_test.rb +510 -158
  170. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +4 -2
  171. data/test/cases/associations/callbacks_test.rb +56 -38
  172. data/test/cases/associations/cascaded_eager_loading_test.rb +118 -61
  173. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +138 -18
  174. data/test/cases/associations/eager_load_nested_include_test.rb +38 -37
  175. data/test/cases/associations/eager_singularization_test.rb +21 -21
  176. data/test/cases/associations/eager_test.rb +559 -415
  177. data/test/cases/associations/extension_test.rb +18 -12
  178. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +234 -213
  179. data/test/cases/associations/has_many_associations_test.rb +1038 -465
  180. data/test/cases/associations/has_many_through_associations_test.rb +558 -249
  181. data/test/cases/associations/has_one_associations_test.rb +294 -129
  182. data/test/cases/associations/has_one_through_associations_test.rb +121 -75
  183. data/test/cases/associations/inner_join_association_test.rb +114 -38
  184. data/test/cases/associations/inverse_associations_test.rb +606 -398
  185. data/test/cases/associations/join_model_test.rb +158 -148
  186. data/test/cases/associations/left_outer_join_association_test.rb +59 -24
  187. data/test/cases/associations/nested_through_associations_test.rb +166 -109
  188. data/test/cases/associations/required_test.rb +35 -10
  189. data/test/cases/associations_test.rb +241 -110
  190. data/test/cases/attribute_methods/read_test.rb +11 -11
  191. data/test/cases/attribute_methods_test.rb +413 -298
  192. data/test/cases/attributes_test.rb +145 -27
  193. data/test/cases/autosave_association_test.rb +681 -436
  194. data/test/cases/base_prevent_writes_test.rb +229 -0
  195. data/test/cases/base_test.rb +599 -542
  196. data/test/cases/batches_test.rb +288 -82
  197. data/test/cases/binary_test.rb +26 -31
  198. data/test/cases/bind_parameter_test.rb +194 -21
  199. data/test/cases/boolean_test.rb +52 -0
  200. data/test/cases/cache_key_test.rb +110 -5
  201. data/test/cases/calculations_test.rb +740 -177
  202. data/test/cases/callbacks_test.rb +74 -207
  203. data/test/cases/clone_test.rb +15 -10
  204. data/test/cases/coders/json_test.rb +2 -0
  205. data/test/cases/coders/yaml_column_test.rb +16 -13
  206. data/test/cases/collection_cache_key_test.rb +177 -20
  207. data/test/cases/column_alias_test.rb +9 -7
  208. data/test/cases/column_definition_test.rb +10 -68
  209. data/test/cases/comment_test.rb +166 -107
  210. data/test/cases/connection_adapters/adapter_leasing_test.rb +14 -10
  211. data/test/cases/connection_adapters/connection_handler_test.rb +358 -51
  212. data/test/cases/connection_adapters/connection_handlers_multi_db_test.rb +400 -0
  213. data/test/cases/connection_adapters/connection_handlers_multi_pool_config_test.rb +103 -0
  214. data/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb +499 -0
  215. data/test/cases/connection_adapters/connection_swapping_nested_test.rb +457 -0
  216. data/test/cases/connection_adapters/legacy_connection_handlers_multi_db_test.rb +486 -0
  217. data/test/cases/connection_adapters/legacy_connection_handlers_sharding_db_test.rb +586 -0
  218. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +319 -138
  219. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +62 -50
  220. data/test/cases/connection_adapters/schema_cache_test.rb +259 -26
  221. data/test/cases/connection_adapters/type_lookup_test.rb +96 -95
  222. data/test/cases/connection_management_test.rb +13 -11
  223. data/test/cases/connection_pool_test.rb +316 -83
  224. data/test/cases/core_test.rb +82 -58
  225. data/test/cases/counter_cache_test.rb +204 -50
  226. data/test/cases/custom_locking_test.rb +5 -3
  227. data/test/cases/database_configurations/hash_config_test.rb +74 -0
  228. data/test/cases/database_configurations/resolver_test.rb +150 -0
  229. data/test/cases/database_configurations_test.rb +145 -0
  230. data/test/cases/database_selector_test.rb +296 -0
  231. data/test/cases/database_statements_test.rb +18 -16
  232. data/test/cases/date_test.rb +8 -16
  233. data/test/cases/date_time_precision_test.rb +100 -78
  234. data/test/cases/date_time_test.rb +23 -8
  235. data/test/cases/defaults_test.rb +106 -71
  236. data/test/cases/delegated_type_test.rb +57 -0
  237. data/test/cases/dirty_test.rb +419 -223
  238. data/test/cases/disconnected_test.rb +6 -6
  239. data/test/cases/dup_test.rb +54 -27
  240. data/test/cases/enum_test.rb +461 -82
  241. data/test/cases/errors_test.rb +7 -7
  242. data/test/cases/explain_subscriber_test.rb +17 -15
  243. data/test/cases/explain_test.rb +11 -19
  244. data/test/cases/filter_attributes_test.rb +153 -0
  245. data/test/cases/finder_respond_to_test.rb +14 -14
  246. data/test/cases/finder_test.rb +669 -287
  247. data/test/cases/fixture_set/file_test.rb +34 -38
  248. data/test/cases/fixtures_test.rb +833 -176
  249. data/test/cases/forbidden_attributes_protection_test.rb +32 -67
  250. data/test/cases/habtm_destroy_order_test.rb +25 -25
  251. data/test/cases/helper.rb +78 -49
  252. data/test/cases/hot_compatibility_test.rb +33 -32
  253. data/test/cases/i18n_test.rb +18 -17
  254. data/test/cases/inheritance_test.rb +180 -115
  255. data/test/cases/insert_all_test.rb +489 -0
  256. data/test/cases/instrumentation_test.rb +101 -0
  257. data/test/cases/integration_test.rb +119 -31
  258. data/test/cases/invalid_connection_test.rb +18 -16
  259. data/test/cases/invertible_migration_test.rb +183 -43
  260. data/test/cases/json_attribute_test.rb +35 -0
  261. data/test/cases/json_serialization_test.rb +57 -58
  262. data/test/cases/json_shared_test_cases.rb +290 -0
  263. data/test/cases/locking_test.rb +413 -119
  264. data/test/cases/log_subscriber_test.rb +68 -26
  265. data/test/cases/marshal_serialization_test.rb +39 -0
  266. data/test/cases/migration/change_schema_test.rb +118 -72
  267. data/test/cases/migration/change_table_test.rb +138 -30
  268. data/test/cases/migration/check_constraint_test.rb +162 -0
  269. data/test/cases/migration/column_attributes_test.rb +45 -35
  270. data/test/cases/migration/column_positioning_test.rb +18 -6
  271. data/test/cases/migration/columns_test.rb +93 -77
  272. data/test/cases/migration/command_recorder_test.rb +121 -34
  273. data/test/cases/migration/compatibility_test.rb +578 -23
  274. data/test/cases/migration/create_join_table_test.rb +35 -25
  275. data/test/cases/migration/foreign_key_test.rb +503 -284
  276. data/test/cases/migration/helper.rb +4 -3
  277. data/test/cases/migration/index_test.rb +119 -70
  278. data/test/cases/migration/logger_test.rb +9 -6
  279. data/test/cases/migration/pending_migrations_test.rb +88 -34
  280. data/test/cases/migration/references_foreign_key_test.rb +164 -150
  281. data/test/cases/migration/references_index_test.rb +38 -19
  282. data/test/cases/migration/references_statements_test.rb +15 -14
  283. data/test/cases/migration/rename_table_test.rb +53 -30
  284. data/test/cases/migration_test.rb +637 -269
  285. data/test/cases/migrator_test.rb +191 -135
  286. data/test/cases/mixin_test.rb +7 -11
  287. data/test/cases/modules_test.rb +36 -34
  288. data/test/cases/multi_db_migrator_test.rb +223 -0
  289. data/test/cases/multiparameter_attributes_test.rb +60 -33
  290. data/test/cases/multiple_db_test.rb +16 -22
  291. data/test/cases/nested_attributes_test.rb +341 -320
  292. data/test/cases/nested_attributes_with_callbacks_test.rb +26 -24
  293. data/test/cases/null_relation_test.rb +84 -0
  294. data/test/cases/numeric_data_test.rb +93 -0
  295. data/test/cases/persistence_test.rb +361 -269
  296. data/test/cases/pooled_connections_test.rb +18 -26
  297. data/test/cases/prepared_statement_status_test.rb +48 -0
  298. data/test/cases/primary_keys_test.rb +210 -104
  299. data/test/cases/query_cache_test.rb +610 -141
  300. data/test/cases/quoting_test.rb +132 -31
  301. data/test/cases/readonly_test.rb +49 -48
  302. data/test/cases/reaper_test.rb +146 -32
  303. data/test/cases/reflection_test.rb +167 -156
  304. data/test/cases/relation/delegation_test.rb +49 -36
  305. data/test/cases/relation/delete_all_test.rb +117 -0
  306. data/test/cases/relation/merging_test.rb +319 -42
  307. data/test/cases/relation/mutation_test.rb +55 -93
  308. data/test/cases/relation/or_test.rb +129 -29
  309. data/test/cases/relation/predicate_builder_test.rb +21 -6
  310. data/test/cases/relation/record_fetch_warning_test.rb +5 -3
  311. data/test/cases/relation/select_test.rb +67 -0
  312. data/test/cases/relation/update_all_test.rb +317 -0
  313. data/test/cases/relation/where_chain_test.rb +68 -32
  314. data/test/cases/relation/where_clause_test.rb +136 -61
  315. data/test/cases/relation/where_test.rb +155 -48
  316. data/test/cases/relation_test.rb +266 -112
  317. data/test/cases/relations_test.rb +969 -744
  318. data/test/cases/reload_models_test.rb +13 -9
  319. data/test/cases/reserved_word_test.rb +141 -0
  320. data/test/cases/result_test.rb +68 -17
  321. data/test/cases/sanitize_test.rb +87 -71
  322. data/test/cases/schema_dumper_test.rb +221 -128
  323. data/test/cases/schema_loading_test.rb +3 -2
  324. data/test/cases/scoping/default_scoping_test.rb +185 -144
  325. data/test/cases/scoping/named_scoping_test.rb +177 -89
  326. data/test/cases/scoping/relation_scoping_test.rb +197 -75
  327. data/test/cases/secure_token_test.rb +18 -3
  328. data/test/cases/serialization_test.rb +30 -28
  329. data/test/cases/serialized_attribute_test.rb +133 -42
  330. data/test/cases/signed_id_test.rb +168 -0
  331. data/test/cases/statement_cache_test.rb +41 -24
  332. data/test/cases/statement_invalid_test.rb +42 -0
  333. data/test/cases/store_test.rb +180 -55
  334. data/test/cases/strict_loading_test.rb +473 -0
  335. data/test/cases/suppressor_test.rb +26 -12
  336. data/test/cases/tasks/database_tasks_test.rb +1258 -194
  337. data/test/cases/tasks/mysql_rake_test.rb +370 -298
  338. data/test/cases/tasks/postgresql_rake_test.rb +481 -251
  339. data/test/cases/tasks/sqlite_rake_test.rb +225 -178
  340. data/test/cases/test_case.rb +51 -40
  341. data/test/cases/test_databases_test.rb +79 -0
  342. data/test/cases/test_fixtures_test.rb +79 -19
  343. data/test/cases/time_precision_test.rb +98 -76
  344. data/test/cases/timestamp_test.rb +102 -99
  345. data/test/cases/touch_later_test.rb +12 -10
  346. data/test/cases/transaction_callbacks_test.rb +344 -90
  347. data/test/cases/transaction_isolation_test.rb +12 -12
  348. data/test/cases/transactions_test.rb +612 -162
  349. data/test/cases/type/adapter_specific_registry_test.rb +14 -2
  350. data/test/cases/type/date_time_test.rb +4 -2
  351. data/test/cases/type/integer_test.rb +4 -2
  352. data/test/cases/type/string_test.rb +10 -8
  353. data/test/cases/type/time_test.rb +28 -0
  354. data/test/cases/type/type_map_test.rb +29 -28
  355. data/test/cases/type/unsigned_integer_test.rb +19 -0
  356. data/test/cases/type_test.rb +2 -0
  357. data/test/cases/types_test.rb +3 -1
  358. data/test/cases/unconnected_test.rb +14 -1
  359. data/test/cases/unsafe_raw_sql_test.rb +274 -0
  360. data/test/cases/validations/absence_validation_test.rb +19 -17
  361. data/test/cases/validations/association_validation_test.rb +30 -28
  362. data/test/cases/validations/i18n_generate_message_validation_test.rb +34 -16
  363. data/test/cases/validations/i18n_validation_test.rb +22 -21
  364. data/test/cases/validations/length_validation_test.rb +34 -33
  365. data/test/cases/validations/numericality_validation_test.rb +181 -0
  366. data/test/cases/validations/presence_validation_test.rb +21 -19
  367. data/test/cases/validations/uniqueness_validation_test.rb +156 -86
  368. data/test/cases/validations_repair_helper.rb +2 -0
  369. data/test/cases/validations_test.rb +61 -26
  370. data/test/cases/view_test.rb +122 -116
  371. data/test/cases/yaml_serialization_test.rb +79 -34
  372. data/test/config.example.yml +19 -19
  373. data/test/config.rb +3 -1
  374. data/test/config.yml +16 -6
  375. data/test/fixtures/all/namespaced/accounts.yml +2 -0
  376. data/test/fixtures/author_addresses.yml +1 -8
  377. data/test/fixtures/authors.yml +1 -7
  378. data/test/fixtures/binaries.yml +4 -0
  379. data/test/fixtures/books.yml +9 -2
  380. data/test/fixtures/categories_posts.yml +3 -0
  381. data/test/fixtures/citations.yml +5 -0
  382. data/test/fixtures/comments.yml +7 -0
  383. data/test/fixtures/companies.yml +5 -0
  384. data/test/fixtures/computers.yml +2 -0
  385. data/test/fixtures/customers.yml +10 -1
  386. data/test/fixtures/developers.yml +1 -1
  387. data/test/fixtures/essays.yml +10 -0
  388. data/test/fixtures/faces.yml +3 -3
  389. data/test/fixtures/humans.yml +5 -0
  390. data/test/fixtures/interests.yml +7 -7
  391. data/test/fixtures/memberships.yml +7 -0
  392. data/test/fixtures/minimalistics.yml +3 -0
  393. data/test/fixtures/mixed_case_monkeys.yml +2 -2
  394. data/test/fixtures/naked/yml/courses_with_invalid_key.yml +3 -0
  395. data/test/fixtures/naked/yml/parrots.yml +1 -0
  396. data/test/fixtures/other_books.yml +26 -0
  397. data/test/fixtures/other_posts.yml +1 -0
  398. data/test/fixtures/parrots.yml +7 -1
  399. data/test/fixtures/pirates.yml +3 -0
  400. data/test/fixtures/posts.yml +11 -3
  401. data/test/fixtures/readers.yml +6 -0
  402. data/test/fixtures/reserved_words/values.yml +2 -2
  403. data/test/fixtures/sponsors.yml +3 -0
  404. data/test/fixtures/strict_zines.yml +2 -0
  405. data/test/fixtures/subscribers.yml +1 -1
  406. data/test/fixtures/tasks.yml +1 -1
  407. data/test/fixtures/warehouse-things.yml +3 -0
  408. data/test/migrations/10_urban/9_add_expressions.rb +2 -0
  409. data/test/migrations/decimal/1_give_me_big_numbers.rb +6 -4
  410. data/test/migrations/magic/1_currencies_have_symbols.rb +3 -2
  411. data/test/migrations/missing/1000_people_have_middle_names.rb +2 -0
  412. data/test/migrations/missing/1_people_have_last_names.rb +2 -0
  413. data/test/migrations/missing/3_we_need_reminders.rb +2 -0
  414. data/test/migrations/missing/4_innocent_jointable.rb +3 -1
  415. data/test/migrations/rename/1_we_need_things.rb +2 -0
  416. data/test/migrations/rename/2_rename_things.rb +2 -0
  417. data/test/migrations/to_copy/1_people_have_hobbies.rb +3 -1
  418. data/test/migrations/to_copy/2_people_have_descriptions.rb +3 -1
  419. data/test/migrations/to_copy2/1_create_articles.rb +2 -0
  420. data/test/migrations/to_copy2/2_create_comments.rb +3 -1
  421. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +3 -1
  422. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +3 -1
  423. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +3 -1
  424. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +2 -0
  425. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +2 -0
  426. data/test/migrations/valid/1_valid_people_have_last_names.rb +2 -0
  427. data/test/migrations/valid/2_we_need_reminders.rb +2 -0
  428. data/test/migrations/valid/3_innocent_jointable.rb +3 -1
  429. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +2 -0
  430. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -0
  431. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +3 -1
  432. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +2 -0
  433. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +2 -0
  434. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +3 -1
  435. data/test/migrations/version_check/20131219224947_migration_version_check.rb +2 -0
  436. data/test/models/account.rb +46 -0
  437. data/test/models/admin/account.rb +3 -1
  438. data/test/models/admin/randomly_named_c1.rb +2 -0
  439. data/test/models/admin/user.rb +16 -8
  440. data/test/models/admin.rb +4 -2
  441. data/test/models/aircraft.rb +3 -1
  442. data/test/models/arunit2_model.rb +2 -0
  443. data/test/models/author.rb +153 -102
  444. data/test/models/auto_id.rb +2 -0
  445. data/test/models/autoloadable/extra_firm.rb +2 -0
  446. data/test/models/binary.rb +3 -1
  447. data/test/models/binary_field.rb +6 -0
  448. data/test/models/bird.rb +13 -1
  449. data/test/models/book.rb +14 -4
  450. data/test/models/book_destroy_async.rb +24 -0
  451. data/test/models/boolean.rb +5 -0
  452. data/test/models/bulb.rb +13 -4
  453. data/test/models/cake_designer.rb +2 -0
  454. data/test/models/car.rb +17 -10
  455. data/test/models/carrier.rb +2 -0
  456. data/test/models/cart.rb +5 -0
  457. data/test/models/cat.rb +2 -0
  458. data/test/models/categorization.rb +8 -6
  459. data/test/models/category.rb +28 -16
  460. data/test/models/chef.rb +2 -0
  461. data/test/models/citation.rb +5 -1
  462. data/test/models/club.rb +13 -10
  463. data/test/models/college.rb +4 -2
  464. data/test/models/column.rb +2 -0
  465. data/test/models/column_name.rb +2 -0
  466. data/test/models/comment.rb +32 -10
  467. data/test/models/company.rb +102 -106
  468. data/test/models/company_in_module.rb +27 -26
  469. data/test/models/computer.rb +3 -1
  470. data/test/models/contact.rb +15 -13
  471. data/test/models/content.rb +5 -3
  472. data/test/models/contract.rb +21 -3
  473. data/test/models/country.rb +2 -4
  474. data/test/models/course.rb +3 -1
  475. data/test/models/customer.rb +10 -8
  476. data/test/models/customer_carrier.rb +2 -0
  477. data/test/models/dashboard.rb +2 -0
  478. data/test/models/default.rb +2 -0
  479. data/test/models/department.rb +2 -0
  480. data/test/models/destroy_async_parent.rb +15 -0
  481. data/test/models/destroy_async_parent_soft_delete.rb +20 -0
  482. data/test/models/developer.rb +152 -85
  483. data/test/models/dl_keyed_belongs_to.rb +13 -0
  484. data/test/models/dl_keyed_belongs_to_soft_delete.rb +19 -0
  485. data/test/models/dl_keyed_has_many.rb +5 -0
  486. data/test/models/dl_keyed_has_many_through.rb +5 -0
  487. data/test/models/dl_keyed_has_one.rb +5 -0
  488. data/test/models/dl_keyed_join.rb +10 -0
  489. data/test/models/dog.rb +2 -0
  490. data/test/models/dog_lover.rb +2 -0
  491. data/test/models/doubloon.rb +3 -1
  492. data/test/models/drink_designer.rb +17 -0
  493. data/test/models/edge.rb +4 -2
  494. data/test/models/electron.rb +2 -0
  495. data/test/models/engine.rb +3 -2
  496. data/test/models/entrant.rb +2 -0
  497. data/test/models/entry.rb +5 -0
  498. data/test/models/essay.rb +6 -3
  499. data/test/models/essay_destroy_async.rb +12 -0
  500. data/test/models/event.rb +3 -1
  501. data/test/models/eye.rb +5 -3
  502. data/test/models/face.rb +14 -6
  503. data/test/models/family.rb +6 -0
  504. data/test/models/family_tree.rb +6 -0
  505. data/test/models/friendship.rb +5 -3
  506. data/test/models/frog.rb +8 -0
  507. data/test/models/guid.rb +3 -1
  508. data/test/models/guitar.rb +2 -0
  509. data/test/models/hotel.rb +5 -3
  510. data/test/models/human.rb +39 -0
  511. data/test/models/image.rb +3 -1
  512. data/test/models/interest.rb +14 -3
  513. data/test/models/invoice.rb +4 -2
  514. data/test/models/item.rb +3 -1
  515. data/test/models/job.rb +5 -3
  516. data/test/models/joke.rb +4 -2
  517. data/test/models/keyboard.rb +3 -1
  518. data/test/models/legacy_thing.rb +2 -0
  519. data/test/models/lesson.rb +2 -0
  520. data/test/models/line_item.rb +3 -1
  521. data/test/models/liquid.rb +2 -0
  522. data/test/models/matey.rb +3 -1
  523. data/test/models/measurement.rb +4 -0
  524. data/test/models/member.rb +23 -20
  525. data/test/models/member_detail.rb +3 -0
  526. data/test/models/member_type.rb +2 -0
  527. data/test/models/membership.rb +4 -1
  528. data/test/models/mentor.rb +3 -1
  529. data/test/models/message.rb +5 -0
  530. data/test/models/minimalistic.rb +2 -0
  531. data/test/models/minivan.rb +3 -2
  532. data/test/models/mixed_case_monkey.rb +3 -1
  533. data/test/models/molecule.rb +2 -0
  534. data/test/models/mouse.rb +6 -0
  535. data/test/models/movie.rb +2 -0
  536. data/test/models/node.rb +4 -2
  537. data/test/models/non_primary_key.rb +2 -0
  538. data/test/models/notification.rb +2 -0
  539. data/test/models/numeric_data.rb +12 -0
  540. data/test/models/order.rb +4 -2
  541. data/test/models/organization.rb +9 -7
  542. data/test/models/other_dog.rb +3 -1
  543. data/test/models/owner.rb +6 -4
  544. data/test/models/parrot.rb +12 -4
  545. data/test/models/person.rb +59 -54
  546. data/test/models/personal_legacy_thing.rb +3 -1
  547. data/test/models/pet.rb +4 -2
  548. data/test/models/pet_treasure.rb +2 -0
  549. data/test/models/pirate.rb +67 -43
  550. data/test/models/possession.rb +3 -1
  551. data/test/models/post.rb +184 -86
  552. data/test/models/price_estimate.rb +11 -1
  553. data/test/models/professor.rb +3 -1
  554. data/test/models/project.rb +14 -12
  555. data/test/models/publisher/article.rb +2 -0
  556. data/test/models/publisher/magazine.rb +2 -0
  557. data/test/models/publisher.rb +2 -0
  558. data/test/models/randomly_named_c1.rb +2 -0
  559. data/test/models/rating.rb +5 -1
  560. data/test/models/reader.rb +7 -5
  561. data/test/models/recipe.rb +2 -0
  562. data/test/models/record.rb +2 -0
  563. data/test/models/reference.rb +6 -3
  564. data/test/models/reply.rb +39 -21
  565. data/test/models/room.rb +6 -0
  566. data/test/models/section.rb +6 -0
  567. data/test/models/seminar.rb +6 -0
  568. data/test/models/session.rb +6 -0
  569. data/test/models/ship.rb +12 -9
  570. data/test/models/ship_part.rb +5 -3
  571. data/test/models/shop.rb +4 -2
  572. data/test/models/shop_account.rb +2 -0
  573. data/test/models/speedometer.rb +2 -0
  574. data/test/models/sponsor.rb +8 -5
  575. data/test/models/squeak.rb +6 -0
  576. data/test/models/strict_zine.rb +7 -0
  577. data/test/models/string_key_object.rb +2 -0
  578. data/test/models/student.rb +2 -0
  579. data/test/models/subscriber.rb +4 -2
  580. data/test/models/subscription.rb +5 -1
  581. data/test/models/tag.rb +6 -3
  582. data/test/models/tagging.rb +13 -6
  583. data/test/models/task.rb +2 -0
  584. data/test/models/topic.rb +54 -19
  585. data/test/models/toy.rb +4 -0
  586. data/test/models/traffic_light.rb +2 -0
  587. data/test/models/treasure.rb +5 -3
  588. data/test/models/treaty.rb +2 -4
  589. data/test/models/tree.rb +2 -0
  590. data/test/models/tuning_peg.rb +2 -0
  591. data/test/models/tyre.rb +2 -0
  592. data/test/models/user.rb +12 -4
  593. data/test/models/uuid_child.rb +2 -0
  594. data/test/models/uuid_item.rb +2 -0
  595. data/test/models/uuid_parent.rb +2 -0
  596. data/test/models/vegetables.rb +12 -3
  597. data/test/models/vertex.rb +6 -4
  598. data/test/models/warehouse_thing.rb +2 -0
  599. data/test/models/wheel.rb +3 -1
  600. data/test/models/without_table.rb +3 -1
  601. data/test/models/zine.rb +3 -1
  602. data/test/schema/mysql2_specific_schema.rb +49 -35
  603. data/test/schema/oracle_specific_schema.rb +13 -15
  604. data/test/schema/postgresql_specific_schema.rb +51 -40
  605. data/test/schema/schema.rb +334 -154
  606. data/test/schema/sqlite_specific_schema.rb +9 -16
  607. data/test/support/config.rb +26 -26
  608. data/test/support/connection.rb +14 -8
  609. data/test/support/connection_helper.rb +3 -1
  610. data/test/support/ddl_helper.rb +2 -0
  611. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic.dump +0 -0
  612. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic_associations.dump +0 -0
  613. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic.dump +0 -0
  614. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic_associations.dump +0 -0
  615. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic.dump +0 -0
  616. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic_associations.dump +0 -0
  617. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic.dump +0 -0
  618. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic_associations.dump +0 -0
  619. data/test/support/marshal_compatibility_fixtures/legacy_6_0_record_mysql.dump +0 -0
  620. data/test/support/marshal_compatibility_fixtures/legacy_relation.dump +0 -0
  621. data/test/support/schema_dumping_helper.rb +2 -0
  622. data/test/support/stubs/strong_parameters.rb +40 -0
  623. data/test/support/yaml_compatibility_fixtures/rails_v1_mysql.yml +206 -0
  624. data/test/support/yaml_compatibility_fixtures/rails_v2.yml +55 -0
  625. metadata +192 -14
@@ -1,29 +1,28 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
- require 'models/developer'
3
- require 'models/computer'
4
+ require "models/developer"
5
+ require "models/computer"
6
+ require "active_support/core_ext/symbol/starts_ends_with"
4
7
 
5
8
  class CallbackDeveloper < ActiveRecord::Base
6
- self.table_name = 'developers'
9
+ self.table_name = "developers"
7
10
 
8
11
  class << self
9
- def callback_string(callback_method)
10
- "history << [#{callback_method.to_sym.inspect}, :string]"
11
- end
12
-
13
12
  def callback_proc(callback_method)
14
13
  Proc.new { |model| model.history << [callback_method, :proc] }
15
14
  end
16
15
 
17
16
  def define_callback_method(callback_method)
18
17
  define_method(callback_method) do
19
- self.history << [callback_method, :method]
18
+ history << [callback_method, :method]
20
19
  end
21
20
  send(callback_method, :"#{callback_method}")
22
21
  end
23
22
 
24
23
  def callback_object(callback_method)
25
24
  klass = Class.new
26
- klass.send(:define_method, callback_method) do |model|
25
+ klass.define_method(callback_method) do |model|
27
26
  model.history << [callback_method, :object]
28
27
  end
29
28
  klass.new
@@ -31,9 +30,8 @@ class CallbackDeveloper < ActiveRecord::Base
31
30
  end
32
31
 
33
32
  ActiveRecord::Callbacks::CALLBACKS.each do |callback_method|
34
- next if callback_method.to_s =~ /^around_/
33
+ next if callback_method.start_with?("around_")
35
34
  define_callback_method(callback_method)
36
- ActiveSupport::Deprecation.silence { send(callback_method, callback_string(callback_method)) }
37
35
  send(callback_method, callback_proc(callback_method))
38
36
  send(callback_method, callback_object(callback_method))
39
37
  send(callback_method) { |model| model.history << [callback_method, :block] }
@@ -44,30 +42,24 @@ class CallbackDeveloper < ActiveRecord::Base
44
42
  end
45
43
  end
46
44
 
47
- class CallbackDeveloperWithFalseValidation < CallbackDeveloper
48
- before_validation proc { |model| model.history << [:before_validation, :returning_false]; false }
49
- before_validation proc { |model| model.history << [:before_validation, :should_never_get_here] }
50
- end
51
-
52
45
  class CallbackDeveloperWithHaltedValidation < CallbackDeveloper
53
46
  before_validation proc { |model| model.history << [:before_validation, :throwing_abort]; throw(:abort) }
54
47
  before_validation proc { |model| model.history << [:before_validation, :should_never_get_here] }
55
48
  end
56
49
 
57
50
  class ParentDeveloper < ActiveRecord::Base
58
- self.table_name = 'developers'
51
+ self.table_name = "developers"
59
52
  attr_accessor :after_save_called
60
- before_validation {|record| record.after_save_called = true}
53
+ before_validation { |record| record.after_save_called = true }
61
54
  end
62
55
 
63
56
  class ChildDeveloper < ParentDeveloper
64
-
65
57
  end
66
58
 
67
59
  class ImmutableDeveloper < ActiveRecord::Base
68
- self.table_name = 'developers'
60
+ self.table_name = "developers"
69
61
 
70
- validates_inclusion_of :salary, :in => 50000..200000
62
+ validates_inclusion_of :salary, in: 50000..200000
71
63
 
72
64
  before_save :cancel
73
65
  before_destroy :cancel
@@ -79,7 +71,7 @@ class ImmutableDeveloper < ActiveRecord::Base
79
71
  end
80
72
 
81
73
  class DeveloperWithCanceledCallbacks < ActiveRecord::Base
82
- self.table_name = 'developers'
74
+ self.table_name = "developers"
83
75
 
84
76
  validates_inclusion_of :salary, in: 50000..200000
85
77
 
@@ -93,19 +85,19 @@ class DeveloperWithCanceledCallbacks < ActiveRecord::Base
93
85
  end
94
86
 
95
87
  class OnCallbacksDeveloper < ActiveRecord::Base
96
- self.table_name = 'developers'
88
+ self.table_name = "developers"
97
89
 
98
90
  before_validation { history << :before_validation }
99
- before_validation(:on => :create){ history << :before_validation_on_create }
100
- before_validation(:on => :update){ history << :before_validation_on_update }
91
+ before_validation(on: :create) { history << :before_validation_on_create }
92
+ before_validation(on: :update) { history << :before_validation_on_update }
101
93
 
102
94
  validate do
103
95
  history << :validate
104
96
  end
105
97
 
106
98
  after_validation { history << :after_validation }
107
- after_validation(:on => :create){ history << :after_validation_on_create }
108
- after_validation(:on => :update){ history << :after_validation_on_update }
99
+ after_validation(on: :create) { history << :after_validation_on_create }
100
+ after_validation(on: :update) { history << :after_validation_on_update }
109
101
 
110
102
  def history
111
103
  @history ||= []
@@ -113,24 +105,24 @@ class OnCallbacksDeveloper < ActiveRecord::Base
113
105
  end
114
106
 
115
107
  class ContextualCallbacksDeveloper < ActiveRecord::Base
116
- self.table_name = 'developers'
108
+ self.table_name = "developers"
117
109
 
118
110
  before_validation { history << :before_validation }
119
- before_validation :before_validation_on_create_and_update, :on => [ :create, :update ]
111
+ before_validation :before_validation_on_create_and_update, on: [ :create, :update ]
120
112
 
121
113
  validate do
122
114
  history << :validate
123
115
  end
124
116
 
125
117
  after_validation { history << :after_validation }
126
- after_validation :after_validation_on_create_and_update, :on => [ :create, :update ]
118
+ after_validation :after_validation_on_create_and_update, on: [ :create, :update ]
127
119
 
128
120
  def before_validation_on_create_and_update
129
- history << "before_validation_on_#{self.validation_context}".to_sym
121
+ history << "before_validation_on_#{validation_context}".to_sym
130
122
  end
131
123
 
132
124
  def after_validation_on_create_and_update
133
- history << "after_validation_on_#{self.validation_context}".to_sym
125
+ history << "after_validation_on_#{validation_context}".to_sym
134
126
  end
135
127
 
136
128
  def history
@@ -138,25 +130,8 @@ class ContextualCallbacksDeveloper < ActiveRecord::Base
138
130
  end
139
131
  end
140
132
 
141
- class CallbackCancellationDeveloper < ActiveRecord::Base
142
- self.table_name = 'developers'
143
-
144
- attr_reader :after_save_called, :after_create_called, :after_update_called, :after_destroy_called
145
- attr_accessor :cancel_before_save, :cancel_before_create, :cancel_before_update, :cancel_before_destroy
146
-
147
- before_save {defined?(@cancel_before_save) ? !@cancel_before_save : false}
148
- before_create { !@cancel_before_create }
149
- before_update { !@cancel_before_update }
150
- before_destroy { !@cancel_before_destroy }
151
-
152
- after_save { @after_save_called = true }
153
- after_update { @after_update_called = true }
154
- after_create { @after_create_called = true }
155
- after_destroy { @after_destroy_called = true }
156
- end
157
-
158
133
  class CallbackHaltedDeveloper < ActiveRecord::Base
159
- self.table_name = 'developers'
134
+ self.table_name = "developers"
160
135
 
161
136
  attr_reader :after_save_called, :after_create_called, :after_update_called, :after_destroy_called
162
137
  attr_accessor :cancel_before_save, :cancel_before_create, :cancel_before_update, :cancel_before_destroy
@@ -179,7 +154,6 @@ class CallbacksTest < ActiveRecord::TestCase
179
154
  david = CallbackDeveloper.new
180
155
  assert_equal [
181
156
  [ :after_initialize, :method ],
182
- [ :after_initialize, :string ],
183
157
  [ :after_initialize, :proc ],
184
158
  [ :after_initialize, :object ],
185
159
  [ :after_initialize, :block ],
@@ -190,12 +164,10 @@ class CallbacksTest < ActiveRecord::TestCase
190
164
  david = CallbackDeveloper.find(1)
191
165
  assert_equal [
192
166
  [ :after_find, :method ],
193
- [ :after_find, :string ],
194
167
  [ :after_find, :proc ],
195
168
  [ :after_find, :object ],
196
169
  [ :after_find, :block ],
197
170
  [ :after_initialize, :method ],
198
- [ :after_initialize, :string ],
199
171
  [ :after_initialize, :proc ],
200
172
  [ :after_initialize, :object ],
201
173
  [ :after_initialize, :block ],
@@ -207,17 +179,14 @@ class CallbacksTest < ActiveRecord::TestCase
207
179
  david.valid?
208
180
  assert_equal [
209
181
  [ :after_initialize, :method ],
210
- [ :after_initialize, :string ],
211
182
  [ :after_initialize, :proc ],
212
183
  [ :after_initialize, :object ],
213
184
  [ :after_initialize, :block ],
214
185
  [ :before_validation, :method ],
215
- [ :before_validation, :string ],
216
186
  [ :before_validation, :proc ],
217
187
  [ :before_validation, :object ],
218
188
  [ :before_validation, :block ],
219
189
  [ :after_validation, :method ],
220
- [ :after_validation, :string ],
221
190
  [ :after_validation, :proc ],
222
191
  [ :after_validation, :object ],
223
192
  [ :after_validation, :block ],
@@ -229,22 +198,18 @@ class CallbacksTest < ActiveRecord::TestCase
229
198
  david.valid?
230
199
  assert_equal [
231
200
  [ :after_find, :method ],
232
- [ :after_find, :string ],
233
201
  [ :after_find, :proc ],
234
202
  [ :after_find, :object ],
235
203
  [ :after_find, :block ],
236
204
  [ :after_initialize, :method ],
237
- [ :after_initialize, :string ],
238
205
  [ :after_initialize, :proc ],
239
206
  [ :after_initialize, :object ],
240
207
  [ :after_initialize, :block ],
241
208
  [ :before_validation, :method ],
242
- [ :before_validation, :string ],
243
209
  [ :before_validation, :proc ],
244
210
  [ :before_validation, :object ],
245
211
  [ :before_validation, :block ],
246
212
  [ :after_validation, :method ],
247
- [ :after_validation, :string ],
248
213
  [ :after_validation, :proc ],
249
214
  [ :after_validation, :object ],
250
215
  [ :after_validation, :block ],
@@ -252,53 +217,45 @@ class CallbacksTest < ActiveRecord::TestCase
252
217
  end
253
218
 
254
219
  def test_create
255
- david = CallbackDeveloper.create('name' => 'David', 'salary' => 1000000)
220
+ david = CallbackDeveloper.create("name" => "David", "salary" => 1000000)
256
221
  assert_equal [
257
222
  [ :after_initialize, :method ],
258
- [ :after_initialize, :string ],
259
223
  [ :after_initialize, :proc ],
260
224
  [ :after_initialize, :object ],
261
225
  [ :after_initialize, :block ],
262
226
  [ :before_validation, :method ],
263
- [ :before_validation, :string ],
264
227
  [ :before_validation, :proc ],
265
228
  [ :before_validation, :object ],
266
229
  [ :before_validation, :block ],
267
230
  [ :after_validation, :method ],
268
- [ :after_validation, :string ],
269
231
  [ :after_validation, :proc ],
270
232
  [ :after_validation, :object ],
271
233
  [ :after_validation, :block ],
272
234
  [ :before_save, :method ],
273
- [ :before_save, :string ],
274
235
  [ :before_save, :proc ],
275
236
  [ :before_save, :object ],
276
237
  [ :before_save, :block ],
277
238
  [ :before_create, :method ],
278
- [ :before_create, :string ],
279
239
  [ :before_create, :proc ],
280
240
  [ :before_create, :object ],
281
241
  [ :before_create, :block ],
282
242
  [ :after_create, :method ],
283
- [ :after_create, :string ],
284
243
  [ :after_create, :proc ],
285
244
  [ :after_create, :object ],
286
245
  [ :after_create, :block ],
287
246
  [ :after_save, :method ],
288
- [ :after_save, :string ],
289
247
  [ :after_save, :proc ],
290
248
  [ :after_save, :object ],
291
249
  [ :after_save, :block ],
292
250
  [ :after_commit, :block ],
293
251
  [ :after_commit, :object ],
294
252
  [ :after_commit, :proc ],
295
- [ :after_commit, :string ],
296
253
  [ :after_commit, :method ]
297
254
  ], david.history
298
255
  end
299
256
 
300
257
  def test_validate_on_create
301
- david = OnCallbacksDeveloper.create('name' => 'David', 'salary' => 1000000)
258
+ david = OnCallbacksDeveloper.create("name" => "David", "salary" => 1000000)
302
259
  assert_equal [
303
260
  :before_validation,
304
261
  :before_validation_on_create,
@@ -309,7 +266,7 @@ class CallbacksTest < ActiveRecord::TestCase
309
266
  end
310
267
 
311
268
  def test_validate_on_contextual_create
312
- david = ContextualCallbacksDeveloper.create('name' => 'David', 'salary' => 1000000)
269
+ david = ContextualCallbacksDeveloper.create("name" => "David", "salary" => 1000000)
313
270
  assert_equal [
314
271
  :before_validation,
315
272
  :before_validation_on_create,
@@ -324,49 +281,40 @@ class CallbacksTest < ActiveRecord::TestCase
324
281
  david.save
325
282
  assert_equal [
326
283
  [ :after_find, :method ],
327
- [ :after_find, :string ],
328
284
  [ :after_find, :proc ],
329
285
  [ :after_find, :object ],
330
286
  [ :after_find, :block ],
331
287
  [ :after_initialize, :method ],
332
- [ :after_initialize, :string ],
333
288
  [ :after_initialize, :proc ],
334
289
  [ :after_initialize, :object ],
335
290
  [ :after_initialize, :block ],
336
291
  [ :before_validation, :method ],
337
- [ :before_validation, :string ],
338
292
  [ :before_validation, :proc ],
339
293
  [ :before_validation, :object ],
340
294
  [ :before_validation, :block ],
341
295
  [ :after_validation, :method ],
342
- [ :after_validation, :string ],
343
296
  [ :after_validation, :proc ],
344
297
  [ :after_validation, :object ],
345
298
  [ :after_validation, :block ],
346
299
  [ :before_save, :method ],
347
- [ :before_save, :string ],
348
300
  [ :before_save, :proc ],
349
301
  [ :before_save, :object ],
350
302
  [ :before_save, :block ],
351
303
  [ :before_update, :method ],
352
- [ :before_update, :string ],
353
304
  [ :before_update, :proc ],
354
305
  [ :before_update, :object ],
355
306
  [ :before_update, :block ],
356
307
  [ :after_update, :method ],
357
- [ :after_update, :string ],
358
308
  [ :after_update, :proc ],
359
309
  [ :after_update, :object ],
360
310
  [ :after_update, :block ],
361
311
  [ :after_save, :method ],
362
- [ :after_save, :string ],
363
312
  [ :after_save, :proc ],
364
313
  [ :after_save, :object ],
365
314
  [ :after_save, :block ],
366
315
  [ :after_commit, :block ],
367
316
  [ :after_commit, :object ],
368
317
  [ :after_commit, :proc ],
369
- [ :after_commit, :string ],
370
318
  [ :after_commit, :method ]
371
319
  ], david.history
372
320
  end
@@ -400,29 +348,24 @@ class CallbacksTest < ActiveRecord::TestCase
400
348
  david.destroy
401
349
  assert_equal [
402
350
  [ :after_find, :method ],
403
- [ :after_find, :string ],
404
351
  [ :after_find, :proc ],
405
352
  [ :after_find, :object ],
406
353
  [ :after_find, :block ],
407
354
  [ :after_initialize, :method ],
408
- [ :after_initialize, :string ],
409
355
  [ :after_initialize, :proc ],
410
356
  [ :after_initialize, :object ],
411
357
  [ :after_initialize, :block ],
412
358
  [ :before_destroy, :method ],
413
- [ :before_destroy, :string ],
414
359
  [ :before_destroy, :proc ],
415
360
  [ :before_destroy, :object ],
416
361
  [ :before_destroy, :block ],
417
362
  [ :after_destroy, :method ],
418
- [ :after_destroy, :string ],
419
363
  [ :after_destroy, :proc ],
420
364
  [ :after_destroy, :object ],
421
365
  [ :after_destroy, :block ],
422
366
  [ :after_commit, :block ],
423
367
  [ :after_commit, :object ],
424
368
  [ :after_commit, :proc ],
425
- [ :after_commit, :string ],
426
369
  [ :after_commit, :method ]
427
370
  ], david.history
428
371
  end
@@ -432,165 +375,71 @@ class CallbacksTest < ActiveRecord::TestCase
432
375
  CallbackDeveloper.delete(david.id)
433
376
  assert_equal [
434
377
  [ :after_find, :method ],
435
- [ :after_find, :string ],
436
378
  [ :after_find, :proc ],
437
379
  [ :after_find, :object ],
438
380
  [ :after_find, :block ],
439
381
  [ :after_initialize, :method ],
440
- [ :after_initialize, :string ],
441
382
  [ :after_initialize, :proc ],
442
383
  [ :after_initialize, :object ],
443
384
  [ :after_initialize, :block ],
444
385
  ], david.history
445
386
  end
446
387
 
447
- def test_deprecated_before_save_returning_false
448
- david = ImmutableDeveloper.find(1)
449
- assert_deprecated do
450
- assert david.valid?
451
- assert !david.save
452
- exc = assert_raise(ActiveRecord::RecordNotSaved) { david.save! }
453
- assert_equal exc.record, david
454
- assert_equal "Failed to save the record", exc.message
455
- end
456
-
457
- david = ImmutableDeveloper.find(1)
458
- david.salary = 10_000_000
459
- assert !david.valid?
460
- assert !david.save
461
- assert_raise(ActiveRecord::RecordInvalid) { david.save! }
462
-
463
- someone = CallbackCancellationDeveloper.find(1)
464
- someone.cancel_before_save = true
465
- assert_deprecated do
466
- assert someone.valid?
467
- assert !someone.save
468
- end
469
- assert_save_callbacks_not_called(someone)
470
- end
471
-
472
- def test_deprecated_before_create_returning_false
473
- someone = CallbackCancellationDeveloper.new
474
- someone.cancel_before_create = true
475
- assert_deprecated do
476
- assert someone.valid?
477
- assert !someone.save
478
- end
479
- assert_save_callbacks_not_called(someone)
480
- end
481
-
482
- def test_deprecated_before_update_returning_false
483
- someone = CallbackCancellationDeveloper.find(1)
484
- someone.cancel_before_update = true
485
- assert_deprecated do
486
- assert someone.valid?
487
- assert !someone.save
488
- end
489
- assert_save_callbacks_not_called(someone)
490
- end
491
-
492
- def test_deprecated_before_destroy_returning_false
493
- david = ImmutableDeveloper.find(1)
494
- assert_deprecated do
495
- assert !david.destroy
496
- exc = assert_raise(ActiveRecord::RecordNotDestroyed) { david.destroy! }
497
- assert_equal exc.record, david
498
- assert_equal "Failed to destroy the record", exc.message
499
- end
500
- assert_not_nil ImmutableDeveloper.find_by_id(1)
501
-
502
- someone = CallbackCancellationDeveloper.find(1)
503
- someone.cancel_before_destroy = true
504
- assert_deprecated do
505
- assert !someone.destroy
506
- assert_raise(ActiveRecord::RecordNotDestroyed) { someone.destroy! }
507
- end
508
- assert !someone.after_destroy_called
509
- end
510
-
511
388
  def assert_save_callbacks_not_called(someone)
512
- assert !someone.after_save_called
513
- assert !someone.after_create_called
514
- assert !someone.after_update_called
389
+ assert_not someone.after_save_called
390
+ assert_not someone.after_create_called
391
+ assert_not someone.after_update_called
515
392
  end
516
393
  private :assert_save_callbacks_not_called
517
394
 
518
395
  def test_before_create_throwing_abort
519
396
  someone = CallbackHaltedDeveloper.new
520
397
  someone.cancel_before_create = true
521
- assert someone.valid?
522
- assert !someone.save
398
+ assert_predicate someone, :valid?
399
+ assert_not someone.save
523
400
  assert_save_callbacks_not_called(someone)
524
401
  end
525
402
 
526
403
  def test_before_save_throwing_abort
527
404
  david = DeveloperWithCanceledCallbacks.find(1)
528
- assert david.valid?
529
- assert !david.save
405
+ assert_predicate david, :valid?
406
+ assert_not david.save
530
407
  exc = assert_raise(ActiveRecord::RecordNotSaved) { david.save! }
531
- assert_equal exc.record, david
408
+ assert_equal david, exc.record
532
409
 
533
410
  david = DeveloperWithCanceledCallbacks.find(1)
534
411
  david.salary = 10_000_000
535
- assert !david.valid?
536
- assert !david.save
412
+ assert_not_predicate david, :valid?
413
+ assert_not david.save
537
414
  assert_raise(ActiveRecord::RecordInvalid) { david.save! }
538
415
 
539
416
  someone = CallbackHaltedDeveloper.find(1)
540
417
  someone.cancel_before_save = true
541
- assert someone.valid?
542
- assert !someone.save
418
+ assert_predicate someone, :valid?
419
+ assert_not someone.save
543
420
  assert_save_callbacks_not_called(someone)
544
421
  end
545
422
 
546
423
  def test_before_update_throwing_abort
547
424
  someone = CallbackHaltedDeveloper.find(1)
548
425
  someone.cancel_before_update = true
549
- assert someone.valid?
550
- assert !someone.save
426
+ assert_predicate someone, :valid?
427
+ assert_not someone.save
551
428
  assert_save_callbacks_not_called(someone)
552
429
  end
553
430
 
554
431
  def test_before_destroy_throwing_abort
555
432
  david = DeveloperWithCanceledCallbacks.find(1)
556
- assert !david.destroy
433
+ assert_not david.destroy
557
434
  exc = assert_raise(ActiveRecord::RecordNotDestroyed) { david.destroy! }
558
- assert_equal exc.record, david
435
+ assert_equal david, exc.record
559
436
  assert_not_nil ImmutableDeveloper.find_by_id(1)
560
437
 
561
438
  someone = CallbackHaltedDeveloper.find(1)
562
439
  someone.cancel_before_destroy = true
563
- assert !someone.destroy
440
+ assert_not someone.destroy
564
441
  assert_raise(ActiveRecord::RecordNotDestroyed) { someone.destroy! }
565
- assert !someone.after_destroy_called
566
- end
567
-
568
- def test_callback_returning_false
569
- david = CallbackDeveloperWithFalseValidation.find(1)
570
- assert_deprecated { david.save }
571
- assert_equal [
572
- [ :after_find, :method ],
573
- [ :after_find, :string ],
574
- [ :after_find, :proc ],
575
- [ :after_find, :object ],
576
- [ :after_find, :block ],
577
- [ :after_initialize, :method ],
578
- [ :after_initialize, :string ],
579
- [ :after_initialize, :proc ],
580
- [ :after_initialize, :object ],
581
- [ :after_initialize, :block ],
582
- [ :before_validation, :method ],
583
- [ :before_validation, :string ],
584
- [ :before_validation, :proc ],
585
- [ :before_validation, :object ],
586
- [ :before_validation, :block ],
587
- [ :before_validation, :returning_false ],
588
- [ :after_rollback, :block ],
589
- [ :after_rollback, :object ],
590
- [ :after_rollback, :proc ],
591
- [ :after_rollback, :string ],
592
- [ :after_rollback, :method ],
593
- ], david.history
442
+ assert_not someone.after_destroy_called
594
443
  end
595
444
 
596
445
  def test_callback_throwing_abort
@@ -598,39 +447,57 @@ class CallbacksTest < ActiveRecord::TestCase
598
447
  david.save
599
448
  assert_equal [
600
449
  [ :after_find, :method ],
601
- [ :after_find, :string ],
602
450
  [ :after_find, :proc ],
603
451
  [ :after_find, :object ],
604
452
  [ :after_find, :block ],
605
453
  [ :after_initialize, :method ],
606
- [ :after_initialize, :string ],
607
454
  [ :after_initialize, :proc ],
608
455
  [ :after_initialize, :object ],
609
456
  [ :after_initialize, :block ],
610
457
  [ :before_validation, :method ],
611
- [ :before_validation, :string ],
612
458
  [ :before_validation, :proc ],
613
459
  [ :before_validation, :object ],
614
460
  [ :before_validation, :block ],
615
461
  [ :before_validation, :throwing_abort ],
616
- [ :after_rollback, :block ],
617
- [ :after_rollback, :object ],
618
- [ :after_rollback, :proc ],
619
- [ :after_rollback, :string ],
620
- [ :after_rollback, :method ],
621
462
  ], david.history
622
463
  end
623
464
 
624
465
  def test_inheritance_of_callbacks
625
466
  parent = ParentDeveloper.new
626
- assert !parent.after_save_called
467
+ assert_not parent.after_save_called
627
468
  parent.save
628
469
  assert parent.after_save_called
629
470
 
630
471
  child = ChildDeveloper.new
631
- assert !child.after_save_called
472
+ assert_not child.after_save_called
632
473
  child.save
633
474
  assert child.after_save_called
634
475
  end
635
476
 
477
+ def test_before_save_doesnt_allow_on_option
478
+ exception = assert_raises ArgumentError do
479
+ Class.new(ActiveRecord::Base) do
480
+ before_save(on: :create) { }
481
+ end
482
+ end
483
+ assert_equal "Unknown key: :on. Valid keys are: :if, :unless, :prepend", exception.message
484
+ end
485
+
486
+ def test_around_save_doesnt_allow_on_option
487
+ exception = assert_raises ArgumentError do
488
+ Class.new(ActiveRecord::Base) do
489
+ around_save(on: :create) { }
490
+ end
491
+ end
492
+ assert_equal "Unknown key: :on. Valid keys are: :if, :unless, :prepend", exception.message
493
+ end
494
+
495
+ def test_after_save_doesnt_allow_on_option
496
+ exception = assert_raises ArgumentError do
497
+ Class.new(ActiveRecord::Base) do
498
+ after_save(on: :create) { }
499
+ end
500
+ end
501
+ assert_equal "Unknown key: :on. Valid keys are: :if, :unless, :prepend", exception.message
502
+ end
636
503
  end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
- require 'models/topic'
4
+ require "models/topic"
3
5
 
4
6
  module ActiveRecord
5
7
  class CloneTest < ActiveRecord::TestCase
@@ -8,9 +10,10 @@ module ActiveRecord
8
10
  def test_persisted
9
11
  topic = Topic.first
10
12
  cloned = topic.clone
11
- assert topic.persisted?, 'topic persisted'
12
- assert cloned.persisted?, 'topic persisted'
13
- assert !cloned.new_record?, 'topic is not new'
13
+ assert topic.persisted?, "topic persisted"
14
+ assert cloned.persisted?, "topic persisted"
15
+ assert_not cloned.new_record?, "topic is not new"
16
+ assert_not cloned.previously_new_record?, "topic was not previously new"
14
17
  end
15
18
 
16
19
  def test_stays_frozen
@@ -18,23 +21,25 @@ module ActiveRecord
18
21
  topic.freeze
19
22
 
20
23
  cloned = topic.clone
21
- assert cloned.persisted?, 'topic persisted'
22
- assert !cloned.new_record?, 'topic is not new'
23
- assert cloned.frozen?, 'topic should be frozen'
24
+ assert cloned.persisted?, "topic persisted"
25
+ assert_not cloned.new_record?, "topic is not new"
26
+ assert cloned.frozen?, "topic should be frozen"
27
+ assert_raise(FrozenError) { cloned.author_name = "Aaron" }
24
28
  end
25
29
 
26
30
  def test_shallow
27
31
  topic = Topic.first
28
32
  cloned = topic.clone
29
- topic.author_name = 'Aaron'
30
- assert_equal 'Aaron', cloned.author_name
33
+ topic.author_name = "Aaron"
34
+ assert_equal "Aaron", cloned.author_name
31
35
  end
32
36
 
33
37
  def test_freezing_a_cloned_model_does_not_freeze_clone
34
38
  cloned = Topic.new
35
39
  clone = cloned.clone
36
40
  cloned.freeze
37
- assert_not clone.frozen?
41
+ assert_not_predicate clone, :frozen?
42
+ assert_raise(FrozenError) { cloned.author_name = "Aaron" }
38
43
  end
39
44
  end
40
45
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
4
 
3
5
  module ActiveRecord