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,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class AbstractCompany < ActiveRecord::Base
2
4
  self.abstract_class = true
3
5
  end
@@ -7,13 +9,19 @@ class Company < AbstractCompany
7
9
 
8
10
  validates_presence_of :name
9
11
 
10
- has_one :dummy_account, :foreign_key => "firm_id", :class_name => "Account"
12
+ has_one :account, foreign_key: "firm_id"
13
+ has_one :dummy_account, foreign_key: "firm_id", class_name: "Account"
11
14
  has_many :contracts
12
- has_many :developers, :through => :contracts
15
+ has_many :developers, through: :contracts
16
+ has_many :special_contracts, -> { includes(:special_developer).where.not("developers.id": nil) }
17
+ has_many :special_developers, through: :special_contracts
18
+ has_many :comments, foreign_key: "company"
19
+
20
+ alias_attribute :new_name, :name
21
+ attribute :metadata, :json
13
22
 
14
23
  scope :of_first_firm, lambda {
15
- joins(:account => :firm).
16
- where('firms.id' => 1)
24
+ joins(account: :firm).where("companies.id": 1)
17
25
  }
18
26
 
19
27
  def arbitrary_method
@@ -21,13 +29,12 @@ class Company < AbstractCompany
21
29
  end
22
30
 
23
31
  private
32
+ def private_method
33
+ "I am Jack's innermost fears and aspirations"
34
+ end
24
35
 
25
- def private_method
26
- "I am Jack's innermost fears and aspirations"
27
- end
28
-
29
- class SpecialCo < Company
30
- end
36
+ class SpecialCo < Company
37
+ end
31
38
  end
32
39
 
33
40
  module Namespaced
@@ -35,7 +42,7 @@ module Namespaced
35
42
  end
36
43
 
37
44
  class Firm < ::Company
38
- has_many :clients, :class_name => 'Namespaced::Client'
45
+ has_many :clients, class_name: "Namespaced::Client"
39
46
  end
40
47
 
41
48
  class Client < ::Company
@@ -45,45 +52,47 @@ end
45
52
  class Firm < Company
46
53
  to_param :name
47
54
 
