ibm_db 5.2.0-x86-mingw32 → 5.3.2-x86-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (621) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +9 -0
  3. data/LICENSE +55 -18
  4. data/ext/Makefile +15 -13
  5. data/ext/ibm_db.c +62 -57
  6. data/ext/ibm_db.o +0 -0
  7. data/ext/ibm_db.so +0 -0
  8. data/ext/mkmf.log +26 -24
  9. data/ext/ruby_ibm_db_cli.c +1 -0
  10. data/ext/ruby_ibm_db_cli.o +0 -0
  11. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +1463 -1279
  12. data/lib/ibm_db.so +1 -0
  13. data/lib/mswin32/rb3x/i386/ruby30/ibm_db.so +0 -0
  14. data/test/active_record/connection_adapters/fake_adapter.rb +5 -2
  15. data/test/activejob/destroy_association_async_test.rb +305 -0
  16. data/test/activejob/destroy_async_job_not_present_test.rb +31 -0
  17. data/test/activejob/helper.rb +15 -0
  18. data/test/assets/schema_dump_5_1.yml +345 -0
  19. data/test/cases/adapter_prevent_writes_test.rb +334 -0
  20. data/test/cases/adapter_test.rb +432 -218
  21. data/test/cases/adapters/mysql2/active_schema_test.rb +85 -75
  22. data/test/cases/adapters/mysql2/auto_increment_test.rb +34 -0
  23. data/test/cases/adapters/mysql2/bind_parameter_test.rb +5 -3
  24. data/test/cases/adapters/mysql2/boolean_test.rb +6 -4
  25. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +26 -24
  26. data/test/cases/adapters/mysql2/charset_collation_test.rb +20 -17
  27. data/test/cases/adapters/mysql2/connection_test.rb +48 -50
  28. data/test/cases/adapters/mysql2/count_deleted_rows_with_lock_test.rb +28 -0
  29. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +23 -19
  30. data/test/cases/adapters/mysql2/enum_test.rb +32 -11
  31. data/test/cases/adapters/mysql2/explain_test.rb +13 -11
  32. data/test/cases/adapters/mysql2/json_test.rb +17 -188
  33. data/test/cases/adapters/mysql2/mysql2_adapter_prevent_writes_test.rb +208 -0
  34. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +183 -28
  35. data/test/cases/adapters/mysql2/nested_deadlock_test.rb +75 -0
  36. data/test/cases/adapters/mysql2/optimizer_hints_test.rb +69 -0
  37. data/test/cases/adapters/mysql2/schema_migrations_test.rb +26 -21
  38. data/test/cases/adapters/mysql2/schema_test.rb +24 -22
  39. data/test/cases/adapters/mysql2/set_test.rb +32 -0
  40. data/test/cases/adapters/mysql2/sp_test.rb +10 -8
  41. data/test/cases/adapters/mysql2/sql_types_test.rb +8 -6
  42. data/test/cases/adapters/mysql2/table_options_test.rb +93 -10
  43. data/test/cases/adapters/mysql2/transaction_test.rb +151 -0
  44. data/test/cases/adapters/mysql2/unsigned_type_test.rb +11 -9
  45. data/test/cases/adapters/mysql2/virtual_column_test.rb +66 -0
  46. data/test/cases/adapters/postgresql/active_schema_test.rb +40 -25
  47. data/test/cases/adapters/postgresql/array_test.rb +118 -63
  48. data/test/cases/adapters/postgresql/bit_string_test.rb +12 -10
  49. data/test/cases/adapters/postgresql/bytea_test.rb +26 -25
  50. data/test/cases/adapters/postgresql/case_insensitive_test.rb +10 -9
  51. data/test/cases/adapters/postgresql/change_schema_test.rb +7 -5
  52. data/test/cases/adapters/postgresql/cidr_test.rb +2 -0
  53. data/test/cases/adapters/postgresql/citext_test.rb +58 -58
  54. data/test/cases/adapters/postgresql/collation_test.rb +17 -15
  55. data/test/cases/adapters/postgresql/composite_test.rb +25 -23
  56. data/test/cases/adapters/postgresql/connection_test.rb +73 -85
  57. data/test/cases/adapters/postgresql/create_unlogged_tables_test.rb +74 -0
  58. data/test/cases/adapters/postgresql/datatype_test.rb +19 -22
  59. data/test/cases/adapters/postgresql/date_test.rb +42 -0
  60. data/test/cases/adapters/postgresql/domain_test.rb +9 -7
  61. data/test/cases/adapters/postgresql/enum_test.rb +12 -10
  62. data/test/cases/adapters/postgresql/explain_test.rb +10 -8
  63. data/test/cases/adapters/postgresql/extension_migration_test.rb +13 -12
  64. data/test/cases/adapters/postgresql/foreign_table_test.rb +109 -0
  65. data/test/cases/adapters/postgresql/full_text_test.rb +8 -6
  66. data/test/cases/adapters/postgresql/geometric_test.rb +57 -63
  67. data/test/cases/adapters/postgresql/hstore_test.rb +288 -280
  68. data/test/cases/adapters/postgresql/infinity_test.rb +54 -15
  69. data/test/cases/adapters/postgresql/integer_test.rb +2 -0
  70. data/test/cases/adapters/postgresql/interval_test.rb +99 -0
  71. data/test/cases/adapters/postgresql/json_test.rb +16 -201
  72. data/test/cases/adapters/postgresql/ltree_test.rb +14 -16
  73. data/test/cases/adapters/postgresql/money_test.rb +47 -16
  74. data/test/cases/adapters/postgresql/network_test.rb +36 -28
  75. data/test/cases/adapters/postgresql/numbers_test.rb +7 -5
  76. data/test/cases/adapters/postgresql/optimizer_hints_test.rb +71 -0
  77. data/test/cases/adapters/postgresql/partitions_test.rb +22 -0
  78. data/test/cases/adapters/postgresql/postgresql_adapter_prevent_writes_test.rb +205 -0
  79. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +178 -136
  80. data/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +27 -0
  81. data/test/cases/adapters/postgresql/quoting_test.rb +12 -6
  82. data/test/cases/adapters/postgresql/range_test.rb +406 -292
  83. data/test/cases/adapters/postgresql/referential_integrity_test.rb +16 -15
  84. data/test/cases/adapters/postgresql/rename_table_test.rb +9 -8
  85. data/test/cases/adapters/postgresql/schema_authorization_test.rb +14 -23
  86. data/test/cases/adapters/postgresql/schema_test.rb +207 -91
  87. data/test/cases/adapters/postgresql/serial_test.rb +9 -7
  88. data/test/cases/adapters/postgresql/statement_pool_test.rb +26 -6
  89. data/test/cases/adapters/postgresql/timestamp_test.rb +17 -15
  90. data/test/cases/adapters/postgresql/transaction_nested_test.rb +114 -0
  91. data/test/cases/adapters/postgresql/transaction_test.rb +189 -0
  92. data/test/cases/adapters/postgresql/type_lookup_test.rb +12 -10
  93. data/test/cases/adapters/postgresql/utils_test.rb +11 -9
  94. data/test/cases/adapters/postgresql/uuid_test.rb +226 -109
  95. data/test/cases/adapters/postgresql/xml_test.rb +10 -14
  96. data/test/cases/adapters/sqlite3/collation_test.rb +26 -15
  97. data/test/cases/adapters/sqlite3/copy_table_test.rb +31 -28
  98. data/test/cases/adapters/sqlite3/explain_test.rb +13 -11
  99. data/test/cases/adapters/sqlite3/json_test.rb +29 -0
  100. data/test/cases/adapters/sqlite3/quoting_test.rb +35 -57
  101. data/test/cases/adapters/sqlite3/sqlite3_adapter_prevent_writes_test.rb +186 -0
  102. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +318 -131
  103. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +11 -11
  104. data/test/cases/adapters/sqlite3/statement_pool_test.rb +7 -6
  105. data/test/cases/adapters/sqlite3/transaction_test.rb +123 -0
  106. data/test/cases/aggregations_test.rb +14 -12
  107. data/test/cases/annotate_test.rb +46 -0
  108. data/test/cases/ar_schema_test.rb +153 -86
  109. data/test/cases/arel/attributes/attribute_test.rb +1145 -0
  110. data/test/cases/arel/attributes/math_test.rb +83 -0
  111. data/test/cases/arel/attributes_test.rb +27 -0
  112. data/test/cases/arel/collectors/bind_test.rb +40 -0
  113. data/test/cases/arel/collectors/composite_test.rb +47 -0
  114. data/test/cases/arel/collectors/sql_string_test.rb +41 -0
  115. data/test/cases/arel/collectors/substitute_bind_collector_test.rb +48 -0
  116. data/test/cases/arel/crud_test.rb +65 -0
  117. data/test/cases/arel/delete_manager_test.rb +53 -0
  118. data/test/cases/arel/factory_methods_test.rb +46 -0
  119. data/test/cases/arel/helper.rb +45 -0
  120. data/test/cases/arel/insert_manager_test.rb +241 -0
  121. data/test/cases/arel/nodes/and_test.rb +30 -0
  122. data/test/cases/arel/nodes/as_test.rb +36 -0
  123. data/test/cases/arel/nodes/ascending_test.rb +46 -0
  124. data/test/cases/arel/nodes/bin_test.rb +35 -0
  125. data/test/cases/arel/nodes/binary_test.rb +29 -0
  126. data/test/cases/arel/nodes/bind_param_test.rb +22 -0
  127. data/test/cases/arel/nodes/case_test.rb +96 -0
  128. data/test/cases/arel/nodes/casted_test.rb +18 -0
  129. data/test/cases/arel/nodes/comment_test.rb +22 -0
  130. data/test/cases/arel/nodes/count_test.rb +35 -0
  131. data/test/cases/arel/nodes/delete_statement_test.rb +36 -0
  132. data/test/cases/arel/nodes/descending_test.rb +46 -0
  133. data/test/cases/arel/nodes/distinct_test.rb +21 -0
  134. data/test/cases/arel/nodes/equality_test.rb +62 -0
  135. data/test/cases/arel/nodes/extract_test.rb +43 -0
  136. data/test/cases/arel/nodes/false_test.rb +21 -0
  137. data/test/cases/arel/nodes/grouping_test.rb +26 -0
  138. data/test/cases/arel/nodes/infix_operation_test.rb +42 -0
  139. data/test/cases/arel/nodes/insert_statement_test.rb +44 -0
  140. data/test/cases/arel/nodes/named_function_test.rb +48 -0
  141. data/test/cases/arel/nodes/node_test.rb +22 -0
  142. data/test/cases/arel/nodes/not_test.rb +31 -0
  143. data/test/cases/arel/nodes/or_test.rb +36 -0
  144. data/test/cases/arel/nodes/over_test.rb +69 -0
  145. data/test/cases/arel/nodes/select_core_test.rb +79 -0
  146. data/test/cases/arel/nodes/select_statement_test.rb +51 -0
  147. data/test/cases/arel/nodes/sql_literal_test.rb +75 -0
  148. data/test/cases/arel/nodes/sum_test.rb +35 -0
  149. data/test/cases/arel/nodes/table_alias_test.rb +29 -0
  150. data/test/cases/arel/nodes/true_test.rb +21 -0
  151. data/test/cases/arel/nodes/unary_operation_test.rb +41 -0
  152. data/test/cases/arel/nodes/update_statement_test.rb +60 -0
  153. data/test/cases/arel/nodes/window_test.rb +81 -0
  154. data/test/cases/arel/nodes_test.rb +34 -0
  155. data/test/cases/arel/select_manager_test.rb +1238 -0
  156. data/test/cases/arel/support/fake_record.rb +135 -0
  157. data/test/cases/arel/table_test.rb +216 -0
  158. data/test/cases/arel/update_manager_test.rb +126 -0
  159. data/test/cases/arel/visitors/dispatch_contamination_test.rb +78 -0
  160. data/test/cases/arel/visitors/dot_test.rb +90 -0
  161. data/test/cases/arel/visitors/mysql_test.rb +157 -0
  162. data/test/cases/arel/visitors/postgres_test.rb +366 -0
  163. data/test/cases/arel/visitors/sqlite_test.rb +75 -0
  164. data/test/cases/arel/visitors/to_sql_test.rb +750 -0
  165. data/test/cases/associations/belongs_to_associations_test.rb +510 -158
  166. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +4 -2
  167. data/test/cases/associations/callbacks_test.rb +56 -38
  168. data/test/cases/associations/cascaded_eager_loading_test.rb +118 -61
  169. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +138 -18
  170. data/test/cases/associations/eager_load_nested_include_test.rb +38 -37
  171. data/test/cases/associations/eager_singularization_test.rb +21 -21
  172. data/test/cases/associations/eager_test.rb +559 -415
  173. data/test/cases/associations/extension_test.rb +18 -12
  174. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +234 -213
  175. data/test/cases/associations/has_many_associations_test.rb +1038 -465
  176. data/test/cases/associations/has_many_through_associations_test.rb +558 -249
  177. data/test/cases/associations/has_one_associations_test.rb +294 -129
  178. data/test/cases/associations/has_one_through_associations_test.rb +121 -75
  179. data/test/cases/associations/inner_join_association_test.rb +114 -38
  180. data/test/cases/associations/inverse_associations_test.rb +606 -398
  181. data/test/cases/associations/join_model_test.rb +158 -148
  182. data/test/cases/associations/left_outer_join_association_test.rb +59 -24
  183. data/test/cases/associations/nested_through_associations_test.rb +166 -109
  184. data/test/cases/associations/required_test.rb +35 -10
  185. data/test/cases/associations_test.rb +241 -110
  186. data/test/cases/attribute_methods/read_test.rb +11 -11
  187. data/test/cases/attribute_methods_test.rb +413 -298
  188. data/test/cases/attributes_test.rb +145 -27
  189. data/test/cases/autosave_association_test.rb +681 -436
  190. data/test/cases/base_prevent_writes_test.rb +229 -0
  191. data/test/cases/base_test.rb +599 -542
  192. data/test/cases/batches_test.rb +288 -82
  193. data/test/cases/binary_test.rb +26 -31
  194. data/test/cases/bind_parameter_test.rb +194 -21
  195. data/test/cases/boolean_test.rb +52 -0
  196. data/test/cases/cache_key_test.rb +110 -5
  197. data/test/cases/calculations_test.rb +740 -177
  198. data/test/cases/callbacks_test.rb +74 -207
  199. data/test/cases/clone_test.rb +15 -10
  200. data/test/cases/coders/json_test.rb +2 -0
  201. data/test/cases/coders/yaml_column_test.rb +16 -13
  202. data/test/cases/collection_cache_key_test.rb +177 -20
  203. data/test/cases/column_alias_test.rb +9 -7
  204. data/test/cases/column_definition_test.rb +10 -68
  205. data/test/cases/comment_test.rb +166 -107
  206. data/test/cases/connection_adapters/adapter_leasing_test.rb +14 -10
  207. data/test/cases/connection_adapters/connection_handler_test.rb +358 -51
  208. data/test/cases/connection_adapters/connection_handlers_multi_db_test.rb +400 -0
  209. data/test/cases/connection_adapters/connection_handlers_multi_pool_config_test.rb +103 -0
  210. data/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb +499 -0
  211. data/test/cases/connection_adapters/connection_swapping_nested_test.rb +457 -0
  212. data/test/cases/connection_adapters/legacy_connection_handlers_multi_db_test.rb +486 -0
  213. data/test/cases/connection_adapters/legacy_connection_handlers_sharding_db_test.rb +586 -0
  214. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +319 -138
  215. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +62 -50
  216. data/test/cases/connection_adapters/schema_cache_test.rb +259 -26
  217. data/test/cases/connection_adapters/type_lookup_test.rb +96 -95
  218. data/test/cases/connection_management_test.rb +13 -11
  219. data/test/cases/connection_pool_test.rb +316 -83
  220. data/test/cases/core_test.rb +82 -58
  221. data/test/cases/counter_cache_test.rb +204 -50
  222. data/test/cases/custom_locking_test.rb +5 -3
  223. data/test/cases/database_configurations/hash_config_test.rb +74 -0
  224. data/test/cases/database_configurations/resolver_test.rb +150 -0
  225. data/test/cases/database_configurations_test.rb +145 -0
  226. data/test/cases/database_selector_test.rb +296 -0
  227. data/test/cases/database_statements_test.rb +18 -16
  228. data/test/cases/date_test.rb +8 -16
  229. data/test/cases/date_time_precision_test.rb +100 -78
  230. data/test/cases/date_time_test.rb +23 -8
  231. data/test/cases/defaults_test.rb +106 -71
  232. data/test/cases/delegated_type_test.rb +57 -0
  233. data/test/cases/dirty_test.rb +419 -223
  234. data/test/cases/disconnected_test.rb +6 -6
  235. data/test/cases/dup_test.rb +54 -27
  236. data/test/cases/enum_test.rb +461 -82
  237. data/test/cases/errors_test.rb +7 -7
  238. data/test/cases/explain_subscriber_test.rb +17 -15
  239. data/test/cases/explain_test.rb +11 -19
  240. data/test/cases/filter_attributes_test.rb +153 -0
  241. data/test/cases/finder_respond_to_test.rb +14 -14
  242. data/test/cases/finder_test.rb +669 -287
  243. data/test/cases/fixture_set/file_test.rb +34 -38
  244. data/test/cases/fixtures_test.rb +833 -176
  245. data/test/cases/forbidden_attributes_protection_test.rb +32 -67
  246. data/test/cases/habtm_destroy_order_test.rb +25 -25
  247. data/test/cases/helper.rb +78 -49
  248. data/test/cases/hot_compatibility_test.rb +33 -32
  249. data/test/cases/i18n_test.rb +18 -17
  250. data/test/cases/inheritance_test.rb +180 -115
  251. data/test/cases/insert_all_test.rb +489 -0
  252. data/test/cases/instrumentation_test.rb +101 -0
  253. data/test/cases/integration_test.rb +119 -31
  254. data/test/cases/invalid_connection_test.rb +18 -16
  255. data/test/cases/invertible_migration_test.rb +183 -43
  256. data/test/cases/json_attribute_test.rb +35 -0
  257. data/test/cases/json_serialization_test.rb +57 -58
  258. data/test/cases/json_shared_test_cases.rb +290 -0
  259. data/test/cases/locking_test.rb +413 -119
  260. data/test/cases/log_subscriber_test.rb +68 -26
  261. data/test/cases/marshal_serialization_test.rb +39 -0
  262. data/test/cases/migration/change_schema_test.rb +118 -72
  263. data/test/cases/migration/change_table_test.rb +138 -30
  264. data/test/cases/migration/check_constraint_test.rb +162 -0
  265. data/test/cases/migration/column_attributes_test.rb +45 -35
  266. data/test/cases/migration/column_positioning_test.rb +18 -6
  267. data/test/cases/migration/columns_test.rb +93 -77
  268. data/test/cases/migration/command_recorder_test.rb +121 -34
  269. data/test/cases/migration/compatibility_test.rb +578 -23
  270. data/test/cases/migration/create_join_table_test.rb +35 -25
  271. data/test/cases/migration/foreign_key_test.rb +503 -284
  272. data/test/cases/migration/helper.rb +4 -3
  273. data/test/cases/migration/index_test.rb +119 -70
  274. data/test/cases/migration/logger_test.rb +9 -6
  275. data/test/cases/migration/pending_migrations_test.rb +88 -34
  276. data/test/cases/migration/references_foreign_key_test.rb +164 -150
  277. data/test/cases/migration/references_index_test.rb +38 -19
  278. data/test/cases/migration/references_statements_test.rb +15 -14
  279. data/test/cases/migration/rename_table_test.rb +53 -30
  280. data/test/cases/migration_test.rb +637 -269
  281. data/test/cases/migrator_test.rb +191 -135
  282. data/test/cases/mixin_test.rb +7 -11
  283. data/test/cases/modules_test.rb +36 -34
  284. data/test/cases/multi_db_migrator_test.rb +223 -0
  285. data/test/cases/multiparameter_attributes_test.rb +60 -33
  286. data/test/cases/multiple_db_test.rb +16 -22
  287. data/test/cases/nested_attributes_test.rb +341 -320
  288. data/test/cases/nested_attributes_with_callbacks_test.rb +26 -24
  289. data/test/cases/null_relation_test.rb +84 -0
  290. data/test/cases/numeric_data_test.rb +93 -0
  291. data/test/cases/persistence_test.rb +361 -269
  292. data/test/cases/pooled_connections_test.rb +18 -26
  293. data/test/cases/prepared_statement_status_test.rb +48 -0
  294. data/test/cases/primary_keys_test.rb +210 -104
  295. data/test/cases/query_cache_test.rb +610 -141
  296. data/test/cases/quoting_test.rb +132 -31
  297. data/test/cases/readonly_test.rb +49 -48
  298. data/test/cases/reaper_test.rb +146 -32
  299. data/test/cases/reflection_test.rb +167 -156
  300. data/test/cases/relation/delegation_test.rb +49 -36
  301. data/test/cases/relation/delete_all_test.rb +117 -0
  302. data/test/cases/relation/merging_test.rb +319 -42
  303. data/test/cases/relation/mutation_test.rb +55 -93
  304. data/test/cases/relation/or_test.rb +129 -29
  305. data/test/cases/relation/predicate_builder_test.rb +21 -6
  306. data/test/cases/relation/record_fetch_warning_test.rb +5 -3
  307. data/test/cases/relation/select_test.rb +67 -0
  308. data/test/cases/relation/update_all_test.rb +317 -0
  309. data/test/cases/relation/where_chain_test.rb +68 -32
  310. data/test/cases/relation/where_clause_test.rb +136 -61
  311. data/test/cases/relation/where_test.rb +155 -48
  312. data/test/cases/relation_test.rb +266 -112
  313. data/test/cases/relations_test.rb +969 -744
  314. data/test/cases/reload_models_test.rb +13 -9
  315. data/test/cases/reserved_word_test.rb +141 -0
  316. data/test/cases/result_test.rb +68 -17
  317. data/test/cases/sanitize_test.rb +87 -71
  318. data/test/cases/schema_dumper_test.rb +221 -128
  319. data/test/cases/schema_loading_test.rb +3 -2
  320. data/test/cases/scoping/default_scoping_test.rb +185 -144
  321. data/test/cases/scoping/named_scoping_test.rb +177 -89
  322. data/test/cases/scoping/relation_scoping_test.rb +197 -75
  323. data/test/cases/secure_token_test.rb +18 -3
  324. data/test/cases/serialization_test.rb +30 -28
  325. data/test/cases/serialized_attribute_test.rb +133 -42
  326. data/test/cases/signed_id_test.rb +168 -0
  327. data/test/cases/statement_cache_test.rb +41 -24
  328. data/test/cases/statement_invalid_test.rb +42 -0
  329. data/test/cases/store_test.rb +180 -55
  330. data/test/cases/strict_loading_test.rb +473 -0
  331. data/test/cases/suppressor_test.rb +26 -12
  332. data/test/cases/tasks/database_tasks_test.rb +1258 -194
  333. data/test/cases/tasks/mysql_rake_test.rb +370 -298
  334. data/test/cases/tasks/postgresql_rake_test.rb +481 -251
  335. data/test/cases/tasks/sqlite_rake_test.rb +225 -178
  336. data/test/cases/test_case.rb +51 -40
  337. data/test/cases/test_databases_test.rb +79 -0
  338. data/test/cases/test_fixtures_test.rb +79 -19
  339. data/test/cases/time_precision_test.rb +98 -76
  340. data/test/cases/timestamp_test.rb +102 -99
  341. data/test/cases/touch_later_test.rb +12 -10
  342. data/test/cases/transaction_callbacks_test.rb +344 -90
  343. data/test/cases/transaction_isolation_test.rb +12 -12
  344. data/test/cases/transactions_test.rb +612 -162
  345. data/test/cases/type/adapter_specific_registry_test.rb +14 -2
  346. data/test/cases/type/date_time_test.rb +4 -2
  347. data/test/cases/type/integer_test.rb +4 -2
  348. data/test/cases/type/string_test.rb +10 -8
  349. data/test/cases/type/time_test.rb +28 -0
  350. data/test/cases/type/type_map_test.rb +29 -28
  351. data/test/cases/type/unsigned_integer_test.rb +19 -0
  352. data/test/cases/type_test.rb +2 -0
  353. data/test/cases/types_test.rb +3 -1
  354. data/test/cases/unconnected_test.rb +14 -1
  355. data/test/cases/unsafe_raw_sql_test.rb +274 -0
  356. data/test/cases/validations/absence_validation_test.rb +19 -17
  357. data/test/cases/validations/association_validation_test.rb +30 -28
  358. data/test/cases/validations/i18n_generate_message_validation_test.rb +34 -16
  359. data/test/cases/validations/i18n_validation_test.rb +22 -21
  360. data/test/cases/validations/length_validation_test.rb +34 -33
  361. data/test/cases/validations/numericality_validation_test.rb +181 -0
  362. data/test/cases/validations/presence_validation_test.rb +21 -19
  363. data/test/cases/validations/uniqueness_validation_test.rb +156 -86
  364. data/test/cases/validations_repair_helper.rb +2 -0
  365. data/test/cases/validations_test.rb +61 -26
  366. data/test/cases/view_test.rb +122 -116
  367. data/test/cases/yaml_serialization_test.rb +79 -34
  368. data/test/config.example.yml +19 -19
  369. data/test/config.rb +3 -1
  370. data/test/config.yml +16 -6
  371. data/test/fixtures/all/namespaced/accounts.yml +2 -0
  372. data/test/fixtures/author_addresses.yml +1 -8
  373. data/test/fixtures/authors.yml +1 -7
  374. data/test/fixtures/binaries.yml +4 -0
  375. data/test/fixtures/books.yml +9 -2
  376. data/test/fixtures/categories_posts.yml +3 -0
  377. data/test/fixtures/citations.yml +5 -0
  378. data/test/fixtures/comments.yml +7 -0
  379. data/test/fixtures/companies.yml +5 -0
  380. data/test/fixtures/computers.yml +2 -0
  381. data/test/fixtures/customers.yml +10 -1
  382. data/test/fixtures/developers.yml +1 -1
  383. data/test/fixtures/essays.yml +10 -0
  384. data/test/fixtures/faces.yml +3 -3
  385. data/test/fixtures/humans.yml +5 -0
  386. data/test/fixtures/interests.yml +7 -7
  387. data/test/fixtures/memberships.yml +7 -0
  388. data/test/fixtures/minimalistics.yml +3 -0
  389. data/test/fixtures/mixed_case_monkeys.yml +2 -2
  390. data/test/fixtures/naked/yml/courses_with_invalid_key.yml +3 -0
  391. data/test/fixtures/naked/yml/parrots.yml +1 -0
  392. data/test/fixtures/other_books.yml +26 -0
  393. data/test/fixtures/other_posts.yml +1 -0
  394. data/test/fixtures/parrots.yml +7 -1
  395. data/test/fixtures/pirates.yml +3 -0
  396. data/test/fixtures/posts.yml +11 -3
  397. data/test/fixtures/readers.yml +6 -0
  398. data/test/fixtures/reserved_words/values.yml +2 -2
  399. data/test/fixtures/sponsors.yml +3 -0
  400. data/test/fixtures/strict_zines.yml +2 -0
  401. data/test/fixtures/subscribers.yml +1 -1
  402. data/test/fixtures/tasks.yml +1 -1
  403. data/test/fixtures/warehouse-things.yml +3 -0
  404. data/test/migrations/10_urban/9_add_expressions.rb +2 -0
  405. data/test/migrations/decimal/1_give_me_big_numbers.rb +6 -4
  406. data/test/migrations/magic/1_currencies_have_symbols.rb +3 -2
  407. data/test/migrations/missing/1000_people_have_middle_names.rb +2 -0
  408. data/test/migrations/missing/1_people_have_last_names.rb +2 -0
  409. data/test/migrations/missing/3_we_need_reminders.rb +2 -0
  410. data/test/migrations/missing/4_innocent_jointable.rb +3 -1
  411. data/test/migrations/rename/1_we_need_things.rb +2 -0
  412. data/test/migrations/rename/2_rename_things.rb +2 -0
  413. data/test/migrations/to_copy/1_people_have_hobbies.rb +3 -1
  414. data/test/migrations/to_copy/2_people_have_descriptions.rb +3 -1
  415. data/test/migrations/to_copy2/1_create_articles.rb +2 -0
  416. data/test/migrations/to_copy2/2_create_comments.rb +3 -1
  417. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +3 -1
  418. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +3 -1
  419. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +3 -1
  420. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +2 -0
  421. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +2 -0
  422. data/test/migrations/valid/1_valid_people_have_last_names.rb +2 -0
  423. data/test/migrations/valid/2_we_need_reminders.rb +2 -0
  424. data/test/migrations/valid/3_innocent_jointable.rb +3 -1
  425. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +2 -0
  426. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -0
  427. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +3 -1
  428. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +2 -0
  429. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +2 -0
  430. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +3 -1
  431. data/test/migrations/version_check/20131219224947_migration_version_check.rb +2 -0
  432. data/test/models/account.rb +46 -0
  433. data/test/models/admin/account.rb +3 -1
  434. data/test/models/admin/randomly_named_c1.rb +2 -0
  435. data/test/models/admin/user.rb +16 -8
  436. data/test/models/admin.rb +4 -2
  437. data/test/models/aircraft.rb +3 -1
  438. data/test/models/arunit2_model.rb +2 -0
  439. data/test/models/author.rb +153 -102
  440. data/test/models/auto_id.rb +2 -0
  441. data/test/models/autoloadable/extra_firm.rb +2 -0
  442. data/test/models/binary.rb +3 -1
  443. data/test/models/binary_field.rb +6 -0
  444. data/test/models/bird.rb +13 -1
  445. data/test/models/book.rb +14 -4
  446. data/test/models/book_destroy_async.rb +24 -0
  447. data/test/models/boolean.rb +5 -0
  448. data/test/models/bulb.rb +13 -4
  449. data/test/models/cake_designer.rb +2 -0
  450. data/test/models/car.rb +17 -10
  451. data/test/models/carrier.rb +2 -0
  452. data/test/models/cart.rb +5 -0
  453. data/test/models/cat.rb +2 -0
  454. data/test/models/categorization.rb +8 -6
  455. data/test/models/category.rb +28 -16
  456. data/test/models/chef.rb +2 -0
  457. data/test/models/citation.rb +5 -1
  458. data/test/models/club.rb +13 -10
  459. data/test/models/college.rb +4 -2
  460. data/test/models/column.rb +2 -0
  461. data/test/models/column_name.rb +2 -0
  462. data/test/models/comment.rb +32 -10
  463. data/test/models/company.rb +102 -106
  464. data/test/models/company_in_module.rb +27 -26
  465. data/test/models/computer.rb +3 -1
  466. data/test/models/contact.rb +15 -13
  467. data/test/models/content.rb +5 -3
  468. data/test/models/contract.rb +21 -3
  469. data/test/models/country.rb +2 -4
  470. data/test/models/course.rb +3 -1
  471. data/test/models/customer.rb +10 -8
  472. data/test/models/customer_carrier.rb +2 -0
  473. data/test/models/dashboard.rb +2 -0
  474. data/test/models/default.rb +2 -0
  475. data/test/models/department.rb +2 -0
  476. data/test/models/destroy_async_parent.rb +15 -0
  477. data/test/models/destroy_async_parent_soft_delete.rb +20 -0
  478. data/test/models/developer.rb +152 -85
  479. data/test/models/dl_keyed_belongs_to.rb +13 -0
  480. data/test/models/dl_keyed_belongs_to_soft_delete.rb +19 -0
  481. data/test/models/dl_keyed_has_many.rb +5 -0
  482. data/test/models/dl_keyed_has_many_through.rb +5 -0
  483. data/test/models/dl_keyed_has_one.rb +5 -0
  484. data/test/models/dl_keyed_join.rb +10 -0
  485. data/test/models/dog.rb +2 -0
  486. data/test/models/dog_lover.rb +2 -0
  487. data/test/models/doubloon.rb +3 -1
  488. data/test/models/drink_designer.rb +17 -0
  489. data/test/models/edge.rb +4 -2
  490. data/test/models/electron.rb +2 -0
  491. data/test/models/engine.rb +3 -2
  492. data/test/models/entrant.rb +2 -0
  493. data/test/models/entry.rb +5 -0
  494. data/test/models/essay.rb +6 -3
  495. data/test/models/essay_destroy_async.rb +12 -0
  496. data/test/models/event.rb +3 -1
  497. data/test/models/eye.rb +5 -3
  498. data/test/models/face.rb +14 -6
  499. data/test/models/family.rb +6 -0
  500. data/test/models/family_tree.rb +6 -0
  501. data/test/models/friendship.rb +5 -3
  502. data/test/models/frog.rb +8 -0
  503. data/test/models/guid.rb +3 -1
  504. data/test/models/guitar.rb +2 -0
  505. data/test/models/hotel.rb +5 -3
  506. data/test/models/human.rb +39 -0
  507. data/test/models/image.rb +3 -1
  508. data/test/models/interest.rb +14 -3
  509. data/test/models/invoice.rb +4 -2
  510. data/test/models/item.rb +3 -1
  511. data/test/models/job.rb +5 -3
  512. data/test/models/joke.rb +4 -2
  513. data/test/models/keyboard.rb +3 -1
  514. data/test/models/legacy_thing.rb +2 -0
  515. data/test/models/lesson.rb +2 -0
  516. data/test/models/line_item.rb +3 -1
  517. data/test/models/liquid.rb +2 -0
  518. data/test/models/matey.rb +3 -1
  519. data/test/models/measurement.rb +4 -0
  520. data/test/models/member.rb +23 -20
  521. data/test/models/member_detail.rb +3 -0
  522. data/test/models/member_type.rb +2 -0
  523. data/test/models/membership.rb +4 -1
  524. data/test/models/mentor.rb +3 -1
  525. data/test/models/message.rb +5 -0
  526. data/test/models/minimalistic.rb +2 -0
  527. data/test/models/minivan.rb +3 -2
  528. data/test/models/mixed_case_monkey.rb +3 -1
  529. data/test/models/molecule.rb +2 -0
  530. data/test/models/mouse.rb +6 -0
  531. data/test/models/movie.rb +2 -0
  532. data/test/models/node.rb +4 -2
  533. data/test/models/non_primary_key.rb +2 -0
  534. data/test/models/notification.rb +2 -0
  535. data/test/models/numeric_data.rb +12 -0
  536. data/test/models/order.rb +4 -2
  537. data/test/models/organization.rb +9 -7
  538. data/test/models/other_dog.rb +3 -1
  539. data/test/models/owner.rb +6 -4
  540. data/test/models/parrot.rb +12 -4
  541. data/test/models/person.rb +59 -54
  542. data/test/models/personal_legacy_thing.rb +3 -1
  543. data/test/models/pet.rb +4 -2
  544. data/test/models/pet_treasure.rb +2 -0
  545. data/test/models/pirate.rb +67 -43
  546. data/test/models/possession.rb +3 -1
  547. data/test/models/post.rb +184 -86
  548. data/test/models/price_estimate.rb +11 -1
  549. data/test/models/professor.rb +3 -1
  550. data/test/models/project.rb +14 -12
  551. data/test/models/publisher/article.rb +2 -0
  552. data/test/models/publisher/magazine.rb +2 -0
  553. data/test/models/publisher.rb +2 -0
  554. data/test/models/randomly_named_c1.rb +2 -0
  555. data/test/models/rating.rb +5 -1
  556. data/test/models/reader.rb +7 -5
  557. data/test/models/recipe.rb +2 -0
  558. data/test/models/record.rb +2 -0
  559. data/test/models/reference.rb +6 -3
  560. data/test/models/reply.rb +39 -21
  561. data/test/models/room.rb +6 -0
  562. data/test/models/section.rb +6 -0
  563. data/test/models/seminar.rb +6 -0
  564. data/test/models/session.rb +6 -0
  565. data/test/models/ship.rb +12 -9
  566. data/test/models/ship_part.rb +5 -3
  567. data/test/models/shop.rb +4 -2
  568. data/test/models/shop_account.rb +2 -0
  569. data/test/models/speedometer.rb +2 -0
  570. data/test/models/sponsor.rb +8 -5
  571. data/test/models/squeak.rb +6 -0
  572. data/test/models/strict_zine.rb +7 -0
  573. data/test/models/string_key_object.rb +2 -0
  574. data/test/models/student.rb +2 -0
  575. data/test/models/subscriber.rb +4 -2
  576. data/test/models/subscription.rb +5 -1
  577. data/test/models/tag.rb +6 -3
  578. data/test/models/tagging.rb +13 -6
  579. data/test/models/task.rb +2 -0
  580. data/test/models/topic.rb +54 -19
  581. data/test/models/toy.rb +4 -0
  582. data/test/models/traffic_light.rb +2 -0
  583. data/test/models/treasure.rb +5 -3
  584. data/test/models/treaty.rb +2 -4
  585. data/test/models/tree.rb +2 -0
  586. data/test/models/tuning_peg.rb +2 -0
  587. data/test/models/tyre.rb +2 -0
  588. data/test/models/user.rb +12 -4
  589. data/test/models/uuid_child.rb +2 -0
  590. data/test/models/uuid_item.rb +2 -0
  591. data/test/models/uuid_parent.rb +2 -0
  592. data/test/models/vegetables.rb +12 -3
  593. data/test/models/vertex.rb +6 -4
  594. data/test/models/warehouse_thing.rb +2 -0
  595. data/test/models/wheel.rb +3 -1
  596. data/test/models/without_table.rb +3 -1
  597. data/test/models/zine.rb +3 -1
  598. data/test/schema/mysql2_specific_schema.rb +49 -35
  599. data/test/schema/oracle_specific_schema.rb +13 -15
  600. data/test/schema/postgresql_specific_schema.rb +51 -40
  601. data/test/schema/schema.rb +334 -154
  602. data/test/schema/sqlite_specific_schema.rb +9 -16
  603. data/test/support/config.rb +26 -26
  604. data/test/support/connection.rb +14 -8
  605. data/test/support/connection_helper.rb +3 -1
  606. data/test/support/ddl_helper.rb +2 -0
  607. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic.dump +0 -0
  608. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic_associations.dump +0 -0
  609. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic.dump +0 -0
  610. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic_associations.dump +0 -0
  611. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic.dump +0 -0
  612. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic_associations.dump +0 -0
  613. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic.dump +0 -0
  614. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic_associations.dump +0 -0
  615. data/test/support/marshal_compatibility_fixtures/legacy_6_0_record_mysql.dump +0 -0
  616. data/test/support/marshal_compatibility_fixtures/legacy_relation.dump +0 -0
  617. data/test/support/schema_dumping_helper.rb +2 -0
  618. data/test/support/stubs/strong_parameters.rb +40 -0
  619. data/test/support/yaml_compatibility_fixtures/rails_v1_mysql.yml +206 -0
  620. data/test/support/yaml_compatibility_fixtures/rails_v2.yml +55 -0
  621. metadata +190 -14
