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 Binary < ActiveRecord::Base
2
- end
@@ -1,9 +0,0 @@
1
- class Bird < ActiveRecord::Base
2
- validates_presence_of :name
3
-
4
- attr_accessor :cancel_save_from_callback
5
- before_save :cancel_save_callback_method, :if => :cancel_save_from_callback
6
- def cancel_save_callback_method
7
- false
8
- end
9
- end
@@ -1,4 +0,0 @@
1
- class Book < ActiveRecord::Base
2
- has_many :citations, :foreign_key => 'book1_id'
3
- has_many :references, :through => :citations, :source => :reference_of, :uniq => true
4
- end
@@ -1,5 +0,0 @@
1
- class Categorization < ActiveRecord::Base
2
- belongs_to :post
3
- belongs_to :category
4
- belongs_to :author
5
- end
@@ -1,34 +0,0 @@
1
- class Category < ActiveRecord::Base
2
- has_and_belongs_to_many :posts
3
- has_and_belongs_to_many :special_posts, :class_name => "Post"
4
- has_and_belongs_to_many :other_posts, :class_name => "Post"
5
- has_and_belongs_to_many :posts_with_authors_sorted_by_author_id, :class_name => "Post", :include => :authors, :order => "authors.id"
6
-
7
- has_and_belongs_to_many(:select_testing_posts,
8
- :class_name => 'Post',
9
- :foreign_key => 'category_id',
10
- :association_foreign_key => 'post_id',
11
- :select => 'posts.*, 1 as correctness_marker')
12
-
13
- has_and_belongs_to_many :post_with_conditions,
14
- :class_name => 'Post',
15
- :conditions => { :title => 'Yet Another Testing Title' }
16
-
17
- has_and_belongs_to_many :popular_grouped_posts, :class_name => "Post", :group => "posts.type", :having => "sum(comments.post_id) > 2", :include => :comments
18
- has_and_belongs_to_many :posts_gruoped_by_title, :class_name => "Post", :group => "title", :select => "title"
19
-
20
- def self.what_are_you
21
- 'a category...'
22
- end
23
-
24
- has_many :categorizations
25
- has_many :authors, :through => :categorizations, :select => 'authors.*, categorizations.post_id'
26
- end
27
-
28
- class SpecialCategory < Category
29
-
30
- def self.what_are_you
31
- 'a special category...'
32
- end
33
-
34
- end
@@ -1,6 +0,0 @@
1
- class Citation < ActiveRecord::Base
2
- belongs_to :reference_of, :class_name => "Book", :foreign_key => :book2_id
3
-
4
- belongs_to :book1, :class_name => "Book", :foreign_key => :book1_id
5
- belongs_to :book2, :class_name => "Book", :foreign_key => :book2_id
6
- end
@@ -1,13 +0,0 @@
1
- class Club < ActiveRecord::Base
2
- has_many :memberships
3
- has_many :members, :through => :memberships
4
- has_many :current_memberships
5
- has_one :sponsor
6
- has_one :sponsored_member, :through => :sponsor, :source => :sponsorable, :source_type => "Member"
7
-
8
- private
9
-
10
- def private_method
11
- "I'm sorry sir, this is a *private* club, not a *pirate* club"
12
- end
13
- end
@@ -1,3 +0,0 @@
1
- class ColumnName < ActiveRecord::Base
2
- def self.table_name () "colnametests" end
3
- end
@@ -1,29 +0,0 @@
1
- class Comment < ActiveRecord::Base
2
- named_scope :containing_the_letter_e, :conditions => "comments.body LIKE '%e%'"
3
- named_scope :for_first_post, :conditions => { :post_id => 1 }
4
- named_scope :for_first_author,
5
- :joins => :post,
6
- :conditions => { "posts.author_id" => 1 }
7
-
8
- belongs_to :post, :counter_cache => true
9
-
10
- def self.what_are_you
11
- 'a comment...'
12
- end
13
-
14
- def self.search_by_type(q)
15
- self.find(:all, :conditions => ["#{QUOTED_TYPE} = ?", q])
16
- end
17
- end
18
-
19
- class SpecialComment < Comment
20
- def self.what_are_you
21
- 'a special comment...'
22
- end
23
- end
24
-
25
- class VerySpecialComment < Comment
26
- def self.what_are_you
27
- 'a very special comment...'
28
- end
29
- end
@@ -1,173 +0,0 @@
1
- class AbstractCompany < ActiveRecord::Base
2
- self.abstract_class = true
3
- end
4
-
5
- class Company < AbstractCompany
6
- attr_protected :rating
7
- set_sequence_name :companies_nonstd_seq
8
-
9
- validates_presence_of :name
10
-
11
- has_one :dummy_account, :foreign_key => "firm_id", :class_name => "Account"
12
- has_many :contracts
13
- has_many :developers, :through => :contracts
14
-
15
- named_scope :with_oft_in_name, :conditions => "name LIKE '%oft%'"
16
-
17
- def arbitrary_method
18
- "I am Jack's profound disappointment"
19
- end
20
-
21
- private
22
-
23
- def private_method
24
- "I am Jack's innermost fears and aspirations"
25
- end
26
- end
27
-
28
- module Namespaced
29
- class Company < ::Company
30
- end
31
-
32
- class Firm < ::Company
33
- has_many :clients, :class_name => 'Namespaced::Client'
34
- end
35
-
36
- class Client < ::Company
37
- end
38
- end
39
-
40
- class Firm < Company
41
- has_many :clients, :order => "id", :dependent => :destroy, :counter_sql =>
42
- "SELECT COUNT(*) FROM companies WHERE firm_id = 1 " +
43
- "AND (#{QUOTED_TYPE} = 'Client' OR #{QUOTED_TYPE} = 'SpecialClient' OR #{QUOTED_TYPE} = 'VerySpecialClient' )"
44
- has_many :unsorted_clients, :class_name => "Client"
45
- has_many :clients_sorted_desc, :class_name => "Client", :order => "id DESC"
46
- has_many :clients_of_firm, :foreign_key => "client_of", :class_name => "Client", :order => "id"
47
- has_many :unvalidated_clients_of_firm, :foreign_key => "client_of", :class_name => "Client", :validate => false
48
- has_many :dependent_clients_of_firm, :foreign_key => "client_of", :class_name => "Client", :order => "id", :dependent => :destroy
49
- has_many :exclusively_dependent_clients_of_firm, :foreign_key => "client_of", :class_name => "Client", :order => "id", :dependent => :delete_all
50
- has_many :limited_clients, :class_name => "Client", :order => "id", :limit => 1
51
- has_many :clients_like_ms, :conditions => "name = 'Microsoft'", :class_name => "Client", :order => "id"
52
- has_many :clients_with_interpolated_conditions, :class_name => "Client", :conditions => 'rating > #{rating}'
53
- has_many :clients_like_ms_with_hash_conditions, :conditions => { :name => 'Microsoft' }, :class_name => "Client", :order => "id"
54
- has_many :clients_using_sql, :class_name => "Client", :finder_sql => 'SELECT * FROM companies WHERE client_of = #{id}'
55
- has_many :clients_using_counter_sql, :class_name => "Client",
56
- :finder_sql => 'SELECT * FROM companies WHERE client_of = #{id}',
57
- :counter_sql => 'SELECT COUNT(*) FROM companies WHERE client_of = #{id}'
58
- has_many :clients_using_zero_counter_sql, :class_name => "Client",
59
- :finder_sql => 'SELECT * FROM companies WHERE client_of = #{id}',
60
- :counter_sql => 'SELECT 0 FROM companies WHERE client_of = #{id}'
61
- has_many :no_clients_using_counter_sql, :class_name => "Client",
62
- :finder_sql => 'SELECT * FROM companies WHERE client_of = 1000',
63
- :counter_sql => 'SELECT COUNT(*) FROM companies WHERE client_of = 1000'
64
- has_many :clients_using_finder_sql, :class_name => "Client", :finder_sql => 'SELECT * FROM companies WHERE 1=1'
65
- has_many :plain_clients, :class_name => 'Client'
66
- has_many :readonly_clients, :class_name => 'Client', :readonly => true
67
- has_many :clients_using_primary_key, :class_name => 'Client',
68
- :primary_key => 'name', :foreign_key => 'firm_name'
69
- has_many :clients_using_primary_key_with_delete_all, :class_name => 'Client',
70
- :primary_key => 'name', :foreign_key => 'firm_name', :dependent => :delete_all
71
- has_many :clients_grouped_by_firm_id, :class_name => "Client", :group => "firm_id", :select => "firm_id"
72
- has_many :clients_grouped_by_name, :class_name => "Client", :group => "name", :select => "name"
73
-
74
- has_one :account, :foreign_key => "firm_id", :dependent => :destroy, :validate => true
75
- has_one :unvalidated_account, :foreign_key => "firm_id", :class_name => 'Account', :validate => false
76
- has_one :account_with_select, :foreign_key => "firm_id", :select => "id, firm_id", :class_name=>'Account'
77
- has_one :readonly_account, :foreign_key => "firm_id", :class_name => "Account", :readonly => true
78
- has_one :account_using_primary_key, :primary_key => "firm_id", :class_name => "Account"
79
- has_one :account_using_foreign_and_primary_keys, :foreign_key => "firm_name", :primary_key => "name", :class_name => "Account"
80
- has_one :deletable_account, :foreign_key => "firm_id", :class_name => "Account", :dependent => :delete
81
-
82
- has_one :account_limit_500_with_hash_conditions, :foreign_key => "firm_id", :class_name => "Account", :conditions => { :credit_limit => 500 }
83
-
84
- has_one :unautosaved_account, :foreign_key => "firm_id", :class_name => 'Account', :autosave => false
85
- has_many :accounts
86
- has_many :unautosaved_accounts, :foreign_key => "firm_id", :class_name => 'Account', :autosave => false
87
- end
88
-
89
- class DependentFirm < Company
90
- has_one :account, :foreign_key => "firm_id", :dependent => :nullify
91
- has_many :companies, :foreign_key => 'client_of', :order => "id", :dependent => :nullify
92
- end
93
-
94
- class Client < Company
95
- belongs_to :firm, :foreign_key => "client_of"
96
- belongs_to :firm_with_basic_id, :class_name => "Firm", :foreign_key => "firm_id"
97
- belongs_to :firm_with_select, :class_name => "Firm", :foreign_key => "firm_id", :select => "id"
98
- belongs_to :firm_with_other_name, :class_name => "Firm", :foreign_key => "client_of"
99
- belongs_to :firm_with_condition, :class_name => "Firm", :foreign_key => "client_of", :conditions => ["1 = ?", 1]
100
- belongs_to :firm_with_primary_key, :class_name => "Firm", :primary_key => "name", :foreign_key => "firm_name"
101
- belongs_to :readonly_firm, :class_name => "Firm", :foreign_key => "firm_id", :readonly => true
102
-
103
- # Record destruction so we can test whether firm.clients.clear has
104
- # is calling client.destroy, deleting from the database, or setting
105
- # foreign keys to NULL.
106
- def self.destroyed_client_ids
107
- @destroyed_client_ids ||= Hash.new { |h,k| h[k] = [] }
108
- end
109
-
110
- before_destroy do |client|
111
- if client.firm
112
- Client.destroyed_client_ids[client.firm.id] << client.id
113
- end
114
- true
115
- end
116
-
117
- # Used to test that read and question methods are not generated for these attributes
118
- def ruby_type
119
- read_attribute :ruby_type
120
- end
121
-
122
- def rating?
123
- query_attribute :rating
124
- end
125
-
126
- class << self
127
- private
128
-
129
- def private_method
130
- "darkness"
131
- end
132
- end
133
- end
134
-
135
- class ExclusivelyDependentFirm < Company
136
- has_one :account, :foreign_key => "firm_id", :dependent => :delete
137
- has_many :dependent_sanitized_conditional_clients_of_firm, :foreign_key => "client_of", :class_name => "Client", :order => "id", :dependent => :delete_all, :conditions => "name = 'BigShot Inc.'"
138
- has_many :dependent_conditional_clients_of_firm, :foreign_key => "client_of", :class_name => "Client", :order => "id", :dependent => :delete_all, :conditions => ["name = ?", 'BigShot Inc.']
139
- has_many :dependent_hash_conditional_clients_of_firm, :foreign_key => "client_of", :class_name => "Client", :order => "id", :dependent => :delete_all, :conditions => {:name => 'BigShot Inc.'}
140
- end
141
-
142
- class SpecialClient < Client
143
- end
144
-
145
- class VerySpecialClient < SpecialClient
146
- end
147
-
148
- class Account < ActiveRecord::Base
149
- belongs_to :firm
150
- belongs_to :unautosaved_firm, :foreign_key => "firm_id", :class_name => "Firm", :autosave => false
151
-
152
- def self.destroyed_account_ids
153
- @destroyed_account_ids ||= Hash.new { |h,k| h[k] = [] }
154
- end
155
-
156
- before_destroy do |account|
157
- if account.firm
158
- Account.destroyed_account_ids[account.firm.id] << account.id
159
- end
160
- true
161
- end
162
-
163
- protected
164
- def validate
165
- errors.add_on_empty "credit_limit"
166
- end
167
-
168
- private
169
-
170
- def private_method
171
- "Sir, yes sir!"
172
- end
173
- end
@@ -1,78 +0,0 @@
1
- module MyApplication
2
- module Business
3
- class Company < ActiveRecord::Base
4
- attr_protected :rating
5
- end
6
-
7
- class Firm < Company
8
- has_many :clients, :order => "id", :dependent => :destroy
9
- has_many :clients_sorted_desc, :class_name => "Client", :order => "id DESC"
10
- has_many :clients_of_firm, :foreign_key => "client_of", :class_name => "Client", :order => "id"
11
- has_many :clients_like_ms, :conditions => "name = 'Microsoft'", :class_name => "Client", :order => "id"
12
- has_many :clients_using_sql, :class_name => "Client", :finder_sql => 'SELECT * FROM companies WHERE client_of = #{id}'
13
-
14
- has_one :account, :class_name => 'MyApplication::Billing::Account', :dependent => :destroy
15
- end
16
-
17
- class Client < Company
18
- belongs_to :firm, :foreign_key => "client_of"
19
- belongs_to :firm_with_other_name, :class_name => "Firm", :foreign_key => "client_of"
20
-
21
- class Contact < ActiveRecord::Base; end
22
- end
23
-
24
- class Developer < ActiveRecord::Base
25
- has_and_belongs_to_many :projects
26
- validates_length_of :name, :within => (3..20)
27
- end
28
-
29
- class Project < ActiveRecord::Base
30
- has_and_belongs_to_many :developers
31
- end
32
-
33
- module Prefixed
34
- def self.table_name_prefix
35
- 'prefixed_'
36
- end
37
-
38
- class Company < ActiveRecord::Base
39
- end
40
-
41
- class Firm < Company
42
- self.table_name = 'companies'
43
- end
44
-
45
- module Nested
46
- class Company < ActiveRecord::Base
47
- end
48
- end
49
- end
50
- end
51
-
52
- module Billing
53
- class Firm < ActiveRecord::Base
54
- self.table_name = 'companies'
55
- end
56
-
57
- module Nested
58
- class Firm < ActiveRecord::Base
59
- self.table_name = 'companies'
60
- end
61
- end
62
-
63
- class Account < ActiveRecord::Base
64
- with_options(:foreign_key => :firm_id) do |i|
65
- i.belongs_to :firm, :class_name => 'MyApplication::Business::Firm'
66
- i.belongs_to :qualified_billing_firm, :class_name => 'MyApplication::Billing::Firm'
67
- i.belongs_to :unqualified_billing_firm, :class_name => 'Firm'
68
- i.belongs_to :nested_qualified_billing_firm, :class_name => 'MyApplication::Billing::Nested::Firm'
69
- i.belongs_to :nested_unqualified_billing_firm, :class_name => 'Nested::Firm'
70
- end
71
-
72
- protected
73
- def validate
74
- errors.add_on_empty "credit_limit"
75
- end
76
- end
77
- end
78
- end
@@ -1,3 +0,0 @@
1
- class Computer < ActiveRecord::Base
2
- belongs_to :developer, :foreign_key=>'developer'
3
- end
@@ -1,16 +0,0 @@
1
- class Contact < ActiveRecord::Base
2
- # mock out self.columns so no pesky db is needed for these tests
3
- def self.column(name, sql_type = nil, options = {})
4
- @columns ||= []
5
- @columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, options[:default], sql_type.to_s, options[:null])
6
- end
7
-
8
- column :name, :string
9
- column :age, :integer
10
- column :avatar, :binary
11
- column :created_at, :datetime
12
- column :awesome, :boolean
13
- column :preferences, :string
14
-
15
- serialize :preferences
16
- end
@@ -1,5 +0,0 @@
1
- class Contract < ActiveRecord::Base
2
- belongs_to :company
3
- belongs_to :developer
4
- end
5
-
@@ -1,3 +0,0 @@
1
- class Course < ActiveRecord::Base
2
- has_many :entrants
3
- end
@@ -1,73 +0,0 @@
1
- class Customer < ActiveRecord::Base
2
- composed_of :address, :mapping => [ %w(address_street street), %w(address_city city), %w(address_country country) ], :allow_nil => true
3
- composed_of :balance, :class_name => "Money", :mapping => %w(balance amount), :converter => Proc.new { |balance| balance.to_money }
4
- composed_of :gps_location, :allow_nil => true
5
- composed_of :fullname, :mapping => %w(name to_s), :constructor => Proc.new { |name| Fullname.parse(name) }, :converter => :parse
6
- end
7
-
8
- class Address
9
- attr_reader :street, :city, :country
10
-
11
- def initialize(street, city, country)
12
- @street, @city, @country = street, city, country
13
- end
14
-
15
- def close_to?(other_address)
16
- city == other_address.city && country == other_address.country
17
- end
18
-
19
- def ==(other)
20
- other.is_a?(self.class) && other.street == street && other.city == city && other.country == country
21
- end
22
- end
23
-
24
- class Money
25
- attr_reader :amount, :currency
26
-
27
- EXCHANGE_RATES = { "USD_TO_DKK" => 6, "DKK_TO_USD" => 0.6 }
28
-
29
- def initialize(amount, currency = "USD")
30
- @amount, @currency = amount, currency
31
- end
32
-
33
- def exchange_to(other_currency)
34
- Money.new((amount * EXCHANGE_RATES["#{currency}_TO_#{other_currency}"]).floor, other_currency)
35
- end
36
- end
37
-
38
- class GpsLocation
39
- attr_reader :gps_location
40
-
41
- def initialize(gps_location)
42
- @gps_location = gps_location
43
- end
44
-
45
- def latitude
46
- gps_location.split("x").first
47
- end
48
-
49
- def longitude
50
- gps_location.split("x").last
51
- end
52
-
53
- def ==(other)
54
- self.latitude == other.latitude && self.longitude == other.longitude
55
- end
56
- end
57
-
58
- class Fullname
59
- attr_reader :first, :last
60
-
61
- def self.parse(str)
62
- return nil unless str
63
- new(*str.to_s.split)
64
- end
65
-
66
- def initialize(first, last = nil)
67
- @first, @last = first, last
68
- end
69
-
70
- def to_s
71
- "#{first} #{last.upcase}"
72
- end
73
- end