48
- has_many :clients, -> { order "id" }, :dependent => :destroy, :before_remove => :log_before_remove, :after_remove => :log_after_remove
49
- has_many :unsorted_clients, :class_name => "Client"
50
- has_many :unsorted_clients_with_symbol, :class_name => :Client
51
- has_many :clients_sorted_desc, -> { order "id DESC" }, :class_name => "Client"
52
- has_many :clients_of_firm, -> { order "id" }, :foreign_key => "client_of", :class_name => "Client", :inverse_of => :firm
53
- has_many :clients_ordered_by_name, -> { order "name" }, :class_name => "Client"
54
- has_many :unvalidated_clients_of_firm, :foreign_key => "client_of", :class_name => "Client", :validate => false
55
- has_many :dependent_clients_of_firm, -> { order "id" }, :foreign_key => "client_of", :class_name => "Client", :dependent => :destroy
56
- has_many :exclusively_dependent_clients_of_firm, -> { order "id" }, :foreign_key => "client_of", :class_name => "Client", :dependent => :delete_all
57
- has_many :limited_clients, -> { limit 1 }, :class_name => "Client"
58
- has_many :clients_with_interpolated_conditions, ->(firm) { where "rating > #{firm.rating}" }, :class_name => "Client"
59
- has_many :clients_like_ms, -> { where("name = 'Microsoft'").order("id") }, :class_name => "Client"
60
- has_many :clients_like_ms_with_hash_conditions, -> { where(:name => 'Microsoft').order("id") }, :class_name => "Client"
61
- has_many :plain_clients, :class_name => 'Client'
62
- has_many :clients_using_primary_key, :class_name => 'Client',
63
- :primary_key => 'name', :foreign_key => 'firm_name'
64
- has_many :clients_using_primary_key_with_delete_all, :class_name => 'Client',
65
- :primary_key => 'name', :foreign_key => 'firm_name', :dependent => :delete_all
66
- has_many :clients_grouped_by_firm_id, -> { group("firm_id").select("firm_id") }, :class_name => "Client"
67
- has_many :clients_grouped_by_name, -> { group("name").select("name") }, :class_name => "Client"
68
-
69
- has_one :account, :foreign_key => "firm_id", :dependent => :destroy, :validate => true
70
- has_one :unvalidated_account, :foreign_key => "firm_id", :class_name => 'Account', :validate => false
71
- has_one :account_with_select, -> { select("id, firm_id") }, :foreign_key => "firm_id", :class_name=>'Account'
72
- has_one :readonly_account, -> { readonly }, :foreign_key => "firm_id", :class_name => "Account"
55
+ has_many :clients, -> { order "id" }, dependent: :destroy, before_remove: :log_before_remove, after_remove: :log_after_remove
56
+ has_many :unsorted_clients, class_name: "Client"
57
+ has_many :unsorted_clients_with_symbol, class_name: :Client
58
+ has_many :clients_sorted_desc, -> { order "id DESC" }, class_name: "Client"
59
+ has_many :clients_of_firm, -> { order "id" }, foreign_key: "client_of", class_name: "Client", inverse_of: :firm
60
+ has_many :clients_ordered_by_name, -> { order "name" }, class_name: "Client"
61
+ has_many :unvalidated_clients_of_firm, foreign_key: "client_of", class_name: "Client", validate: false
62
+ has_many :dependent_clients_of_firm, -> { order "id" }, foreign_key: "client_of", class_name: "Client", dependent: :destroy
63
+ has_many :exclusively_dependent_clients_of_firm, -> { order "id" }, foreign_key: "client_of", class_name: "Client", dependent: :delete_all
64
+ has_many :limited_clients, -> { limit 1 }, class_name: "Client"
65
+ has_many :clients_with_interpolated_conditions, ->(firm) { where "rating > #{firm.rating}" }, class_name: "Client"
66
+ has_many :clients_like_ms, -> { where("name = 'Microsoft'").order("id") }, class_name: "Client"
67
+ has_many :clients_like_ms_with_hash_conditions, -> { where(name: "Microsoft").order("id") }, class_name: "Client"
68
+ has_many :plain_clients, class_name: "Client"
69
+ has_many :clients_using_primary_key, class_name: "Client",
70
+ primary_key: "name", foreign_key: "firm_name"
71
+ has_many :clients_using_primary_key_with_delete_all, class_name: "Client",
72
+ primary_key: "name", foreign_key: "firm_name", dependent: :delete_all
73
+ has_many :clients_grouped_by_firm_id, -> { group("firm_id").select("firm_id") }, class_name: "Client"
74
+ has_many :clients_grouped_by_name, -> { group("name").select("name") }, class_name: "Client"
75
+
76
+ has_one :account, foreign_key: "firm_id", dependent: :destroy, validate: true
77
+ has_one :unvalidated_account, foreign_key: "firm_id", class_name: "Account", validate: false
78
+ has_one :account_with_select, -> { select("id, firm_id") }, foreign_key: "firm_id", class_name: "Account"
79
+ has_one :readonly_account, -> { readonly }, foreign_key: "firm_id", class_name: "Account"
73
80
  # added order by id as in fixtures there are two accounts for Rails Core
74
81
  # Oracle tests were failing because of that as the second fixture was selected
