activerecord 2.3.18 → 3.2.22

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activerecord might be problematic. Click here for more details.

Files changed (454) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +1014 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.rdoc +222 -0
  5. data/examples/performance.rb +100 -126
  6. data/examples/simple.rb +14 -0
  7. data/lib/active_record/aggregations.rb +93 -99
  8. data/lib/active_record/associations/alias_tracker.rb +76 -0
  9. data/lib/active_record/associations/association.rb +247 -0
  10. data/lib/active_record/associations/association_scope.rb +134 -0
  11. data/lib/active_record/associations/belongs_to_association.rb +54 -61
  12. data/lib/active_record/associations/belongs_to_polymorphic_association.rb +17 -59
  13. data/lib/active_record/associations/builder/association.rb +55 -0
  14. data/lib/active_record/associations/builder/belongs_to.rb +88 -0
  15. data/lib/active_record/associations/builder/collection_association.rb +75 -0
  16. data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +57 -0
  17. data/lib/active_record/associations/builder/has_many.rb +71 -0
  18. data/lib/active_record/associations/builder/has_one.rb +62 -0
  19. data/lib/active_record/associations/builder/singular_association.rb +32 -0
  20. data/lib/active_record/associations/collection_association.rb +580 -0
  21. data/lib/active_record/associations/collection_proxy.rb +133 -0
  22. data/lib/active_record/associations/has_and_belongs_to_many_association.rb +39 -119
  23. data/lib/active_record/associations/has_many_association.rb +60 -79
  24. data/lib/active_record/associations/has_many_through_association.rb +127 -206
  25. data/lib/active_record/associations/has_one_association.rb +55 -114
  26. data/lib/active_record/associations/has_one_through_association.rb +25 -26
  27. data/lib/active_record/associations/join_dependency/join_association.rb +159 -0
  28. data/lib/active_record/associations/join_dependency/join_base.rb +24 -0
  29. data/lib/active_record/associations/join_dependency/join_part.rb +78 -0
  30. data/lib/active_record/associations/join_dependency.rb +214 -0
  31. data/lib/active_record/associations/join_helper.rb +55 -0
  32. data/lib/active_record/associations/preloader/association.rb +125 -0
  33. data/lib/active_record/associations/preloader/belongs_to.rb +17 -0
  34. data/lib/active_record/associations/preloader/collection_association.rb +24 -0
  35. data/lib/active_record/associations/preloader/has_and_belongs_to_many.rb +60 -0
  36. data/lib/active_record/associations/preloader/has_many.rb +17 -0
  37. data/lib/active_record/associations/preloader/has_many_through.rb +15 -0
  38. data/lib/active_record/associations/preloader/has_one.rb +23 -0
  39. data/lib/active_record/associations/preloader/has_one_through.rb +9 -0
  40. data/lib/active_record/associations/preloader/singular_association.rb +21 -0
  41. data/lib/active_record/associations/preloader/through_association.rb +67 -0
  42. data/lib/active_record/associations/preloader.rb +181 -0
  43. data/lib/active_record/associations/singular_association.rb +64 -0
  44. data/lib/active_record/associations/through_association.rb +87 -0
  45. data/lib/active_record/associations.rb +693 -1337
  46. data/lib/active_record/attribute_assignment.rb +221 -0
  47. data/lib/active_record/attribute_methods/before_type_cast.rb +31 -0
  48. data/lib/active_record/attribute_methods/deprecated_underscore_read.rb +32 -0
  49. data/lib/active_record/attribute_methods/dirty.rb +111 -0
  50. data/lib/active_record/attribute_methods/primary_key.rb +114 -0
  51. data/lib/active_record/attribute_methods/query.rb +39 -0
  52. data/lib/active_record/attribute_methods/read.rb +136 -0
  53. data/lib/active_record/attribute_methods/serialization.rb +120 -0
  54. data/lib/active_record/attribute_methods/time_zone_conversion.rb +65 -0
  55. data/lib/active_record/attribute_methods/write.rb +70 -0
  56. data/lib/active_record/attribute_methods.rb +211 -339
  57. data/lib/active_record/autosave_association.rb +179 -149
  58. data/lib/active_record/base.rb +401 -2907
  59. data/lib/active_record/callbacks.rb +91 -176
  60. data/lib/active_record/coders/yaml_column.rb +41 -0
  61. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +236 -119
  62. data/lib/active_record/connection_adapters/abstract/connection_specification.rb +110 -58
  63. data/lib/active_record/connection_adapters/abstract/database_limits.rb +12 -11
  64. data/lib/active_record/connection_adapters/abstract/database_statements.rb +175 -74
  65. data/lib/active_record/connection_adapters/abstract/query_cache.rb +31 -35
  66. data/lib/active_record/connection_adapters/abstract/quoting.rb +71 -21
  67. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +81 -311
  68. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +194 -78
  69. data/lib/active_record/connection_adapters/abstract_adapter.rb +130 -83
  70. data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +676 -0
  71. data/lib/active_record/connection_adapters/column.rb +296 -0
  72. data/lib/active_record/connection_adapters/mysql2_adapter.rb +280 -0
  73. data/lib/active_record/connection_adapters/mysql_adapter.rb +272 -493
  74. data/lib/active_record/connection_adapters/postgresql_adapter.rb +650 -405
  75. data/lib/active_record/connection_adapters/schema_cache.rb +69 -0
  76. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +30 -9
  77. data/lib/active_record/connection_adapters/sqlite_adapter.rb +276 -147
  78. data/lib/active_record/connection_adapters/statement_pool.rb +40 -0
  79. data/lib/active_record/counter_cache.rb +123 -0
  80. data/lib/active_record/dynamic_finder_match.rb +41 -14
  81. data/lib/active_record/dynamic_matchers.rb +84 -0
  82. data/lib/active_record/dynamic_scope_match.rb +13 -15
  83. data/lib/active_record/errors.rb +195 -0
  84. data/lib/active_record/explain.rb +86 -0
  85. data/lib/active_record/explain_subscriber.rb +25 -0
  86. data/lib/active_record/fixtures/file.rb +65 -0
  87. data/lib/active_record/fixtures.rb +695 -770
  88. data/lib/active_record/identity_map.rb +162 -0
  89. data/lib/active_record/inheritance.rb +174 -0
  90. data/lib/active_record/integration.rb +60 -0
  91. data/lib/active_record/locale/en.yml +9 -27
  92. data/lib/active_record/locking/optimistic.rb +76 -73
  93. data/lib/active_record/locking/pessimistic.rb +32 -10
  94. data/lib/active_record/log_subscriber.rb +72 -0
  95. data/lib/active_record/migration/command_recorder.rb +105 -0
  96. data/lib/active_record/migration.rb +415 -205
  97. data/lib/active_record/model_schema.rb +368 -0
  98. data/lib/active_record/nested_attributes.rb +153 -63
  99. data/lib/active_record/observer.rb +27 -103
  100. data/lib/active_record/persistence.rb +376 -0
  101. data/lib/active_record/query_cache.rb +49 -8
  102. data/lib/active_record/querying.rb +58 -0
  103. data/lib/active_record/railtie.rb +131 -0
  104. data/lib/active_record/railties/console_sandbox.rb +6 -0
  105. data/lib/active_record/railties/controller_runtime.rb +49 -0
  106. data/lib/active_record/railties/databases.rake +659 -0
  107. data/lib/active_record/railties/jdbcmysql_error.rb +16 -0
  108. data/lib/active_record/readonly_attributes.rb +26 -0
  109. data/lib/active_record/reflection.rb +269 -120
  110. data/lib/active_record/relation/batches.rb +90 -0
  111. data/lib/active_record/relation/calculations.rb +372 -0
  112. data/lib/active_record/relation/delegation.rb +49 -0
  113. data/lib/active_record/relation/finder_methods.rb +402 -0
  114. data/lib/active_record/relation/predicate_builder.rb +63 -0
  115. data/lib/active_record/relation/query_methods.rb +417 -0
  116. data/lib/active_record/relation/spawn_methods.rb +180 -0
  117. data/lib/active_record/relation.rb +537 -0
  118. data/lib/active_record/result.rb +40 -0
  119. data/lib/active_record/sanitization.rb +194 -0
  120. data/lib/active_record/schema.rb +9 -6
  121. data/lib/active_record/schema_dumper.rb +55 -32
  122. data/lib/active_record/scoping/default.rb +142 -0
  123. data/lib/active_record/scoping/named.rb +200 -0
  124. data/lib/active_record/scoping.rb +152 -0
  125. data/lib/active_record/serialization.rb +8 -91
  126. data/lib/active_record/serializers/xml_serializer.rb +43 -197
  127. data/lib/active_record/session_store.rb +129 -103
  128. data/lib/active_record/store.rb +52 -0
  129. data/lib/active_record/test_case.rb +30 -23
  130. data/lib/active_record/timestamp.rb +95 -52
  131. data/lib/active_record/transactions.rb +212 -66
  132. data/lib/active_record/translation.rb +22 -0
  133. data/lib/active_record/validations/associated.rb +43 -0
  134. data/lib/active_record/validations/uniqueness.rb +180 -0
  135. data/lib/active_record/validations.rb +43 -1106
  136. data/lib/active_record/version.rb +5 -4
  137. data/lib/active_record.rb +121 -48
  138. data/lib/rails/generators/active_record/migration/migration_generator.rb +25 -0
  139. data/lib/rails/generators/active_record/migration/templates/migration.rb +34 -0
  140. data/lib/rails/generators/active_record/migration.rb +15 -0
  141. data/lib/rails/generators/active_record/model/model_generator.rb +47 -0
  142. data/lib/rails/generators/active_record/model/templates/migration.rb +15 -0
  143. data/lib/rails/generators/active_record/model/templates/model.rb +12 -0
  144. data/lib/rails/generators/active_record/model/templates/module.rb +7 -0
  145. data/lib/rails/generators/active_record/observer/observer_generator.rb +15 -0
  146. data/lib/rails/generators/active_record/observer/templates/observer.rb +4 -0
  147. data/lib/rails/generators/active_record/session_migration/session_migration_generator.rb +25 -0
  148. data/lib/rails/generators/active_record/session_migration/templates/migration.rb +12 -0
  149. data/lib/rails/generators/active_record.rb +25 -0
  150. metadata +187 -363
  151. data/CHANGELOG +0 -5904
  152. data/README +0 -351
  153. data/RUNNING_UNIT_TESTS +0 -36
  154. data/Rakefile +0 -268
  155. data/install.rb +0 -30
  156. data/lib/active_record/association_preload.rb +0 -406
  157. data/lib/active_record/associations/association_collection.rb +0 -533
  158. data/lib/active_record/associations/association_proxy.rb +0 -288
  159. data/lib/active_record/batches.rb +0 -85
  160. data/lib/active_record/calculations.rb +0 -321
  161. data/lib/active_record/dirty.rb +0 -183
  162. data/lib/active_record/named_scope.rb +0 -197
  163. data/lib/active_record/serializers/json_serializer.rb +0 -91
  164. data/lib/activerecord.rb +0 -2
  165. data/test/assets/example.log +0 -1
  166. data/test/assets/flowers.jpg +0 -0
  167. data/test/cases/aaa_create_tables_test.rb +0 -24
  168. data/test/cases/active_schema_test_mysql.rb +0 -122
  169. data/test/cases/active_schema_test_postgresql.rb +0 -24
  170. data/test/cases/adapter_test.rb +0 -144
  171. data/test/cases/aggregations_test.rb +0 -167
  172. data/test/cases/ar_schema_test.rb +0 -32
  173. data/test/cases/associations/belongs_to_associations_test.rb +0 -438
  174. data/test/cases/associations/callbacks_test.rb +0 -161
  175. data/test/cases/associations/cascaded_eager_loading_test.rb +0 -131
  176. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +0 -36
  177. data/test/cases/associations/eager_load_nested_include_test.rb +0 -131
  178. data/test/cases/associations/eager_load_nested_polymorphic_include.rb +0 -19
  179. data/test/cases/associations/eager_singularization_test.rb +0 -145
  180. data/test/cases/associations/eager_test.rb +0 -852
  181. data/test/cases/associations/extension_test.rb +0 -62
  182. data/test/cases/associations/habtm_join_table_test.rb +0 -56
  183. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +0 -827
  184. data/test/cases/associations/has_many_associations_test.rb +0 -1273
  185. data/test/cases/associations/has_many_through_associations_test.rb +0 -360
  186. data/test/cases/associations/has_one_associations_test.rb +0 -330
  187. data/test/cases/associations/has_one_through_associations_test.rb +0 -209
  188. data/test/cases/associations/inner_join_association_test.rb +0 -93
  189. data/test/cases/associations/inverse_associations_test.rb +0 -566
  190. data/test/cases/associations/join_model_test.rb +0 -712
  191. data/test/cases/associations_test.rb +0 -282
  192. data/test/cases/attribute_methods_test.rb +0 -305
  193. data/test/cases/autosave_association_test.rb +0 -1218
  194. data/test/cases/base_test.rb +0 -2166
  195. data/test/cases/batches_test.rb +0 -81
  196. data/test/cases/binary_test.rb +0 -30
  197. data/test/cases/calculations_test.rb +0 -360
  198. data/test/cases/callbacks_observers_test.rb +0 -38
  199. data/test/cases/callbacks_test.rb +0 -438
  200. data/test/cases/class_inheritable_attributes_test.rb +0 -32
  201. data/test/cases/column_alias_test.rb +0 -17
  202. data/test/cases/column_definition_test.rb +0 -70
  203. data/test/cases/connection_pool_test.rb +0 -25
  204. data/test/cases/connection_test_firebird.rb +0 -8
  205. data/test/cases/connection_test_mysql.rb +0 -65
  206. data/test/cases/copy_table_test_sqlite.rb +0 -80
  207. data/test/cases/counter_cache_test.rb +0 -84
  208. data/test/cases/database_statements_test.rb +0 -12
  209. data/test/cases/datatype_test_postgresql.rb +0 -204
  210. data/test/cases/date_time_test.rb +0 -37
  211. data/test/cases/default_test_firebird.rb +0 -16
  212. data/test/cases/defaults_test.rb +0 -111
  213. data/test/cases/deprecated_finder_test.rb +0 -30
  214. data/test/cases/dirty_test.rb +0 -316
  215. data/test/cases/finder_respond_to_test.rb +0 -76
  216. data/test/cases/finder_test.rb +0 -1098
  217. data/test/cases/fixtures_test.rb +0 -661
  218. data/test/cases/helper.rb +0 -68
  219. data/test/cases/i18n_test.rb +0 -46
  220. data/test/cases/inheritance_test.rb +0 -262
  221. data/test/cases/invalid_date_test.rb +0 -24
  222. data/test/cases/json_serialization_test.rb +0 -219
  223. data/test/cases/lifecycle_test.rb +0 -193
  224. data/test/cases/locking_test.rb +0 -350
  225. data/test/cases/method_scoping_test.rb +0 -704
  226. data/test/cases/migration_test.rb +0 -1649
  227. data/test/cases/migration_test_firebird.rb +0 -124
  228. data/test/cases/mixin_test.rb +0 -96
  229. data/test/cases/modules_test.rb +0 -109
  230. data/test/cases/multiple_db_test.rb +0 -85
  231. data/test/cases/named_scope_test.rb +0 -372
  232. data/test/cases/nested_attributes_test.rb +0 -840
  233. data/test/cases/pk_test.rb +0 -119
  234. data/test/cases/pooled_connections_test.rb +0 -103
  235. data/test/cases/query_cache_test.rb +0 -129
  236. data/test/cases/readonly_test.rb +0 -107
  237. data/test/cases/reflection_test.rb +0 -234
  238. data/test/cases/reload_models_test.rb +0 -22
  239. data/test/cases/repair_helper.rb +0 -50
  240. data/test/cases/reserved_word_test_mysql.rb +0 -176
  241. data/test/cases/sanitize_test.rb +0 -25
  242. data/test/cases/schema_authorization_test_postgresql.rb +0 -75
  243. data/test/cases/schema_dumper_test.rb +0 -211
  244. data/test/cases/schema_test_postgresql.rb +0 -178
  245. data/test/cases/serialization_test.rb +0 -47
  246. data/test/cases/sp_test_mysql.rb +0 -16
  247. data/test/cases/synonym_test_oracle.rb +0 -17
  248. data/test/cases/timestamp_test.rb +0 -75
  249. data/test/cases/transactions_test.rb +0 -543
  250. data/test/cases/unconnected_test.rb +0 -32
  251. data/test/cases/validations_i18n_test.rb +0 -925
  252. data/test/cases/validations_test.rb +0 -1684
  253. data/test/cases/xml_serialization_test.rb +0 -240
  254. data/test/cases/yaml_serialization_test.rb +0 -11
  255. data/test/config.rb +0 -5
  256. data/test/connections/jdbc_jdbcderby/connection.rb +0 -18
  257. data/test/connections/jdbc_jdbch2/connection.rb +0 -18
  258. data/test/connections/jdbc_jdbchsqldb/connection.rb +0 -18
  259. data/test/connections/jdbc_jdbcmysql/connection.rb +0 -26
  260. data/test/connections/jdbc_jdbcpostgresql/connection.rb +0 -26
  261. data/test/connections/jdbc_jdbcsqlite3/connection.rb +0 -25
  262. data/test/connections/native_db2/connection.rb +0 -25
  263. data/test/connections/native_firebird/connection.rb +0 -26
  264. data/test/connections/native_frontbase/connection.rb +0 -27
  265. data/test/connections/native_mysql/connection.rb +0 -25
  266. data/test/connections/native_openbase/connection.rb +0 -21
  267. data/test/connections/native_oracle/connection.rb +0 -27
  268. data/test/connections/native_postgresql/connection.rb +0 -21
  269. data/test/connections/native_sqlite/connection.rb +0 -25
  270. data/test/connections/native_sqlite3/connection.rb +0 -25
  271. data/test/connections/native_sqlite3/in_memory_connection.rb +0 -18
  272. data/test/connections/native_sybase/connection.rb +0 -23
  273. data/test/fixtures/accounts.yml +0 -29
  274. data/test/fixtures/all/developers.yml +0 -0
  275. data/test/fixtures/all/people.csv +0 -0
  276. data/test/fixtures/all/tasks.yml +0 -0
  277. data/test/fixtures/author_addresses.yml +0 -5
  278. data/test/fixtures/author_favorites.yml +0 -4
  279. data/test/fixtures/authors.yml +0 -9
  280. data/test/fixtures/binaries.yml +0 -132
  281. data/test/fixtures/books.yml +0 -7
  282. data/test/fixtures/categories/special_categories.yml +0 -9
  283. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +0 -4
  284. data/test/fixtures/categories.yml +0 -14
  285. data/test/fixtures/categories_ordered.yml +0 -7
  286. data/test/fixtures/categories_posts.yml +0 -23
  287. data/test/fixtures/categorizations.yml +0 -17
  288. data/test/fixtures/clubs.yml +0 -6
  289. data/test/fixtures/comments.yml +0 -59
  290. data/test/fixtures/companies.yml +0 -56
  291. data/test/fixtures/computers.yml +0 -4
  292. data/test/fixtures/courses.yml +0 -7
  293. data/test/fixtures/customers.yml +0 -26
  294. data/test/fixtures/developers.yml +0 -21
  295. data/test/fixtures/developers_projects.yml +0 -17
  296. data/test/fixtures/edges.yml +0 -6
  297. data/test/fixtures/entrants.yml +0 -14
  298. data/test/fixtures/faces.yml +0 -11
  299. data/test/fixtures/fk_test_has_fk.yml +0 -3
  300. data/test/fixtures/fk_test_has_pk.yml +0 -2
  301. data/test/fixtures/funny_jokes.yml +0 -10
  302. data/test/fixtures/interests.yml +0 -33
  303. data/test/fixtures/items.yml +0 -4
  304. data/test/fixtures/jobs.yml +0 -7
  305. data/test/fixtures/legacy_things.yml +0 -3
  306. data/test/fixtures/mateys.yml +0 -4
  307. data/test/fixtures/member_types.yml +0 -6
  308. data/test/fixtures/members.yml +0 -6
  309. data/test/fixtures/memberships.yml +0 -20
  310. data/test/fixtures/men.yml +0 -5
  311. data/test/fixtures/minimalistics.yml +0 -2
  312. data/test/fixtures/mixed_case_monkeys.yml +0 -6
  313. data/test/fixtures/mixins.yml +0 -29
  314. data/test/fixtures/movies.yml +0 -7
  315. data/test/fixtures/naked/csv/accounts.csv +0 -1
  316. data/test/fixtures/naked/yml/accounts.yml +0 -1
  317. data/test/fixtures/naked/yml/companies.yml +0 -1
  318. data/test/fixtures/naked/yml/courses.yml +0 -1
  319. data/test/fixtures/organizations.yml +0 -5
  320. data/test/fixtures/owners.yml +0 -7
  321. data/test/fixtures/parrots.yml +0 -27
  322. data/test/fixtures/parrots_pirates.yml +0 -7
  323. data/test/fixtures/people.yml +0 -15
  324. data/test/fixtures/pets.yml +0 -14
  325. data/test/fixtures/pirates.yml +0 -9
  326. data/test/fixtures/polymorphic_designs.yml +0 -19
  327. data/test/fixtures/polymorphic_prices.yml +0 -19
  328. data/test/fixtures/posts.yml +0 -52
  329. data/test/fixtures/price_estimates.yml +0 -7
  330. data/test/fixtures/projects.yml +0 -7
  331. data/test/fixtures/readers.yml +0 -9
  332. data/test/fixtures/references.yml +0 -17
  333. data/test/fixtures/reserved_words/distinct.yml +0 -5
  334. data/test/fixtures/reserved_words/distincts_selects.yml +0 -11
  335. data/test/fixtures/reserved_words/group.yml +0 -14
  336. data/test/fixtures/reserved_words/select.yml +0 -8
  337. data/test/fixtures/reserved_words/values.yml +0 -7
  338. data/test/fixtures/ships.yml +0 -5
  339. data/test/fixtures/sponsors.yml +0 -9
  340. data/test/fixtures/subscribers.yml +0 -7
  341. data/test/fixtures/subscriptions.yml +0 -12
  342. data/test/fixtures/taggings.yml +0 -28
  343. data/test/fixtures/tags.yml +0 -7
  344. data/test/fixtures/tasks.yml +0 -7
  345. data/test/fixtures/tees.yml +0 -4
  346. data/test/fixtures/ties.yml +0 -4
  347. data/test/fixtures/topics.yml +0 -42
  348. data/test/fixtures/toys.yml +0 -4
  349. data/test/fixtures/treasures.yml +0 -10
  350. data/test/fixtures/vertices.yml +0 -4
  351. data/test/fixtures/warehouse-things.yml +0 -3
  352. data/test/fixtures/zines.yml +0 -5
  353. data/test/migrations/broken/100_migration_that_raises_exception.rb +0 -10
  354. data/test/migrations/decimal/1_give_me_big_numbers.rb +0 -15
  355. data/test/migrations/duplicate/1_people_have_last_names.rb +0 -9
  356. data/test/migrations/duplicate/2_we_need_reminders.rb +0 -12
  357. data/test/migrations/duplicate/3_foo.rb +0 -7
  358. data/test/migrations/duplicate/3_innocent_jointable.rb +0 -12
  359. data/test/migrations/duplicate_names/20080507052938_chunky.rb +0 -7
  360. data/test/migrations/duplicate_names/20080507053028_chunky.rb +0 -7
  361. data/test/migrations/interleaved/pass_1/3_innocent_jointable.rb +0 -12
  362. data/test/migrations/interleaved/pass_2/1_people_have_last_names.rb +0 -9
  363. data/test/migrations/interleaved/pass_2/3_innocent_jointable.rb +0 -12
  364. data/test/migrations/interleaved/pass_3/1_people_have_last_names.rb +0 -9
  365. data/test/migrations/interleaved/pass_3/2_i_raise_on_down.rb +0 -8
  366. data/test/migrations/interleaved/pass_3/3_innocent_jointable.rb +0 -12
  367. data/test/migrations/missing/1000_people_have_middle_names.rb +0 -9
  368. data/test/migrations/missing/1_people_have_last_names.rb +0 -9
  369. data/test/migrations/missing/3_we_need_reminders.rb +0 -12
  370. data/test/migrations/missing/4_innocent_jointable.rb +0 -12
  371. data/test/migrations/valid/1_people_have_last_names.rb +0 -9
  372. data/test/migrations/valid/2_we_need_reminders.rb +0 -12
  373. data/test/migrations/valid/3_innocent_jointable.rb +0 -12
  374. data/test/models/author.rb +0 -151
  375. data/test/models/auto_id.rb +0 -4
  376. data/test/models/binary.rb +0 -2
  377. data/test/models/bird.rb +0 -9
  378. data/test/models/book.rb +0 -4
  379. data/test/models/categorization.rb +0 -5
  380. data/test/models/category.rb +0 -34
  381. data/test/models/citation.rb +0 -6
  382. data/test/models/club.rb +0 -13
  383. data/test/models/column_name.rb +0 -3
  384. data/test/models/comment.rb +0 -29
  385. data/test/models/company.rb +0 -173
  386. data/test/models/company_in_module.rb +0 -78
  387. data/test/models/computer.rb +0 -3
  388. data/test/models/contact.rb +0 -16
  389. data/test/models/contract.rb +0 -5
  390. data/test/models/course.rb +0 -3
  391. data/test/models/customer.rb +0 -73
  392. data/test/models/default.rb +0 -2
  393. data/test/models/developer.rb +0 -101
  394. data/test/models/edge.rb +0 -5
  395. data/test/models/entrant.rb +0 -3
  396. data/test/models/essay.rb +0 -3
  397. data/test/models/event.rb +0 -3
  398. data/test/models/event_author.rb +0 -8
  399. data/test/models/face.rb +0 -7
  400. data/test/models/guid.rb +0 -2
  401. data/test/models/interest.rb +0 -5
  402. data/test/models/invoice.rb +0 -4
  403. data/test/models/item.rb +0 -7
  404. data/test/models/job.rb +0 -5
  405. data/test/models/joke.rb +0 -3
  406. data/test/models/keyboard.rb +0 -3
  407. data/test/models/legacy_thing.rb +0 -3
  408. data/test/models/line_item.rb +0 -3
  409. data/test/models/man.rb +0 -9
  410. data/test/models/matey.rb +0 -4
  411. data/test/models/member.rb +0 -12
  412. data/test/models/member_detail.rb +0 -5
  413. data/test/models/member_type.rb +0 -3
  414. data/test/models/membership.rb +0 -9
  415. data/test/models/minimalistic.rb +0 -2
  416. data/test/models/mixed_case_monkey.rb +0 -3
  417. data/test/models/movie.rb +0 -5
  418. data/test/models/order.rb +0 -4
  419. data/test/models/organization.rb +0 -6
  420. data/test/models/owner.rb +0 -5
  421. data/test/models/parrot.rb +0 -22
  422. data/test/models/person.rb +0 -16
  423. data/test/models/pet.rb +0 -5
  424. data/test/models/pirate.rb +0 -80
  425. data/test/models/polymorphic_design.rb +0 -3
  426. data/test/models/polymorphic_price.rb +0 -3
  427. data/test/models/post.rb +0 -102
  428. data/test/models/price_estimate.rb +0 -3
  429. data/test/models/project.rb +0 -30
  430. data/test/models/reader.rb +0 -4
  431. data/test/models/reference.rb +0 -4
  432. data/test/models/reply.rb +0 -46
  433. data/test/models/ship.rb +0 -19
  434. data/test/models/ship_part.rb +0 -7
  435. data/test/models/sponsor.rb +0 -4
  436. data/test/models/subject.rb +0 -4
  437. data/test/models/subscriber.rb +0 -8
  438. data/test/models/subscription.rb +0 -4
  439. data/test/models/tag.rb +0 -7
  440. data/test/models/tagging.rb +0 -10
  441. data/test/models/task.rb +0 -3
  442. data/test/models/tee.rb +0 -4
  443. data/test/models/tie.rb +0 -4
  444. data/test/models/topic.rb +0 -80
  445. data/test/models/toy.rb +0 -6
  446. data/test/models/treasure.rb +0 -8
  447. data/test/models/vertex.rb +0 -9
  448. data/test/models/warehouse_thing.rb +0 -5
  449. data/test/models/zine.rb +0 -3
  450. data/test/schema/mysql_specific_schema.rb +0 -31
  451. data/test/schema/postgresql_specific_schema.rb +0 -114
  452. data/test/schema/schema.rb +0 -550
  453. data/test/schema/schema2.rb +0 -6
  454. data/test/schema/sqlite_specific_schema.rb +0 -25
