activerecord 2.3.18 → 3.0.0.beta

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 (378) hide show
  1. data/CHANGELOG +105 -34
  2. data/examples/performance.rb +3 -39
  3. data/examples/simple.rb +14 -0
  4. data/lib/active_record.rb +81 -47
  5. data/lib/active_record/aggregations.rb +1 -3
  6. data/lib/active_record/association_preload.rb +39 -54
  7. data/lib/active_record/associations.rb +262 -419
  8. data/lib/active_record/associations/association_collection.rb +85 -100
  9. data/lib/active_record/associations/association_proxy.rb +20 -18
  10. data/lib/active_record/associations/belongs_to_association.rb +8 -8
  11. data/lib/active_record/associations/has_and_belongs_to_many_association.rb +13 -35
  12. data/lib/active_record/associations/has_many_association.rb +11 -19
  13. data/lib/active_record/associations/has_many_through_association.rb +30 -183
  14. data/lib/active_record/associations/has_one_association.rb +10 -10
  15. data/lib/active_record/associations/has_one_through_association.rb +13 -11
  16. data/lib/active_record/associations/through_association_scope.rb +153 -0
  17. data/lib/active_record/attribute_methods.rb +17 -370
  18. data/lib/active_record/attribute_methods/before_type_cast.rb +33 -0
  19. data/lib/active_record/attribute_methods/dirty.rb +87 -0
  20. data/lib/active_record/attribute_methods/primary_key.rb +44 -0
  21. data/lib/active_record/attribute_methods/query.rb +37 -0
  22. data/lib/active_record/attribute_methods/read.rb +116 -0
  23. data/lib/active_record/attribute_methods/time_zone_conversion.rb +60 -0
  24. data/lib/active_record/attribute_methods/write.rb +37 -0
  25. data/lib/active_record/autosave_association.rb +20 -41
  26. data/lib/active_record/base.rb +357 -1180
  27. data/lib/active_record/batches.rb +10 -16
  28. data/lib/active_record/callbacks.rb +66 -126
  29. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +17 -13
  30. data/lib/active_record/connection_adapters/abstract/connection_specification.rb +5 -25
  31. data/lib/active_record/connection_adapters/abstract/database_statements.rb +4 -43
  32. data/lib/active_record/connection_adapters/abstract/query_cache.rb +3 -2
  33. data/lib/active_record/connection_adapters/abstract/quoting.rb +15 -4
  34. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +1 -1
  35. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +18 -72
  36. data/lib/active_record/connection_adapters/abstract_adapter.rb +16 -49
  37. data/lib/active_record/connection_adapters/mysql_adapter.rb +15 -27
  38. data/lib/active_record/connection_adapters/postgresql_adapter.rb +84 -46
  39. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +9 -3
  40. data/lib/active_record/connection_adapters/sqlite_adapter.rb +34 -65
  41. data/lib/active_record/fixtures.rb +21 -25
  42. data/lib/active_record/locale/en.yml +9 -27
  43. data/lib/active_record/locking/optimistic.rb +16 -48
  44. data/lib/active_record/migration.rb +59 -46
  45. data/lib/active_record/named_scope.rb +85 -92
  46. data/lib/active_record/nested_attributes.rb +18 -24
  47. data/lib/active_record/observer.rb +18 -94
  48. data/lib/active_record/railtie.rb +83 -0
  49. data/lib/active_record/railties/controller_runtime.rb +38 -0
  50. data/lib/active_record/railties/databases.rake +477 -0
  51. data/lib/active_record/railties/subscriber.rb +27 -0
  52. data/lib/active_record/reflection.rb +2 -15
  53. data/lib/active_record/relation.rb +339 -0
  54. data/lib/active_record/relation/calculations.rb +259 -0
  55. data/lib/active_record/relation/finder_methods.rb +315 -0
  56. data/lib/active_record/relation/predicate_builder.rb +46 -0
  57. data/lib/active_record/relation/query_methods.rb +218 -0
  58. data/lib/active_record/relation/spawn_methods.rb +102 -0
  59. data/lib/active_record/schema_dumper.rb +10 -6
  60. data/lib/active_record/serialization.rb +31 -74
  61. data/lib/active_record/serializers/xml_serializer.rb +33 -121
  62. data/lib/active_record/session_store.rb +1 -9
  63. data/lib/active_record/test_case.rb +1 -3
  64. data/lib/active_record/timestamp.rb +7 -5
  65. data/lib/active_record/transactions.rb +9 -9
  66. data/lib/active_record/validations.rb +51 -1100
  67. data/lib/active_record/validations/associated.rb +47 -0
  68. data/lib/active_record/validations/uniqueness.rb +181 -0
  69. data/lib/active_record/version.rb +3 -3
  70. data/lib/generators/active_record.rb +30 -0
  71. data/lib/generators/active_record/migration/migration_generator.rb +25 -0
  72. data/lib/generators/active_record/migration/templates/migration.rb +11 -0
  73. data/lib/generators/active_record/model/model_generator.rb +33 -0
  74. data/lib/generators/active_record/model/templates/migration.rb +16 -0
  75. data/lib/generators/active_record/model/templates/model.rb +5 -0
  76. data/lib/generators/active_record/observer/observer_generator.rb +15 -0
  77. data/lib/generators/active_record/observer/templates/observer.rb +2 -0
  78. data/lib/generators/active_record/session_migration/session_migration_generator.rb +24 -0
  79. data/lib/generators/active_record/session_migration/templates/migration.rb +16 -0
  80. metadata +67 -325
  81. data/RUNNING_UNIT_TESTS +0 -36
  82. data/Rakefile +0 -268
  83. data/install.rb +0 -30
  84. data/lib/active_record/calculations.rb +0 -321
  85. data/lib/active_record/connection_adapters/abstract/database_limits.rb +0 -57
  86. data/lib/active_record/dirty.rb +0 -183
  87. data/lib/active_record/serializers/json_serializer.rb +0 -91
  88. data/lib/activerecord.rb +0 -2
  89. data/test/assets/example.log +0 -1
  90. data/test/assets/flowers.jpg +0 -0
  91. data/test/cases/aaa_create_tables_test.rb +0 -24
  92. data/test/cases/active_schema_test_mysql.rb +0 -122
  93. data/test/cases/active_schema_test_postgresql.rb +0 -24
  94. data/test/cases/adapter_test.rb +0 -144
  95. data/test/cases/aggregations_test.rb +0 -167
  96. data/test/cases/ar_schema_test.rb +0 -32
  97. data/test/cases/associations/belongs_to_associations_test.rb +0 -438
  98. data/test/cases/associations/callbacks_test.rb +0 -161
  99. data/test/cases/associations/cascaded_eager_loading_test.rb +0 -131
  100. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +0 -36
  101. data/test/cases/associations/eager_load_nested_include_test.rb +0 -131
  102. data/test/cases/associations/eager_load_nested_polymorphic_include.rb +0 -19
  103. data/test/cases/associations/eager_singularization_test.rb +0 -145
  104. data/test/cases/associations/eager_test.rb +0 -852
  105. data/test/cases/associations/extension_test.rb +0 -62
  106. data/test/cases/associations/habtm_join_table_test.rb +0 -56
  107. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +0 -827
  108. data/test/cases/associations/has_many_associations_test.rb +0 -1273
  109. data/test/cases/associations/has_many_through_associations_test.rb +0 -360
  110. data/test/cases/associations/has_one_associations_test.rb +0 -330
  111. data/test/cases/associations/has_one_through_associations_test.rb +0 -209
  112. data/test/cases/associations/inner_join_association_test.rb +0 -93
  113. data/test/cases/associations/inverse_associations_test.rb +0 -566
  114. data/test/cases/associations/join_model_test.rb +0 -712
  115. data/test/cases/associations_test.rb +0 -282
  116. data/test/cases/attribute_methods_test.rb +0 -305
  117. data/test/cases/autosave_association_test.rb +0 -1218
  118. data/test/cases/base_test.rb +0 -2166
  119. data/test/cases/batches_test.rb +0 -81
  120. data/test/cases/binary_test.rb +0 -30
  121. data/test/cases/calculations_test.rb +0 -360
  122. data/test/cases/callbacks_observers_test.rb +0 -38
  123. data/test/cases/callbacks_test.rb +0 -438
  124. data/test/cases/class_inheritable_attributes_test.rb +0 -32
  125. data/test/cases/column_alias_test.rb +0 -17
  126. data/test/cases/column_definition_test.rb +0 -70
  127. data/test/cases/connection_pool_test.rb +0 -25
  128. data/test/cases/connection_test_firebird.rb +0 -8
  129. data/test/cases/connection_test_mysql.rb +0 -65
  130. data/test/cases/copy_table_test_sqlite.rb +0 -80
  131. data/test/cases/counter_cache_test.rb +0 -84
  132. data/test/cases/database_statements_test.rb +0 -12
  133. data/test/cases/datatype_test_postgresql.rb +0 -204
  134. data/test/cases/date_time_test.rb +0 -37
  135. data/test/cases/default_test_firebird.rb +0 -16
  136. data/test/cases/defaults_test.rb +0 -111
  137. data/test/cases/deprecated_finder_test.rb +0 -30
  138. data/test/cases/dirty_test.rb +0 -316
  139. data/test/cases/finder_respond_to_test.rb +0 -76
  140. data/test/cases/finder_test.rb +0 -1098
  141. data/test/cases/fixtures_test.rb +0 -661
  142. data/test/cases/helper.rb +0 -68
  143. data/test/cases/i18n_test.rb +0 -46
  144. data/test/cases/inheritance_test.rb +0 -262
  145. data/test/cases/invalid_date_test.rb +0 -24
  146. data/test/cases/json_serialization_test.rb +0 -219
  147. data/test/cases/lifecycle_test.rb +0 -193
  148. data/test/cases/locking_test.rb +0 -350
  149. data/test/cases/method_scoping_test.rb +0 -704
  150. data/test/cases/migration_test.rb +0 -1649
  151. data/test/cases/migration_test_firebird.rb +0 -124
  152. data/test/cases/mixin_test.rb +0 -96
  153. data/test/cases/modules_test.rb +0 -109
  154. data/test/cases/multiple_db_test.rb +0 -85
  155. data/test/cases/named_scope_test.rb +0 -372
  156. data/test/cases/nested_attributes_test.rb +0 -840
  157. data/test/cases/pk_test.rb +0 -119
  158. data/test/cases/pooled_connections_test.rb +0 -103
  159. data/test/cases/query_cache_test.rb +0 -129
  160. data/test/cases/readonly_test.rb +0 -107
  161. data/test/cases/reflection_test.rb +0 -234
  162. data/test/cases/reload_models_test.rb +0 -22
  163. data/test/cases/repair_helper.rb +0 -50
  164. data/test/cases/reserved_word_test_mysql.rb +0 -176
  165. data/test/cases/sanitize_test.rb +0 -25
  166. data/test/cases/schema_authorization_test_postgresql.rb +0 -75
  167. data/test/cases/schema_dumper_test.rb +0 -211
  168. data/test/cases/schema_test_postgresql.rb +0 -178
  169. data/test/cases/serialization_test.rb +0 -47
  170. data/test/cases/sp_test_mysql.rb +0 -16
  171. data/test/cases/synonym_test_oracle.rb +0 -17
  172. data/test/cases/timestamp_test.rb +0 -75
  173. data/test/cases/transactions_test.rb +0 -543
  174. data/test/cases/unconnected_test.rb +0 -32
  175. data/test/cases/validations_i18n_test.rb +0 -925
  176. data/test/cases/validations_test.rb +0 -1684
  177. data/test/cases/xml_serialization_test.rb +0 -240
  178. data/test/cases/yaml_serialization_test.rb +0 -11
  179. data/test/config.rb +0 -5
  180. data/test/connections/jdbc_jdbcderby/connection.rb +0 -18
  181. data/test/connections/jdbc_jdbch2/connection.rb +0 -18
  182. data/test/connections/jdbc_jdbchsqldb/connection.rb +0 -18
  183. data/test/connections/jdbc_jdbcmysql/connection.rb +0 -26
  184. data/test/connections/jdbc_jdbcpostgresql/connection.rb +0 -26
  185. data/test/connections/jdbc_jdbcsqlite3/connection.rb +0 -25
  186. data/test/connections/native_db2/connection.rb +0 -25
  187. data/test/connections/native_firebird/connection.rb +0 -26
  188. data/test/connections/native_frontbase/connection.rb +0 -27
  189. data/test/connections/native_mysql/connection.rb +0 -25
  190. data/test/connections/native_openbase/connection.rb +0 -21
  191. data/test/connections/native_oracle/connection.rb +0 -27
  192. data/test/connections/native_postgresql/connection.rb +0 -21
  193. data/test/connections/native_sqlite/connection.rb +0 -25
  194. data/test/connections/native_sqlite3/connection.rb +0 -25
  195. data/test/connections/native_sqlite3/in_memory_connection.rb +0 -18
  196. data/test/connections/native_sybase/connection.rb +0 -23
  197. data/test/fixtures/accounts.yml +0 -29
  198. data/test/fixtures/all/developers.yml +0 -0
  199. data/test/fixtures/all/people.csv +0 -0
  200. data/test/fixtures/all/tasks.yml +0 -0
  201. data/test/fixtures/author_addresses.yml +0 -5
  202. data/test/fixtures/author_favorites.yml +0 -4
  203. data/test/fixtures/authors.yml +0 -9
  204. data/test/fixtures/binaries.yml +0 -132
  205. data/test/fixtures/books.yml +0 -7
  206. data/test/fixtures/categories.yml +0 -14
  207. data/test/fixtures/categories/special_categories.yml +0 -9
  208. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +0 -4
  209. data/test/fixtures/categories_ordered.yml +0 -7
  210. data/test/fixtures/categories_posts.yml +0 -23
  211. data/test/fixtures/categorizations.yml +0 -17
  212. data/test/fixtures/clubs.yml +0 -6
  213. data/test/fixtures/comments.yml +0 -59
  214. data/test/fixtures/companies.yml +0 -56
  215. data/test/fixtures/computers.yml +0 -4
  216. data/test/fixtures/courses.yml +0 -7
  217. data/test/fixtures/customers.yml +0 -26
  218. data/test/fixtures/developers.yml +0 -21
  219. data/test/fixtures/developers_projects.yml +0 -17
  220. data/test/fixtures/edges.yml +0 -6
  221. data/test/fixtures/entrants.yml +0 -14
  222. data/test/fixtures/faces.yml +0 -11
  223. data/test/fixtures/fk_test_has_fk.yml +0 -3
  224. data/test/fixtures/fk_test_has_pk.yml +0 -2
  225. data/test/fixtures/funny_jokes.yml +0 -10
  226. data/test/fixtures/interests.yml +0 -33
  227. data/test/fixtures/items.yml +0 -4
  228. data/test/fixtures/jobs.yml +0 -7
  229. data/test/fixtures/legacy_things.yml +0 -3
  230. data/test/fixtures/mateys.yml +0 -4
  231. data/test/fixtures/member_types.yml +0 -6
  232. data/test/fixtures/members.yml +0 -6
  233. data/test/fixtures/memberships.yml +0 -20
  234. data/test/fixtures/men.yml +0 -5
  235. data/test/fixtures/minimalistics.yml +0 -2
  236. data/test/fixtures/mixed_case_monkeys.yml +0 -6
  237. data/test/fixtures/mixins.yml +0 -29
  238. data/test/fixtures/movies.yml +0 -7
  239. data/test/fixtures/naked/csv/accounts.csv +0 -1
  240. data/test/fixtures/naked/yml/accounts.yml +0 -1
  241. data/test/fixtures/naked/yml/companies.yml +0 -1
  242. data/test/fixtures/naked/yml/courses.yml +0 -1
  243. data/test/fixtures/organizations.yml +0 -5
  244. data/test/fixtures/owners.yml +0 -7
  245. data/test/fixtures/parrots.yml +0 -27
  246. data/test/fixtures/parrots_pirates.yml +0 -7
  247. data/test/fixtures/people.yml +0 -15
  248. data/test/fixtures/pets.yml +0 -14
  249. data/test/fixtures/pirates.yml +0 -9
  250. data/test/fixtures/polymorphic_designs.yml +0 -19
  251. data/test/fixtures/polymorphic_prices.yml +0 -19
  252. data/test/fixtures/posts.yml +0 -52
  253. data/test/fixtures/price_estimates.yml +0 -7
  254. data/test/fixtures/projects.yml +0 -7
  255. data/test/fixtures/readers.yml +0 -9
  256. data/test/fixtures/references.yml +0 -17
  257. data/test/fixtures/reserved_words/distinct.yml +0 -5
  258. data/test/fixtures/reserved_words/distincts_selects.yml +0 -11
  259. data/test/fixtures/reserved_words/group.yml +0 -14
  260. data/test/fixtures/reserved_words/select.yml +0 -8
  261. data/test/fixtures/reserved_words/values.yml +0 -7
  262. data/test/fixtures/ships.yml +0 -5
  263. data/test/fixtures/sponsors.yml +0 -9
  264. data/test/fixtures/subscribers.yml +0 -7
  265. data/test/fixtures/subscriptions.yml +0 -12
  266. data/test/fixtures/taggings.yml +0 -28
  267. data/test/fixtures/tags.yml +0 -7
  268. data/test/fixtures/tasks.yml +0 -7
  269. data/test/fixtures/tees.yml +0 -4
  270. data/test/fixtures/ties.yml +0 -4
  271. data/test/fixtures/topics.yml +0 -42
  272. data/test/fixtures/toys.yml +0 -4
  273. data/test/fixtures/treasures.yml +0 -10
  274. data/test/fixtures/vertices.yml +0 -4
  275. data/test/fixtures/warehouse-things.yml +0 -3
  276. data/test/fixtures/zines.yml +0 -5
  277. data/test/migrations/broken/100_migration_that_raises_exception.rb +0 -10
  278. data/test/migrations/decimal/1_give_me_big_numbers.rb +0 -15
  279. data/test/migrations/duplicate/1_people_have_last_names.rb +0 -9
  280. data/test/migrations/duplicate/2_we_need_reminders.rb +0 -12
  281. data/test/migrations/duplicate/3_foo.rb +0 -7
  282. data/test/migrations/duplicate/3_innocent_jointable.rb +0 -12
  283. data/test/migrations/duplicate_names/20080507052938_chunky.rb +0 -7
  284. data/test/migrations/duplicate_names/20080507053028_chunky.rb +0 -7
  285. data/test/migrations/interleaved/pass_1/3_innocent_jointable.rb +0 -12
  286. data/test/migrations/interleaved/pass_2/1_people_have_last_names.rb +0 -9
  287. data/test/migrations/interleaved/pass_2/3_innocent_jointable.rb +0 -12
  288. data/test/migrations/interleaved/pass_3/1_people_have_last_names.rb +0 -9
  289. data/test/migrations/interleaved/pass_3/2_i_raise_on_down.rb +0 -8
  290. data/test/migrations/interleaved/pass_3/3_innocent_jointable.rb +0 -12
  291. data/test/migrations/missing/1000_people_have_middle_names.rb +0 -9
  292. data/test/migrations/missing/1_people_have_last_names.rb +0 -9
  293. data/test/migrations/missing/3_we_need_reminders.rb +0 -12
  294. data/test/migrations/missing/4_innocent_jointable.rb +0 -12
  295. data/test/migrations/valid/1_people_have_last_names.rb +0 -9
  296. data/test/migrations/valid/2_we_need_reminders.rb +0 -12
  297. data/test/migrations/valid/3_innocent_jointable.rb +0 -12
  298. data/test/models/author.rb +0 -151
  299. data/test/models/auto_id.rb +0 -4
  300. data/test/models/binary.rb +0 -2
  301. data/test/models/bird.rb +0 -9
  302. data/test/models/book.rb +0 -4
  303. data/test/models/categorization.rb +0 -5
  304. data/test/models/category.rb +0 -34
  305. data/test/models/citation.rb +0 -6
  306. data/test/models/club.rb +0 -13
  307. data/test/models/column_name.rb +0 -3
  308. data/test/models/comment.rb +0 -29
  309. data/test/models/company.rb +0 -173
  310. data/test/models/company_in_module.rb +0 -78
  311. data/test/models/computer.rb +0 -3
  312. data/test/models/contact.rb +0 -16
  313. data/test/models/contract.rb +0 -5
  314. data/test/models/course.rb +0 -3
  315. data/test/models/customer.rb +0 -73
  316. data/test/models/default.rb +0 -2
  317. data/test/models/developer.rb +0 -101
  318. data/test/models/edge.rb +0 -5
  319. data/test/models/entrant.rb +0 -3
  320. data/test/models/essay.rb +0 -3
  321. data/test/models/event.rb +0 -3
  322. data/test/models/event_author.rb +0 -8
  323. data/test/models/face.rb +0 -7
  324. data/test/models/guid.rb +0 -2
  325. data/test/models/interest.rb +0 -5
  326. data/test/models/invoice.rb +0 -4
  327. data/test/models/item.rb +0 -7
  328. data/test/models/job.rb +0 -5
  329. data/test/models/joke.rb +0 -3
  330. data/test/models/keyboard.rb +0 -3
  331. data/test/models/legacy_thing.rb +0 -3
  332. data/test/models/line_item.rb +0 -3
  333. data/test/models/man.rb +0 -9
  334. data/test/models/matey.rb +0 -4
  335. data/test/models/member.rb +0 -12
  336. data/test/models/member_detail.rb +0 -5
  337. data/test/models/member_type.rb +0 -3
  338. data/test/models/membership.rb +0 -9
  339. data/test/models/minimalistic.rb +0 -2
  340. data/test/models/mixed_case_monkey.rb +0 -3
  341. data/test/models/movie.rb +0 -5
  342. data/test/models/order.rb +0 -4
  343. data/test/models/organization.rb +0 -6
  344. data/test/models/owner.rb +0 -5
  345. data/test/models/parrot.rb +0 -22
  346. data/test/models/person.rb +0 -16
  347. data/test/models/pet.rb +0 -5
  348. data/test/models/pirate.rb +0 -80
  349. data/test/models/polymorphic_design.rb +0 -3
  350. data/test/models/polymorphic_price.rb +0 -3
  351. data/test/models/post.rb +0 -102
  352. data/test/models/price_estimate.rb +0 -3
  353. data/test/models/project.rb +0 -30
  354. data/test/models/reader.rb +0 -4
  355. data/test/models/reference.rb +0 -4
  356. data/test/models/reply.rb +0 -46
  357. data/test/models/ship.rb +0 -19
  358. data/test/models/ship_part.rb +0 -7
  359. data/test/models/sponsor.rb +0 -4
  360. data/test/models/subject.rb +0 -4
  361. data/test/models/subscriber.rb +0 -8
  362. data/test/models/subscription.rb +0 -4
  363. data/test/models/tag.rb +0 -7
  364. data/test/models/tagging.rb +0 -10
  365. data/test/models/task.rb +0 -3
  366. data/test/models/tee.rb +0 -4
  367. data/test/models/tie.rb +0 -4
  368. data/test/models/topic.rb +0 -80
  369. data/test/models/toy.rb +0 -6
  370. data/test/models/treasure.rb +0 -8
  371. data/test/models/vertex.rb +0 -9
  372. data/test/models/warehouse_thing.rb +0 -5
  373. data/test/models/zine.rb +0 -3
  374. data/test/schema/mysql_specific_schema.rb +0 -31
  375. data/test/schema/postgresql_specific_schema.rb +0 -114
  376. data/test/schema/schema.rb +0 -550
  377. data/test/schema/schema2.rb +0 -6
  378. data/test/schema/sqlite_specific_schema.rb +0 -25