75
- has_one :account_using_primary_key, -> { order('id') }, :primary_key => "firm_id", :class_name => "Account"
76
- has_one :account_using_foreign_and_primary_keys, :foreign_key => "firm_name", :primary_key => "name", :class_name => "Account"
77
- has_one :account_with_inexistent_foreign_key, class_name: 'Account', foreign_key: "inexistent"
78
- has_one :deletable_account, :foreign_key => "firm_id", :class_name => "Account", :dependent => :delete
82
+ has_one :account_using_primary_key, -> { order("id") }, primary_key: "firm_id", class_name: "Account"
83
+ has_one :account_using_foreign_and_primary_keys, foreign_key: "firm_name", primary_key: "name", class_name: "Account"
84
+ has_one :account_with_inexistent_foreign_key, class_name: "Account", foreign_key: "inexistent"
85
+ has_one :deletable_account, foreign_key: "firm_id", class_name: "Account", dependent: :delete
79
86
 
80
- has_one :account_limit_500_with_hash_conditions, -> { where :credit_limit => 500 }, :foreign_key => "firm_id", :class_name => "Account"
87
+ has_one :account_limit_500_with_hash_conditions, -> { where credit_limit: 500 }, foreign_key: "firm_id", class_name: "Account"
81
88
 
82
- has_one :unautosaved_account, :foreign_key => "firm_id", :class_name => 'Account', :autosave => false
89
+ has_one :unautosaved_account, foreign_key: "firm_id", class_name: "Account", autosave: false
83
90
  has_many :accounts
84
- has_many :unautosaved_accounts, :foreign_key => "firm_id", :class_name => 'Account', :autosave => false
91
+ has_many :unautosaved_accounts, foreign_key: "firm_id", class_name: "Account", autosave: false
92
+
93
+ has_many :association_with_references, -> { references(:foo) }, class_name: "Client"
85
94
 
86
- has_many :association_with_references, -> { references(:foo) }, :class_name => 'Client'
95
+ has_many :developers_with_select, -> { select("id, name, first_name") }, class_name: "Developer"
87
96
 
88
97
  has_one :lead_developer, class_name: "Developer"
89
98
  has_many :projects
@@ -103,32 +112,38 @@ class Firm < Company
103
112
  end
104
113
 
105
114
  class DependentFirm < Company
106
- has_one :account, :foreign_key => "firm_id", :dependent => :nullify
107
- has_many :companies, :foreign_key => 'client_of', :dependent => :nullify
108
- has_one :company, :foreign_key => 'client_of', :dependent => :nullify
115
+ has_one :account, -> { order(:id) }, foreign_key: "firm_id", dependent: :nullify
116
+ has_many :companies, foreign_key: "client_of", dependent: :nullify
117
+ has_one :company, foreign_key: "client_of", dependent: :nullify
109
118
  end
110
119
 
111
120
  class RestrictedWithExceptionFirm < Company
112
- has_one :account, -> { order("id") }, :foreign_key => "firm_id", :dependent => :restrict_with_exception
113
- has_many :companies, -> { order("id") }, :foreign_key => 'client_of', :dependent => :restrict_with_exception
121
+ has_one :account, -> { order("id") }, foreign_key: "firm_id", dependent: :restrict_with_exception
122
+ has_many :companies, -> { order("id") }, foreign_key: "client_of", dependent: :restrict_with_exception
114
123
  end
115
124
 
116
125
  class RestrictedWithErrorFirm < Company
117
- has_one :account, -> { order("id") }, :foreign_key => "firm_id", :dependent => :restrict_with_error
118
- has_many :companies, -> { order("id") }, :foreign_key => 'client_of', :dependent => :restrict_with_error
126
+ has_one :account, -> { order("id") }, foreign_key: "firm_id", dependent: :restrict_with_error
127
+ has_many :companies, -> { order("id") }, foreign_key: "client_of", dependent: :restrict_with_error
128
+ end
129
+
130
+ class Agency < Firm
131
+ has_many :projects, foreign_key: :firm_id
132
+
133
+ accepts_nested_attributes_for :projects
119
134
  end
120
135
 
121
136
  class Client < Company
