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,3 +0,0 @@
1
- class PriceEstimate < ActiveRecord::Base
2
- belongs_to :estimate_of, :polymorphic => true
3
- end
@@ -1,30 +0,0 @@
1
- class Project < ActiveRecord::Base
2
- has_and_belongs_to_many :developers, :uniq => true, :order => 'developers.name desc, developers.id desc'
3
- has_and_belongs_to_many :readonly_developers, :class_name => "Developer", :readonly => true
4
- has_and_belongs_to_many :selected_developers, :class_name => "Developer", :select => "developers.*", :uniq => true
5
- has_and_belongs_to_many :non_unique_developers, :order => 'developers.name desc, developers.id desc', :class_name => 'Developer'
6
- has_and_belongs_to_many :limited_developers, :class_name => "Developer", :limit => 1
7
- has_and_belongs_to_many :developers_named_david, :class_name => "Developer", :conditions => "name = 'David'", :uniq => true
8
- has_and_belongs_to_many :developers_named_david_with_hash_conditions, :class_name => "Developer", :conditions => { :name => 'David' }, :uniq => true
9
- has_and_belongs_to_many :salaried_developers, :class_name => "Developer", :conditions => "salary > 0"
10
- has_and_belongs_to_many :developers_with_finder_sql, :class_name => "Developer", :finder_sql => 'SELECT t.*, j.* FROM developers_projects j, developers t WHERE t.id = j.developer_id AND j.project_id = #{id} ORDER BY t.id'
11
- has_and_belongs_to_many :developers_by_sql, :class_name => "Developer", :delete_sql => "DELETE FROM developers_projects WHERE project_id = \#{id} AND developer_id = \#{record.id}"
12
- has_and_belongs_to_many :developers_with_callbacks, :class_name => "Developer", :before_add => Proc.new {|o, r| o.developers_log << "before_adding#{r.id || '<new>'}"},
13
- :after_add => Proc.new {|o, r| o.developers_log << "after_adding#{r.id || '<new>'}"},
14
- :before_remove => Proc.new {|o, r| o.developers_log << "before_removing#{r.id}"},
15
- :after_remove => Proc.new {|o, r| o.developers_log << "after_removing#{r.id}"}
16
- has_and_belongs_to_many :well_payed_salary_groups, :class_name => "Developer", :group => "developers.salary", :having => "SUM(salary) > 10000", :select => "SUM(salary) as salary"
17
-
18
- attr_accessor :developers_log
19
-
20
- def after_initialize
21
- @developers_log = []
22
- end
23
-
24
- end
25
-
26
- class SpecialProject < Project
27
- def hello_world
28
- "hello there!"
29
- end
30
- end
@@ -1,4 +0,0 @@
1
- class Reader < ActiveRecord::Base
2
- belongs_to :post
3
- belongs_to :person
4
- end
@@ -1,4 +0,0 @@
1
- class Reference < ActiveRecord::Base
2
- belongs_to :person
3
- belongs_to :job
4
- end
@@ -1,46 +0,0 @@
1
- require 'models/topic'
2
-
3
- class Reply < Topic
4
- named_scope :base
5
-
6
- belongs_to :topic, :foreign_key => "parent_id", :counter_cache => true
7
- belongs_to :topic_with_primary_key, :class_name => "Topic", :primary_key => "title", :foreign_key => "parent_title", :counter_cache => "replies_count"
8
- has_many :replies, :class_name => "SillyReply", :dependent => :destroy, :foreign_key => "parent_id"
9
-
10
- validate :errors_on_empty_content
11
- validate_on_create :title_is_wrong_create
12
-
13
- attr_accessible :title, :author_name, :author_email_address, :written_on, :content, :last_read, :parent_title
14
-
15
- def validate
16
- errors.add("title", "Empty") unless attribute_present? "title"
17
- end
18
-
19
- def errors_on_empty_content
20
- errors.add("content", "Empty") unless attribute_present? "content"
21
- end
22
-
23
- def validate_on_create
24
- if attribute_present?("title") && attribute_present?("content") && content == "Mismatch"
25
- errors.add("title", "is Content Mismatch")
26
- end
27
- end
28
-
29
- def title_is_wrong_create
30
- errors.add("title", "is Wrong Create") if attribute_present?("title") && title == "Wrong Create"
31
- end
32
-
33
- def validate_on_update
34
- errors.add("title", "is Wrong Update") if attribute_present?("title") && title == "Wrong Update"
35
- end
36
- end
37
-
38
- class SillyReply < Reply
39
- belongs_to :reply, :foreign_key => "parent_id", :counter_cache => :replies_count
40
- end
41
-
42
- module Web
43
- class Reply < Web::Topic
44
- belongs_to :topic, :foreign_key => "parent_id", :counter_cache => true, :class_name => 'Web::Topic'
45
- end
46
- end
@@ -1,19 +0,0 @@
1
- class Ship < ActiveRecord::Base
2
- self.record_timestamps = false
3
-
4
- belongs_to :pirate
5
- belongs_to :update_only_pirate, :class_name => 'Pirate'
6
- has_many :parts, :class_name => 'ShipPart'
7
-
8
- accepts_nested_attributes_for :parts, :allow_destroy => true
9
- accepts_nested_attributes_for :pirate, :allow_destroy => true, :reject_if => proc { |attributes| attributes.empty? }
10
- accepts_nested_attributes_for :update_only_pirate, :update_only => true
11
-
12
- validates_presence_of :name
13
-
14
- attr_accessor :cancel_save_from_callback
15
- before_save :cancel_save_callback_method, :if => :cancel_save_from_callback
16
- def cancel_save_callback_method
17
- false
18
- end
19
- end
@@ -1,7 +0,0 @@
1
- class ShipPart < ActiveRecord::Base
2
- belongs_to :ship
3
- has_many :trinkets, :class_name => "Treasure", :as => :looter
4
- accepts_nested_attributes_for :trinkets, :allow_destroy => true
5
-
6
- validates_presence_of :name
7
- end
@@ -1,4 +0,0 @@
1
- class Sponsor < ActiveRecord::Base
2
- belongs_to :sponsor_club, :class_name => "Club", :foreign_key => "club_id"
3
- belongs_to :sponsorable, :polymorphic => true
4
- end
@@ -1,4 +0,0 @@
1
- # used for OracleSynonymTest, see test/synonym_test_oci.rb
2
- #
3
- class Subject < ActiveRecord::Base
4
- end
@@ -1,8 +0,0 @@
1
- class Subscriber < ActiveRecord::Base
2
- set_primary_key 'nick'
3
- has_many :subscriptions
4
- has_many :books, :through => :subscriptions
5
- end
6
-
7
- class SpecialSubscriber < Subscriber
8
- end
@@ -1,4 +0,0 @@
1
- class Subscription < ActiveRecord::Base
2
- belongs_to :subscriber
3
- belongs_to :book
4
- end
@@ -1,7 +0,0 @@
1
- class Tag < ActiveRecord::Base
2
- has_many :taggings
3
- has_many :taggables, :through => :taggings
4
- has_one :tagging
5
-
6
- has_many :tagged_posts, :through => :taggings, :source => :taggable, :source_type => 'Post'
7
- end
@@ -1,10 +0,0 @@
1
- # test that attr_readonly isn't called on the :taggable polymorphic association
2
- module Taggable
3
- end
4
-
5
- class Tagging < ActiveRecord::Base
6
- belongs_to :tag, :include => :tagging
7
- belongs_to :super_tag, :class_name => 'Tag', :foreign_key => 'super_tag_id'
8
- belongs_to :invalid_tag, :class_name => 'Tag', :foreign_key => 'tag_id'
9
- belongs_to :taggable, :polymorphic => true, :counter_cache => true
10
- end
@@ -1,3 +0,0 @@
1
- class Task < ActiveRecord::Base
2
-
3
- end
@@ -1,4 +0,0 @@
1
- class Tee < ActiveRecord::Base
2
- has_one :polymorphic_design, :as => :designable
3
- has_one :polymorphic_price, :as => :sellable
4
- end
@@ -1,4 +0,0 @@
1
- class Tie < ActiveRecord::Base
2
- has_one :polymorphic_design, :as => :designable
3
- has_one :polymorphic_price, :as => :sellable
4
- end
@@ -1,80 +0,0 @@
1
- class Topic < ActiveRecord::Base
2
- named_scope :base
3
- named_scope :written_before, lambda { |time|
4
- if time
5
- { :conditions => ['written_on < ?', time] }
6
- end
7
- }
8
- named_scope :approved, :conditions => {:approved => true}
9
- named_scope :rejected, :conditions => {:approved => false}
10
-
11
- named_scope :by_lifo, :conditions => {:author_name => 'lifo'}
12
-
13
- named_scope :approved_as_hash_condition, :conditions => {:topics => {:approved => true}}
14
- named_scope 'approved_as_string', :conditions => {:approved => true}
15
- named_scope :replied, :conditions => ['replies_count > 0']
16
- named_scope :anonymous_extension do
17
- def one
18
- 1
19
- end
20
- end
21
- module NamedExtension
22
- def two
23
- 2
24
- end
25
- end
26
- module MultipleExtensionOne
27
- def extension_one
28
- 1
29
- end
30
- end
31
- module MultipleExtensionTwo
32
- def extension_two
33
- 2
34
- end
35
- end
36
- named_scope :named_extension, :extend => NamedExtension
37
- named_scope :multiple_extensions, :extend => [MultipleExtensionTwo, MultipleExtensionOne]
38
-
39
- has_many :replies, :dependent => :destroy, :foreign_key => "parent_id"
40
- has_many :replies_with_primary_key, :class_name => "Reply", :dependent => :destroy, :primary_key => "title", :foreign_key => "parent_title"
41
- serialize :content
42
-
43
- before_create :default_written_on
44
- before_destroy :destroy_children
45
-
46
- def parent
47
- Topic.find(parent_id)
48
- end
49
-
50
- # trivial method for testing Array#to_xml with :methods
51
- def topic_id
52
- id
53
- end
54
-
55
- protected
56
- def approved=(val)
57
- @custom_approved = val
58
- write_attribute(:approved, val)
59
- end
60
-
61
- def default_written_on
62
- self.written_on = Time.now unless attribute_present?("written_on")
63
- end
64
-
65
- def destroy_children
66
- self.class.delete_all "parent_id = #{id}"
67
- end
68
-
69
- def after_initialize
70
- if self.new_record?
71
- self.author_email_address = 'test@test.com'
72
- end
73
- end
74
- end
75
-
76
- module Web
77
- class Topic < ActiveRecord::Base
78
- has_many :replies, :dependent => :destroy, :foreign_key => "parent_id", :class_name => 'Web::Reply'
79
- end
80
- end
@@ -1,6 +0,0 @@
1
- class Toy < ActiveRecord::Base
2
- set_primary_key :toy_id
3
- belongs_to :pet
4
-
5
- named_scope :with_name, lambda { |name| {:conditions => {:name => name}} }
6
- end
@@ -1,8 +0,0 @@
1
- class Treasure < ActiveRecord::Base
2
- has_and_belongs_to_many :parrots
3
- belongs_to :looter, :polymorphic => true
4
-
5
- has_many :price_estimates, :as => :estimate_of
6
-
7
- accepts_nested_attributes_for :looter
8
- end
@@ -1,9 +0,0 @@
1
- # This class models a vertex in a directed graph.
2
- class Vertex < ActiveRecord::Base
3
- has_many :sink_edges, :class_name => 'Edge', :foreign_key => 'source_id'
4
- has_many :sinks, :through => :sink_edges
5
-
6
- has_and_belongs_to_many :sources,
7
- :class_name => 'Vertex', :join_table => 'edges',
8
- :foreign_key => 'sink_id', :association_foreign_key => 'source_id'
9
- end
@@ -1,5 +0,0 @@
1
- class WarehouseThing < ActiveRecord::Base
2
- set_table_name "warehouse-things"
3
-
4
- validates_uniqueness_of :value
5
- end
@@ -1,3 +0,0 @@
1
- class Zine < ActiveRecord::Base
2
- has_many :interests, :inverse_of => :zine
3
- end
@@ -1,31 +0,0 @@
1
- ActiveRecord::Schema.define do
2
- create_table :binary_fields, :force => true, :options => 'CHARACTER SET latin1' do |t|
3
- t.binary :tiny_blob, :limit => 255
4
- t.binary :normal_blob, :limit => 65535
5
- t.binary :medium_blob, :limit => 16777215
6
- t.binary :long_blob, :limit => 2147483647
7
- t.text :tiny_text, :limit => 255
8
- t.text :normal_text, :limit => 65535
9
- t.text :medium_text, :limit => 16777215
10
- t.text :long_text, :limit => 2147483647
11
- end
12
-
13
- ActiveRecord::Base.connection.execute <<-SQL
14
- DROP PROCEDURE IF EXISTS ten;
15
- SQL
16
-
17
- ActiveRecord::Base.connection.execute <<-SQL
18
- CREATE PROCEDURE ten() SQL SECURITY INVOKER
19
- BEGIN
20
- select 10;
21
- END
22
- SQL
23
-
24
- ActiveRecord::Base.connection.execute <<-SQL
25
- CREATE PROCEDURE topics() SQL SECURITY INVOKER
26
- BEGIN
27
- select * from topics limit 1;
28
- END
29
- SQL
30
-
31
- end
@@ -1,114 +0,0 @@
1
- ActiveRecord::Schema.define do
2
-
3
- %w(postgresql_arrays postgresql_moneys postgresql_numbers postgresql_times postgresql_network_addresses postgresql_bit_strings
4
- postgresql_oids postgresql_xml_data_type defaults geometrics).each do |table_name|
5
- execute "DROP TABLE IF EXISTS #{quote_table_name table_name}"
6
- end
7
-
8
- execute 'DROP SEQUENCE IF EXISTS companies_nonstd_seq CASCADE'
9
- execute 'CREATE SEQUENCE companies_nonstd_seq START 101 OWNED BY companies.id'
10
- execute "ALTER TABLE companies ALTER COLUMN id SET DEFAULT nextval('companies_nonstd_seq')"
11
- execute 'DROP SEQUENCE IF EXISTS companies_id_seq'
12
-
13
- %w(accounts_id_seq developers_id_seq projects_id_seq topics_id_seq customers_id_seq orders_id_seq).each do |seq_name|
14
- execute "SELECT setval('#{seq_name}', 100)"
15
- end
16
-
17
- execute <<_SQL
18
- CREATE TABLE defaults (
19
- id serial primary key,
20
- modified_date date default CURRENT_DATE,
21
- modified_date_function date default now(),
22
- fixed_date date default '2004-01-01',
23
- modified_time timestamp default CURRENT_TIMESTAMP,
24
- modified_time_function timestamp default now(),
25
- fixed_time timestamp default '2004-01-01 00:00:00.000000-00',
26
- char1 char(1) default 'Y',
27
- char2 character varying(50) default 'a varchar field',
28
- char3 text default 'a text field',
29
- positive_integer integer default 1,
30
- negative_integer integer default -1,
31
- decimal_number decimal(3,2) default 2.78,
32
- multiline_default text DEFAULT '--- []
33
-
34
- '::text
35
- );
36
- _SQL
37
-
38
- execute <<_SQL
39
- CREATE TABLE geometrics (
40
- id serial primary key,
41
- a_point point,
42
- -- a_line line, (the line type is currently not implemented in postgresql)
43
- a_line_segment lseg,
44
- a_box box,
45
- a_path path,
46
- a_polygon polygon,
47
- a_circle circle
48
- );
49
- _SQL
50
-
51
- execute <<_SQL
52
- CREATE TABLE postgresql_arrays (
53
- id SERIAL PRIMARY KEY,
54
- commission_by_quarter INTEGER[],
55
- nicknames TEXT[]
56
- );
57
- _SQL
58
- execute <<_SQL
59
- CREATE TABLE postgresql_moneys (
60
- id SERIAL PRIMARY KEY,
61
- wealth MONEY
62
- );
63
- _SQL
64
-
65
- execute <<_SQL
66
- CREATE TABLE postgresql_numbers (
67
- id SERIAL PRIMARY KEY,
68
- single REAL,
69
- double DOUBLE PRECISION
70
- );
71
- _SQL
72
-
73
- execute <<_SQL
74
- CREATE TABLE postgresql_times (
75
- id SERIAL PRIMARY KEY,
76
- time_interval INTERVAL
77
- );
78
- _SQL
79
-
80
- execute <<_SQL
81
- CREATE TABLE postgresql_network_addresses (
82
- id SERIAL PRIMARY KEY,
83
- cidr_address CIDR,
84
- inet_address INET,
85
- mac_address MACADDR
86
- );
87
- _SQL
88
-
89
- execute <<_SQL
90
- CREATE TABLE postgresql_bit_strings (
91
- id SERIAL PRIMARY KEY,
92
- bit_string BIT(8),
93
- bit_string_varying BIT VARYING(8)
94
- );
95
- _SQL
96
-
97
- execute <<_SQL
98
- CREATE TABLE postgresql_oids (
99
- id SERIAL PRIMARY KEY,
100
- obj_id OID
101
- );
102
- _SQL
103
-
104
- begin
105
- execute <<_SQL
106
- CREATE TABLE postgresql_xml_data_type (
107
- id SERIAL PRIMARY KEY,
108
- data xml
109
- );
110
- _SQL
111
- rescue #This version of PostgreSQL either has no XML support or is was not compiled with XML support: skipping table
112
- end
113
- end
114
-