@@ -1,12 +1,27 @@
1
- require 'ostruct'
1
+ # frozen_string_literal: true
2
2
 
3
- module DeveloperProjectsAssociationExtension2
4
- def find_least_recent
5
- order("id ASC").first
6
- end
7
- end
3
+ require "ostruct"
8
4
 
9
5
  class Developer < ActiveRecord::Base
6
+ module TimestampAliases
7
+ extend ActiveSupport::Concern
8
+
9
+ included do
10
+ alias_attribute :created_at, :legacy_created_at
11
+ alias_attribute :updated_at, :legacy_updated_at
12
+ alias_attribute :created_on, :legacy_created_on
13
+ alias_attribute :updated_on, :legacy_updated_on
14
+ end
15
+ end
16
+
17
+ include TimestampAliases
18
+
19
+ module ProjectsAssociationExtension2
20
+ def find_least_recent
21
+ order("id ASC").first
22
+ end
23
+ end
24
+
10
25
  self.ignored_columns = %w(first_name last_name)
11
26
 
12
27
  has_and_belongs_to_many :projects do
@@ -16,63 +31,75 @@ class Developer < ActiveRecord::Base
16
31
  end
17
32
 
18
33
  belongs_to :mentor
34
+ belongs_to :strict_loading_mentor, strict_loading: true, foreign_key: :mentor_id, class_name: "Mentor"
35
+ belongs_to :strict_loading_off_mentor, strict_loading: false, foreign_key: :mentor_id, class_name: "Mentor"
19
36
 