122
- belongs_to :firm, :foreign_key => "client_of"
123
- belongs_to :firm_with_basic_id, :class_name => "Firm", :foreign_key => "firm_id"
124
- belongs_to :firm_with_select, -> { select("id") }, :class_name => "Firm", :foreign_key => "firm_id"
125
- belongs_to :firm_with_other_name, :class_name => "Firm", :foreign_key => "client_of"
126
- belongs_to :firm_with_condition, -> { where "1 = ?", 1 }, :class_name => "Firm", :foreign_key => "client_of"
127
- belongs_to :firm_with_primary_key, :class_name => "Firm", :primary_key => "name", :foreign_key => "firm_name"
128
- belongs_to :firm_with_primary_key_symbols, :class_name => "Firm", :primary_key => :name, :foreign_key => :firm_name
129
- belongs_to :readonly_firm, -> { readonly }, :class_name => "Firm", :foreign_key => "firm_id"
130
- belongs_to :bob_firm, -> { where :name => "Bob" }, :class_name => "Firm", :foreign_key => "client_of"
131
- has_many :accounts, :through => :firm, :source => :accounts
137
+ belongs_to :firm, foreign_key: "client_of"
138
+ belongs_to :firm_with_basic_id, class_name: "Firm", foreign_key: "firm_id"
139
+ belongs_to :firm_with_select, -> { select("id") }, class_name: "Firm", foreign_key: "firm_id"
140
+ belongs_to :firm_with_other_name, class_name: "Firm", foreign_key: "client_of"
141
+ belongs_to :firm_with_condition, -> { where "1 = ?", 1 }, class_name: "Firm", foreign_key: "client_of"
142
+ belongs_to :firm_with_primary_key, class_name: "Firm", primary_key: "name", foreign_key: "firm_name"
143
+ belongs_to :firm_with_primary_key_symbols, class_name: "Firm", primary_key: :name, foreign_key: :firm_name
144
+ belongs_to :readonly_firm, -> { readonly }, class_name: "Firm", foreign_key: "firm_id"
145
+ belongs_to :bob_firm, -> { where name: "Bob" }, class_name: "Firm", foreign_key: "client_of"
146
+ has_many :accounts, through: :firm, source: :accounts
132
147
  belongs_to :account
133
148
 
134
149
  validate do
@@ -141,6 +156,21 @@ class Client < Company
141
156
  raise RaisedOnSave if raise_on_save
142
157
  end
143
158
 
159
+ attr_accessor :throw_on_save
160
+ before_save do
161
+ throw :abort if throw_on_save
162
+ end
163
+
164
+ attr_accessor :rollback_on_save
165
+ after_save do
166
+ raise ActiveRecord::Rollback if rollback_on_save
167
+ end
168
+
169
+ attr_accessor :rollback_on_create_called
170
+ after_rollback(on: :create) do |client|
171
+ client.rollback_on_create_called = true
172
+ end
173
+
144
174
  class RaisedOnDestroy < RuntimeError; end
145
175
  attr_accessor :raise_on_destroy
146
176
  before_destroy do
@@ -151,7 +181,7 @@ class Client < Company
151
181
  # is calling client.destroy, deleting from the database, or setting
152
182
  # foreign keys to NULL.
153
183
  def self.destroyed_client_ids
154
- @destroyed_client_ids ||= Hash.new { |h,k| h[k] = [] }
184
+ @destroyed_client_ids ||= Hash.new { |h, k| h[k] = [] }
155
185
  end
156
186
 
157
187
  before_destroy do |client|
@@ -170,20 +200,13 @@ class Client < Company
170
200
 
171
201
  def overwrite_to_raise
172
202
  end
173
-
174
- class << self
175
- private
176
-
177
- def private_method
178
- "darkness"
179
- end
180
- end
181
203
  end
182
204
 
183
205
  class ExclusivelyDependentFirm < Company