@@ -1,566 +0,0 @@
1
- require "cases/helper"
2
- require 'models/man'
3
- require 'models/face'
4
- require 'models/interest'
5
- require 'models/zine'
6
- require 'models/club'
7
- require 'models/sponsor'
8
-
9
- class InverseAssociationTests < ActiveRecord::TestCase
10
- def test_should_allow_for_inverse_of_options_in_associations
11
- assert_nothing_raised(ArgumentError, 'ActiveRecord should allow the inverse_of options on has_many') do
12
- Class.new(ActiveRecord::Base).has_many(:wheels, :inverse_of => :car)
13
- end
14
-
15
- assert_nothing_raised(ArgumentError, 'ActiveRecord should allow the inverse_of options on has_one') do
16
- Class.new(ActiveRecord::Base).has_one(:engine, :inverse_of => :car)
17
- end
18
-
19
- assert_nothing_raised(ArgumentError, 'ActiveRecord should allow the inverse_of options on belongs_to') do
20
- Class.new(ActiveRecord::Base).belongs_to(:car, :inverse_of => :driver)
21
- end
22
- end
23
-
24
- def test_should_be_able_to_ask_a_reflection_if_it_has_an_inverse
25
- has_one_with_inverse_ref = Man.reflect_on_association(:face)
26
- assert has_one_with_inverse_ref.respond_to?(:has_inverse?)
27
- assert has_one_with_inverse_ref.has_inverse?
28
-
29
- has_many_with_inverse_ref = Man.reflect_on_association(:interests)
30
- assert has_many_with_inverse_ref.respond_to?(:has_inverse?)
31
- assert has_many_with_inverse_ref.has_inverse?
32
-
33
- belongs_to_with_inverse_ref = Face.reflect_on_association(:man)
34
- assert belongs_to_with_inverse_ref.respond_to?(:has_inverse?)
35
- assert belongs_to_with_inverse_ref.has_inverse?
36
-
37
- has_one_without_inverse_ref = Club.reflect_on_association(:sponsor)
38
- assert has_one_without_inverse_ref.respond_to?(:has_inverse?)
39
- assert !has_one_without_inverse_ref.has_inverse?
40
-
41
- has_many_without_inverse_ref = Club.reflect_on_association(:memberships)
42
- assert has_many_without_inverse_ref.respond_to?(:has_inverse?)
43
- assert !has_many_without_inverse_ref.has_inverse?
44
-
45
- belongs_to_without_inverse_ref = Sponsor.reflect_on_association(:sponsor_club)
46
- assert belongs_to_without_inverse_ref.respond_to?(:has_inverse?)
47
- assert !belongs_to_without_inverse_ref.has_inverse?
48
- end
49
-
50
- def test_should_be_able_to_ask_a_reflection_what_it_is_the_inverse_of
51
- has_one_ref = Man.reflect_on_association(:face)
52
- assert has_one_ref.respond_to?(:inverse_of)
53
-
54
- has_many_ref = Man.reflect_on_association(:interests)
55
- assert has_many_ref.respond_to?(:inverse_of)
56
-
57
- belongs_to_ref = Face.reflect_on_association(:man)
58
- assert belongs_to_ref.respond_to?(:inverse_of)
59
- end
60
-
61
- def test_inverse_of_method_should_supply_the_actual_reflection_instance_it_is_the_inverse_of
62
- has_one_ref = Man.reflect_on_association(:face)
63
- assert_equal Face.reflect_on_association(:man), has_one_ref.inverse_of
64
-
65
- has_many_ref = Man.reflect_on_association(:interests)
66
- assert_equal Interest.reflect_on_association(:man), has_many_ref.inverse_of
67
-
68
- belongs_to_ref = Face.reflect_on_association(:man)
69
- assert_equal Man.reflect_on_association(:face), belongs_to_ref.inverse_of
70
- end
71
-
72
- def test_associations_with_no_inverse_of_should_return_nil
73
- has_one_ref = Club.reflect_on_association(:sponsor)
74
- assert_nil has_one_ref.inverse_of
75
-
76
- has_many_ref = Club.reflect_on_association(:memberships)
77
- assert_nil has_many_ref.inverse_of
78
-
79
- belongs_to_ref = Sponsor.reflect_on_association(:sponsor_club)
80
- assert_nil belongs_to_ref.inverse_of
81
- end
82
- end
83
-
84
- class InverseHasOneTests < ActiveRecord::TestCase
85
- fixtures :men, :faces
86
-
87
- def test_parent_instance_should_be_shared_with_child_on_find
88
- m = men(:gordon)
89
- f = m.face
90
- assert_equal m.name, f.man.name, "Name of man should be the same before changes to parent instance"
91
- m.name = 'Bongo'
92
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to parent instance"
93
- f.man.name = 'Mungo'
94
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to child-owned instance"
95
- end
96
-
97
- def test_parent_instance_should_be_shared_with_eager_loaded_child_on_find
98
- m = Man.find(:first, :conditions => {:name => 'Gordon'}, :include => :face)
99
- f = m.face
100
- assert_equal m.name, f.man.name, "Name of man should be the same before changes to parent instance"
101
- m.name = 'Bongo'
102
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to parent instance"
103
- f.man.name = 'Mungo'
104
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to child-owned instance"
105
-
106
- m = Man.find(:first, :conditions => {:name => 'Gordon'}, :include => :face, :order => 'faces.id')
107
- f = m.face
108
- assert_equal m.name, f.man.name, "Name of man should be the same before changes to parent instance"
109
- m.name = 'Bongo'
110
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to parent instance"
111
- f.man.name = 'Mungo'
112
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to child-owned instance"
113
- end
114
-
115
- def test_parent_instance_should_be_shared_with_newly_built_child
116
- m = men(:gordon)
117
- f = m.build_face(:description => 'haunted')
118
- assert_not_nil f.man
119
- assert_equal m.name, f.man.name, "Name of man should be the same before changes to parent instance"
120
- m.name = 'Bongo'
121
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to parent instance"
122
- f.man.name = 'Mungo'
123
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to just-built-child-owned instance"
124
- end
125
-
126
- def test_parent_instance_should_be_shared_with_newly_created_child
127
- m = men(:gordon)
128
- f = m.create_face(:description => 'haunted')
129
- assert_not_nil f.man
130
- assert_equal m.name, f.man.name, "Name of man should be the same before changes to parent instance"
131
- m.name = 'Bongo'
132
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to parent instance"
133
- f.man.name = 'Mungo'
134
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to newly-created-child-owned instance"
135
- end
136
-
137
- def test_parent_instance_should_be_shared_with_newly_created_child_via_bang_method
138
- m = Man.find(:first)
139
- f = m.face.create!(:description => 'haunted')
140
- assert_not_nil f.man
141
- assert_equal m.name, f.man.name, "Name of man should be the same before changes to parent instance"
142
- m.name = 'Bongo'
143
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to parent instance"
144
- f.man.name = 'Mungo'
145
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to newly-created-child-owned instance"
146
- end
147
-
148
- def test_parent_instance_should_be_shared_with_newly_built_child_when_we_dont_replace_existing
149
- m = Man.find(:first)
150
- f = m.build_face({:description => 'haunted'}, false)
151
- assert_not_nil f.man
152
- assert_equal m.name, f.man.name, "Name of man should be the same before changes to parent instance"
153
- m.name = 'Bongo'
154
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to parent instance"
155
- f.man.name = 'Mungo'
156
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to just-built-child-owned instance"
157
- end
158
-
159
- def test_parent_instance_should_be_shared_with_newly_created_child_when_we_dont_replace_existing
160
- m = Man.find(:first)
161
- f = m.create_face({:description => 'haunted'}, false)
162
- assert_not_nil f.man
163
- assert_equal m.name, f.man.name, "Name of man should be the same before changes to parent instance"
164
- m.name = 'Bongo'
165
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to parent instance"
166
- f.man.name = 'Mungo'
167
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to newly-created-child-owned instance"
168
- end
169
-
170
- def test_parent_instance_should_be_shared_with_newly_created_child_via_bang_method_when_we_dont_replace_existing
171
- m = Man.find(:first)
172
- f = m.face.create!({:description => 'haunted'}, false)
173
- assert_not_nil f.man
174
- assert_equal m.name, f.man.name, "Name of man should be the same before changes to parent instance"
175
- m.name = 'Bongo'
176
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to parent instance"
177
- f.man.name = 'Mungo'
178
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to newly-created-child-owned instance"
179
- end
180
-
181
- def test_parent_instance_should_be_shared_with_replaced_via_accessor_child
182
- m = Man.find(:first)
183
- f = Face.new(:description => 'haunted')
184
- m.face = f
185
- assert_not_nil f.man
186
- assert_equal m.name, f.man.name, "Name of man should be the same before changes to parent instance"
187
- m.name = 'Bongo'
188
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to parent instance"
189
- f.man.name = 'Mungo'
190
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to replaced-child-owned instance"
191
- end
192
-
193
- def test_parent_instance_should_be_shared_with_replaced_via_method_child
194
- m = Man.find(:first)
195
- f = Face.new(:description => 'haunted')
196
- m.face.replace(f)
197
- assert_not_nil f.man
198
- assert_equal m.name, f.man.name, "Name of man should be the same before changes to parent instance"
199
- m.name = 'Bongo'
200
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to parent instance"
201
- f.man.name = 'Mungo'
202
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to replaced-child-owned instance"
203
- end
204
-
205
- def test_parent_instance_should_be_shared_with_replaced_via_method_child_when_we_dont_replace_existing
206
- m = Man.find(:first)
207
- f = Face.new(:description => 'haunted')
208
- m.face.replace(f, false)
209
- assert_not_nil f.man
210
- assert_equal m.name, f.man.name, "Name of man should be the same before changes to parent instance"
211
- m.name = 'Bongo'
212
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to parent instance"
213
- f.man.name = 'Mungo'
214
- assert_equal m.name, f.man.name, "Name of man should be the same after changes to replaced-child-owned instance"
215
- end
216
-
217
- def test_trying_to_use_inverses_that_dont_exist_should_raise_an_error
218
- assert_raise(ActiveRecord::InverseOfAssociationNotFoundError) { Man.find(:first).dirty_face }
219
- end
220
- end
221
-
222
- class InverseHasManyTests < ActiveRecord::TestCase
223
- fixtures :men, :interests
224
-
225
- def test_parent_instance_should_be_shared_with_every_child_on_find
226
- m = men(:gordon)
227
- is = m.interests
228
- is.each do |i|
229
- assert_equal m.name, i.man.name, "Name of man should be the same before changes to parent instance"
230
- m.name = 'Bongo'
231
- assert_equal m.name, i.man.name, "Name of man should be the same after changes to parent instance"
232
- i.man.name = 'Mungo'
233
- assert_equal m.name, i.man.name, "Name of man should be the same after changes to child-owned instance"
234
- end
235
- end
236
-
237
- def test_parent_instance_should_be_shared_with_eager_loaded_children
238
- m = Man.find(:first, :conditions => {:name => 'Gordon'}, :include => :interests)
239
- is = m.interests
240
- is.each do |i|
241
- assert_equal m.name, i.man.name, "Name of man should be the same before changes to parent instance"
242
- m.name = 'Bongo'
243
- assert_equal m.name, i.man.name, "Name of man should be the same after changes to parent instance"
244
- i.man.name = 'Mungo'
245
- assert_equal m.name, i.man.name, "Name of man should be the same after changes to child-owned instance"
246
- end
247
-
248
- m = Man.find(:first, :conditions => {:name => 'Gordon'}, :include => :interests, :order => 'interests.id')
249
- is = m.interests
250
- is.each do |i|
251
- assert_equal m.name, i.man.name, "Name of man should be the same before changes to parent instance"
252
- m.name = 'Bongo'
253
- assert_equal m.name, i.man.name, "Name of man should be the same after changes to parent instance"
254
- i.man.name = 'Mungo'
255
- assert_equal m.name, i.man.name, "Name of man should be the same after changes to child-owned instance"
256
- end
257
- end
258
-
259
- def test_parent_instance_should_be_shared_with_newly_built_child
260
- m = men(:gordon)
261
- i = m.interests.build(:topic => 'Industrial Revolution Re-enactment')
262
- assert_not_nil i.man
263
- assert_equal m.name, i.man.name, "Name of man should be the same before changes to parent instance"
264
- m.name = 'Bongo'
265
- assert_equal m.name, i.man.name, "Name of man should be the same after changes to parent instance"
266
- i.man.name = 'Mungo'
267
- assert_equal m.name, i.man.name, "Name of man should be the same after changes to just-built-child-owned instance"
268
- end
269
-
270
- def test_parent_instance_should_be_shared_with_newly_block_style_built_child
271
- m = Man.find(:first)
272
- i = m.interests.build {|ii| ii.topic = 'Industrial Revolution Re-enactment'}
273
- assert_not_nil i.topic, "Child attributes supplied to build via blocks should be populated"
274
- assert_not_nil i.man
275
- assert_equal m.name, i.man.name, "Name of man should be the same before changes to parent instance"
276
- m.name = 'Bongo'
277
- assert_equal m.name, i.man.name, "Name of man should be the same after changes to parent instance"
278
- i.man.name = 'Mungo'
279
- assert_equal m.name, i.man.name, "Name of man should be the same after changes to just-built-child-owned instance"
280
- end
281
-
282
- def test_parent_instance_should_be_shared_with_newly_created_child
283
- m = men(:gordon)
284
- i = m.interests.create(:topic => 'Industrial Revolution Re-enactment')
285
- assert_not_nil i.man
286
- assert_equal m.name, i.man.name, "Name of man should be the same before changes to parent instance"
287
- m.name = 'Bongo'
288
- assert_equal m.name, i.man.name, "Name of man should be the same after changes to parent instance"
289
- i.man.name = 'Mungo'
290
- assert_equal m.name, i.man.name, "Name of man should be the same after changes to newly-created-child-owned instance"
291
- end
292
-
293
- def test_parent_instance_should_be_shared_with_newly_created_via_bang_method_child
294
- m = Man.find(:first)
295
- i = m.interests.create!(:topic => 'Industrial Revolution Re-enactment')
296
- assert_not_nil i.man
297
- assert_equal m.name, i.man.name, "Name of man should be the same before changes to parent instance"
298
- m.name = 'Bongo'
299
- assert_equal m.name, i.man.name, "Name of man should be the same after changes to parent instance"
300
- i.man.name = 'Mungo'
301
- assert_equal m.name, i.man.name, "Name of man should be the same after changes to newly-created-child-owned instance"
302
- end
303
-
304
- def test_parent_instance_should_be_shared_with_newly_block_style_created_child
305
- m = Man.find(:first)
306
- i = m.interests.create {|ii| ii.topic = 'Industrial Revolution Re-enactment'}
307
- assert_not_nil i.topic, "Child attributes supplied to create via blocks should be populated"
308
- assert_not_nil i.man
309
- assert_equal m.name, i.man.name, "Name of man should be the same before changes to parent instance"
310
- m.name = 'Bongo'
311
- assert_equal m.name, i.man.name, "Name of man should be the same after changes to parent instance"
312
- i.man.name = 'Mungo'
313
- assert_equal m.name, i.man.name, "Name of man should be the same after changes to newly-created-child-owned instance"
314
- end
315
-
316
- def test_parent_instance_should_be_shared_with_poked_in_child
317
- m = men(:gordon)
318
- i = Interest.create(:topic => 'Industrial Revolution Re-enactment')
319
- m.interests << i
320
- assert_not_nil i.man
321
- assert_equal m.name, i.man.name, "Name of man should be the same before changes to parent instance"
322
- m.name = 'Bongo'
323
- assert_equal m.name, i.man.name, "Name of man should be the same after changes to parent instance"
324
- i.man.name = 'Mungo'
325
- assert_equal m.name, i.man.name, "Name of man should be the same after changes to newly-created-child-owned instance"
326
- end
327
-
328
- def test_parent_instance_should_be_shared_with_replaced_via_accessor_children
329
- m = Man.find(:first)
330
- i = Interest.new(:topic => 'Industrial Revolution Re-enactment')
331
- m.interests = [i]
332
- assert_not_nil i.man
333
- assert_equal m.name, i.man.name, "Name of man should be the same before changes to parent instance"
334
- m.name = 'Bongo'
335
- assert_equal m.name, i.man.name, "Name of man should be the same after changes to parent instance"
336
- i.man.name = 'Mungo'
337
- assert_equal m.name, i.man.name, "Name of man should be the same after changes to replaced-child-owned instance"
338
- end
339
-
340
- def test_parent_instance_should_be_shared_with_replaced_via_method_children
341
- m = Man.find(:first)
342
- i = Interest.new(:topic => 'Industrial Revolution Re-enactment')
343
- m.interests.replace([i])
344
- assert_not_nil i.man
345
- assert_equal m.name, i.man.name, "Name of man should be the same before changes to parent instance"
346
- m.name = 'Bongo'
347
- assert_equal m.name, i.man.name, "Name of man should be the same after changes to parent instance"
348
- i.man.name = 'Mungo'
349
- assert_equal m.name, i.man.name, "Name of man should be the same after changes to replaced-child-owned instance"
350
- end
351
-
352
- def test_trying_to_use_inverses_that_dont_exist_should_raise_an_error
353
- assert_raise(ActiveRecord::InverseOfAssociationNotFoundError) { Man.find(:first).secret_interests }
354
- end
355
- end
356
-
357
- class InverseBelongsToTests < ActiveRecord::TestCase
358
- fixtures :men, :faces, :interests
359
-
360
- def test_child_instance_should_be_shared_with_parent_on_find
361
- f = faces(:trusting)
362
- m = f.man
363
- assert_equal f.description, m.face.description, "Description of face should be the same before changes to child instance"
364
- f.description = 'gormless'
365
- assert_equal f.description, m.face.description, "Description of face should be the same after changes to child instance"
366
- m.face.description = 'pleasing'
367
- assert_equal f.description, m.face.description, "Description of face should be the same after changes to parent-owned instance"
368
- end
369
-
370
- def test_eager_loaded_child_instance_should_be_shared_with_parent_on_find
371
- f = Face.find(:first, :include => :man, :conditions => {:description => 'trusting'})
372
- m = f.man
373
- assert_equal f.description, m.face.description, "Description of face should be the same before changes to child instance"
374
- f.description = 'gormless'
375
- assert_equal f.description, m.face.description, "Description of face should be the same after changes to child instance"
376
- m.face.description = 'pleasing'
377
- assert_equal f.description, m.face.description, "Description of face should be the same after changes to parent-owned instance"
378
-
379
- f = Face.find(:first, :include => :man, :order => 'men.id', :conditions => {:description => 'trusting'})
380
- m = f.man
381
- assert_equal f.description, m.face.description, "Description of face should be the same before changes to child instance"
382
- f.description = 'gormless'
383
- assert_equal f.description, m.face.description, "Description of face should be the same after changes to child instance"
384
- m.face.description = 'pleasing'
385
- assert_equal f.description, m.face.description, "Description of face should be the same after changes to parent-owned instance"
386
- end
387
-
388
- def test_child_instance_should_be_shared_with_newly_built_parent
389
- f = faces(:trusting)
390
- m = f.build_man(:name => 'Charles')
391
- assert_not_nil m.face
392
- assert_equal f.description, m.face.description, "Description of face should be the same before changes to child instance"
393
- f.description = 'gormless'
394
- assert_equal f.description, m.face.description, "Description of face should be the same after changes to child instance"
395
- m.face.description = 'pleasing'
396
- assert_equal f.description, m.face.description, "Description of face should be the same after changes to just-built-parent-owned instance"
397
- end
398
-
399
- def test_child_instance_should_be_shared_with_newly_created_parent
400
- f = faces(:trusting)
401
- m = f.create_man(:name => 'Charles')
402
- assert_not_nil m.face
403
- assert_equal f.description, m.face.description, "Description of face should be the same before changes to child instance"
404
- f.description = 'gormless'
405
- assert_equal f.description, m.face.description, "Description of face should be the same after changes to child instance"
406
- m.face.description = 'pleasing'
407
- assert_equal f.description, m.face.description, "Description of face should be the same after changes to newly-created-parent-owned instance"
408
- end
409
-
410
- def test_should_not_try_to_set_inverse_instances_when_the_inverse_is_a_has_many
411
- i = interests(:trainspotting)
412
- m = i.man
413
- assert_not_nil m.interests
414
- iz = m.interests.detect {|iz| iz.id == i.id}
415
- assert_not_nil iz
416
- assert_equal i.topic, iz.topic, "Interest topics should be the same before changes to child"
417
- i.topic = 'Eating cheese with a spoon'
418
- assert_not_equal i.topic, iz.topic, "Interest topics should not be the same after changes to child"
419
- iz.topic = 'Cow tipping'
420
- assert_not_equal i.topic, iz.topic, "Interest topics should not be the same after changes to parent-owned instance"
421
- end
422
-
423
- def test_child_instance_should_be_shared_with_replaced_via_accessor_parent
424
- f = Face.find(:first)
425
- m = Man.new(:name => 'Charles')
426
- f.man = m
427
- assert_not_nil m.face
428
- assert_equal f.description, m.face.description, "Description of face should be the same before changes to child instance"
429
- f.description = 'gormless'
430
- assert_equal f.description, m.face.description, "Description of face should be the same after changes to child instance"
431
- m.face.description = 'pleasing'
432
- assert_equal f.description, m.face.description, "Description of face should be the same after changes to replaced-parent-owned instance"
433
- end
434
-
435
- def test_child_instance_should_be_shared_with_replaced_via_method_parent
436
- f = faces(:trusting)
437
- assert_not_nil f.man
438
- m = Man.new(:name => 'Charles')
439
- f.man.replace(m)
440
- assert_not_nil m.face
441
- assert_equal f.description, m.face.description, "Description of face should be the same before changes to child instance"
442
- f.description = 'gormless'
443
- assert_equal f.description, m.face.description, "Description of face should be the same after changes to child instance"
444
- m.face.description = 'pleasing'
445
- assert_equal f.description, m.face.description, "Description of face should be the same after changes to replaced-parent-owned instance"
446
- end
447
-
448
- def test_trying_to_use_inverses_that_dont_exist_should_raise_an_error
449
- assert_raise(ActiveRecord::InverseOfAssociationNotFoundError) { Face.find(:first).horrible_man }
450
- end
451
- end
452
-
453
- class InversePolymorphicBelongsToTests < ActiveRecord::TestCase
454
- fixtures :men, :faces, :interests
455
-
456
- def test_child_instance_should_be_shared_with_parent_on_find
457
- f = Face.find(:first, :conditions => {:description => 'confused'})
458
- m = f.polymorphic_man
459
- assert_equal f.description, m.polymorphic_face.description, "Description of face should be the same before changes to child instance"
460
- f.description = 'gormless'
461
- assert_equal f.description, m.polymorphic_face.description, "Description of face should be the same after changes to child instance"
462
- m.polymorphic_face.description = 'pleasing'
463
- assert_equal f.description, m.polymorphic_face.description, "Description of face should be the same after changes to parent-owned instance"
464
- end
465
-
466
- def test_eager_loaded_child_instance_should_be_shared_with_parent_on_find
467
- f = Face.find(:first, :conditions => {:description => 'confused'}, :include => :man)
468
- m = f.polymorphic_man
469
- assert_equal f.description, m.polymorphic_face.description, "Description of face should be the same before changes to child instance"
470
- f.description = 'gormless'
471
- assert_equal f.description, m.polymorphic_face.description, "Description of face should be the same after changes to child instance"
472
- m.polymorphic_face.description = 'pleasing'
473
- assert_equal f.description, m.polymorphic_face.description, "Description of face should be the same after changes to parent-owned instance"
474
-
475
- f = Face.find(:first, :conditions => {:description => 'confused'}, :include => :man, :order => 'men.id')
476
- m = f.polymorphic_man
477
- assert_equal f.description, m.polymorphic_face.description, "Description of face should be the same before changes to child instance"
478
- f.description = 'gormless'
479
- assert_equal f.description, m.polymorphic_face.description, "Description of face should be the same after changes to child instance"
480
- m.polymorphic_face.description = 'pleasing'
481
- assert_equal f.description, m.polymorphic_face.description, "Description of face should be the same after changes to parent-owned instance"
482
- end
483
-
484
- def test_child_instance_should_be_shared_with_replaced_via_accessor_parent
485
- face = faces(:confused)
486
- old_man = face.polymorphic_man
487
- new_man = Man.new
488
-
489
- assert_not_nil face.polymorphic_man
490
- face.polymorphic_man = new_man
491
-
492
- assert_equal face.description, new_man.polymorphic_face.description, "Description of face should be the same before changes to parent instance"
493
- face.description = 'Bongo'
494
- assert_equal face.description, new_man.polymorphic_face.description, "Description of face should be the same after changes to parent instance"
495
- new_man.polymorphic_face.description = 'Mungo'
496
- assert_equal face.description, new_man.polymorphic_face.description, "Description of face should be the same after changes to replaced-parent-owned instance"
497
- end
498
-
499
- def test_child_instance_should_be_shared_with_replaced_via_method_parent
500
- face = faces(:confused)
501
- old_man = face.polymorphic_man
502
- new_man = Man.new
503
-
504
- assert_not_nil face.polymorphic_man
505
- face.polymorphic_man.replace(new_man)
506
-
507
- assert_equal face.description, new_man.polymorphic_face.description, "Description of face should be the same before changes to parent instance"
508
- face.description = 'Bongo'
509
- assert_equal face.description, new_man.polymorphic_face.description, "Description of face should be the same after changes to parent instance"
510
- new_man.polymorphic_face.description = 'Mungo'
511
- assert_equal face.description, new_man.polymorphic_face.description, "Description of face should be the same after changes to replaced-parent-owned instance"
512
- end
513
-
514
- def test_should_not_try_to_set_inverse_instances_when_the_inverse_is_a_has_many
515
- i = interests(:llama_wrangling)
516
- m = i.polymorphic_man
517
- assert_not_nil m.polymorphic_interests
518
- iz = m.polymorphic_interests.detect {|iz| iz.id == i.id}
519
- assert_not_nil iz
520
- assert_equal i.topic, iz.topic, "Interest topics should be the same before changes to child"
521
- i.topic = 'Eating cheese with a spoon'
522
- assert_not_equal i.topic, iz.topic, "Interest topics should not be the same after changes to child"
523
- iz.topic = 'Cow tipping'
524
- assert_not_equal i.topic, iz.topic, "Interest topics should not be the same after changes to parent-owned instance"
525
- end
526
-
527
- def test_trying_to_access_inverses_that_dont_exist_shouldnt_raise_an_error
528
- # Ideally this would, if only for symmetry's sake with other association types
529
- assert_nothing_raised(ActiveRecord::InverseOfAssociationNotFoundError) { Face.find(:first).horrible_polymorphic_man }
530
- end
531
-
532
- def test_trying_to_set_polymorphic_inverses_that_dont_exist_at_all_should_raise_an_error
533
- # fails because no class has the correct inverse_of for horrible_polymorphic_man
534
- assert_raise(ActiveRecord::InverseOfAssociationNotFoundError) { Face.find(:first).horrible_polymorphic_man = Man.first }
535
- end
536
-
537
- def test_trying_to_set_polymorphic_inverses_that_dont_exist_on_the_instance_being_set_should_raise_an_error
538
- # passes because Man does have the correct inverse_of
539
- assert_nothing_raised(ActiveRecord::InverseOfAssociationNotFoundError) { Face.find(:first).polymorphic_man = Man.first }
540
- # fails because Interest does have the correct inverse_of
541
- assert_raise(ActiveRecord::InverseOfAssociationNotFoundError) { Face.find(:first).polymorphic_man = Interest.first }
542
- end
543
- end
544
-
545
- # NOTE - these tests might not be meaningful, ripped as they were from the parental_control plugin
546
- # which would guess the inverse rather than look for an explicit configuration option.
547
- class InverseMultipleHasManyInversesForSameModel < ActiveRecord::TestCase
548
- fixtures :men, :interests, :zines
549
-
550
- def test_that_we_can_load_associations_that_have_the_same_reciprocal_name_from_different_models
551
- assert_nothing_raised(ActiveRecord::AssociationTypeMismatch) do
552
- i = Interest.find(:first)
553
- z = i.zine
554
- m = i.man
555
- end
556
- end
557
-
558
- def test_that_we_can_create_associations_that_have_the_same_reciprocal_name_from_different_models
559
- assert_nothing_raised(ActiveRecord::AssociationTypeMismatch) do
560
- i = Interest.find(:first)
561
- i.build_zine(:title => 'Get Some in Winter! 2008')
562
- i.build_man(:name => 'Gordon')
563
- i.save!
564
- end
565
- end
566
- end