20
37
  accepts_nested_attributes_for :projects
21
38
 
22
39
  has_and_belongs_to_many :shared_computers, class_name: "Computer"
23
40
 
24
41
  has_and_belongs_to_many :projects_extended_by_name,
25
- -> { extending(DeveloperProjectsAssociationExtension) },
26
- :class_name => "Project",
27
- :join_table => "developers_projects",
28
- :association_foreign_key => "project_id"
42
+ -> { extending(ProjectsAssociationExtension) },
43
+ class_name: "Project",
44
+ join_table: "developers_projects",
45
+ association_foreign_key: "project_id"
29
46
 
30
47
  has_and_belongs_to_many :projects_extended_by_name_twice,
31
- -> { extending(DeveloperProjectsAssociationExtension, DeveloperProjectsAssociationExtension2) },
32
- :class_name => "Project",
33
- :join_table => "developers_projects",
34
- :association_foreign_key => "project_id"
48
+ -> { extending(ProjectsAssociationExtension, ProjectsAssociationExtension2) },
49
+ class_name: "Project",
50
+ join_table: "developers_projects",
51
+ association_foreign_key: "project_id"
35
52
 
36
53
  has_and_belongs_to_many :projects_extended_by_name_and_block,
37
- -> { extending(DeveloperProjectsAssociationExtension) },
38
- :class_name => "Project",
39
- :join_table => "developers_projects",
40
- :association_foreign_key => "project_id" do
54
+ -> { extending(ProjectsAssociationExtension) },
55
+ class_name: "Project",
56
+ join_table: "developers_projects",
57
+ association_foreign_key: "project_id" do
41
58
  def find_least_recent
