ibm_db 3.0.5-x86-mingw32 → 5.0.5-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 (358) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGES +4 -0
  3. data/LICENSE +1 -1
  4. data/ParameterizedQueries README +6 -6
  5. data/README +38 -55
  6. data/ext/Makefile +269 -0
  7. data/ext/extconf.rb +34 -3
  8. data/ext/gil_release_version +3 -0
  9. data/ext/ibm_db-i386-mingw32.def +2 -0
  10. data/ext/ibm_db.c +100 -108
  11. data/ext/ibm_db.o +0 -0
  12. data/ext/ibm_db.so +0 -0
  13. data/ext/mkmf.log +110 -0
  14. data/ext/ruby_ibm_db_cli.o +0 -0
  15. data/ext/unicode_support_version +3 -0
  16. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +923 -527
  17. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +4 -1
  18. data/lib/mswin32/ibm_db.rb +7 -39
  19. data/lib/mswin32/rb2x/i386/ibm_db.so +0 -0
  20. data/test/active_record/connection_adapters/fake_adapter.rb +8 -5
  21. data/test/cases/adapter_test.rb +133 -58
  22. data/test/cases/adapters/mysql2/active_schema_test.rb +193 -0
  23. data/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -0
  24. data/test/cases/adapters/mysql2/boolean_test.rb +100 -0
  25. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +63 -0
  26. data/test/cases/adapters/mysql2/charset_collation_test.rb +54 -0
  27. data/test/cases/adapters/mysql2/connection_test.rb +210 -0
  28. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +45 -0
  29. data/test/cases/adapters/mysql2/enum_test.rb +26 -0
  30. data/test/cases/adapters/mysql2/explain_test.rb +21 -0
  31. data/test/cases/adapters/mysql2/json_test.rb +195 -0
  32. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +83 -0
  33. data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -0
  34. data/test/cases/adapters/mysql2/schema_migrations_test.rb +59 -0
  35. data/test/cases/adapters/mysql2/schema_test.rb +126 -0
  36. data/test/cases/adapters/mysql2/sp_test.rb +36 -0
  37. data/test/cases/adapters/mysql2/sql_types_test.rb +14 -0
  38. data/test/cases/adapters/mysql2/table_options_test.rb +42 -0
  39. data/test/cases/adapters/mysql2/unsigned_type_test.rb +66 -0
  40. data/test/cases/adapters/postgresql/active_schema_test.rb +98 -0
  41. data/test/cases/adapters/postgresql/array_test.rb +339 -0
  42. data/test/cases/adapters/postgresql/bit_string_test.rb +82 -0
  43. data/test/cases/adapters/postgresql/bytea_test.rb +134 -0
  44. data/test/cases/adapters/postgresql/case_insensitive_test.rb +26 -0
  45. data/test/cases/adapters/postgresql/change_schema_test.rb +38 -0
  46. data/test/cases/adapters/postgresql/cidr_test.rb +25 -0
  47. data/test/cases/adapters/postgresql/citext_test.rb +78 -0
  48. data/test/cases/adapters/postgresql/collation_test.rb +53 -0
  49. data/test/cases/adapters/postgresql/composite_test.rb +132 -0
  50. data/test/cases/adapters/postgresql/connection_test.rb +257 -0
  51. data/test/cases/adapters/postgresql/datatype_test.rb +92 -0
  52. data/test/cases/adapters/postgresql/domain_test.rb +47 -0
  53. data/test/cases/adapters/postgresql/enum_test.rb +91 -0
  54. data/test/cases/adapters/postgresql/explain_test.rb +20 -0
  55. data/test/cases/adapters/postgresql/extension_migration_test.rb +63 -0
  56. data/test/cases/adapters/postgresql/full_text_test.rb +44 -0
  57. data/test/cases/adapters/postgresql/geometric_test.rb +378 -0
  58. data/test/cases/adapters/postgresql/hstore_test.rb +382 -0
  59. data/test/cases/adapters/postgresql/infinity_test.rb +69 -0
  60. data/test/cases/adapters/postgresql/integer_test.rb +25 -0
  61. data/test/cases/adapters/postgresql/json_test.rb +237 -0
  62. data/test/cases/adapters/postgresql/ltree_test.rb +53 -0
  63. data/test/cases/adapters/postgresql/money_test.rb +96 -0
  64. data/test/cases/adapters/postgresql/network_test.rb +94 -0
  65. data/test/cases/adapters/postgresql/numbers_test.rb +49 -0
  66. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +405 -0
  67. data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -0
  68. data/test/cases/adapters/postgresql/quoting_test.rb +44 -0
  69. data/test/cases/adapters/postgresql/range_test.rb +343 -0
  70. data/test/cases/adapters/postgresql/referential_integrity_test.rb +111 -0
  71. data/test/cases/adapters/postgresql/rename_table_test.rb +34 -0
  72. data/test/cases/adapters/postgresql/schema_authorization_test.rb +119 -0
  73. data/test/cases/adapters/postgresql/schema_test.rb +597 -0
  74. data/test/cases/adapters/postgresql/serial_test.rb +154 -0
  75. data/test/cases/adapters/postgresql/statement_pool_test.rb +41 -0
  76. data/test/cases/adapters/postgresql/timestamp_test.rb +90 -0
  77. data/test/cases/adapters/postgresql/type_lookup_test.rb +33 -0
  78. data/test/cases/adapters/postgresql/utils_test.rb +62 -0
  79. data/test/cases/adapters/postgresql/uuid_test.rb +294 -0
  80. data/test/cases/adapters/postgresql/xml_test.rb +54 -0
  81. data/test/cases/adapters/sqlite3/collation_test.rb +53 -0
  82. data/test/cases/adapters/sqlite3/copy_table_test.rb +98 -0
  83. data/test/cases/adapters/sqlite3/explain_test.rb +21 -0
  84. data/test/cases/adapters/sqlite3/quoting_test.rb +101 -0
  85. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +441 -0
  86. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -0
  87. data/test/cases/adapters/sqlite3/statement_pool_test.rb +20 -0
  88. data/test/cases/aggregations_test.rb +11 -1
  89. data/test/cases/ar_schema_test.rb +35 -50
  90. data/test/cases/associations/association_scope_test.rb +1 -6
  91. data/test/cases/associations/belongs_to_associations_test.rb +122 -10
  92. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -0
  93. data/test/cases/associations/callbacks_test.rb +5 -7
  94. data/test/cases/associations/cascaded_eager_loading_test.rb +1 -1
  95. data/test/cases/associations/eager_load_nested_include_test.rb +1 -3
  96. data/test/cases/associations/eager_test.rb +158 -73
  97. data/test/cases/associations/extension_test.rb +7 -2
  98. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +64 -32
  99. data/test/cases/associations/has_many_associations_test.rb +362 -43
  100. data/test/cases/associations/has_many_through_associations_test.rb +108 -41
  101. data/test/cases/associations/has_one_associations_test.rb +105 -8
  102. data/test/cases/associations/has_one_through_associations_test.rb +6 -3
  103. data/test/cases/associations/inner_join_association_test.rb +3 -3
  104. data/test/cases/associations/inverse_associations_test.rb +38 -11
  105. data/test/cases/associations/join_model_test.rb +59 -36
  106. data/test/cases/associations/left_outer_join_association_test.rb +88 -0
  107. data/test/cases/associations/nested_through_associations_test.rb +2 -2
  108. data/test/cases/associations/required_test.rb +25 -5
  109. data/test/cases/associations_test.rb +39 -34
  110. data/test/cases/attribute_decorators_test.rb +9 -8
  111. data/test/cases/attribute_methods/read_test.rb +5 -5
  112. data/test/cases/attribute_methods_test.rb +97 -40
  113. data/test/cases/attribute_set_test.rb +64 -4
  114. data/test/cases/attribute_test.rb +84 -18
  115. data/test/cases/attributes_test.rb +151 -34
  116. data/test/cases/autosave_association_test.rb +149 -36
  117. data/test/cases/base_test.rb +290 -241
  118. data/test/cases/batches_test.rb +299 -22
  119. data/test/cases/binary_test.rb +2 -10
  120. data/test/cases/bind_parameter_test.rb +76 -66
  121. data/test/cases/cache_key_test.rb +26 -0
  122. data/test/cases/calculations_test.rb +167 -15
  123. data/test/cases/callbacks_test.rb +161 -68
  124. data/test/cases/coders/json_test.rb +15 -0
  125. data/test/cases/collection_cache_key_test.rb +115 -0
  126. data/test/cases/column_definition_test.rb +26 -57
  127. data/test/cases/comment_test.rb +145 -0
  128. data/test/cases/connection_adapters/adapter_leasing_test.rb +5 -3
  129. data/test/cases/connection_adapters/connection_handler_test.rb +128 -21
  130. data/test/cases/connection_adapters/connection_specification_test.rb +1 -1
  131. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +0 -38
  132. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +5 -1
  133. data/test/cases/connection_adapters/schema_cache_test.rb +8 -3
  134. data/test/cases/connection_adapters/type_lookup_test.rb +15 -7
  135. data/test/cases/connection_management_test.rb +46 -56
  136. data/test/cases/connection_pool_test.rb +195 -20
  137. data/test/cases/connection_specification/resolver_test.rb +15 -0
  138. data/test/cases/counter_cache_test.rb +10 -5
  139. data/test/cases/custom_locking_test.rb +1 -1
  140. data/test/cases/database_statements_test.rb +18 -3
  141. data/test/cases/{invalid_date_test.rb → date_test.rb} +13 -1
  142. data/test/cases/date_time_precision_test.rb +107 -0
  143. data/test/cases/defaults_test.rb +85 -89
  144. data/test/cases/dirty_test.rb +30 -52
  145. data/test/cases/disconnected_test.rb +4 -2
  146. data/test/cases/enum_test.rb +178 -24
  147. data/test/cases/errors_test.rb +16 -0
  148. data/test/cases/explain_test.rb +32 -21
  149. data/test/cases/finder_test.rb +273 -148
  150. data/test/cases/fixture_set/file_test.rb +18 -0
  151. data/test/cases/fixtures_test.rb +112 -32
  152. data/test/cases/forbidden_attributes_protection_test.rb +69 -3
  153. data/test/cases/helper.rb +10 -16
  154. data/test/cases/hot_compatibility_test.rb +89 -1
  155. data/test/cases/inheritance_test.rb +284 -53
  156. data/test/cases/integration_test.rb +23 -7
  157. data/test/cases/invalid_connection_test.rb +4 -2
  158. data/test/cases/invertible_migration_test.rb +124 -32
  159. data/test/cases/json_serialization_test.rb +11 -2
  160. data/test/cases/locking_test.rb +22 -6
  161. data/test/cases/log_subscriber_test.rb +106 -17
  162. data/test/cases/migration/change_schema_test.rb +60 -114
  163. data/test/cases/migration/change_table_test.rb +34 -2
  164. data/test/cases/migration/column_attributes_test.rb +7 -23
  165. data/test/cases/migration/column_positioning_test.rb +8 -8
  166. data/test/cases/migration/columns_test.rb +17 -11
  167. data/test/cases/migration/command_recorder_test.rb +47 -2
  168. data/test/cases/migration/compatibility_test.rb +118 -0
  169. data/test/cases/migration/create_join_table_test.rb +21 -12
  170. data/test/cases/migration/foreign_key_test.rb +52 -18
  171. data/test/cases/migration/index_test.rb +14 -12
  172. data/test/cases/migration/logger_test.rb +1 -1
  173. data/test/cases/migration/pending_migrations_test.rb +0 -1
  174. data/test/cases/migration/references_foreign_key_test.rb +59 -7
  175. data/test/cases/migration/references_index_test.rb +4 -4
  176. data/test/cases/migration/references_statements_test.rb +26 -6
  177. data/test/cases/migration/rename_table_test.rb +25 -25
  178. data/test/cases/migration_test.rb +279 -81
  179. data/test/cases/migrator_test.rb +91 -8
  180. data/test/cases/mixin_test.rb +0 -2
  181. data/test/cases/modules_test.rb +3 -4
  182. data/test/cases/multiparameter_attributes_test.rb +24 -2
  183. data/test/cases/multiple_db_test.rb +11 -4
  184. data/test/cases/nested_attributes_test.rb +61 -33
  185. data/test/cases/persistence_test.rb +102 -10
  186. data/test/cases/pooled_connections_test.rb +3 -3
  187. data/test/cases/primary_keys_test.rb +170 -31
  188. data/test/cases/query_cache_test.rb +216 -96
  189. data/test/cases/quoting_test.rb +65 -19
  190. data/test/cases/readonly_test.rb +2 -1
  191. data/test/cases/reflection_test.rb +68 -22
  192. data/test/cases/relation/delegation_test.rb +3 -8
  193. data/test/cases/relation/merging_test.rb +10 -14
  194. data/test/cases/relation/mutation_test.rb +42 -24
  195. data/test/cases/relation/or_test.rb +92 -0
  196. data/test/cases/relation/predicate_builder_test.rb +4 -2
  197. data/test/cases/relation/record_fetch_warning_test.rb +40 -0
  198. data/test/cases/relation/where_chain_test.rb +23 -99
  199. data/test/cases/relation/where_clause_test.rb +182 -0
  200. data/test/cases/relation/where_test.rb +45 -23
  201. data/test/cases/relation_test.rb +67 -58
  202. data/test/cases/relations_test.rb +249 -38
  203. data/test/cases/result_test.rb +10 -0
  204. data/test/cases/sanitize_test.rb +108 -15
  205. data/test/cases/schema_dumper_test.rb +119 -125
  206. data/test/cases/schema_loading_test.rb +52 -0
  207. data/test/cases/scoping/default_scoping_test.rb +113 -39
  208. data/test/cases/scoping/named_scoping_test.rb +46 -9
  209. data/test/cases/scoping/relation_scoping_test.rb +47 -4
  210. data/test/cases/secure_token_test.rb +32 -0
  211. data/test/cases/serialization_test.rb +1 -1
  212. data/test/cases/serialized_attribute_test.rb +93 -6
  213. data/test/cases/statement_cache_test.rb +38 -0
  214. data/test/cases/store_test.rb +2 -1
  215. data/test/cases/suppressor_test.rb +63 -0
  216. data/test/cases/tasks/database_tasks_test.rb +73 -9
  217. data/test/cases/tasks/mysql_rake_test.rb +139 -118
  218. data/test/cases/tasks/postgresql_rake_test.rb +60 -6
  219. data/test/cases/tasks/sqlite_rake_test.rb +30 -3
  220. data/test/cases/test_case.rb +28 -20
  221. data/test/cases/test_fixtures_test.rb +36 -0
  222. data/test/cases/time_precision_test.rb +103 -0
  223. data/test/cases/timestamp_test.rb +44 -10
  224. data/test/cases/touch_later_test.rb +121 -0
  225. data/test/cases/transaction_callbacks_test.rb +128 -62
  226. data/test/cases/transaction_isolation_test.rb +2 -2
  227. data/test/cases/transactions_test.rb +61 -43
  228. data/test/cases/type/adapter_specific_registry_test.rb +133 -0
  229. data/test/cases/type/date_time_test.rb +14 -0
  230. data/test/cases/type/integer_test.rb +2 -96
  231. data/test/cases/type/string_test.rb +0 -14
  232. data/test/cases/type_test.rb +39 -0
  233. data/test/cases/types_test.rb +1 -118
  234. data/test/cases/unconnected_test.rb +1 -1
  235. data/test/cases/validations/absence_validation_test.rb +73 -0
  236. data/test/cases/validations/association_validation_test.rb +13 -2
  237. data/test/cases/validations/i18n_validation_test.rb +6 -10
  238. data/test/cases/validations/length_validation_test.rb +62 -30
  239. data/test/cases/validations/presence_validation_test.rb +36 -1
  240. data/test/cases/validations/uniqueness_validation_test.rb +128 -37
  241. data/test/cases/validations_repair_helper.rb +2 -6
  242. data/test/cases/validations_test.rb +36 -7
  243. data/test/cases/view_test.rb +102 -5
  244. data/test/cases/yaml_serialization_test.rb +21 -26
  245. data/test/config.example.yml +97 -0
  246. data/test/fixtures/bad_posts.yml +9 -0
  247. data/test/fixtures/books.yml +20 -0
  248. data/test/fixtures/content.yml +3 -0
  249. data/test/fixtures/content_positions.yml +3 -0
  250. data/test/fixtures/dead_parrots.yml +5 -0
  251. data/test/fixtures/live_parrots.yml +4 -0
  252. data/test/fixtures/naked/yml/parrots.yml +2 -0
  253. data/test/fixtures/naked/yml/trees.yml +3 -0
  254. data/test/fixtures/nodes.yml +29 -0
  255. data/test/fixtures/other_comments.yml +6 -0
  256. data/test/fixtures/other_dogs.yml +2 -0
  257. data/test/fixtures/other_posts.yml +7 -0
  258. data/test/fixtures/price_estimates.yml +10 -1
  259. data/test/fixtures/trees.yml +3 -0
  260. data/test/migrations/10_urban/9_add_expressions.rb +1 -1
  261. data/test/migrations/decimal/1_give_me_big_numbers.rb +1 -1
  262. data/test/migrations/magic/1_currencies_have_symbols.rb +1 -1
  263. data/test/migrations/missing/1000_people_have_middle_names.rb +2 -2
  264. data/test/migrations/missing/1_people_have_last_names.rb +2 -2
  265. data/test/migrations/missing/3_we_need_reminders.rb +2 -2
  266. data/test/migrations/missing/4_innocent_jointable.rb +2 -2
  267. data/test/migrations/rename/1_we_need_things.rb +2 -2
  268. data/test/migrations/rename/2_rename_things.rb +2 -2
  269. data/test/migrations/to_copy/1_people_have_hobbies.rb +1 -1
  270. data/test/migrations/to_copy/2_people_have_descriptions.rb +1 -1
  271. data/test/migrations/to_copy2/1_create_articles.rb +1 -1
  272. data/test/migrations/to_copy2/2_create_comments.rb +1 -1
  273. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +1 -1
  274. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +1 -1
  275. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +1 -1
  276. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +1 -1
  277. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +1 -1
  278. data/test/migrations/valid/1_valid_people_have_last_names.rb +1 -1
  279. data/test/migrations/valid/2_we_need_reminders.rb +2 -2
  280. data/test/migrations/valid/3_innocent_jointable.rb +2 -2
  281. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +1 -1
  282. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -2
  283. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +2 -2
  284. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +1 -1
  285. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +1 -1
  286. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +1 -1
  287. data/test/migrations/version_check/20131219224947_migration_version_check.rb +1 -1
  288. data/test/models/admin/randomly_named_c1.rb +6 -2
  289. data/test/models/aircraft.rb +1 -0
  290. data/test/models/author.rb +4 -7
  291. data/test/models/bird.rb +1 -1
  292. data/test/models/book.rb +5 -0
  293. data/test/models/bulb.rb +2 -1
  294. data/test/models/car.rb +3 -0
  295. data/test/models/cat.rb +10 -0
  296. data/test/models/chef.rb +1 -0
  297. data/test/models/club.rb +2 -0
  298. data/test/models/comment.rb +17 -5
  299. data/test/models/company.rb +4 -2
  300. data/test/models/company_in_module.rb +1 -1
  301. data/test/models/contact.rb +1 -1
  302. data/test/models/content.rb +40 -0
  303. data/test/models/customer.rb +8 -2
  304. data/test/models/developer.rb +19 -0
  305. data/test/models/face.rb +1 -1
  306. data/test/models/guitar.rb +4 -0
  307. data/test/models/hotel.rb +2 -0
  308. data/test/models/member.rb +1 -0
  309. data/test/models/member_detail.rb +4 -3
  310. data/test/models/mentor.rb +3 -0
  311. data/test/models/mocktail_designer.rb +2 -0
  312. data/test/models/node.rb +5 -0
  313. data/test/models/non_primary_key.rb +2 -0
  314. data/test/models/notification.rb +3 -0
  315. data/test/models/other_dog.rb +5 -0
  316. data/test/models/owner.rb +4 -1
  317. data/test/models/parrot.rb +6 -7
  318. data/test/models/person.rb +0 -1
  319. data/test/models/pet.rb +3 -0
  320. data/test/models/pet_treasure.rb +6 -0
  321. data/test/models/pirate.rb +3 -3
  322. data/test/models/post.rb +18 -9
  323. data/test/models/project.rb +9 -0
  324. data/test/models/randomly_named_c1.rb +1 -1
  325. data/test/models/recipe.rb +3 -0
  326. data/test/models/ship.rb +8 -2
  327. data/test/models/tag.rb +6 -0
  328. data/test/models/topic.rb +2 -8
  329. data/test/models/tree.rb +3 -0
  330. data/test/models/tuning_peg.rb +4 -0
  331. data/test/models/user.rb +14 -0
  332. data/test/models/uuid_item.rb +6 -0
  333. data/test/schema/mysql2_specific_schema.rb +33 -23
  334. data/test/schema/oracle_specific_schema.rb +1 -4
  335. data/test/schema/postgresql_specific_schema.rb +36 -124
  336. data/test/schema/schema.rb +170 -65
  337. data/test/schema/schema.rb.original +1057 -0
  338. data/test/schema/sqlite_specific_schema.rb +1 -5
  339. data/test/support/connection.rb +1 -0
  340. data/test/support/schema_dumping_helper.rb +1 -1
  341. data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -0
  342. data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -0
  343. metadata +146 -30
  344. data/lib/mswin32/rb19x/ibm_db.so +0 -0
  345. data/lib/mswin32/rb21x/i386/ibm_db.so +0 -0
  346. data/lib/mswin32/rb22x/i386/ibm_db.so +0 -0
  347. data/lib/mswin32/rb23x/i386/ibm_db.so +0 -0
  348. data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +0 -26
  349. data/test/cases/attribute_methods/serialization_test.rb +0 -29
  350. data/test/cases/migration/change_schema_test - Copy.rb +0 -448
  351. data/test/cases/migration/foreign_key_test - Changed.rb +0 -325
  352. data/test/cases/migration/table_and_index_test.rb +0 -24
  353. data/test/cases/relation/where_test2.rb +0 -36
  354. data/test/cases/type/decimal_test.rb +0 -56
  355. data/test/cases/type/unsigned_integer_test.rb +0 -18
  356. data/test/cases/xml_serialization_test.rb +0 -457
  357. data/test/fixtures/naked/csv/accounts.csv +0 -1
  358. data/test/schema/mysql_specific_schema.rb +0 -70