184
- has_one :account, :foreign_key => "firm_id", :dependent => :delete
185
- has_many :dependent_sanitized_conditional_clients_of_firm, -> { order("id").where("name = 'BigShot Inc.'") }, :foreign_key => "client_of", :class_name => "Client", :dependent => :delete_all
186
- has_many :dependent_conditional_clients_of_firm, -> { order("id").where("name = ?", 'BigShot Inc.') }, :foreign_key => "client_of", :class_name => "Client", :dependent => :delete_all
206
+ has_one :account, foreign_key: "firm_id", dependent: :delete
207
+ has_many :dependent_sanitized_conditional_clients_of_firm, -> { order("id").where("name = 'BigShot Inc.'") }, foreign_key: "client_of", class_name: "Client", dependent: :delete_all
208
+ has_many :dependent_hash_conditional_clients_of_firm, -> { order("id").where(name: "BigShot Inc.") }, foreign_key: "client_of", class_name: "Client", dependent: :delete_all
209
+ has_many :dependent_conditional_clients_of_firm, -> { order("id").where("name = ?", "BigShot Inc.") }, foreign_key: "client_of", class_name: "Client", dependent: :delete_all
187
210
  end
188
211
 
189
212
  class SpecialClient < Client
@@ -192,39 +215,12 @@ end
192
215
  class VerySpecialClient < SpecialClient
193
216
  end
194
217
 
195
- class Account < ActiveRecord::Base
196
- belongs_to :firm, :class_name => 'Company'
197
- belongs_to :unautosaved_firm, :foreign_key => "firm_id", :class_name => "Firm", :autosave => false
198
-
199
- alias_attribute :available_credit, :credit_limit
200
-
201
- def self.destroyed_account_ids
202
- @destroyed_account_ids ||= Hash.new { |h,k| h[k] = [] }
203
- end
204
-
205
- # Test private kernel method through collection proxy using has_many.
206
- def self.open
207
- where('firm_name = ?', '37signals')
208
- end
209
-
210
- before_destroy do |account|
211
- if account.firm
212
- Account.destroyed_account_ids[account.firm.id] << account.id
213
- end
214
- true
215
- end
216
-
217
- validate :check_empty_credit_limit
218
-
219
- protected
220
-
221
- def check_empty_credit_limit
222
- errors.add("credit_limit", :blank) if credit_limit.blank?
223
- end
224
-
225
- private
218
+ class NewlyContractedCompany < Company
219
+ has_many :new_contracts, foreign_key: "company_id"
226
220
 
227
- def private_method
228
- "Sir, yes sir!"
221
+ before_save do
222
+ self.new_contracts << NewContract.new
229
223
  end
230
224
  end
225
+
226
+ require "models/account"
@@ -1,4 +1,6 @@
1
- require 'active_support/core_ext/object/with_options'
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/core_ext/object/with_options"
2
4
 
3
5
  module MyApplication
4
6
  module Business
@@ -6,23 +8,23 @@ module MyApplication
6
8
  end
7
9
 
8
10
  class Firm < Company
9
- has_many :clients, -> { order("id") }, :dependent => :destroy
10
- has_many :clients_sorted_desc, -> { order("id DESC") }, :class_name => "Client"
11
- has_many :clients_of_firm, -> { order "id" }, :foreign_key => "client_of", :class_name => "Client"
12
- has_many :clients_like_ms, -> { where("name = 'Microsoft'").order("id") }, :class_name => "Client"
13
- has_one :account, :class_name => 'MyApplication::Billing::Account', :dependent => :destroy
11
+ has_many :clients, -> { order("id") }, dependent: :destroy
12
+ has_many :clients_sorted_desc, -> { order("id DESC") }, class_name: "Client"
13
+ has_many :clients_of_firm, -> { order "id" }, foreign_key: "client_of", class_name: "Client"
14
+ has_many :clients_like_ms, -> { where("name = 'Microsoft'").order("id") }, class_name: "Client"
15
+ has_one :account, class_name: "MyApplication::Billing::Account", dependent: :destroy
14
16
  end
15
17
 
16
18
  class Client < Company