42
59
  order("id ASC").first
43
60
  end
44
61
  end
45
62
 
46
- has_and_belongs_to_many :special_projects, :join_table => 'developers_projects', :association_foreign_key => 'project_id'
63
+ has_and_belongs_to_many :strict_loading_projects,
64
+ join_table: :developers_projects,
65
+ association_foreign_key: :project_id,
66
+ class_name: "Project",
67
+ strict_loading: true
68
+
69
+ has_and_belongs_to_many :special_projects, join_table: "developers_projects", association_foreign_key: "project_id"
47
70
  has_and_belongs_to_many :sym_special_projects,
48
- :join_table => :developers_projects,
49
- :association_foreign_key => 'project_id',
50
- :class_name => 'SpecialProject'
71
+ join_table: :developers_projects,
72
+ association_foreign_key: "project_id",
73
+ class_name: "SpecialProject"
51
74
 
52
75
  has_many :audit_logs
76
+ has_many :required_audit_logs, class_name: "AuditLogRequired"
77
+ has_many :strict_loading_audit_logs, -> { strict_loading }, class_name: "AuditLog"
78
+ has_many :strict_loading_opt_audit_logs, strict_loading: true, class_name: "AuditLog"
53
79
  has_many :contracts
54
- has_many :firms, :through => :contracts, :source => :firm
80
+ has_many :firms, through: :contracts, source: :firm
55
81
  has_many :comments, ->(developer) { where(body: "I'm #{developer.name}") }