@@ -0,0 +1,10 @@
1
+ class Cat < ActiveRecord::Base
2
+ self.abstract_class = true
3
+
4
+ enum gender: [:female, :male]
5
+
6
+ default_scope -> { where(is_vegetarian: false) }
7
+ end
8
+
9
+ class Lion < Cat
10
+ end
@@ -1,5 +1,6 @@
1
1
  class Chef < ActiveRecord::Base
2
2
  belongs_to :employable, polymorphic: true
3
+ has_many :recipes
3
4
  end
4
5
 
5
6
  class ChefList < Chef
@@ -8,6 +8,8 @@ class Club < ActiveRecord::Base
8
8
 
9
9
  has_many :favourites, -> { where(memberships: { favourite: true }) }, through: :memberships, source: :member
10
10
 
11
+ scope :general, -> { left_joins(:category).where(categories: { name: "General" }) }
12
+
11
13
  private
12
14
 
13
15
  def private_method
@@ -14,10 +14,26 @@ class Comment < ActiveRecord::Base
14
14
  has_many :ratings
15
15
 
16
16
  belongs_to :first_post, :foreign_key => :post_id
17
+ belongs_to :special_post_with_default_scope, foreign_key: :post_id
17
18
 
18
19
  has_many :children, :class_name => 'Comment', :foreign_key => :parent_id