@@ -1,2 +0,0 @@
1
- class Default < ActiveRecord::Base
2
- end
@@ -1,101 +0,0 @@
1
- module DeveloperProjectsAssociationExtension
2
- def find_most_recent
3
- find(:first, :order => "id DESC")
4
- end
5
- end
6
-
7
- module DeveloperProjectsAssociationExtension2
8
- def find_least_recent
9
- find(:first, :order => "id ASC")
10
- end
11
- end
12
-
13
- class Developer < ActiveRecord::Base
14
- has_and_belongs_to_many :projects do
15
- def find_most_recent
16
- find(:first, :order => "id DESC")
17
- end
18
- end
19
-
20
- has_and_belongs_to_many :projects_extended_by_name,
21
- :class_name => "Project",
22
- :join_table => "developers_projects",
23
- :association_foreign_key => "project_id",
24
- :extend => DeveloperProjectsAssociationExtension
25
-
26
- has_and_belongs_to_many :projects_extended_by_name_twice,
27
- :class_name => "Project",
28
- :join_table => "developers_projects",
29
- :association_foreign_key => "project_id",
30
- :extend => [DeveloperProjectsAssociationExtension, DeveloperProjectsAssociationExtension2]
31
-
32
- has_and_belongs_to_many :projects_extended_by_name_and_block,
33
- :class_name => "Project",
34
- :join_table => "developers_projects",
35
- :association_foreign_key => "project_id",
36
- :extend => DeveloperProjectsAssociationExtension do
37
- def find_least_recent
38
- find(:first, :order => "id ASC")
39
- end
40
- end
41
-
42
- has_and_belongs_to_many :special_projects, :join_table => 'developers_projects', :association_foreign_key => 'project_id'
43
-
44
- has_many :audit_logs
45
-
46
- named_scope :jamises, :conditions => {:name => 'Jamis'}
47
-
48
- validates_inclusion_of :salary, :in => 50000..200000
49
- validates_length_of :name, :within => 3..20
50
-
51
- before_create do |developer|
52
- developer.audit_logs.build :message => "Computer created"
53
- end
54
-
55
- def log=(message)
56
- audit_logs.build :message => message
57
- end
58
- end
59
-
60
- class AuditLog < ActiveRecord::Base
61
- belongs_to :developer, :validate => true
62
- belongs_to :unvalidated_developer, :class_name => 'Developer'
63
- end
64
-
65
- DeveloperSalary = Struct.new(:amount)
66
- class DeveloperWithAggregate < ActiveRecord::Base
67
- self.table_name = 'developers'
68
- composed_of :salary, :class_name => 'DeveloperSalary', :mapping => [%w(salary amount)]
69
- end
70
-
71
- class DeveloperWithBeforeDestroyRaise < ActiveRecord::Base
72
- self.table_name = 'developers'
73
- has_and_belongs_to_many :projects, :join_table => 'developers_projects', :foreign_key => 'developer_id'
74
- before_destroy :raise_if_projects_empty!
75
-
76
- def raise_if_projects_empty!
77
- raise if projects.empty?
78
- end
79
- end
80
-
81
- class DeveloperOrderedBySalary < ActiveRecord::Base
82
- self.table_name = 'developers'
83
- default_scope :order => 'salary DESC'
84
- named_scope :by_name, :order => 'name DESC'
85
-
86
- def self.all_ordered_by_name
87
- with_scope(:find => { :order => 'name DESC' }) do
88
- find(:all)
89
- end
90
- end
91
- end
92
-
93
- class DeveloperCalledDavid < ActiveRecord::Base
94
- self.table_name = 'developers'
95
- default_scope :conditions => "name = 'David'"
96
- end
97
-
98
- class DeveloperCalledJamis < ActiveRecord::Base
99
- self.table_name = 'developers'
100
- default_scope :conditions => { :name => 'Jamis' }
101
- end
@@ -1,5 +0,0 @@
1
- # This class models an edge in a directed graph.
2
- class Edge < ActiveRecord::Base
3
- belongs_to :source, :class_name => 'Vertex', :foreign_key => 'source_id'
4
- belongs_to :sink, :class_name => 'Vertex', :foreign_key => 'sink_id'
5
- end
@@ -1,3 +0,0 @@
1
- class Entrant < ActiveRecord::Base
2
- belongs_to :course
3
- end
@@ -1,3 +0,0 @@
1
- class Essay < ActiveRecord::Base
2
- belongs_to :writer, :primary_key => :name, :polymorphic => true
3
- end
@@ -1,3 +0,0 @@
1
- class Event < ActiveRecord::Base
2
- validates_uniqueness_of :title
3
- end
@@ -1,8 +0,0 @@
1
- require 'models/author'
2
- require 'models/event'
3
-
4
- class EventAuthor < ActiveRecord::Base
5
- belongs_to :author
6
- belongs_to :event
7
- end
8
-
@@ -1,7 +0,0 @@
1
- class Face < ActiveRecord::Base
2
- belongs_to :man, :inverse_of => :face
3
- belongs_to :polymorphic_man, :polymorphic => true, :inverse_of => :polymorphic_face
4
- # These is a "broken" inverse_of for the purposes of testing
5
- belongs_to :horrible_man, :class_name => 'Man', :inverse_of => :horrible_face
6
- belongs_to :horrible_polymorphic_man, :polymorphic => true, :inverse_of => :horrible_polymorphic_face
7
- end
@@ -1,2 +0,0 @@
1
- class Guid < ActiveRecord::Base
2
- end
@@ -1,5 +0,0 @@
1
- class Interest < ActiveRecord::Base
2
- belongs_to :man, :inverse_of => :interests
3
- belongs_to :polymorphic_man, :polymorphic => true, :inverse_of => :polymorphic_interests
4
- belongs_to :zine, :inverse_of => :interests
5
- end
@@ -1,4 +0,0 @@
1
- class Invoice < ActiveRecord::Base
2
- has_many :line_items, :autosave => true
3
- before_save {|record| record.balance = record.line_items.map(&:amount).sum }
4
- end
@@ -1,7 +0,0 @@
1
- class AbstractItem < ActiveRecord::Base
2
- self.abstract_class = true
3
- has_one :tagging, :as => :taggable
4
- end
5
-
6
- class Item < AbstractItem
7
- end
@@ -1,5 +0,0 @@
1
- class Job < ActiveRecord::Base
2
- has_many :references
3
- has_many :people, :through => :references
4
- belongs_to :ideal_reference, :class_name => 'Reference'
5
- end
@@ -1,3 +0,0 @@
1
- class Joke < ActiveRecord::Base
2
- set_table_name 'funny_jokes'
3
- end
@@ -1,3 +0,0 @@
1
- class Keyboard < ActiveRecord::Base
2
- set_primary_key 'key_number'
3
- end
@@ -1,3 +0,0 @@
1
- class LegacyThing < ActiveRecord::Base
2
- set_locking_column :version
3
- end
@@ -1,3 +0,0 @@
1
- class LineItem < ActiveRecord::Base
2
- belongs_to :invoice, :touch => true
3
- end
@@ -1,9 +0,0 @@
1
- class Man < ActiveRecord::Base
2
- has_one :face, :inverse_of => :man
3
- has_one :polymorphic_face, :class_name => 'Face', :as => :polymorphic_man, :inverse_of => :polymorphic_man
4
- has_many :interests, :inverse_of => :man
5
- has_many :polymorphic_interests, :class_name => 'Interest', :as => :polymorphic_man, :inverse_of => :polymorphic_man
6
- # These are "broken" inverse_of associations for the purposes of testing
7
- has_one :dirty_face, :class_name => 'Face', :inverse_of => :dirty_man
8
- has_many :secret_interests, :class_name => 'Interest', :inverse_of => :secret_man
9
- end
@@ -1,4 +0,0 @@
1
- class Matey < ActiveRecord::Base
2
- belongs_to :pirate
3
- belongs_to :target, :class_name => 'Pirate'
4
- end
@@ -1,12 +0,0 @@
1
- class Member < ActiveRecord::Base
2
- has_one :current_membership
3
- has_many :memberships
4
- has_many :fellow_members, :through => :club, :source => :members
5
- has_one :club, :through => :current_membership
6
- has_one :favourite_club, :through => :memberships, :conditions => ["memberships.favourite = ?", true], :source => :club
7
- has_one :sponsor, :as => :sponsorable
8
- has_one :sponsor_club, :through => :sponsor
9
- has_one :member_detail
10
- has_one :organization, :through => :member_detail
11
- belongs_to :member_type
12
- end
@@ -1,5 +0,0 @@
1
- class MemberDetail < ActiveRecord::Base
2
- belongs_to :member
3
- belongs_to :organization
4
- has_one :member_type, :through => :member
5
- end
@@ -1,3 +0,0 @@
1
- class MemberType < ActiveRecord::Base
2
- has_many :members
3
- end
@@ -1,9 +0,0 @@
1
- class Membership < ActiveRecord::Base
2
- belongs_to :member
3
- belongs_to :club
4
- end
5
-
6
- class CurrentMembership < Membership
7
- belongs_to :member
8
- belongs_to :club
9
- end
@@ -1,2 +0,0 @@
1
- class Minimalistic < ActiveRecord::Base
2
- end
@@ -1,3 +0,0 @@
1
- class MixedCaseMonkey < ActiveRecord::Base
2
- set_primary_key 'monkeyID'
3
- end
@@ -1,5 +0,0 @@
1
- class Movie < ActiveRecord::Base
2
- def self.primary_key
3
- "movieid"
4
- end
5
- end
@@ -1,4 +0,0 @@
1
- class Order < ActiveRecord::Base
2
- belongs_to :billing, :class_name => 'Customer', :foreign_key => 'billing_customer_id'
3
- belongs_to :shipping, :class_name => 'Customer', :foreign_key => 'shipping_customer_id'
4
- end
@@ -1,6 +0,0 @@
1
- class Organization < ActiveRecord::Base
2
- has_many :member_details
3
- has_many :members, :through => :member_details
4
-
5
- named_scope :clubs, { :from => 'clubs' }
6
- end
@@ -1,5 +0,0 @@
1
- class Owner < ActiveRecord::Base
2
- set_primary_key :owner_id
3
- has_many :pets
4
- has_many :toys, :through => :pets
5
- end
@@ -1,22 +0,0 @@
1
- class Parrot < ActiveRecord::Base
2
- set_inheritance_column :parrot_sti_class
3
- has_and_belongs_to_many :pirates
4
- has_and_belongs_to_many :treasures
5
- has_many :loots, :as => :looter
6
- alias_attribute :title, :name
7
-
8
- validates_presence_of :name
9
-
10
- attr_accessor :cancel_save_from_callback
11
- before_save :cancel_save_callback_method, :if => :cancel_save_from_callback
12
- def cancel_save_callback_method
13
- false
14
- end
15
- end
16
-
17
- class LiveParrot < Parrot
18
- end
19
-
20
- class DeadParrot < Parrot
21
- belongs_to :killer, :class_name => 'Pirate'
22
- end
@@ -1,16 +0,0 @@
1
- class Person < ActiveRecord::Base
2
- has_many :readers
3
- has_many :posts, :through => :readers
4
- has_many :posts_with_no_comments, :through => :readers, :source => :post, :include => :comments, :conditions => 'comments.id is null'
5
-
6
- has_many :references
7
- has_many :jobs, :through => :references
8
- has_one :favourite_reference, :class_name => 'Reference', :conditions => ['favourite=?', true]
9
- has_many :posts_with_comments_sorted_by_comment_id, :through => :readers, :source => :post, :include => :comments, :order => 'comments.id'
10
-
11
- belongs_to :primary_contact, :class_name => 'Person'
12
- has_many :agents, :class_name => 'Person', :foreign_key => 'primary_contact_id'
13
-
14
- named_scope :males, :conditions => { :gender => 'M' }
15
- named_scope :females, :conditions => { :gender => 'F' }
16
- end
@@ -1,5 +0,0 @@
1
- class Pet < ActiveRecord::Base
2
- set_primary_key :pet_id
3
- belongs_to :owner, :touch => true
4
- has_many :toys
5
- end
@@ -1,80 +0,0 @@
1
- class Pirate < ActiveRecord::Base
2
- belongs_to :parrot, :validate => true
3
- belongs_to :non_validated_parrot, :class_name => 'Parrot'
4
- has_and_belongs_to_many :parrots, :validate => true, :order => 'parrots.id ASC'
5
- has_and_belongs_to_many :non_validated_parrots, :class_name => 'Parrot'
6
- has_and_belongs_to_many :parrots_with_method_callbacks, :class_name => "Parrot",
7
- :before_add => :log_before_add,
8
- :after_add => :log_after_add,
9
- :before_remove => :log_before_remove,
10
- :after_remove => :log_after_remove
11
- has_and_belongs_to_many :parrots_with_proc_callbacks, :class_name => "Parrot",
12
- :before_add => proc {|p,pa| p.ship_log << "before_adding_proc_parrot_#{pa.id || '<new>'}"},
13
- :after_add => proc {|p,pa| p.ship_log << "after_adding_proc_parrot_#{pa.id || '<new>'}"},
14
- :before_remove => proc {|p,pa| p.ship_log << "before_removing_proc_parrot_#{pa.id}"},
15
- :after_remove => proc {|p,pa| p.ship_log << "after_removing_proc_parrot_#{pa.id}"}
16
-
17
- has_many :treasures, :as => :looter
18
- has_many :treasure_estimates, :through => :treasures, :source => :price_estimates
19
-
20
- # These both have :autosave enabled because accepts_nested_attributes_for is used on them.
21
- has_one :ship
22
- has_one :update_only_ship, :class_name => 'Ship'
23
- has_one :non_validated_ship, :class_name => 'Ship'
24
- has_many :birds, :order => 'birds.id ASC'
25
- has_many :birds_with_method_callbacks, :class_name => "Bird",
26
- :before_add => :log_before_add,
27
- :after_add => :log_after_add,
28
- :before_remove => :log_before_remove,
29
- :after_remove => :log_after_remove
30
- has_many :birds_with_proc_callbacks, :class_name => "Bird",
31
- :before_add => proc {|p,b| p.ship_log << "before_adding_proc_bird_#{b.id || '<new>'}"},
32
- :after_add => proc {|p,b| p.ship_log << "after_adding_proc_bird_#{b.id || '<new>'}"},
33
- :before_remove => proc {|p,b| p.ship_log << "before_removing_proc_bird_#{b.id}"},
34
- :after_remove => proc {|p,b| p.ship_log << "after_removing_proc_bird_#{b.id}"}
35
- has_many :birds_with_reject_all_blank, :class_name => "Bird"
36
-
37
- accepts_nested_attributes_for :parrots, :birds, :allow_destroy => true, :reject_if => proc { |attributes| attributes.empty? }
38
- accepts_nested_attributes_for :ship, :allow_destroy => true, :reject_if => proc { |attributes| attributes.empty? }
39
- accepts_nested_attributes_for :update_only_ship, :update_only => true
40
- accepts_nested_attributes_for :parrots_with_method_callbacks, :parrots_with_proc_callbacks,
41
- :birds_with_method_callbacks, :birds_with_proc_callbacks, :allow_destroy => true
42
- accepts_nested_attributes_for :birds_with_reject_all_blank, :reject_if => :all_blank
43
-
44
- validates_presence_of :catchphrase
45
-
46
- def ship_log
47
- @ship_log ||= []
48
- end
49
-
50
- def reject_empty_ships_on_create(attributes)
51
- attributes.delete('_reject_me_if_new').present? && new_record?
52
- end
53
-
54
- attr_accessor :cancel_save_from_callback
55
- before_save :cancel_save_callback_method, :if => :cancel_save_from_callback
56
- def cancel_save_callback_method
57
- false
58
- end
59
-
60
- private
61
- def log_before_add(record)
62
- log(record, "before_adding_method")
63
- end
64
-
65
- def log_after_add(record)
66
- log(record, "after_adding_method")
67
- end
68
-
69
- def log_before_remove(record)
70
- log(record, "before_removing_method")
71
- end
72
-
73
- def log_after_remove(record)
74
- log(record, "after_removing_method")
75
- end
76
-
77
- def log(record, callback)
78
- ship_log << "#{callback}_#{record.class.name.downcase}_#{record.id || '<new>'}"
79
- end
80
- end
@@ -1,3 +0,0 @@
1
- class PolymorphicDesign < ActiveRecord::Base
2
- belongs_to :designable, :polymorphic => true
3
- end
@@ -1,3 +0,0 @@
1
- class PolymorphicPrice < ActiveRecord::Base
2
- belongs_to :sellable, :polymorphic => true
3
- end
@@ -1,102 +0,0 @@
1
- class Post < ActiveRecord::Base
2
- named_scope :with_type_self, lambda{{:conditions => ["type=?", self.name]}}
3
- named_scope :containing_the_letter_a, :conditions => "body LIKE '%a%'"
4
- named_scope :ranked_by_comments, :order => "comments_count DESC"
5
- named_scope :limit, lambda {|limit| {:limit => limit} }
6
- named_scope :with_authors_at_address, lambda { |address| {
7
- :conditions => [ 'authors.author_address_id = ?', address.id ],
8
- :joins => 'JOIN authors ON authors.id = posts.author_id'
9
- }
10
- }
11
-
12
- belongs_to :author do
13
- def greeting
14
- "hello"
15
- end
16
- end
17
-
18
- belongs_to :author_with_posts, :class_name => "Author", :foreign_key => :author_id, :include => :posts
19
- belongs_to :author_with_address, :class_name => "Author", :foreign_key => :author_id, :include => :author_address
20
-
21
- has_one :last_comment, :class_name => 'Comment', :order => 'id desc'
22
-
23
- named_scope :with_special_comments, :joins => :comments, :conditions => {:comments => {:type => 'SpecialComment'} }
24
- named_scope :with_very_special_comments, :joins => :comments, :conditions => {:comments => {:type => 'VerySpecialComment'} }
25
- named_scope :with_post, lambda {|post_id|
26
- { :joins => :comments, :conditions => {:comments => {:post_id => post_id} } }
27
- }
28
-
29
- has_many :comments, :order => "body" do
30
- def find_most_recent
31
- find(:first, :order => "id DESC")
32
- end
33
- end
34
-
35
- has_many :author_favorites, :through => :author
36
-
37
- has_many :comments_with_interpolated_conditions, :class_name => 'Comment',
38
- :conditions => ['#{"#{aliased_table_name}." rescue ""}body = ?', 'Thank you for the welcome']
39
-
40
- has_one :very_special_comment
41
- has_one :very_special_comment_with_post, :class_name => "VerySpecialComment", :include => :post
42
- has_many :special_comments
43
- has_many :nonexistant_comments, :class_name => 'Comment', :conditions => 'comments.id < 0'
44
-
45
- has_and_belongs_to_many :categories
46
- has_and_belongs_to_many :special_categories, :join_table => "categories_posts", :association_foreign_key => 'category_id'
47
-
48
- has_many :taggings, :as => :taggable
49
- has_many :tags, :through => :taggings do
50
- def add_joins_and_select
51
- find :all, :select => 'tags.*, authors.id as author_id', :include => false,
52
- :joins => 'left outer join posts on taggings.taggable_id = posts.id left outer join authors on posts.author_id = authors.id'
53
- end
54
- end
55
-
56
- has_many :misc_tags, :through => :taggings, :source => :tag, :conditions => "tags.name = 'Misc'"
57
- has_many :funky_tags, :through => :taggings, :source => :tag
58
- has_many :super_tags, :through => :taggings
59
- has_one :tagging, :as => :taggable
60
-
61
- has_many :invalid_taggings, :as => :taggable, :class_name => "Tagging", :conditions => 'taggings.id < 0'
62
- has_many :invalid_tags, :through => :invalid_taggings, :source => :tag
63
-
64
- has_many :categorizations, :foreign_key => :category_id
65
- has_many :authors, :through => :categorizations
66
-
67
- has_many :readers
68
- has_many :people, :through => :readers
69
- has_many :people_with_callbacks, :source=>:person, :through => :readers,
70
- :before_add => lambda {|owner, reader| log(:added, :before, reader.first_name) },
71
- :after_add => lambda {|owner, reader| log(:added, :after, reader.first_name) },
72
- :before_remove => lambda {|owner, reader| log(:removed, :before, reader.first_name) },
73
- :after_remove => lambda {|owner, reader| log(:removed, :after, reader.first_name) }
74
-
75
- def self.top(limit)
76
- ranked_by_comments.limit(limit)
77
- end
78
-
79
- def self.reset_log
80
- @log = []
81
- end
82
-
83
- def self.log(message=nil, side=nil, new_record=nil)
84
- return @log if message.nil?
85
- @log << [message, side, new_record]
86
- end
87
-
88
- def self.what_are_you
89
- 'a post...'
90
- end
91
- end
92
-
93
- class SpecialPost < Post; end
94
-
95
- class StiPost < Post
96
- self.abstract_class = true
97
- has_one :special_comment, :class_name => "SpecialComment"
98
- end
99
-
100
- class SubStiPost < StiPost
101
- self.table_name = Post.table_name
102
- end