56
82
  has_many :ratings, through: :comments
83
+
57
84
  has_one :ship, dependent: :nullify
85
+ has_one :strict_loading_ship, strict_loading: true, class_name: "Ship"
58
86
 
59
87
  belongs_to :firm
60
88
  has_many :contracted_projects, class_name: "Project"
61
89
 
62
- scope :jamises, -> { where(:name => 'Jamis') }
90
+ scope :jamises, -> { where(name: "Jamis") }
63
91
 
64
- validates_inclusion_of :salary, :in => 50000..200000
65
- validates_length_of :name, :within => 3..20
92
+ validates_inclusion_of :salary, in: 50000..200000
93
+ validates_length_of :name, within: 3..20
66
94
 
67
95
  before_create do |developer|
68
- developer.audit_logs.build :message => "Computer created"
96
+ developer.audit_logs.build message: "Computer created"
69
97
  end
70
98
 
71
- attr_accessor :last_name
72
- define_attribute_method 'last_name'
99
+ attribute :last_name
73
100
 
74
101
  def log=(message)
75
- audit_logs.build :message => message
102
+ audit_logs.build message: message
76
103
  end
77
104
 
78
105
  after_find :track_instance_count
@@ -83,28 +110,36 @@ class Developer < ActiveRecord::Base
83
110
  self.class.instance_count += 1