17
- belongs_to :firm, :foreign_key => "client_of"
18
- belongs_to :firm_with_other_name, :class_name => "Firm", :foreign_key => "client_of"
19
+ belongs_to :firm, foreign_key: "client_of"
20
+ belongs_to :firm_with_other_name, class_name: "Firm", foreign_key: "client_of"
19
21
 
20
22
  class Contact < ActiveRecord::Base; end
21
23
  end
22
24
 
23
25
  class Developer < ActiveRecord::Base
24
26
  has_and_belongs_to_many :projects
25
- validates_length_of :name, :within => (3..20)
27
+ validates_length_of :name, within: (3..20)
26
28
  end
27
29
 
28
30
  class Project < ActiveRecord::Base
@@ -31,14 +33,14 @@ module MyApplication
31
33
 
32
34
  module Prefixed
33
35
  def self.table_name_prefix
34
- 'prefixed_'
36
+ "prefixed_"
35
37
  end
36
38
 
37
39
  class Company < ActiveRecord::Base
38
40
  end
39
41
 
40
42
  class Firm < Company
41
- self.table_name = 'companies'
43
+ self.table_name = "companies"
42
44
  end
43
45
 
44
46
  module Nested
@@ -49,14 +51,14 @@ module MyApplication
49
51
 
50
52
  module Suffixed
51
53
  def self.table_name_suffix
52
- '_suffixed'
54
+ "_suffixed"
53
55
  end
54
56
 
55
57
  class Company < ActiveRecord::Base
56
58
  end
57
59
 
58
60
  class Firm < Company
59
- self.table_name = 'companies'
61
+ self.table_name = "companies"
60
62
  end
61
63
 
62
64
  module Nested
@@ -68,31 +70,30 @@ module MyApplication
68
70
 
69
71
  module Billing
70
72
  class Firm < ActiveRecord::Base
71
- self.table_name = 'companies'
73
+ self.table_name = "companies"
72
74
  end
73
75
 
74
76
  module Nested
75
77
  class Firm < ActiveRecord::Base
76
- self.table_name = 'companies'
78
+ self.table_name = "companies"
77
79
  end
78
80
  end
79
81
 
80
82
  class Account < ActiveRecord::Base
81
- with_options(:foreign_key => :firm_id) do |i|
82
- i.belongs_to :firm, :class_name => 'MyApplication::Business::Firm'
83
- i.belongs_to :qualified_billing_firm, :class_name => 'MyApplication::Billing::Firm'
84
- i.belongs_to :unqualified_billing_firm, :class_name => 'Firm'
85
- i.belongs_to :nested_qualified_billing_firm, :class_name => 'MyApplication::Billing::Nested::Firm'
86
- i.belongs_to :nested_unqualified_billing_firm, :class_name => 'Nested::Firm'
83
+ with_options(foreign_key: :firm_id) do |i|
84
+ i.belongs_to :firm, class_name: "MyApplication::Business::Firm"
85
+ i.belongs_to :qualified_billing_firm, class_name: "MyApplication::Billing::Firm"
86
+ i.belongs_to :unqualified_billing_firm, class_name: "Firm"
87
+ i.belongs_to :nested_qualified_billing_firm, class_name: "MyApplication::Billing::Nested::Firm"
88
+ i.belongs_to :nested_unqualified_billing_firm, class_name: "Nested::Firm"
87
89
  end
88
90
 
89
91
  validate :check_empty_credit_limit
90
92
 
91
- protected
92
-
93
- def check_empty_credit_limit
94
- errors.add("credit_card", :blank) if credit_card.blank?
95
- end
93
+ private
94
+ def check_empty_credit_limit
95
+ errors.add("credit_card", :blank) if credit_card.blank?
96
+ end
96
97
  end
97
98
  end
98
99
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Computer < ActiveRecord::Base
2
- belongs_to :developer, :foreign_key=>'developer'
4
+ belongs_to :developer, foreign_key: "developer"
3
5
  end
@@ -1,25 +1,27 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ContactFakeColumns
2
4
  def self.extended(base)
3
5
  base.class_eval do