19
20
  belongs_to :parent, :class_name => 'Comment', :counter_cache => :children_count
20
21
 
22
+ class ::OopsError < RuntimeError; end
23
+
24
+ module OopsExtension
25
+ def destroy_all(*)
26
+ raise OopsError
27
+ end
28
+ end
29
+
30
+ default_scope { extending OopsExtension }
31
+
32
+ # Should not be called if extending modules that having the method exists on an association.
33
+ def self.greeting
34
+ raise
35
+ end
36
+
21
37
  def self.what_are_you
22
38
  'a comment...'
23
39
  end
@@ -37,6 +53,7 @@ class Comment < ActiveRecord::Base
37
53
  end
38
54
 
39
55
  class SpecialComment < Comment
56
+ default_scope { where(deleted_at: nil) }
40
57
  end
41
58
 
42
59
  class SubSpecialComment < SpecialComment
@@ -57,8 +74,3 @@ class CommentWithDefaultScopeReferencesAssociation < Comment
57
74
  default_scope ->{ includes(:developer).order('developers.name').references(:developer) }
58
75
  belongs_to :developer
59
76
  end
60
-
61
- class CommentWithConflictingDefaultScope < Comment
62
- default_scope ->{ where(author_id: 42) }
63
- belongs_to :post_with_conflicting_default_scope, foreign_key: :post_id
64
- end
@@ -10,7 +10,6 @@ class Company < AbstractCompany
10
10
  has_one :dummy_account, :foreign_key => "firm_id", :class_name => "Account"