84
111
  end
85
112
  private :track_instance_count
86
-
87
113
  end
88
114
 
89
115
  class SubDeveloper < Developer
90
116
  end
91
117
 
118
+ class SpecialDeveloper < ActiveRecord::Base
119
+ self.table_name = "developers"
120
+ has_many :special_contracts, foreign_key: "developer_id"
121
+ end
122
+
92
123
  class SymbolIgnoredDeveloper < ActiveRecord::Base
93
124
  self.table_name = "developers"
94
125
  self.ignored_columns = [:first_name, :last_name]
95
126
 
96
- attr_accessor :last_name
97
- define_attribute_method "last_name"
127
+ attribute :last_name
98
128
  end
99
129
 
100
130
  class AuditLog < ActiveRecord::Base
101
- belongs_to :developer, :validate => true
102
- belongs_to :unvalidated_developer, :class_name => 'Developer'
131
+ belongs_to :developer, validate: true
132
+ belongs_to :unvalidated_developer, class_name: "Developer"
133
+ end
134
+
135
+ class AuditLogRequired < ActiveRecord::Base
136
+ self.table_name = "audit_logs"
137
+ belongs_to :developer, required: true
103
138
  end
104
139
 
105
140
  class DeveloperWithBeforeDestroyRaise < ActiveRecord::Base
106
- self.table_name = 'developers'
107
- has_and_belongs_to_many :projects, :join_table => 'developers_projects', :foreign_key => 'developer_id'
141
+ self.table_name = "developers"
142
+ has_and_belongs_to_many :projects, join_table: "developers_projects", foreign_key: "developer_id"
108
143
  before_destroy :raise_if_projects_empty!
109
144
 
110
145
  def raise_if_projects_empty!
@@ -113,63 +148,65 @@ class DeveloperWithBeforeDestroyRaise < ActiveRecord::Base
113
148
  end
114
149
 
115
150
  class DeveloperWithSelect < ActiveRecord::Base
116
- self.table_name = 'developers'
117
- default_scope { select('name') }
151
+ self.table_name = "developers"
152
+ default_scope { select("name") }
118
153
  end
119
154
 
120
155
  class DeveloperWithIncludes < ActiveRecord::Base
121
- self.table_name = 'developers'
122
- has_many :audit_logs, :foreign_key => :developer_id
156
+ self.table_name = "developers"
157
+ has_many :audit_logs, foreign_key: :developer_id
123
158
  default_scope { includes(:audit_logs) }
124
159
  end
125
160
 
126
161
  class DeveloperFilteredOnJoins < ActiveRecord::Base
127
- self.table_name = 'developers'
128
- has_and_belongs_to_many :projects, -> { order('projects.id') }, :foreign_key => 'developer_id', :join_table => 'developers_projects'
162
+ self.table_name = "developers"
163
+ has_and_belongs_to_many :projects, -> { order("projects.id") }, foreign_key: "developer_id", join_table: "developers_projects"
129
164
 
130
165
  def self.default_scope
131
- joins(:projects).where(:projects => { :name => 'Active Controller' })
166
+ joins(:projects).where(projects: { name: "Active Controller" })
132
167
  end
