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,372 +0,0 @@
1
- require "cases/helper"
2
- require 'models/post'
3
- require 'models/topic'
4
- require 'models/comment'
5
- require 'models/reply'
6
- require 'models/author'
7
- require 'models/developer'
8
-
9
- class NamedScopeTest < ActiveRecord::TestCase
10
- fixtures :posts, :authors, :topics, :comments, :author_addresses
11
-
12
- def test_named_scope_with_STI
13
- assert_equal 5,Post.with_type_self.count
14
- assert_equal 1,SpecialPost.with_type_self.count
15
- end
16
-
17
- def test_implements_enumerable
18
- assert !Topic.find(:all).empty?
19
-
20
- assert_equal Topic.find(:all), Topic.base
21
- assert_equal Topic.find(:all), Topic.base.to_a
22
- assert_equal Topic.find(:first), Topic.base.first
23
- assert_equal Topic.find(:all), Topic.base.map { |i| i }
24
- end
25
-
26
- def test_found_items_are_cached
27
- Topic.columns
28
- all_posts = Topic.base
29
-
30
- assert_queries(1) do
31
- all_posts.collect
32
- all_posts.collect
33
- end
34
- end
35
-
36
- def test_reload_expires_cache_of_found_items
37
- all_posts = Topic.base
38
- all_posts.inspect
39
-
40
- new_post = Topic.create!
41
- assert !all_posts.include?(new_post)
42
- assert all_posts.reload.include?(new_post)
43
- end
44
-
45
- def test_delegates_finds_and_calculations_to_the_base_class
46
- assert !Topic.find(:all).empty?
47
-
48
- assert_equal Topic.find(:all), Topic.base.find(:all)
49
- assert_equal Topic.find(:first), Topic.base.find(:first)
50
- assert_equal Topic.count, Topic.base.count
51
- assert_equal Topic.average(:replies_count), Topic.base.average(:replies_count)
52
- end
53
-
54
- def test_scope_should_respond_to_own_methods_and_methods_of_the_proxy
55
- assert Topic.approved.respond_to?(:proxy_found)
56
- assert Topic.approved.respond_to?(:count)
57
- assert Topic.approved.respond_to?(:length)
58
- end
59
-
60
- def test_respond_to_respects_include_private_parameter
61
- assert !Topic.approved.respond_to?(:load_found)
62
- assert Topic.approved.respond_to?(:load_found, true)
63
- end
64
-
65
- def test_subclasses_inherit_scopes
66
- assert Topic.scopes.include?(:base)
67
-
68
- assert Reply.scopes.include?(:base)
69
- assert_equal Reply.find(:all), Reply.base
70
- end
71
-
72
- def test_scopes_with_options_limit_finds_to_those_matching_the_criteria_specified
73
- assert !Topic.find(:all, :conditions => {:approved => true}).empty?
74
-
75
- assert_equal Topic.find(:all, :conditions => {:approved => true}), Topic.approved
76
- assert_equal Topic.count(:conditions => {:approved => true}), Topic.approved.count
77
- end
78
-
79
- def test_scopes_with_string_name_can_be_composed
80
- # NOTE that scopes defined with a string as a name worked on their own
81
- # but when called on another scope the other scope was completely replaced
82
- assert_equal Topic.replied.approved, Topic.replied.approved_as_string
83
- end
84
-
85
- def test_scopes_can_be_specified_with_deep_hash_conditions
86
- assert_equal Topic.replied.approved, Topic.replied.approved_as_hash_condition
87
- end
88
-
89
- def test_scopes_are_composable
90
- assert_equal (approved = Topic.find(:all, :conditions => {:approved => true})), Topic.approved
91
- assert_equal (replied = Topic.find(:all, :conditions => 'replies_count > 0')), Topic.replied
92
- assert !(approved == replied)
93
- assert !(approved & replied).empty?
94
-
95
- assert_equal approved & replied, Topic.approved.replied
96
- end
97
-
98
- def test_procedural_scopes
99
- topics_written_before_the_third = Topic.find(:all, :conditions => ['written_on < ?', topics(:third).written_on])
100
- topics_written_before_the_second = Topic.find(:all, :conditions => ['written_on < ?', topics(:second).written_on])
101
- assert_not_equal topics_written_before_the_second, topics_written_before_the_third
102
-
103
- assert_equal topics_written_before_the_third, Topic.written_before(topics(:third).written_on)
104
- assert_equal topics_written_before_the_second, Topic.written_before(topics(:second).written_on)
105
- end
106
-
107
- def test_procedural_scopes_returning_nil
108
- all_topics = Topic.find(:all)
109
-
110
- assert_equal all_topics, Topic.written_before(nil)
111
- end
112
-
113
- def test_scopes_with_joins
114
- address = author_addresses(:david_address)
115
- posts_with_authors_at_address = Post.find(
116
- :all, :joins => 'JOIN authors ON authors.id = posts.author_id',
117
- :conditions => [ 'authors.author_address_id = ?', address.id ]
118
- )
119
- assert_equal posts_with_authors_at_address, Post.with_authors_at_address(address)
120
- end
121
-
122
- def test_scopes_with_joins_respects_custom_select
123
- address = author_addresses(:david_address)
124
- posts_with_authors_at_address_titles = Post.find(:all,
125
- :select => 'title',
126
- :joins => 'JOIN authors ON authors.id = posts.author_id',
127
- :conditions => [ 'authors.author_address_id = ?', address.id ]
128
- )
129
- assert_equal posts_with_authors_at_address_titles, Post.with_authors_at_address(address).find(:all, :select => 'title')
130
- end
131
-
132
- def test_extensions
133
- assert_equal 1, Topic.anonymous_extension.one
134
- assert_equal 2, Topic.named_extension.two
135
- end
136
-
137
- def test_multiple_extensions
138
- assert_equal 2, Topic.multiple_extensions.extension_two
139
- assert_equal 1, Topic.multiple_extensions.extension_one
140
- end
141
-
142
- def test_has_many_associations_have_access_to_named_scopes
143
- assert_not_equal Post.containing_the_letter_a, authors(:david).posts
144
- assert !Post.containing_the_letter_a.empty?
145
-
146
- assert_equal authors(:david).posts & Post.containing_the_letter_a, authors(:david).posts.containing_the_letter_a
147
- end
148
-
149
- def test_nested_named_scopes_doesnt_duplicate_conditions_on_child_scopes
150
- comments_scope = posts(:welcome).comments.send(:construct_sql)
151
- named_scope_sql_conditions = posts(:welcome).comments.containing_the_letter_e.send(:current_scoped_methods)[:find][:conditions]
152
- assert_no_match /#{comments_scope}.*#{comments_scope}/i, named_scope_sql_conditions
153
- end
154
-
155
- def test_has_many_through_associations_have_access_to_named_scopes
156
- assert_not_equal Comment.containing_the_letter_e, authors(:david).comments
157
- assert !Comment.containing_the_letter_e.empty?
158
-
159
- assert_equal authors(:david).comments & Comment.containing_the_letter_e, authors(:david).comments.containing_the_letter_e
160
- end
161
-
162
- def test_named_scopes_honor_current_scopes_from_when_defined
163
- assert !Post.ranked_by_comments.limit(5).empty?
164
- assert !authors(:david).posts.ranked_by_comments.limit(5).empty?
165
- assert_not_equal Post.ranked_by_comments.limit(5), authors(:david).posts.ranked_by_comments.limit(5)
166
- assert_not_equal Post.top(5), authors(:david).posts.top(5)
167
- assert_equal authors(:david).posts.ranked_by_comments.limit(5), authors(:david).posts.top(5)
168
- assert_equal Post.ranked_by_comments.limit(5), Post.top(5)
169
- end
170
-
171
- def test_active_records_have_scope_named__all__
172
- assert !Topic.find(:all).empty?
173
-
174
- assert_equal Topic.find(:all), Topic.base
175
- end
176
-
177
- def test_active_records_have_scope_named__scoped__
178
- assert !Topic.find(:all, scope = {:conditions => "content LIKE '%Have%'"}).empty?
179
-
180
- assert_equal Topic.find(:all, scope), Topic.scoped(scope)
181
- end
182
-
183
- def test_proxy_options
184
- expected_proxy_options = { :conditions => { :approved => true } }
185
- assert_equal expected_proxy_options, Topic.approved.proxy_options
186
- end
187
-
188
- def test_first_and_last_should_support_find_options
189
- assert_equal Topic.base.first(:order => 'title'), Topic.base.find(:first, :order => 'title')
190
- assert_equal Topic.base.last(:order => 'title'), Topic.base.find(:last, :order => 'title')
191
- end
192
-
193
- def test_first_and_last_should_allow_integers_for_limit
194
- assert_equal Topic.base.first(2), Topic.base.to_a.first(2)
195
- assert_equal Topic.base.last(2), Topic.base.to_a.last(2)
196
- end
197
-
198
- def test_first_and_last_should_not_use_query_when_results_are_loaded
199
- topics = Topic.base
200
- topics.reload # force load
201
- assert_no_queries do
202
- topics.first
203
- topics.last
204
- end
205
- end
206
-
207
- def test_first_and_last_find_options_should_use_query_when_results_are_loaded
208
- topics = Topic.base
209
- topics.reload # force load
210
- assert_queries(2) do
211
- topics.first(:order => 'title')
212
- topics.last(:order => 'title')
213
- end
214
- end
215
-
216
- def test_empty_should_not_load_results
217
- topics = Topic.base
218
- assert_queries(2) do
219
- topics.empty? # use count query
220
- topics.collect # force load
221
- topics.empty? # use loaded (no query)
222
- end
223
- end
224
-
225
- def test_any_should_not_load_results
226
- topics = Topic.base
227
- assert_queries(2) do
228
- topics.any? # use count query
229
- topics.collect # force load
230
- topics.any? # use loaded (no query)
231
- end
232
- end
233
-
234
- def test_any_should_call_proxy_found_if_using_a_block
235
- topics = Topic.base
236
- assert_queries(1) do
237
- topics.expects(:empty?).never
238
- topics.any? { true }
239
- end
240
- end
241
-
242
- def test_any_should_not_fire_query_if_named_scope_loaded
243
- topics = Topic.base
244
- topics.collect # force load
245
- assert_no_queries { assert topics.any? }
246
- end
247
-
248
- def test_should_build_with_proxy_options
249
- topic = Topic.approved.build({})
250
- assert topic.approved
251
- end
252
-
253
- def test_should_build_new_with_proxy_options
254
- topic = Topic.approved.new
255
- assert topic.approved
256
- end
257
-
258
- def test_should_create_with_proxy_options
259
- topic = Topic.approved.create({})
260
- assert topic.approved
261
- end
262
-
263
- def test_should_create_with_bang_with_proxy_options
264
- topic = Topic.approved.create!({})
265
- assert topic.approved
266
- end
267
-
268
- def test_should_build_with_proxy_options_chained
269
- topic = Topic.approved.by_lifo.build({})
270
- assert topic.approved
271
- assert_equal 'lifo', topic.author_name
272
- end
273
-
274
- def test_find_all_should_behave_like_select
275
- assert_equal Topic.base.select(&:approved), Topic.base.find_all(&:approved)
276
- end
277
-
278
- def test_rand_should_select_a_random_object_from_proxy
279
- assert Topic.approved.sample.is_a?(Topic)
280
- end
281
-
282
- def test_should_use_where_in_query_for_named_scope
283
- assert_equal Developer.find_all_by_name('Jamis').to_set, Developer.find_all_by_id(Developer.jamises).to_set
284
- end
285
-
286
- def test_size_should_use_count_when_results_are_not_loaded
287
- topics = Topic.base
288
- assert_queries(1) do
289
- assert_sql(/COUNT/i) { topics.size }
290
- end
291
- end
292
-
293
- def test_size_should_use_length_when_results_are_loaded
294
- topics = Topic.base
295
- topics.reload # force load
296
- assert_no_queries do
297
- topics.size # use loaded (no query)
298
- end
299
- end
300
-
301
- def test_chaining_with_duplicate_joins
302
- join = "INNER JOIN comments ON comments.post_id = posts.id"
303
- post = Post.find(1)
304
- assert_equal post.comments.size, Post.scoped(:joins => join).scoped(:joins => join, :conditions => "posts.id = #{post.id}").size
305
- end
306
-
307
- def test_chaining_should_use_latest_conditions_when_creating
308
- post = Topic.rejected.new
309
- assert !post.approved?
310
-
311
- post = Topic.rejected.approved.new
312
- assert post.approved?
313
-
314
- post = Topic.approved.rejected.new
315
- assert !post.approved?
316
-
317
- post = Topic.approved.rejected.approved.new
318
- assert post.approved?
319
- end
320
-
321
- def test_chaining_should_use_latest_conditions_when_searching
322
- # Normal hash conditions
323
- assert_equal Topic.all(:conditions => {:approved => true}), Topic.rejected.approved.all
324
- assert_equal Topic.all(:conditions => {:approved => false}), Topic.approved.rejected.all
325
-
326
- # Nested hash conditions with same keys
327
- assert_equal [posts(:sti_comments)], Post.with_special_comments.with_very_special_comments.all
328
-
329
- # Nested hash conditions with different keys
330
- assert_equal [posts(:sti_comments)], Post.with_special_comments.with_post(4).all.uniq
331
- end
332
-
333
- def test_named_scopes_batch_finders
334
- assert_equal 3, Topic.approved.count
335
-
336
- assert_queries(4) do
337
- Topic.approved.find_each(:batch_size => 1) {|t| assert t.approved? }
338
- end
339
-
340
- assert_queries(2) do
341
- Topic.approved.find_in_batches(:batch_size => 2) do |group|
342
- group.each {|t| assert t.approved? }
343
- end
344
- end
345
- end
346
-
347
- def test_table_names_for_chaining_scopes_with_and_without_table_name_included
348
- assert_nothing_raised do
349
- Comment.for_first_post.for_first_author.all
350
- end
351
- end
352
- end
353
-
354
- class DynamicScopeMatchTest < ActiveRecord::TestCase
355
- def test_scoped_by_no_match
356
- assert_nil ActiveRecord::DynamicScopeMatch.match("not_scoped_at_all")
357
- end
358
-
359
- def test_scoped_by
360
- match = ActiveRecord::DynamicScopeMatch.match("scoped_by_age_and_sex_and_location")
361
- assert_not_nil match
362
- assert match.scope?
363
- assert_equal %w(age sex location), match.attribute_names
364
- end
365
- end
366
-
367
- class DynamicScopeTest < ActiveRecord::TestCase
368
- def test_dynamic_scope
369
- assert_equal Post.scoped_by_author_id(1).find(1), Post.find(1)
370
- assert_equal Post.scoped_by_author_id_and_title(1, "Welcome to the weblog").first, Post.find(:first, :conditions => { :author_id => 1, :title => "Welcome to the weblog"})
371
- end
372
- end