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,316 +0,0 @@
1
- require 'cases/helper'
2
- require 'models/topic' # For booleans
3
- require 'models/pirate' # For timestamps
4
- require 'models/parrot'
5
- require 'models/person' # For optimistic locking
6
-
7
- class Pirate # Just reopening it, not defining it
8
- attr_accessor :detected_changes_in_after_update # Boolean for if changes are detected
9
- attr_accessor :changes_detected_in_after_update # Actual changes
10
-
11
- after_update :check_changes
12
-
13
- private
14
- # after_save/update in sweepers, observers, and the model itself
15
- # can end up checking dirty status and acting on the results
16
- def check_changes
17
- if self.changed?
18
- self.detected_changes_in_after_update = true
19
- self.changes_detected_in_after_update = self.changes
20
- end
21
- end
22
- end
23
-
24
- class NumericData < ActiveRecord::Base
25
- self.table_name = 'numeric_data'
26
- end
27
-
28
- class DirtyTest < ActiveRecord::TestCase
29
- def test_attribute_changes
30
- # New record - no changes.
31
- pirate = Pirate.new
32
- assert !pirate.catchphrase_changed?
33
- assert_nil pirate.catchphrase_change
34
-
35
- # Change catchphrase.
36
- pirate.catchphrase = 'arrr'
37
- assert pirate.catchphrase_changed?
38
- assert_nil pirate.catchphrase_was
39
- assert_equal [nil, 'arrr'], pirate.catchphrase_change
40
-
41
- # Saved - no changes.
42
- pirate.save!
43
- assert !pirate.catchphrase_changed?
44
- assert_nil pirate.catchphrase_change
45
-
46
- # Same value - no changes.
47
- pirate.catchphrase = 'arrr'
48
- assert !pirate.catchphrase_changed?
49
- assert_nil pirate.catchphrase_change
50
- end
51
-
52
- def test_aliased_attribute_changes
53
- # the actual attribute here is name, title is an
54
- # alias setup via alias_attribute
55
- parrot = Parrot.new
56
- assert !parrot.title_changed?
57
- assert_nil parrot.title_change
58
-
59
- parrot.name = 'Sam'
60
- assert parrot.title_changed?
61
- assert_nil parrot.title_was
62
- assert_equal parrot.name_change, parrot.title_change
63
- end
64
-
65
- def test_nullable_number_not_marked_as_changed_if_new_value_is_blank
66
- pirate = Pirate.new
67
-
68
- ["", nil].each do |value|
69
- pirate.parrot_id = value
70
- assert !pirate.parrot_id_changed?
71
- assert_nil pirate.parrot_id_change
72
- end
73
- end
74
-
75
- def test_nullable_decimal_not_marked_as_changed_if_new_value_is_blank
76
- numeric_data = NumericData.new
77
-
78
- ["", nil].each do |value|
79
- numeric_data.bank_balance = value
80
- assert !numeric_data.bank_balance_changed?
81
- assert_nil numeric_data.bank_balance_change
82
- end
83
- end
84
-
85
- def test_nullable_float_not_marked_as_changed_if_new_value_is_blank
86
- numeric_data = NumericData.new
87
-
88
- ["", nil].each do |value|
89
- numeric_data.temperature = value
90
- assert !numeric_data.temperature_changed?
91
- assert_nil numeric_data.temperature_change
92
- end
93
- end
94
-
95
- def test_nullable_integer_zero_to_string_zero_not_marked_as_changed
96
- pirate = Pirate.new
97
- pirate.parrot_id = 0
98
- pirate.catchphrase = 'arrr'
99
- assert pirate.save!
100
-
101
- assert !pirate.changed?
102
-
103
- pirate.parrot_id = '0'
104
- assert !pirate.changed?
105
- end
106
-
107
- def test_zero_to_blank_marked_as_changed
108
- pirate = Pirate.new
109
- pirate.catchphrase = "Yarrrr, me hearties"
110
- pirate.parrot_id = 1
111
- pirate.save
112
-
113
- # check the change from 1 to ''
114
- pirate = Pirate.find_by_catchphrase("Yarrrr, me hearties")
115
- pirate.parrot_id = ''
116
- assert pirate.parrot_id_changed?
117
- assert_equal([1, nil], pirate.parrot_id_change)
118
- pirate.save
119
-
120
- # check the change from nil to 0
121
- pirate = Pirate.find_by_catchphrase("Yarrrr, me hearties")
122
- pirate.parrot_id = 0
123
- assert pirate.parrot_id_changed?
124
- assert_equal([nil, 0], pirate.parrot_id_change)
125
- pirate.save
126
-
127
- # check the change from 0 to ''
128
- pirate = Pirate.find_by_catchphrase("Yarrrr, me hearties")
129
- pirate.parrot_id = ''
130
- assert pirate.parrot_id_changed?
131
- assert_equal([0, nil], pirate.parrot_id_change)
132
- end
133
-
134
- def test_object_should_be_changed_if_any_attribute_is_changed
135
- pirate = Pirate.new
136
- assert !pirate.changed?
137
- assert_equal [], pirate.changed
138
- assert_equal Hash.new, pirate.changes
139
-
140
- pirate.catchphrase = 'arrr'
141
- assert pirate.changed?
142
- assert_nil pirate.catchphrase_was
143
- assert_equal %w(catchphrase), pirate.changed
144
- assert_equal({'catchphrase' => [nil, 'arrr']}, pirate.changes)
145
-
146
- pirate.save
147
- assert !pirate.changed?
148
- assert_equal [], pirate.changed
149
- assert_equal Hash.new, pirate.changes
150
- end
151
-
152
- def test_attribute_will_change!
153
- pirate = Pirate.create!(:catchphrase => 'arr')
154
-
155
- pirate.catchphrase << ' matey'
156
- assert !pirate.catchphrase_changed?
157
-
158
- assert pirate.catchphrase_will_change!
159
- assert pirate.catchphrase_changed?
160
- assert_equal ['arr matey', 'arr matey'], pirate.catchphrase_change
161
-
162
- pirate.catchphrase << '!'
163
- assert pirate.catchphrase_changed?
164
- assert_equal ['arr matey', 'arr matey!'], pirate.catchphrase_change
165
- end
166
-
167
- def test_association_assignment_changes_foreign_key
168
- pirate = Pirate.create!(:catchphrase => 'jarl')
169
- pirate.parrot = Parrot.create!(:name => 'Lorre')
170
- assert pirate.changed?
171
- assert_equal %w(parrot_id), pirate.changed
172
- end
173
-
174
- def test_attribute_should_be_compared_with_type_cast
175
- topic = Topic.new
176
- assert topic.approved?
177
- assert !topic.approved_changed?
178
-
179
- # Coming from web form.
180
- params = {:topic => {:approved => 1}}
181
- # In the controller.
182
- topic.attributes = params[:topic]
183
- assert topic.approved?
184
- assert !topic.approved_changed?
185
- end
186
-
187
- def test_partial_update
188
- pirate = Pirate.new(:catchphrase => 'foo')
189
- old_updated_on = 1.hour.ago.beginning_of_day
190
-
191
- with_partial_updates Pirate, false do
192
- assert_queries(2) { 2.times { pirate.save! } }
193
- Pirate.update_all({ :updated_on => old_updated_on }, :id => pirate.id)
194
- end
195
-
196
- with_partial_updates Pirate, true do
197
- assert_queries(0) { 2.times { pirate.save! } }
198
- assert_equal old_updated_on, pirate.reload.updated_on
199
-
200
- assert_queries(1) { pirate.catchphrase = 'bar'; pirate.save! }
201
- assert_not_equal old_updated_on, pirate.reload.updated_on
202
- end
203
- end
204
-
205
- def test_partial_update_with_optimistic_locking
206
- person = Person.new(:first_name => 'foo')
207
- old_lock_version = 1
208
-
209
- with_partial_updates Person, false do
210
- assert_queries(2) { 2.times { person.save! } }
211
- Person.update_all({ :first_name => 'baz' }, :id => person.id)
212
- end
213
-
214
- with_partial_updates Person, true do
215
- assert_queries(0) { 2.times { person.save! } }
216
- assert_equal old_lock_version, person.reload.lock_version
217
-
218
- assert_queries(1) { person.first_name = 'bar'; person.save! }
219
- assert_not_equal old_lock_version, person.reload.lock_version
220
- end
221
- end
222
-
223
- def test_changed_attributes_should_be_preserved_if_save_failure
224
- pirate = Pirate.new
225
- pirate.parrot_id = 1
226
- assert !pirate.save
227
- check_pirate_after_save_failure(pirate)
228
-
229
- pirate = Pirate.new
230
- pirate.parrot_id = 1
231
- assert_raise(ActiveRecord::RecordInvalid) { pirate.save! }
232
- check_pirate_after_save_failure(pirate)
233
- end
234
-
235
- def test_reload_should_clear_changed_attributes
236
- pirate = Pirate.create!(:catchphrase => "shiver me timbers")
237
- pirate.catchphrase = "*hic*"
238
- assert pirate.changed?
239
- pirate.reload
240
- assert !pirate.changed?
241
- end
242
-
243
- def test_reverted_changes_are_not_dirty
244
- phrase = "shiver me timbers"
245
- pirate = Pirate.create!(:catchphrase => phrase)
246
- pirate.catchphrase = "*hic*"
247
- assert pirate.changed?
248
- pirate.catchphrase = phrase
249
- assert !pirate.changed?
250
- end
251
-
252
- def test_reverted_changes_are_not_dirty_after_multiple_changes
253
- phrase = "shiver me timbers"
254
- pirate = Pirate.create!(:catchphrase => phrase)
255
- 10.times do |i|
256
- pirate.catchphrase = "*hic*" * i
257
- assert pirate.changed?
258
- end
259
- assert pirate.changed?
260
- pirate.catchphrase = phrase
261
- assert !pirate.changed?
262
- end
263
-
264
-
265
- def test_reverted_changes_are_not_dirty_going_from_nil_to_value_and_back
266
- pirate = Pirate.create!(:catchphrase => "Yar!")
267
-
268
- pirate.parrot_id = 1
269
- assert pirate.changed?
270
- assert pirate.parrot_id_changed?
271
- assert !pirate.catchphrase_changed?
272
-
273
- pirate.parrot_id = nil
274
- assert !pirate.changed?
275
- assert !pirate.parrot_id_changed?
276
- assert !pirate.catchphrase_changed?
277
- end
278
-
279
- def test_save_should_store_serialized_attributes_even_with_partial_updates
280
- with_partial_updates(Topic) do
281
- topic = Topic.create!(:content => {:a => "a"})
282
- topic.content[:b] = "b"
283
- #assert topic.changed? # Known bug, will fail
284
- topic.save!
285
- assert_equal "b", topic.content[:b]
286
- topic.reload
287
- assert_equal "b", topic.content[:b]
288
- end
289
- end
290
-
291
- def test_save_should_not_save_serialized_attribute_with_partial_updates_if_not_present
292
- with_partial_updates(Topic) do
293
- Topic.create!(:author_name => 'Bill', :content => {:a => "a"})
294
- topic = Topic.first(:select => 'id, author_name')
295
- topic.update_attribute :author_name, 'John'
296
- topic = Topic.first
297
- assert_not_nil topic.content
298
- end
299
- end
300
-
301
- private
302
- def with_partial_updates(klass, on = true)
303
- old = klass.partial_updates?
304
- klass.partial_updates = on
305
- yield
306
- ensure
307
- klass.partial_updates = old
308
- end
309
-
310
- def check_pirate_after_save_failure(pirate)
311
- assert pirate.changed?
312
- assert pirate.parrot_id_changed?
313
- assert_equal %w(parrot_id), pirate.changed
314
- assert_nil pirate.parrot_id_was
315
- end
316
- end
@@ -1,76 +0,0 @@
1
- require "cases/helper"
2
- require 'models/topic'
3
-
4
- class FinderRespondToTest < ActiveRecord::TestCase
5
-
6
- fixtures :topics
7
-
8
- def test_should_preserve_normal_respond_to_behaviour_and_respond_to_newly_added_method
9
- class << Topic; self; end.send(:define_method, :method_added_for_finder_respond_to_test) { }
10
- assert Topic.respond_to?(:method_added_for_finder_respond_to_test)
11
- ensure
12
- class << Topic; self; end.send(:remove_method, :method_added_for_finder_respond_to_test)
13
- end
14
-
15
- def test_should_preserve_normal_respond_to_behaviour_and_respond_to_standard_object_method
16
- assert Topic.respond_to?(:to_s)
17
- end
18
-
19
- def test_should_respond_to_find_by_one_attribute_before_caching
20
- ensure_topic_method_is_not_cached(:find_by_title)
21
- assert Topic.respond_to?(:find_by_title)
22
- end
23
-
24
- def test_should_respond_to_find_all_by_one_attribute
25
- ensure_topic_method_is_not_cached(:find_all_by_title)
26
- assert Topic.respond_to?(:find_all_by_title)
27
- end
28
-
29
- def test_should_respond_to_find_all_by_two_attributes
30
- ensure_topic_method_is_not_cached(:find_all_by_title_and_author_name)
31
- assert Topic.respond_to?(:find_all_by_title_and_author_name)
32
- end
33
-
34
- def test_should_respond_to_find_by_two_attributes
35
- ensure_topic_method_is_not_cached(:find_by_title_and_author_name)
36
- assert Topic.respond_to?(:find_by_title_and_author_name)
37
- end
38
-
39
- def test_should_respond_to_find_or_initialize_from_one_attribute
40
- ensure_topic_method_is_not_cached(:find_or_initialize_by_title)
41
- assert Topic.respond_to?(:find_or_initialize_by_title)
42
- end
43
-
44
- def test_should_respond_to_find_or_initialize_from_two_attributes
45
- ensure_topic_method_is_not_cached(:find_or_initialize_by_title_and_author_name)
46
- assert Topic.respond_to?(:find_or_initialize_by_title_and_author_name)
47
- end
48
-
49
- def test_should_respond_to_find_or_create_from_one_attribute
50
- ensure_topic_method_is_not_cached(:find_or_create_by_title)
51
- assert Topic.respond_to?(:find_or_create_by_title)
52
- end
53
-
54
- def test_should_respond_to_find_or_create_from_two_attributes
55
- ensure_topic_method_is_not_cached(:find_or_create_by_title_and_author_name)
56
- assert Topic.respond_to?(:find_or_create_by_title_and_author_name)
57
- end
58
-
59
- def test_should_not_respond_to_find_by_one_missing_attribute
60
- assert !Topic.respond_to?(:find_by_undertitle)
61
- end
62
-
63
- def test_should_not_respond_to_find_by_invalid_method_syntax
64
- assert !Topic.respond_to?(:fail_to_find_by_title)
65
- assert !Topic.respond_to?(:find_by_title?)
66
- assert !Topic.respond_to?(:fail_to_find_or_create_by_title)
67
- assert !Topic.respond_to?(:find_or_create_by_title?)
68
- end
69
-
70
- private
71
-
72
- def ensure_topic_method_is_not_cached(method_id)
73
- class << Topic; self; end.send(:remove_method, method_id) if Topic.public_methods.any? { |m| m.to_s == method_id.to_s }
74
- end
75
-
76
- end