133
168
  end
134
169
 
135
170
  class DeveloperOrderedBySalary < ActiveRecord::Base
136
- self.table_name = 'developers'
137
- default_scope { order('salary DESC') }
171
+ include Developer::TimestampAliases
172
+
173
+ self.table_name = "developers"
174
+ default_scope { order("salary DESC") }
138
175
 
139
- scope :by_name, -> { order('name DESC') }
176
+ scope :by_name, -> { order("name DESC") }
140
177
  end
141
178
 
142
179
  class DeveloperCalledDavid < ActiveRecord::Base
143
- self.table_name = 'developers'
180
+ self.table_name = "developers"
144
181
  default_scope { where("name = 'David'") }
145
182
  end
146
183
 
147
184
  class LazyLambdaDeveloperCalledDavid < ActiveRecord::Base
148
- self.table_name = 'developers'
149
- default_scope lambda { where(:name => 'David') }
185
+ self.table_name = "developers"
186
+ default_scope lambda { where(name: "David") }
150
187
  end
151
188
 
152
189
  class LazyBlockDeveloperCalledDavid < ActiveRecord::Base
153
- self.table_name = 'developers'
154
- default_scope { where(:name => 'David') }
190
+ self.table_name = "developers"
191
+ default_scope { where(name: "David") }
155
192
  end
156
193
 
157
194
  class CallableDeveloperCalledDavid < ActiveRecord::Base
158
- self.table_name = 'developers'
159
- default_scope OpenStruct.new(:call => where(:name => 'David'))
195
+ self.table_name = "developers"
196
+ default_scope OpenStruct.new(call: where(name: "David"))
160
197
  end
161
198
 
162
199
  class ClassMethodDeveloperCalledDavid < ActiveRecord::Base
163
- self.table_name = 'developers'
200
+ self.table_name = "developers"
164
201
 
165
202
  def self.default_scope
166
- where(:name => 'David')
203
+ where(name: "David")
167
204
  end
168
205
  end
169
206
 
170
207
  class ClassMethodReferencingScopeDeveloperCalledDavid < ActiveRecord::Base
171
- self.table_name = 'developers'
172
- scope :david, -> { where(:name => 'David') }
208
+ self.table_name = "developers"
209
+ scope :david, -> { where(name: "David") }
173
210
 
174
211
  def self.default_scope
175
212
  david
@@ -177,61 +214,64 @@ class ClassMethodReferencingScopeDeveloperCalledDavid < ActiveRecord::Base
177
214
  end
178
215
 
179
216
  class LazyBlockReferencingScopeDeveloperCalledDavid < ActiveRecord::Base
180
- self.table_name = 'developers'
181
- scope :david, -> { where(:name => 'David') }
217
+ self.table_name = "developers"
218
+ scope :david, -> { where(name: "David") }
182
219
  default_scope { david }
183
220
  end
184
221
 
185
222
  class DeveloperCalledJamis < ActiveRecord::Base
186
- self.table_name = 'developers'
223
+ include Developer::TimestampAliases
224
+
225
+ self.table_name = "developers"
187
226
 
188
- default_scope { where(:name => 'Jamis') }
189
- scope :poor, -> { where('salary < 150000') }
227
+ default_scope { where(name: "Jamis") }
228
+ scope :poor, -> { where("salary < 150000") }
190
229
  scope :david, -> { where name: "David" }
191
230
  scope :david2, -> { unscoped.where name: "David" }
192
231
  end
193
232
 
194
233
  class PoorDeveloperCalledJamis < ActiveRecord::Base
195
- self.table_name = 'developers'
234
+ self.table_name = "developers"
196
235
 
197
- default_scope -> { where(:name => 'Jamis', :salary => 50000) }
236
+ default_scope -> { where(name: "Jamis", salary: 50000) }
198
237
  end
199
238
 
200
239
  class InheritedPoorDeveloperCalledJamis < DeveloperCalledJamis
201
- self.table_name = 'developers'
240
+ self.table_name = "developers"
202
241
 
203
- default_scope -> { where(:salary => 50000) }
242
+ default_scope -> { where(salary: 50000) }
204
243
  end
205
244
 
206
245
  class MultiplePoorDeveloperCalledJamis < ActiveRecord::Base
207
- self.table_name = 'developers'
246
+ self.table_name = "developers"
208
247
 
209
- default_scope -> { where(:name => 'Jamis') }
210
- default_scope -> { where(:salary => 50000) }
248
+ default_scope { }
249
+ default_scope -> { where(name: "Jamis") }
250
+ default_scope -> { where(salary: 50000) }
211
251
  end
212
252
 
213
253
  module SalaryDefaultScope
214
254
  extend ActiveSupport::Concern
215
255
 
216
- included { default_scope { where(:salary => 50000) } }
256
+ included { default_scope { where(salary: 50000) } }
217
257
  end
218
258
 
219
259
  class ModuleIncludedPoorDeveloperCalledJamis < DeveloperCalledJamis
220
- self.table_name = 'developers'
260
+ self.table_name = "developers"
221
261
 
222
262
  include SalaryDefaultScope
223
263
  end
224
264
 
225
265
  class EagerDeveloperWithDefaultScope < ActiveRecord::Base
226
- self.table_name = 'developers'
227
- has_and_belongs_to_many :projects, -> { order('projects.id') }, :foreign_key => 'developer_id', :join_table => 'developers_projects'
266
+ self.table_name = "developers"
267
+ has_and_belongs_to_many :projects, -> { order("projects.id") }, foreign_key: "developer_id", join_table: "developers_projects"
228
268
 
229
269
  default_scope { includes(:projects) }
230
270
  end
231
271
 
232
272
  class EagerDeveloperWithClassMethodDefaultScope < ActiveRecord::Base
233
- self.table_name = 'developers'
234
- has_and_belongs_to_many :projects, -> { order('projects.id') }, :foreign_key => 'developer_id', :join_table => 'developers_projects'
273
+ self.table_name = "developers"
274
+ has_and_belongs_to_many :projects, -> { order("projects.id") }, foreign_key: "developer_id", join_table: "developers_projects"
235
275
 
236
276
  def self.default_scope
237
277
  includes(:projects)
@@ -239,36 +279,63 @@ class EagerDeveloperWithClassMethodDefaultScope < ActiveRecord::Base
239
279
  end
240
280
 
241
281
  class EagerDeveloperWithLambdaDefaultScope < ActiveRecord::Base
242
- self.table_name = 'developers'
243
- has_and_belongs_to_many :projects, -> { order('projects.id') }, :foreign_key => 'developer_id', :join_table => 'developers_projects'
282
+ self.table_name = "developers"
283
+ has_and_belongs_to_many :projects, -> { order("projects.id") }, foreign_key: "developer_id", join_table: "developers_projects"
244
284
 
245
285
  default_scope lambda { includes(:projects) }
246
286
  end
247
287
 
248
288
  class EagerDeveloperWithBlockDefaultScope < ActiveRecord::Base
249
- self.table_name = 'developers'
250
- has_and_belongs_to_many :projects, -> { order('projects.id') }, :foreign_key => 'developer_id', :join_table => 'developers_projects'
289
+ self.table_name = "developers"
290
+ has_and_belongs_to_many :projects, -> { order("projects.id") }, foreign_key: "developer_id", join_table: "developers_projects"
251
291
 
252
292
  default_scope { includes(:projects) }
253
293
  end
254
294
 
255
295
  class EagerDeveloperWithCallableDefaultScope < ActiveRecord::Base
256
- self.table_name = 'developers'
257
- has_and_belongs_to_many :projects, -> { order('projects.id') }, :foreign_key => 'developer_id', :join_table => 'developers_projects'
296
+ self.table_name = "developers"
297
+ has_and_belongs_to_many :projects, -> { order("projects.id") }, foreign_key: "developer_id", join_table: "developers_projects"
258
298
 
259
- default_scope OpenStruct.new(:call => includes(:projects))
299
+ default_scope OpenStruct.new(call: includes(:projects))
260
300
  end
261
301
 
262
302
  class ThreadsafeDeveloper < ActiveRecord::Base