11
11
  has_many :contracts
12
12
  has_many :developers, :through => :contracts
13
- has_many :accounts
14
13
 
15
14
  scope :of_first_firm, lambda {
16
15
  joins(:account => :firm).
@@ -26,6 +25,9 @@ class Company < AbstractCompany
26
25
  def private_method
27
26
  "I am Jack's innermost fears and aspirations"
28
27
  end
28
+
29
+ class SpecialCo < Company
30
+ end
29
31
  end
30
32
 
31
33
  module Namespaced
@@ -217,7 +219,7 @@ class Account < ActiveRecord::Base
217
219
  protected
218
220
 
219
221
  def check_empty_credit_limit
220
- errors.add_on_empty "credit_limit"
222
+ errors.add("credit_limit", :blank) if credit_limit.blank?
221
223
  end
222
224
 
223
225
  private
@@ -91,7 +91,7 @@ module MyApplication
91
91
  protected
92
92
 
93
93
  def check_empty_credit_limit
94
- errors.add_on_empty "credit_limit"
94
+ errors.add("credit_card", :blank) if credit_card.blank?
95
95
  end
96
96
  end
97
97
  end
@@ -3,7 +3,7 @@ module ContactFakeColumns
3
3
  base.class_eval do
4
4
  establish_connection(:adapter => 'fake')
5
5
 
6
- connection.tables = [table_name]
6
+ connection.data_sources = [table_name]
7
7
  connection.primary_keys = {
8
8
  table_name => 'id'
9
9
  }
@@ -0,0 +1,40 @@
1
+ class Content < ActiveRecord::Base
2
+ self.table_name = 'content'
3
+ has_one :content_position, dependent: :destroy
4
+
5
+ def self.destroyed_ids
6
+ @destroyed_ids ||= []
7
+ end
8
+
9
+ before_destroy do |object|
10
+ Content.destroyed_ids << object.id
11
+ end
12
+ end
13
+
14
+ class ContentWhichRequiresTwoDestroyCalls < ActiveRecord::Base
15
+ self.table_name = 'content'
16
+ has_one :content_position, foreign_key: 'content_id', dependent: :destroy
17
+
18
+ after_initialize do
19
+ @destroy_count = 0
20
+ end
21
+
22
+ before_destroy do
23
+ @destroy_count += 1
24
+ if @destroy_count == 1
25
+ throw :abort
26
+ end
27
+ end
28
+ end
29
+
30
+ class ContentPosition < ActiveRecord::Base
31
+ belongs_to :content, dependent: :destroy
32
+
33
+ def self.destroyed_ids
34
+ @destroyed_ids ||= []
35
+ end
36
+
37
+ before_destroy do |object|
38
+ ContentPosition.destroyed_ids << object.id
39
+ end
40
+ end
@@ -2,11 +2,12 @@ class Customer < ActiveRecord::Base
2
2
  cattr_accessor :gps_conversion_was_run
3
3
 
4
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 { |balance| balance.to_money }
5
+ composed_of :balance, :class_name => "Money", :mapping => %w(balance amount), :converter => Proc.new(&:to_money)
6
6
  composed_of :gps_location, :allow_nil => true
7
7
  composed_of :non_blank_gps_location, :class_name => "GpsLocation", :allow_nil => true, :mapping => %w(gps_location gps_location),
8
8
  :converter => lambda { |gps| self.gps_conversion_was_run = true; gps.blank? ? nil : GpsLocation.new(gps)}
9
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"
10
11
  end
11
12
 
12
13
  class Address
@@ -64,7 +65,12 @@ class Fullname
64
65
 
65
66
  def self.parse(str)
66
67
  return nil unless str
67
- new(*str.to_s.split)
68
+
69
+ if str.is_a?(Hash)
70
+ new(str[:first], str[:last])
71
+ else
72
+ new(*str.to_s.split)
73
+ end
68
74
  end
69
75
 
70
76
  def initialize(first, last = nil)
@@ -7,12 +7,16 @@ module DeveloperProjectsAssociationExtension2
7
7
  end
8
8
 
9
9
  class Developer < ActiveRecord::Base
10
+ self.ignored_columns = %w(first_name last_name)
11
+
10
12
  has_and_belongs_to_many :projects do
11
13
  def find_most_recent
12
14
  order("id DESC").first
13
15
  end
14
16
  end
15
17
 
18
+ belongs_to :mentor
19
+
16
20
  accepts_nested_attributes_for :projects
17
21
 
18
22
  has_and_belongs_to_many :shared_computers, class_name: "Computer"
@@ -50,6 +54,7 @@ class Developer < ActiveRecord::Base
50
54
  has_many :firms, :through => :contracts, :source => :firm
51
55
  has_many :comments, ->(developer) { where(body: "I'm #{developer.name}") }
52
56
  has_many :ratings, through: :comments
57
+ has_one :ship, dependent: :nullify
53
58
 
54
59
  belongs_to :firm
55
60
  has_many :contracted_projects, class_name: "Project"
@@ -63,6 +68,9 @@ class Developer < ActiveRecord::Base
63
68
  developer.audit_logs.build :message => "Computer created"
64
69
  end
65
70
 
71
+ attr_accessor :last_name
72
+ define_attribute_method 'last_name'
73
+
66
74
  def log=(message)
67
75
  audit_logs.build :message => message
68
76
  end
@@ -78,6 +86,17 @@ class Developer < ActiveRecord::Base
78
86
 
79
87
  end
80
88
 
89
+ class SubDeveloper < Developer
90
+ end
91
+
92
+ class SymbolIgnoredDeveloper < ActiveRecord::Base
93
+ self.table_name = "developers"
94
+ self.ignored_columns = [:first_name, :last_name]
95
+
96
+ attr_accessor :last_name
97
+ define_attribute_method "last_name"
98
+ end
99
+
81
100
  class AuditLog < ActiveRecord::Base
82
101
  belongs_to :developer, :validate => true
83
102
  belongs_to :unvalidated_developer, :class_name => 'Developer'
@@ -1,7 +1,7 @@
1
1
  class Face < ActiveRecord::Base
2
2
  belongs_to :man, :inverse_of => :face
3
3
  belongs_to :polymorphic_man, :polymorphic => true, :inverse_of => :polymorphic_face
4
- # Oracle identifier lengh is limited to 30 bytes or less, `polymorphic` renamed `poly`
4
+ # Oracle identifier length is limited to 30 bytes or less, `polymorphic` renamed `poly`
5
5
  belongs_to :poly_man_without_inverse, :polymorphic => true
6
6
  # These is a "broken" inverse_of for the purposes of testing
7
7
  belongs_to :horrible_man, :class_name => 'Man', :inverse_of => :horrible_face
@@ -0,0 +1,4 @@
1
+ class Guitar < ActiveRecord::Base
2
+ has_many :tuning_pegs, index_errors: true
3
+ accepts_nested_attributes_for :tuning_pegs
4
+ end
@@ -6,4 +6,6 @@ class Hotel < ActiveRecord::Base
6
6
 
7
7
  has_many :chef_lists, as: :employable_list
8
8
  has_many :mocktail_designers, through: :chef_lists, source: :employable, :source_type => "MocktailDesigner"
9
+
10
+ has_many :recipes, through: :chefs
9
11
  end
@@ -22,6 +22,7 @@ class Member < ActiveRecord::Base
22
22
  has_many :organization_member_details_2, :through => :organization, :source => :member_details
23
23
 
24
24
  has_one :club_category, :through => :club, :source => :category
25
+ has_one :general_club, -> { general }, through: :current_membership, source: :club
25
26
 
26
27
  has_many :current_memberships, -> { where :favourite => true }
27
28
  has_many :clubs, :through => :current_memberships
@@ -1,7 +1,8 @@
1
1
  class MemberDetail < ActiveRecord::Base
2
- belongs_to :member, :inverse_of => false
2
+ belongs_to :member, inverse_of: false
3
3
  belongs_to :organization
4
- has_one :member_type, :through => :member
4
+ has_one :member_type, through: :member
5
+ has_one :membership, through: :member
5
6
 
6
- has_many :organization_member_details, :through => :organization, :source => :member_details
7
+ has_many :organization_member_details, through: :organization, source: :member_details
7
8
  end
@@ -0,0 +1,3 @@
1
+ class Mentor < ActiveRecord::Base
2
+ has_many :developers
3
+ end
@@ -0,0 +1,2 @@
1
+ class MocktailDesigner < DrinkDesigner
2
+ end
@@ -0,0 +1,5 @@
1
+ class Node < ActiveRecord::Base
2
+ belongs_to :tree, touch: true
3
+ belongs_to :parent, class_name: 'Node', touch: true, optional: true
4
+ has_many :children, class_name: 'Node', foreign_key: :parent_id, dependent: :destroy
5
+ end
@@ -0,0 +1,2 @@
1
+ class NonPrimaryKey < ActiveRecord::Base
2
+ end
@@ -0,0 +1,3 @@
1
+ class Notification < ActiveRecord::Base
2
+ validates_presence_of :message
3
+ end
@@ -0,0 +1,5 @@
1
+ require_dependency "models/arunit2_model"
2
+
3
+ class OtherDog < ARUnit2Model
4
+ self.table_name = "dogs"
5
+ end
@@ -1,7 +1,8 @@
1
1
  class Owner < ActiveRecord::Base
2
2
  self.primary_key = :owner_id
3
3
  has_many :pets, -> { order 'pets.name desc' }
4
- has_many :toys, :through => :pets
4
+ has_many :toys, through: :pets
5
+ has_many :persons, through: :pets
5
6
 
6
7
  belongs_to :last_pet, class_name: 'Pet'
7
8
  scope :including_last_pet, -> {
@@ -17,6 +18,8 @@ class Owner < ActiveRecord::Base
17
18
 
18
19
  after_commit :execute_blocks
19
20
 
21
+ accepts_nested_attributes_for :pets, allow_destroy: true
22
+
20
23
  def blocks
21
24
  @blocks ||= []
22
25
  end
@@ -11,7 +11,12 @@ class Parrot < ActiveRecord::Base
11
11
  attr_accessor :cancel_save_from_callback
12
12
  before_save :cancel_save_callback_method, :if => :cancel_save_from_callback
13
13
  def cancel_save_callback_method
14
- false
14
+ throw(:abort)
15
+ end
16
+
17
+ before_update :increment_updated_count
18
+ def increment_updated_count
19
+ self.updated_count += 1
15
20
  end
16
21
  end
17
22
 
@@ -21,9 +26,3 @@ end
21
26
  class DeadParrot < Parrot
22
27
  belongs_to :killer, :class_name => 'Pirate', foreign_key: :killer_id
23
28
  end
24
-
25
- class FunkyParrot < Parrot
26
- before_destroy do
27
- raise "before_destroy was called"
28
- end
29
- end
@@ -37,7 +37,6 @@ class Person < ActiveRecord::Base
37
37
  has_many :essays, primary_key: "first_name", foreign_key: "writer_id"
38
38
 
39
39
  scope :males, -> { where(:gender => 'M') }
40
- scope :females, -> { where(:gender => 'F') }
41
40
  end
42
41
 
43
42
  class PersonWithDependentDestroyJobs < ActiveRecord::Base
@@ -4,6 +4,9 @@ class Pet < ActiveRecord::Base
4
4
  self.primary_key = :pet_id
5
5
  belongs_to :owner, :touch => true
6
6
  has_many :toys
7
+ has_many :pet_treasures
8
+ has_many :treasures, through: :pet_treasures
9
+ has_many :persons, through: :treasures, source: :looter, source_type: 'Person'
7
10
 
8
11
  class << self
9
12
  attr_accessor :after_destroy_output
@@ -0,0 +1,6 @@
1
+ class PetTreasure < ActiveRecord::Base
2
+ self.table_name = "pets_treasures"
3
+
4
+ belongs_to :pet
5
+ belongs_to :treasure
6
+ end
@@ -36,8 +36,8 @@ class Pirate < ActiveRecord::Base
36
36
 
37
37
  has_one :foo_bulb, -> { where :name => 'foo' }, :foreign_key => :car_id, :class_name => "Bulb"
38
38
 
39
- accepts_nested_attributes_for :parrots, :birds, :allow_destroy => true, :reject_if => proc { |attributes| attributes.empty? }
40
- accepts_nested_attributes_for :ship, :allow_destroy => true, :reject_if => proc { |attributes| attributes.empty? }
39
+ accepts_nested_attributes_for :parrots, :birds, :allow_destroy => true, :reject_if => proc(&:empty?)
40
+ accepts_nested_attributes_for :ship, :allow_destroy => true, :reject_if => proc(&:empty?)
41
41
  accepts_nested_attributes_for :update_only_ship, :update_only => true
42
42
  accepts_nested_attributes_for :parrots_with_method_callbacks, :parrots_with_proc_callbacks,
43
43
  :birds_with_method_callbacks, :birds_with_proc_callbacks, :allow_destroy => true
@@ -56,7 +56,7 @@ class Pirate < ActiveRecord::Base
56
56
  attr_accessor :cancel_save_from_callback, :parrots_limit
57
57
  before_save :cancel_save_callback_method, :if => :cancel_save_from_callback
58
58
  def cancel_save_callback_method
59
- false
59
+ throw(:abort)
60
60
  end
61
61
 
62
62
  private
@@ -13,16 +13,18 @@ class Post < ActiveRecord::Base
13
13
 
14
14
  module NamedExtension2
15
15
  def greeting
16
- "hello"
16
+ "hullo"
17
17
  end
18
18
  end
19
19
 
20
20
  scope :containing_the_letter_a, -> { where("body LIKE '%a%'") }
21
+ scope :titled_with_an_apostrophe, -> { where("title LIKE '%''%'") }
21
22
  scope :ranked_by_comments, -> { order("comments_count DESC") }
22
23
 
23
24
  scope :limit_by, lambda {|l| limit(l) }
24
25
 
25
26
  belongs_to :author
27
+ belongs_to :readonly_author, -> { readonly }, class_name: "Author", foreign_key: :author_id
26
28
 
27
29
  belongs_to :author_with_posts, -> { includes(:posts) }, :class_name => "Author", :foreign_key => :author_id
28
30
  belongs_to :author_with_address, -> { includes(:author_address) }, :class_name => "Author", :foreign_key => :author_id
@@ -43,6 +45,8 @@ class Post < ActiveRecord::Base
43
45
  scope :tagged_with, ->(id) { joins(:taggings).where(taggings: { tag_id: id }) }
44
46
  scope :tagged_with_comment, ->(comment) { joins(:taggings).where(taggings: { comment: comment }) }
45
47
 
48
+ scope :typographically_interesting, -> { containing_the_letter_a.or(titled_with_an_apostrophe) }
49
+
46
50
  has_many :comments do
47
51
  def find_most_recent
48
52
  order("id DESC").first
@@ -72,15 +76,11 @@ class Post < ActiveRecord::Base
72
76
  through: :author_with_address,
73
77
  source: :author_address_extra
74
78
 
75
- has_many :comments_with_interpolated_conditions,
76
- ->(p) { where "#{"#{p.aliased_table_name}." rescue ""}body = ?", 'Thank you for the welcome' },
77
- :class_name => 'Comment'
78
-
79
79
  has_one :very_special_comment
80
80
  has_one :very_special_comment_with_post, -> { includes(:post) }, :class_name => "VerySpecialComment"
81
81
  has_one :very_special_comment_with_post_with_joins, -> { joins(:post).order('posts.id') }, class_name: "VerySpecialComment"
82
82
  has_many :special_comments
83
- has_many :nonexistant_comments, -> { where 'comments.id < 0' }, :class_name => 'Comment'
83
+ has_many :nonexistent_comments, -> { where 'comments.id < 0' }, :class_name => 'Comment'
84
84
 
85
85
  has_many :special_comments_ratings, :through => :special_comments, :source => :ratings
86
86
  has_many :special_comments_ratings_taggings, :through => :special_comments_ratings, :source => :taggings
@@ -186,6 +186,7 @@ class SubStiPost < StiPost
186
186
  end
187
187
 
188
188
  class FirstPost < ActiveRecord::Base
189
+ self.inheritance_column = :disabled
189
190
  self.table_name = 'posts'
190
191
  default_scope { where(:id => 1) }
191
192
 
@@ -194,6 +195,7 @@ class FirstPost < ActiveRecord::Base
194
195
  end
195
196
 
196
197
  class PostWithDefaultInclude < ActiveRecord::Base
198
+ self.inheritance_column = :disabled
197
199
  self.table_name = 'posts'
198
200
  default_scope { includes(:comments) }
199
201
  has_many :comments, :foreign_key => :post_id
@@ -205,6 +207,7 @@ class PostWithSpecialCategorization < Post
205
207
  end
206
208
 
207
209
  class PostWithDefaultScope < ActiveRecord::Base
210
+ self.inheritance_column = :disabled
208
211
  self.table_name = 'posts'
209
212
  default_scope { order(:title) }
210
213
  end
@@ -226,11 +229,13 @@ class PostWithIncludesDefaultScope < ActiveRecord::Base
226
229
  end
227
230
 
228
231
  class SpecialPostWithDefaultScope < ActiveRecord::Base
232
+ self.inheritance_column = :disabled
229
233
  self.table_name = 'posts'
230
234
  default_scope { where(:id => [1, 5,6]) }
231
235
  end
232
236
 
233
237
  class PostThatLoadsCommentsInAnAfterSaveHook < ActiveRecord::Base
238
+ self.inheritance_column = :disabled
234
239
  self.table_name = 'posts'
235
240
  has_many :comments, class_name: "CommentThatAutomaticallyAltersPostBody", foreign_key: :post_id
236
241
 
@@ -240,6 +245,7 @@ class PostThatLoadsCommentsInAnAfterSaveHook < ActiveRecord::Base
240
245
  end
241
246
 
242
247
  class PostWithAfterCreateCallback < ActiveRecord::Base
248
+ self.inheritance_column = :disabled
243
249
  self.table_name = 'posts'
244
250
  has_many :comments, foreign_key: :post_id
245
251
 
@@ -249,6 +255,7 @@ class PostWithAfterCreateCallback < ActiveRecord::Base
249
255
  end
250
256
 
251
257
  class PostWithCommentWithDefaultScopeReferencesAssociation < ActiveRecord::Base
258
+ self.inheritance_column = :disabled
252
259
  self.table_name = 'posts'
253
260
  has_many :comment_with_default_scope_references_associations, foreign_key: :post_id
254
261
  has_one :first_comment, class_name: "CommentWithDefaultScopeReferencesAssociation", foreign_key: :post_id
@@ -258,7 +265,9 @@ class SerializedPost < ActiveRecord::Base
258
265
  serialize :title
259
266
  end
260
267
 
261
- class PostWithConflictingDefaultScope < Post
262
- default_scope ->{ where(author_id: 42) }
263
- belongs_to :post_with_conflicting_default_scope, foreign_key: :post_id
268
+ class ConditionalStiPost < Post
269
+ default_scope { where(title: 'Untitled') }
270
+ end
271
+
272
+ class SubConditionalStiPost < ConditionalStiPost
264
273
  end