4
- establish_connection(:adapter => 'fake')
6
+ establish_connection(adapter: "fake")
5
7
 
6
8
  connection.data_sources = [table_name]
7
9
  connection.primary_keys = {
8
- table_name => 'id'
10
+ table_name => "id"
9
11
  }
10
12
 
11
- column :id, :integer
12
- column :name, :string
13
- column :age, :integer
14
- column :avatar, :binary
15
- column :created_at, :datetime
16
- column :awesome, :boolean
17
- column :preferences, :string
18
- column :alternative_id, :integer
13
+ column :id, "integer"
14
+ column :name, "string"
15
+ column :age, "integer"
16
+ column :avatar, "binary"
17
+ column :created_at, "datetime"
18
+ column :awesome, "boolean"
19
+ column :preferences, "string"
20
+ column :alternative_id, "integer"
19
21
 
20
22
  serialize :preferences
21
23
 
22
- belongs_to :alternative, :class_name => 'Contact'
24
+ belongs_to :alternative, class_name: "Contact"
23
25
  end
24
26
  end
25
27
 
@@ -35,7 +37,7 @@ end
35
37
 
36
38
  class ContactSti < ActiveRecord::Base
37
39
  extend ContactFakeColumns
38
- column :type, :string
40
+ column :type, "string"
39
41
 
40
- def type; 'ContactSti' end
42
+ def type; "ContactSti" end
41
43
  end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Content < ActiveRecord::Base
2
- self.table_name = 'content'
4
+ self.table_name = "content"
3
5
  has_one :content_position, dependent: :destroy
4
6
 
5
7
  def self.destroyed_ids
@@ -12,8 +14,8 @@ class Content < ActiveRecord::Base
12
14
  end
13
15
 
14
16
  class ContentWhichRequiresTwoDestroyCalls < ActiveRecord::Base
15
- self.table_name = 'content'
16
- has_one :content_position, foreign_key: 'content_id', dependent: :destroy
17
+ self.table_name = "content"
18
+ has_one :content_position, foreign_key: "content_id", dependent: :destroy
17
19
 
18
20
  after_initialize do
19
21
  @destroy_count = 0
@@ -1,9 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Contract < ActiveRecord::Base
2
4
  belongs_to :company
3
- belongs_to :developer
4
- belongs_to :firm, :foreign_key => 'company_id'
5
+ belongs_to :developer, primary_key: :id
6
+ belongs_to :firm, foreign_key: "company_id"
7
+
8
+ attribute :metadata, :json
5
9
 
6
- before_save :hi
10
+ before_save :hi, :update_metadata
7
11
  after_save :bye
8
12
 
9
13
  attr_accessor :hi_count, :bye_count
@@ -17,4 +21,18 @@ class Contract < ActiveRecord::Base
17
21
  @bye_count ||= 0
18
22
  @bye_count += 1
19
23
  end
24
+
25
+ def update_metadata
26
+ self.metadata = { company_id: company_id, developer_id: developer_id }
27
+ end
28
+ end
29
+
30
+ class NewContract < Contract
31
+ validates :company_id, presence: true
32
+ end
33
+
34
+ class SpecialContract < ActiveRecord::Base
35
+ self.table_name = "contracts"
36
+ belongs_to :company
37
+ belongs_to :special_developer, foreign_key: "developer_id"
20
38
  end
@@ -1,7 +1,5 @@
1
- class Country < ActiveRecord::Base
2
-
3
- self.primary_key = :country_id
1
+ # frozen_string_literal: true
4
2
 
3
+ class Country < ActiveRecord::Base
5
4
  has_and_belongs_to_many :treaties
6
-
7
5
  end
@@ -1,4 +1,6 @@
1
- require_dependency 'models/arunit2_model'
1
+ # frozen_string_literal: true
2
+
3
+ require "models/arunit2_model"
2
4
 
3
5
  class Course < ARUnit2Model
4
6
  belongs_to :college