263
- self.table_name = 'developers'
303
+ self.table_name = "developers"
264
304
 
265
305
  def self.default_scope
266
- sleep 0.05 if Thread.current[:long_default_scope]
306
+ Thread.current[:default_scope_delay].call
267
307
  limit(1)
268
308
  end
269
309
  end
270
310
 
271
311
  class CachedDeveloper < ActiveRecord::Base
312
+ include Developer::TimestampAliases
313
+
272
314
  self.table_name = "developers"
273
315
  self.cache_timestamp_format = :number
274
316
  end
317
+
318
+ class DeveloperWithIncorrectlyOrderedHasManyThrough < ActiveRecord::Base
319
+ self.table_name = "developers"
320
+ has_many :companies, through: :contracts
321
+ has_many :contracts, foreign_key: :developer_id
322
+ end
323
+
324
+ class DeveloperName < ActiveRecord::Type::String
325
+ def deserialize(value)
326
+ "Developer: #{value}"
327
+ end
328
+ end
329
+
330
+ class AttributedDeveloper < ActiveRecord::Base
331
+ self.table_name = "developers"
332
+
333
+ attribute :name, DeveloperName.new
334
+
335
+ self.ignored_columns += ["name"]
336
+ end
337
+
338
+ class ColumnNamesCachedDeveloper < ActiveRecord::Base
339
+ self.table_name = "developers"
340
+ self.ignored_columns += ["name"] if column_names.include?("name")
341
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class DlKeyedBelongsTo < ActiveRecord::Base
4
+ self.primary_key = "belongs_key"
5
+ belongs_to :destroy_async_parent,
6
+ dependent: :destroy_async,
7
+ foreign_key: :destroy_async_parent_id,
8
+ primary_key: :parent_id,
9
+ class_name: "DestroyAsyncParent"
10
+ belongs_to :destroy_async_parent_soft_delete,
11
+ dependent: :destroy_async,
12
+ ensuring_owner_was: :deleted?, class_name: "DestroyAsyncParentSoftDelete"
13
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "models/destroy_async_parent_soft_delete"
4
+
5
+ class DlKeyedBelongsToSoftDelete < ActiveRecord::Base
6
+ belongs_to :destroy_async_parent_soft_delete,
7
+ dependent: :destroy_async,
8
+ ensuring_owner_was: :deleted?,
9
+ class_name: "DestroyAsyncParentSoftDelete"
10
+
11
+ def deleted?
12
+ deleted
13
+ end
14
+
15
+ def destroy
16
+ update(deleted: true)
17
+ run_callbacks(:destroy)
18
+ end
19
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class DlKeyedHasMany < ActiveRecord::Base
4
+ self.primary_key = "many_key"
5
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class DlKeyedHasManyThrough < ActiveRecord::Base
4
+ self.primary_key = :through_key
5
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class DlKeyedHasOne < ActiveRecord::Base
4
+ self.primary_key = "has_one_key"
5
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ class DlKeyedJoin < ActiveRecord::Base
4
+ self.primary_key = "joins_key"
5
+
6
+ belongs_to :destroy_async_parent,
7
+ primary_key: :parent_id
8
+ belongs_to :dl_keyed_has_many_through,
9
+ primary_key: :through_key
10
+ end
data/test/models/dog.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Dog < ActiveRecord::Base
2
4
  belongs_to :breeder, class_name: "DogLover", counter_cache: :bred_dogs_count
3
5
  belongs_to :trainer, class_name: "DogLover", counter_cache: :trained_dogs_count
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class DogLover < ActiveRecord::Base
2
4
  has_many :trained_dogs, class_name: "Dog", foreign_key: :trainer_id, dependent: :destroy
3
5
  has_many :bred_dogs, class_name: "Dog", foreign_key: :breeder_id
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class AbstractDoubloon < ActiveRecord::Base
2
4
  # This has functionality that might be shared by multiple classes.
3
5
 
@@ -8,5 +10,5 @@ end
8
10
  class Doubloon < AbstractDoubloon
9
11
  # This uses an abstract class that defines attributes and associations.
10
12
 
11
- self.table_name = 'doubloons'
13
+ self.table_name = "doubloons"
12
14
  end
@@ -1,3 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class DrinkDesigner < ActiveRecord::Base
2
4
  has_one :chef, as: :employable
3
5
  end
6
+
7
+ class DrinkDesignerWithPolymorphicDependentNullifyChef < ActiveRecord::Base
8
+ self.table_name = "drink_designers"
9
+
10
+ has_one :chef, as: :employable, dependent: :nullify
11
+ end
12
+
13
+ class DrinkDesignerWithPolymorphicTouchChef < ActiveRecord::Base
14
+ self.table_name = "drink_designers"
15
+
16
+ has_one :chef, as: :employable, touch: true
17
+ end
18
+
19
+ class MocktailDesigner < DrinkDesigner
20
+ end
data/test/models/edge.rb CHANGED
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This class models an edge in a directed graph.
2
4
  class Edge < ActiveRecord::Base
3
- belongs_to :source, :class_name => 'Vertex', :foreign_key => 'source_id'
4
- belongs_to :sink, :class_name => 'Vertex', :foreign_key => 'sink_id'
5
+ belongs_to :source, class_name: "Vertex", foreign_key: "source_id"
6
+ belongs_to :sink, class_name: "Vertex", foreign_key: "sink_id"
5
7
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Electron < ActiveRecord::Base
2
4
  belongs_to :molecule
3
5
 
@@ -1,4 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Engine < ActiveRecord::Base
2
- belongs_to :my_car, :class_name => 'Car', :foreign_key => 'car_id', :counter_cache => :engines_count
4
+ belongs_to :my_car, class_name: "Car", foreign_key: "car_id", counter_cache: :engines_count
3
5
  end
4
-
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Entrant < ActiveRecord::Base
2
4
  belongs_to :course
3
5
  end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Entry < ActiveRecord::Base
4
+ delegated_type :entryable, types: %w[ Message Comment ]
5
+ end
data/test/models/essay.rb CHANGED
@@ -1,5 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Essay < ActiveRecord::Base
2
- belongs_to :writer, :primary_key => :name, :polymorphic => true
3
- belongs_to :category, :primary_key => :name
4
- has_one :owner, :primary_key => :name
4
+ belongs_to :author
5
+ belongs_to :writer, primary_key: :name, polymorphic: true
6
+ belongs_to :category, primary_key: :name
7
+ has_one :owner, primary_key: :name
5
8
  end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ class EssayDestroyAsync < ActiveRecord::Base
4
+ self.table_name = "essays"
5
+ belongs_to :book, dependent: :destroy_async, class_name: "BookDestroyAsync"
6
+ end
7
+
8
+ class LongEssayDestroyAsync < EssayDestroyAsync
9
+ end
10
+
11
+ class ShortEssayDestroyAsync < EssayDestroyAsync
12
+ end
data/test/models/event.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Event < ActiveRecord::Base
2
4
  validates_uniqueness_of :title
3
- end
5
+ end
data/test/models/eye.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Eye < ActiveRecord::Base
2
4
  attr_reader :after_create_callbacks_stack
3
5
  attr_reader :after_update_callbacks_stack
@@ -15,19 +17,19 @@ class Eye < ActiveRecord::Base
15
17
  after_create :trace_after_create2
16
18
  after_update :trace_after_update2
17
19
  after_save :trace_after_save2
18
-
20
+
19
21
  def trace_after_create
20
22
  (@after_create_callbacks_stack ||= []) << !iris.persisted?
21
23
  end
22
24
  alias trace_after_create2 trace_after_create
23
25
 
24
26
  def trace_after_update
25
- (@after_update_callbacks_stack ||= []) << iris.changed?
27
+ (@after_update_callbacks_stack ||= []) << iris.has_changes_to_save?
26
28
  end
27
29
  alias trace_after_update2 trace_after_update
28
30
 
29
31
  def trace_after_save
30
- (@after_save_callbacks_stack ||= []) << iris.changed?
32
+ (@after_save_callbacks_stack ||= []) << iris.has_changes_to_save?
31
33
  end
32
34
  alias trace_after_save2 trace_after_save
33
35
  end