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,131 +0,0 @@
1
- require "cases/helper"
2
- require 'models/post'
3
- require 'models/comment'
4
- require 'models/author'
5
- require 'models/category'
6
- require 'models/categorization'
7
- require 'models/company'
8
- require 'models/topic'
9
- require 'models/reply'
10
-
11
- class CascadedEagerLoadingTest < ActiveRecord::TestCase
12
- fixtures :authors, :mixins, :companies, :posts, :topics, :accounts, :comments, :categorizations
13
-
14
- def test_eager_association_loading_with_cascaded_two_levels
15
- authors = Author.find(:all, :include=>{:posts=>:comments}, :order=>"authors.id")
16
- assert_equal 2, authors.size
17
- assert_equal 5, authors[0].posts.size
18
- assert_equal 1, authors[1].posts.size
19
- assert_equal 9, authors[0].posts.collect{|post| post.comments.size }.inject(0){|sum,i| sum+i}
20
- end
21
-
22
- def test_eager_association_loading_with_cascaded_two_levels_and_one_level
23
- authors = Author.find(:all, :include=>[{:posts=>:comments}, :categorizations], :order=>"authors.id")
24
- assert_equal 2, authors.size
25
- assert_equal 5, authors[0].posts.size
26
- assert_equal 1, authors[1].posts.size
27
- assert_equal 9, authors[0].posts.collect{|post| post.comments.size }.inject(0){|sum,i| sum+i}
28
- assert_equal 1, authors[0].categorizations.size
29
- assert_equal 2, authors[1].categorizations.size
30
- end
31
-
32
- def test_eager_association_loading_with_cascaded_two_levels_with_two_has_many_associations
33
- authors = Author.find(:all, :include=>{:posts=>[:comments, :categorizations]}, :order=>"authors.id")
34
- assert_equal 2, authors.size
35
- assert_equal 5, authors[0].posts.size
36
- assert_equal 1, authors[1].posts.size
37
- assert_equal 9, authors[0].posts.collect{|post| post.comments.size }.inject(0){|sum,i| sum+i}
38
- end
39
-
40
- def test_eager_association_loading_with_cascaded_two_levels_and_self_table_reference
41
- authors = Author.find(:all, :include=>{:posts=>[:comments, :author]}, :order=>"authors.id")
42
- assert_equal 2, authors.size
43
- assert_equal 5, authors[0].posts.size
44
- assert_equal authors(:david).name, authors[0].name
45
- assert_equal [authors(:david).name], authors[0].posts.collect{|post| post.author.name}.uniq
46
- end
47
-
48
- def test_eager_association_loading_with_cascaded_two_levels_with_condition
49
- authors = Author.find(:all, :include=>{:posts=>:comments}, :conditions=>"authors.id=1", :order=>"authors.id")
50
- assert_equal 1, authors.size
51
- assert_equal 5, authors[0].posts.size
52
- end
53
-
54
- def test_eager_association_loading_with_cascaded_three_levels_by_ping_pong
55
- firms = Firm.find(:all, :include=>{:account=>{:firm=>:account}}, :order=>"companies.id")
56
- assert_equal 2, firms.size
57
- assert_equal firms.first.account, firms.first.account.firm.account
58
- assert_equal companies(:first_firm).account, assert_no_queries { firms.first.account.firm.account }
59
- assert_equal companies(:first_firm).account.firm.account, assert_no_queries { firms.first.account.firm.account }
60
- end
61
-
62
- def test_eager_association_loading_with_has_many_sti
63
- topics = Topic.find(:all, :include => :replies, :order => 'topics.id')
64
- first, second, = topics(:first).replies.size, topics(:second).replies.size
65
- assert_no_queries do
66
- assert_equal first, topics[0].replies.size
67
- assert_equal second, topics[1].replies.size
68
- end
69
- end
70
-
71
- def test_eager_association_loading_with_has_many_sti_and_subclasses
72
- silly = SillyReply.new(:title => "gaga", :content => "boo-boo", :parent_id => 1)
73
- silly.parent_id = 1
74
- assert silly.save
75
-
76
- topics = Topic.find(:all, :include => :replies, :order => 'topics.id, replies_topics.id')
77
- assert_no_queries do
78
- assert_equal 2, topics[0].replies.size
79
- assert_equal 0, topics[1].replies.size
80
- end
81
- end
82
-
83
- def test_eager_association_loading_with_belongs_to_sti
84
- replies = Reply.find(:all, :include => :topic, :order => 'topics.id')
85
- assert replies.include?(topics(:second))
86
- assert !replies.include?(topics(:first))
87
- assert_equal topics(:first), assert_no_queries { replies.first.topic }
88
- end
89
-
90
- def test_eager_association_loading_with_multiple_stis_and_order
91
- author = Author.find(:first, :include => { :posts => [ :special_comments , :very_special_comment ] }, :order => 'authors.name, comments.body, very_special_comments_posts.body', :conditions => 'posts.id = 4')
92
- assert_equal authors(:david), author
93
- assert_no_queries do
94
- author.posts.first.special_comments
95
- author.posts.first.very_special_comment
96
- end
97
- end
98
-
99
- def test_eager_association_loading_of_stis_with_multiple_references
100
- authors = Author.find(:all, :include => { :posts => { :special_comments => { :post => [ :special_comments, :very_special_comment ] } } }, :order => 'comments.body, very_special_comments_posts.body', :conditions => 'posts.id = 4')
101
- assert_equal [authors(:david)], authors
102
- assert_no_queries do
103
- authors.first.posts.first.special_comments.first.post.special_comments
104
- authors.first.posts.first.special_comments.first.post.very_special_comment
105
- end
106
- end
107
-
108
- def test_eager_association_loading_where_first_level_returns_nil
109
- authors = Author.find(:all, :include => {:post_about_thinking => :comments}, :order => 'authors.id DESC')
110
- assert_equal [authors(:mary), authors(:david)], authors
111
- assert_no_queries do
112
- authors[1].post_about_thinking.comments.first
113
- end
114
- end
115
- end
116
-
117
- require 'models/vertex'
118
- require 'models/edge'
119
- class CascadedEagerLoadingTest < ActiveRecord::TestCase
120
- fixtures :edges, :vertices
121
-
122
- def test_eager_association_loading_with_recursive_cascading_four_levels_has_many_through
123
- source = Vertex.find(:first, :include=>{:sinks=>{:sinks=>{:sinks=>:sinks}}}, :order => 'vertices.id')
124
- assert_equal vertices(:vertex_4), assert_no_queries { source.sinks.first.sinks.first.sinks.first }
125
- end
126
-
127
- def test_eager_association_loading_with_recursive_cascading_four_levels_has_and_belongs_to_many
128
- sink = Vertex.find(:first, :include=>{:sources=>{:sources=>{:sources=>:sources}}}, :order => 'vertices.id DESC')
129
- assert_equal vertices(:vertex_1), assert_no_queries { sink.sources.first.sources.first.sources.first.sources.first }
130
- end
131
- end
@@ -1,36 +0,0 @@
1
- require 'cases/helper'
2
- require 'models/post'
3
- require 'models/tagging'
4
-
5
- module Namespaced
6
- class Post < ActiveRecord::Base
7
- set_table_name 'posts'
8
- has_one :tagging, :as => :taggable, :class_name => 'Tagging'
9
- end
10
- end
11
-
12
- class EagerLoadIncludeFullStiClassNamesTest < ActiveRecord::TestCase
13
-
14
- def setup
15
- generate_test_objects
16
- end
17
-
18
- def generate_test_objects
19
- post = Namespaced::Post.create( :title => 'Great stuff', :body => 'This is not', :author_id => 1 )
20
- tagging = Tagging.create( :taggable => post )
21
- end
22
-
23
- def test_class_names
24
- old = ActiveRecord::Base.store_full_sti_class
25
-
26
- ActiveRecord::Base.store_full_sti_class = false
27
- post = Namespaced::Post.find_by_title( 'Great stuff', :include => :tagging )
28
- assert_nil post.tagging
29
-
30
- ActiveRecord::Base.store_full_sti_class = true
31
- post = Namespaced::Post.find_by_title( 'Great stuff', :include => :tagging )
32
- assert_equal 'Tagging', post.tagging.class.name
33
- ensure
34
- ActiveRecord::Base.store_full_sti_class = old
35
- end
36
- end
@@ -1,131 +0,0 @@
1
- require 'cases/helper'
2
- require 'models/post'
3
- require 'models/author'
4
- require 'models/comment'
5
- require 'models/category'
6
- require 'models/categorization'
7
- require 'active_support/core_ext/array/random_access'
8
-
9
- module Remembered
10
- def self.included(base)
11
- base.extend ClassMethods
12
- base.class_eval do
13
- after_create :remember
14
- protected
15
- def remember; self.class.remembered << self; end
16
- end
17
- end
18
-
19
- module ClassMethods
20
- def remembered; @@remembered ||= []; end
21
- def sample; @@remembered.sample; end
22
- end
23
- end
24
-
25
- class ShapeExpression < ActiveRecord::Base
26
- belongs_to :shape, :polymorphic => true
27
- belongs_to :paint, :polymorphic => true
28
- end
29
-
30
- class Circle < ActiveRecord::Base
31
- has_many :shape_expressions, :as => :shape
32
- include Remembered
33
- end
34
- class Square < ActiveRecord::Base
35
- has_many :shape_expressions, :as => :shape
36
- include Remembered
37
- end
38
- class Triangle < ActiveRecord::Base
39
- has_many :shape_expressions, :as => :shape
40
- include Remembered
41
- end
42
- class PaintColor < ActiveRecord::Base
43
- has_many :shape_expressions, :as => :paint
44
- belongs_to :non_poly, :foreign_key => "non_poly_one_id", :class_name => "NonPolyOne"
45
- include Remembered
46
- end
47
- class PaintTexture < ActiveRecord::Base
48
- has_many :shape_expressions, :as => :paint
49
- belongs_to :non_poly, :foreign_key => "non_poly_two_id", :class_name => "NonPolyTwo"
50
- include Remembered
51
- end
52
- class NonPolyOne < ActiveRecord::Base
53
- has_many :paint_colors
54
- include Remembered
55
- end
56
- class NonPolyTwo < ActiveRecord::Base
57
- has_many :paint_textures
58
- include Remembered
59
- end
60
-
61
-
62
-
63
- class EagerLoadPolyAssocsTest < ActiveRecord::TestCase
64
- NUM_SIMPLE_OBJS = 50
65
- NUM_SHAPE_EXPRESSIONS = 100
66
-
67
- def setup
68
- generate_test_object_graphs
69
- end
70
-
71
- def teardown
72
- [Circle, Square, Triangle, PaintColor, PaintTexture,
73
- ShapeExpression, NonPolyOne, NonPolyTwo].each do |c|
74
- c.delete_all
75
- end
76
-
77
- end
78
-
79
-
80
- def generate_test_object_graphs
81
- 1.upto(NUM_SIMPLE_OBJS) do
82
- [Circle, Square, Triangle, NonPolyOne, NonPolyTwo].map(&:create!)
83
- end
84
- 1.upto(NUM_SIMPLE_OBJS) do
85
- PaintColor.create!(:non_poly_one_id => NonPolyOne.sample.id)
86
- PaintTexture.create!(:non_poly_two_id => NonPolyTwo.sample.id)
87
- end
88
- 1.upto(NUM_SHAPE_EXPRESSIONS) do
89
- shape_type = [Circle, Square, Triangle].sample
90
- paint_type = [PaintColor, PaintTexture].sample
91
- ShapeExpression.create!(:shape_type => shape_type.to_s, :shape_id => shape_type.sample.id,
92
- :paint_type => paint_type.to_s, :paint_id => paint_type.sample.id)
93
- end
94
- end
95
-
96
- def test_include_query
97
- res = 0
98
- res = ShapeExpression.find :all, :include => [ :shape, { :paint => :non_poly } ]
99
- assert_equal NUM_SHAPE_EXPRESSIONS, res.size
100
- assert_queries(0) do
101
- res.each do |se|
102
- assert_not_nil se.paint.non_poly, "this is the association that was loading incorrectly before the change"
103
- assert_not_nil se.shape, "just making sure other associations still work"
104
- end
105
- end
106
- end
107
- end
108
-
109
- class EagerLoadNestedIncludeWithMissingDataTest < ActiveRecord::TestCase
110
- def setup
111
- @davey_mcdave = Author.create(:name => 'Davey McDave')
112
- @first_post = @davey_mcdave.posts.create(:title => 'Davey Speaks', :body => 'Expressive wordage')
113
- @first_comment = @first_post.comments.create(:body => 'Inflamatory doublespeak')
114
- @first_categorization = @davey_mcdave.categorizations.create(:category => Category.first, :post => @first_post)
115
- end
116
-
117
- def teardown
118
- @davey_mcdave.destroy
119
- @first_post.destroy
120
- @first_comment.destroy
121
- @first_categorization.destroy
122
- end
123
-
124
- def test_missing_data_in_a_nested_include_should_not_cause_errors_when_constructing_objects
125
- assert_nothing_raised do
126
- # @davey_mcdave doesn't have any author_favorites
127
- includes = {:posts => :comments, :categorizations => :category, :author_favorites => :favorite_author }
128
- Author.all :include => includes, :conditions => {:authors => {:name => @davey_mcdave.name}}, :order => 'categories.name'
129
- end
130
- end
131
- end
@@ -1,19 +0,0 @@
1
- require 'cases/helper'
2
- require 'models/tee'
3
- require 'models/tie'
4
- require 'models/polymorphic_design'
5
- require 'models/polymorphic_price'
6
-
7
- class EagerLoadNestedPolymorphicIncludeTest < ActiveRecord::TestCase
8
- fixtures :tees, :ties, :polymorphic_designs, :polymorphic_prices
9
-
10
- def test_eager_load_polymorphic_has_one_nested_under_polymorphic_belongs_to
11
- designs = PolymorphicDesign.scoped(:include => {:designable => :polymorphic_price})
12
-
13
- associated_price_ids = designs.map{|design| design.designable.polymorphic_price.id}
14
- expected_price_ids = [1, 2, 3, 4]
15
-
16
- assert expected_price_ids.all?{|expected_id| associated_price_ids.include?(expected_id)},
17
- "Expected associated prices to be #{expected_price_ids.inspect} but they were #{associated_price_ids.sort.inspect}"
18
- end
19
- end
@@ -1,145 +0,0 @@
1
- require "cases/helper"
2
-
3
- class Virus < ActiveRecord::Base
4
- belongs_to :octopus
5
- end
6
- class Octopus < ActiveRecord::Base
7
- has_one :virus
8
- end
9
- class Pass < ActiveRecord::Base
10
- belongs_to :bus
11
- end
12
- class Bus < ActiveRecord::Base
13
- has_many :passes
14
- end
15
- class Mess < ActiveRecord::Base
16
- has_and_belongs_to_many :crises
17
- end
18
- class Crisis < ActiveRecord::Base
19
- has_and_belongs_to_many :messes
20
- has_many :analyses, :dependent => :destroy
21
- has_many :successes, :through => :analyses
22
- has_many :dresses, :dependent => :destroy
23
- has_many :compresses, :through => :dresses
24
- end
25
- class Analysis < ActiveRecord::Base
26
- belongs_to :crisis
27
- belongs_to :success
28
- end
29
- class Success < ActiveRecord::Base
30
- has_many :analyses, :dependent => :destroy
31
- has_many :crises, :through => :analyses
32
- end
33
- class Dress < ActiveRecord::Base
34
- belongs_to :crisis
35
- has_many :compresses
36
- end
37
- class Compress < ActiveRecord::Base
38
- belongs_to :dress
39
- end
40
-
41
-
42
- class EagerSingularizationTest < ActiveRecord::TestCase
43
-
44
- def setup
45
- if ActiveRecord::Base.connection.supports_migrations?
46
- ActiveRecord::Base.connection.create_table :viri do |t|
47
- t.column :octopus_id, :integer
48
- t.column :species, :string
49
- end
50
- ActiveRecord::Base.connection.create_table :octopi do |t|
51
- t.column :species, :string
52
- end
53
- ActiveRecord::Base.connection.create_table :passes do |t|
54
- t.column :bus_id, :integer
55
- t.column :rides, :integer
56
- end
57
- ActiveRecord::Base.connection.create_table :buses do |t|
58
- t.column :name, :string
59
- end
60
- ActiveRecord::Base.connection.create_table :crises_messes, :id => false do |t|
61
- t.column :crisis_id, :integer
62
- t.column :mess_id, :integer
63
- end
64
- ActiveRecord::Base.connection.create_table :messes do |t|
65
- t.column :name, :string
66
- end
67
- ActiveRecord::Base.connection.create_table :crises do |t|
68
- t.column :name, :string
69
- end
70
- ActiveRecord::Base.connection.create_table :successes do |t|
71
- t.column :name, :string
72
- end
73
- ActiveRecord::Base.connection.create_table :analyses do |t|
74
- t.column :crisis_id, :integer
75
- t.column :success_id, :integer
76
- end
77
- ActiveRecord::Base.connection.create_table :dresses do |t|
78
- t.column :crisis_id, :integer
79
- end
80
- ActiveRecord::Base.connection.create_table :compresses do |t|
81
- t.column :dress_id, :integer
82
- end
83
- @have_tables = true
84
- else
85
- @have_tables = false
86
- end
87
- end
88
-
89
- def teardown
90
- ActiveRecord::Base.connection.drop_table :viri
91
- ActiveRecord::Base.connection.drop_table :octopi
92
- ActiveRecord::Base.connection.drop_table :passes
93
- ActiveRecord::Base.connection.drop_table :buses
94
- ActiveRecord::Base.connection.drop_table :crises_messes
95
- ActiveRecord::Base.connection.drop_table :messes
96
- ActiveRecord::Base.connection.drop_table :crises
97
- ActiveRecord::Base.connection.drop_table :successes
98
- ActiveRecord::Base.connection.drop_table :analyses
99
- ActiveRecord::Base.connection.drop_table :dresses
100
- ActiveRecord::Base.connection.drop_table :compresses
101
- end
102
-
103
- def test_eager_no_extra_singularization_belongs_to
104
- return unless @have_tables
105
- assert_nothing_raised do
106
- Virus.find(:all, :include => :octopus)
107
- end
108
- end
109
-
110
- def test_eager_no_extra_singularization_has_one
111
- return unless @have_tables
112
- assert_nothing_raised do
113
- Octopus.find(:all, :include => :virus)
114
- end
115
- end
116
-
117
- def test_eager_no_extra_singularization_has_many
118
- return unless @have_tables
119
- assert_nothing_raised do
120
- Bus.find(:all, :include => :passes)
121
- end
122
- end
123
-
124
- def test_eager_no_extra_singularization_has_and_belongs_to_many
125
- return unless @have_tables
126
- assert_nothing_raised do
127
- Crisis.find(:all, :include => :messes)
128
- Mess.find(:all, :include => :crises)
129
- end
130
- end
131
-
132
- def test_eager_no_extra_singularization_has_many_through_belongs_to
133
- return unless @have_tables
134
- assert_nothing_raised do
135
- Crisis.find(:all, :include => :successes)
136
- end
137
- end
138
-
139
- def test_eager_no_extra_singularization_has_many_through_has_many
140
- return unless @have_tables
141
- assert_nothing_raised do
142
- Crisis.find(:all, :include => :compresses)
143
- end
144
- end
145
- end