@@ -1,13 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Customer < ActiveRecord::Base
2
4
  cattr_accessor :gps_conversion_was_run
3
5
 
4
- composed_of :address, :mapping => [ %w(address_street street), %w(address_city city), %w(address_country country) ], :allow_nil => true
5
- composed_of :balance, :class_name => "Money", :mapping => %w(balance amount), :converter => Proc.new(&:to_money)
6
- composed_of :gps_location, :allow_nil => true
7
- composed_of :non_blank_gps_location, :class_name => "GpsLocation", :allow_nil => true, :mapping => %w(gps_location gps_location),
8
- :converter => lambda { |gps| self.gps_conversion_was_run = true; gps.blank? ? nil : GpsLocation.new(gps)}
9
- composed_of :fullname, :mapping => %w(name to_s), :constructor => Proc.new { |name| Fullname.parse(name) }, :converter => :parse
10
- composed_of :fullname_no_converter, :mapping => %w(name to_s), class_name: "Fullname"
6
+ composed_of :address, mapping: [ %w(address_street street), %w(address_city city), %w(address_country country) ], allow_nil: true
7
+ composed_of :balance, class_name: "Money", mapping: %w(balance amount)
8
+ composed_of :gps_location, allow_nil: true
9
+ composed_of :non_blank_gps_location, class_name: "GpsLocation", allow_nil: true, mapping: %w(gps_location gps_location),
10
+ converter: lambda { |gps| self.gps_conversion_was_run = true; gps.blank? ? nil : GpsLocation.new(gps) }
11
+ composed_of :fullname, mapping: %w(name to_s), constructor: Proc.new { |name| Fullname.parse(name) }, converter: :parse
12
+ composed_of :fullname_no_converter, mapping: %w(name to_s), class_name: "Fullname"
11
13
  end
12
14
 
13
15
  class Address
@@ -56,7 +58,7 @@ class GpsLocation
56
58
  end
57
59
 
58
60
  def ==(other)
59
- self.latitude == other.latitude && self.longitude == other.longitude
61
+ latitude == other.latitude && longitude == other.longitude
60
62
  end
61
63
  end
62
64
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class CustomerCarrier < ActiveRecord::Base
2
4
  cattr_accessor :current_customer
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Dashboard < ActiveRecord::Base
2
4
  self.primary_key = :dashboard_id
3
5
  end
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Default < ActiveRecord::Base
2
4
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Department < ActiveRecord::Base
2
4
  has_many :chefs
3
5
  belongs_to :hotel
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ class DestroyAsyncParent < ActiveRecord::Base
4
+ self.primary_key = "parent_id"
5
+
6
+ has_one :dl_keyed_has_one, dependent: :destroy_async,
7
+ foreign_key: :destroy_async_parent_id, primary_key: :parent_id
8
+ has_many :dl_keyed_has_many, dependent: :destroy_async,
9
+ foreign_key: :many_key, primary_key: :parent_id
10
+ has_many :dl_keyed_join, dependent: :destroy_async,
11
+ foreign_key: :destroy_async_parent_id, primary_key: :joins_key
12
+ has_many :dl_keyed_has_many_through,
13
+ through: :dl_keyed_join, dependent: :destroy_async,
14
+ foreign_key: :dl_has_many_through_key_id, primary_key: :through_key
15
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ class DestroyAsyncParentSoftDelete < ActiveRecord::Base
4
+ has_many :taggings, as: :taggable, class_name: "Tagging"
5
+ has_many :tags, through: :taggings,
6
+ dependent: :destroy_async,
7
+ ensuring_owner_was: :deleted?
8
+
9
+ has_one :dl_keyed_has_one, dependent: :destroy_async,
10
+ ensuring_owner_was: :deleted?
11
+
12
+ def deleted?
13
+ deleted
14
+ end
15
+
16
+ def destroy
17
+ update(deleted: true)
18
+ run_callbacks(:destroy)
19
+ end
20
+ end