activerecord 2.3.18 → 3.2.22

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activerecord might be problematic. Click here for more details.

Files changed (454) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +1014 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.rdoc +222 -0
  5. data/examples/performance.rb +100 -126
  6. data/examples/simple.rb +14 -0
  7. data/lib/active_record/aggregations.rb +93 -99
  8. data/lib/active_record/associations/alias_tracker.rb +76 -0
  9. data/lib/active_record/associations/association.rb +247 -0
  10. data/lib/active_record/associations/association_scope.rb +134 -0
  11. data/lib/active_record/associations/belongs_to_association.rb +54 -61
  12. data/lib/active_record/associations/belongs_to_polymorphic_association.rb +17 -59
  13. data/lib/active_record/associations/builder/association.rb +55 -0
  14. data/lib/active_record/associations/builder/belongs_to.rb +88 -0
  15. data/lib/active_record/associations/builder/collection_association.rb +75 -0
  16. data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +57 -0
  17. data/lib/active_record/associations/builder/has_many.rb +71 -0
  18. data/lib/active_record/associations/builder/has_one.rb +62 -0
  19. data/lib/active_record/associations/builder/singular_association.rb +32 -0
  20. data/lib/active_record/associations/collection_association.rb +580 -0
  21. data/lib/active_record/associations/collection_proxy.rb +133 -0
  22. data/lib/active_record/associations/has_and_belongs_to_many_association.rb +39 -119
  23. data/lib/active_record/associations/has_many_association.rb +60 -79
  24. data/lib/active_record/associations/has_many_through_association.rb +127 -206
  25. data/lib/active_record/associations/has_one_association.rb +55 -114
  26. data/lib/active_record/associations/has_one_through_association.rb +25 -26
  27. data/lib/active_record/associations/join_dependency/join_association.rb +159 -0
  28. data/lib/active_record/associations/join_dependency/join_base.rb +24 -0
  29. data/lib/active_record/associations/join_dependency/join_part.rb +78 -0
  30. data/lib/active_record/associations/join_dependency.rb +214 -0
  31. data/lib/active_record/associations/join_helper.rb +55 -0
  32. data/lib/active_record/associations/preloader/association.rb +125 -0
  33. data/lib/active_record/associations/preloader/belongs_to.rb +17 -0
  34. data/lib/active_record/associations/preloader/collection_association.rb +24 -0
  35. data/lib/active_record/associations/preloader/has_and_belongs_to_many.rb +60 -0
  36. data/lib/active_record/associations/preloader/has_many.rb +17 -0
  37. data/lib/active_record/associations/preloader/has_many_through.rb +15 -0
  38. data/lib/active_record/associations/preloader/has_one.rb +23 -0
  39. data/lib/active_record/associations/preloader/has_one_through.rb +9 -0
  40. data/lib/active_record/associations/preloader/singular_association.rb +21 -0
  41. data/lib/active_record/associations/preloader/through_association.rb +67 -0
  42. data/lib/active_record/associations/preloader.rb +181 -0
  43. data/lib/active_record/associations/singular_association.rb +64 -0
  44. data/lib/active_record/associations/through_association.rb +87 -0
  45. data/lib/active_record/associations.rb +693 -1337
  46. data/lib/active_record/attribute_assignment.rb +221 -0
  47. data/lib/active_record/attribute_methods/before_type_cast.rb +31 -0
  48. data/lib/active_record/attribute_methods/deprecated_underscore_read.rb +32 -0
  49. data/lib/active_record/attribute_methods/dirty.rb +111 -0
  50. data/lib/active_record/attribute_methods/primary_key.rb +114 -0
  51. data/lib/active_record/attribute_methods/query.rb +39 -0
  52. data/lib/active_record/attribute_methods/read.rb +136 -0
  53. data/lib/active_record/attribute_methods/serialization.rb +120 -0
  54. data/lib/active_record/attribute_methods/time_zone_conversion.rb +65 -0
  55. data/lib/active_record/attribute_methods/write.rb +70 -0
  56. data/lib/active_record/attribute_methods.rb +211 -339
  57. data/lib/active_record/autosave_association.rb +179 -149
  58. data/lib/active_record/base.rb +401 -2907
  59. data/lib/active_record/callbacks.rb +91 -176
  60. data/lib/active_record/coders/yaml_column.rb +41 -0
  61. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +236 -119
  62. data/lib/active_record/connection_adapters/abstract/connection_specification.rb +110 -58
  63. data/lib/active_record/connection_adapters/abstract/database_limits.rb +12 -11
  64. data/lib/active_record/connection_adapters/abstract/database_statements.rb +175 -74
  65. data/lib/active_record/connection_adapters/abstract/query_cache.rb +31 -35
  66. data/lib/active_record/connection_adapters/abstract/quoting.rb +71 -21
  67. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +81 -311
  68. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +194 -78
  69. data/lib/active_record/connection_adapters/abstract_adapter.rb +130 -83
  70. data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +676 -0
  71. data/lib/active_record/connection_adapters/column.rb +296 -0
  72. data/lib/active_record/connection_adapters/mysql2_adapter.rb +280 -0
  73. data/lib/active_record/connection_adapters/mysql_adapter.rb +272 -493
  74. data/lib/active_record/connection_adapters/postgresql_adapter.rb +650 -405
  75. data/lib/active_record/connection_adapters/schema_cache.rb +69 -0
  76. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +30 -9
  77. data/lib/active_record/connection_adapters/sqlite_adapter.rb +276 -147
  78. data/lib/active_record/connection_adapters/statement_pool.rb +40 -0
  79. data/lib/active_record/counter_cache.rb +123 -0
  80. data/lib/active_record/dynamic_finder_match.rb +41 -14
  81. data/lib/active_record/dynamic_matchers.rb +84 -0
  82. data/lib/active_record/dynamic_scope_match.rb +13 -15
  83. data/lib/active_record/errors.rb +195 -0
  84. data/lib/active_record/explain.rb +86 -0
  85. data/lib/active_record/explain_subscriber.rb +25 -0
  86. data/lib/active_record/fixtures/file.rb +65 -0
  87. data/lib/active_record/fixtures.rb +695 -770
  88. data/lib/active_record/identity_map.rb +162 -0
  89. data/lib/active_record/inheritance.rb +174 -0
  90. data/lib/active_record/integration.rb +60 -0
  91. data/lib/active_record/locale/en.yml +9 -27
  92. data/lib/active_record/locking/optimistic.rb +76 -73
  93. data/lib/active_record/locking/pessimistic.rb +32 -10
  94. data/lib/active_record/log_subscriber.rb +72 -0
  95. data/lib/active_record/migration/command_recorder.rb +105 -0
  96. data/lib/active_record/migration.rb +415 -205
  97. data/lib/active_record/model_schema.rb +368 -0
  98. data/lib/active_record/nested_attributes.rb +153 -63
  99. data/lib/active_record/observer.rb +27 -103
  100. data/lib/active_record/persistence.rb +376 -0
  101. data/lib/active_record/query_cache.rb +49 -8
  102. data/lib/active_record/querying.rb +58 -0
  103. data/lib/active_record/railtie.rb +131 -0
  104. data/lib/active_record/railties/console_sandbox.rb +6 -0
  105. data/lib/active_record/railties/controller_runtime.rb +49 -0
  106. data/lib/active_record/railties/databases.rake +659 -0
  107. data/lib/active_record/railties/jdbcmysql_error.rb +16 -0
  108. data/lib/active_record/readonly_attributes.rb +26 -0
  109. data/lib/active_record/reflection.rb +269 -120
  110. data/lib/active_record/relation/batches.rb +90 -0
  111. data/lib/active_record/relation/calculations.rb +372 -0
  112. data/lib/active_record/relation/delegation.rb +49 -0
  113. data/lib/active_record/relation/finder_methods.rb +402 -0
  114. data/lib/active_record/relation/predicate_builder.rb +63 -0
  115. data/lib/active_record/relation/query_methods.rb +417 -0
  116. data/lib/active_record/relation/spawn_methods.rb +180 -0
  117. data/lib/active_record/relation.rb +537 -0
  118. data/lib/active_record/result.rb +40 -0
  119. data/lib/active_record/sanitization.rb +194 -0
  120. data/lib/active_record/schema.rb +9 -6
  121. data/lib/active_record/schema_dumper.rb +55 -32
  122. data/lib/active_record/scoping/default.rb +142 -0
  123. data/lib/active_record/scoping/named.rb +200 -0
  124. data/lib/active_record/scoping.rb +152 -0
  125. data/lib/active_record/serialization.rb +8 -91
  126. data/lib/active_record/serializers/xml_serializer.rb +43 -197
  127. data/lib/active_record/session_store.rb +129 -103
  128. data/lib/active_record/store.rb +52 -0
  129. data/lib/active_record/test_case.rb +30 -23
  130. data/lib/active_record/timestamp.rb +95 -52
  131. data/lib/active_record/transactions.rb +212 -66
  132. data/lib/active_record/translation.rb +22 -0
  133. data/lib/active_record/validations/associated.rb +43 -0
  134. data/lib/active_record/validations/uniqueness.rb +180 -0
  135. data/lib/active_record/validations.rb +43 -1106
  136. data/lib/active_record/version.rb +5 -4
  137. data/lib/active_record.rb +121 -48
  138. data/lib/rails/generators/active_record/migration/migration_generator.rb +25 -0
  139. data/lib/rails/generators/active_record/migration/templates/migration.rb +34 -0
  140. data/lib/rails/generators/active_record/migration.rb +15 -0
  141. data/lib/rails/generators/active_record/model/model_generator.rb +47 -0
  142. data/lib/rails/generators/active_record/model/templates/migration.rb +15 -0
  143. data/lib/rails/generators/active_record/model/templates/model.rb +12 -0
  144. data/lib/rails/generators/active_record/model/templates/module.rb +7 -0
  145. data/lib/rails/generators/active_record/observer/observer_generator.rb +15 -0
  146. data/lib/rails/generators/active_record/observer/templates/observer.rb +4 -0
  147. data/lib/rails/generators/active_record/session_migration/session_migration_generator.rb +25 -0
  148. data/lib/rails/generators/active_record/session_migration/templates/migration.rb +12 -0
  149. data/lib/rails/generators/active_record.rb +25 -0
  150. metadata +187 -363
  151. data/CHANGELOG +0 -5904
  152. data/README +0 -351
  153. data/RUNNING_UNIT_TESTS +0 -36
  154. data/Rakefile +0 -268
  155. data/install.rb +0 -30
  156. data/lib/active_record/association_preload.rb +0 -406
  157. data/lib/active_record/associations/association_collection.rb +0 -533
  158. data/lib/active_record/associations/association_proxy.rb +0 -288
  159. data/lib/active_record/batches.rb +0 -85
  160. data/lib/active_record/calculations.rb +0 -321
  161. data/lib/active_record/dirty.rb +0 -183
  162. data/lib/active_record/named_scope.rb +0 -197
  163. data/lib/active_record/serializers/json_serializer.rb +0 -91
  164. data/lib/activerecord.rb +0 -2
  165. data/test/assets/example.log +0 -1
  166. data/test/assets/flowers.jpg +0 -0
  167. data/test/cases/aaa_create_tables_test.rb +0 -24
  168. data/test/cases/active_schema_test_mysql.rb +0 -122
  169. data/test/cases/active_schema_test_postgresql.rb +0 -24
  170. data/test/cases/adapter_test.rb +0 -144
  171. data/test/cases/aggregations_test.rb +0 -167
  172. data/test/cases/ar_schema_test.rb +0 -32
  173. data/test/cases/associations/belongs_to_associations_test.rb +0 -438
  174. data/test/cases/associations/callbacks_test.rb +0 -161
  175. data/test/cases/associations/cascaded_eager_loading_test.rb +0 -131
  176. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +0 -36
  177. data/test/cases/associations/eager_load_nested_include_test.rb +0 -131
  178. data/test/cases/associations/eager_load_nested_polymorphic_include.rb +0 -19
  179. data/test/cases/associations/eager_singularization_test.rb +0 -145
  180. data/test/cases/associations/eager_test.rb +0 -852
  181. data/test/cases/associations/extension_test.rb +0 -62
  182. data/test/cases/associations/habtm_join_table_test.rb +0 -56
  183. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +0 -827
  184. data/test/cases/associations/has_many_associations_test.rb +0 -1273
  185. data/test/cases/associations/has_many_through_associations_test.rb +0 -360
  186. data/test/cases/associations/has_one_associations_test.rb +0 -330
  187. data/test/cases/associations/has_one_through_associations_test.rb +0 -209
  188. data/test/cases/associations/inner_join_association_test.rb +0 -93
  189. data/test/cases/associations/inverse_associations_test.rb +0 -566
  190. data/test/cases/associations/join_model_test.rb +0 -712
  191. data/test/cases/associations_test.rb +0 -282
  192. data/test/cases/attribute_methods_test.rb +0 -305
  193. data/test/cases/autosave_association_test.rb +0 -1218
  194. data/test/cases/base_test.rb +0 -2166
  195. data/test/cases/batches_test.rb +0 -81
  196. data/test/cases/binary_test.rb +0 -30
  197. data/test/cases/calculations_test.rb +0 -360
  198. data/test/cases/callbacks_observers_test.rb +0 -38
  199. data/test/cases/callbacks_test.rb +0 -438
  200. data/test/cases/class_inheritable_attributes_test.rb +0 -32
  201. data/test/cases/column_alias_test.rb +0 -17
  202. data/test/cases/column_definition_test.rb +0 -70
  203. data/test/cases/connection_pool_test.rb +0 -25
  204. data/test/cases/connection_test_firebird.rb +0 -8
  205. data/test/cases/connection_test_mysql.rb +0 -65
  206. data/test/cases/copy_table_test_sqlite.rb +0 -80
  207. data/test/cases/counter_cache_test.rb +0 -84
  208. data/test/cases/database_statements_test.rb +0 -12
  209. data/test/cases/datatype_test_postgresql.rb +0 -204
  210. data/test/cases/date_time_test.rb +0 -37
  211. data/test/cases/default_test_firebird.rb +0 -16
  212. data/test/cases/defaults_test.rb +0 -111
  213. data/test/cases/deprecated_finder_test.rb +0 -30
  214. data/test/cases/dirty_test.rb +0 -316
  215. data/test/cases/finder_respond_to_test.rb +0 -76
  216. data/test/cases/finder_test.rb +0 -1098
  217. data/test/cases/fixtures_test.rb +0 -661
  218. data/test/cases/helper.rb +0 -68
  219. data/test/cases/i18n_test.rb +0 -46
  220. data/test/cases/inheritance_test.rb +0 -262
  221. data/test/cases/invalid_date_test.rb +0 -24
  222. data/test/cases/json_serialization_test.rb +0 -219
  223. data/test/cases/lifecycle_test.rb +0 -193
  224. data/test/cases/locking_test.rb +0 -350
  225. data/test/cases/method_scoping_test.rb +0 -704
  226. data/test/cases/migration_test.rb +0 -1649
  227. data/test/cases/migration_test_firebird.rb +0 -124
  228. data/test/cases/mixin_test.rb +0 -96
  229. data/test/cases/modules_test.rb +0 -109
  230. data/test/cases/multiple_db_test.rb +0 -85
  231. data/test/cases/named_scope_test.rb +0 -372
  232. data/test/cases/nested_attributes_test.rb +0 -840
  233. data/test/cases/pk_test.rb +0 -119
  234. data/test/cases/pooled_connections_test.rb +0 -103
  235. data/test/cases/query_cache_test.rb +0 -129
  236. data/test/cases/readonly_test.rb +0 -107
  237. data/test/cases/reflection_test.rb +0 -234
  238. data/test/cases/reload_models_test.rb +0 -22
  239. data/test/cases/repair_helper.rb +0 -50
  240. data/test/cases/reserved_word_test_mysql.rb +0 -176
  241. data/test/cases/sanitize_test.rb +0 -25
  242. data/test/cases/schema_authorization_test_postgresql.rb +0 -75
  243. data/test/cases/schema_dumper_test.rb +0 -211
  244. data/test/cases/schema_test_postgresql.rb +0 -178
  245. data/test/cases/serialization_test.rb +0 -47
  246. data/test/cases/sp_test_mysql.rb +0 -16
  247. data/test/cases/synonym_test_oracle.rb +0 -17
  248. data/test/cases/timestamp_test.rb +0 -75
  249. data/test/cases/transactions_test.rb +0 -543
  250. data/test/cases/unconnected_test.rb +0 -32
  251. data/test/cases/validations_i18n_test.rb +0 -925
  252. data/test/cases/validations_test.rb +0 -1684
  253. data/test/cases/xml_serialization_test.rb +0 -240
  254. data/test/cases/yaml_serialization_test.rb +0 -11
  255. data/test/config.rb +0 -5
  256. data/test/connections/jdbc_jdbcderby/connection.rb +0 -18
  257. data/test/connections/jdbc_jdbch2/connection.rb +0 -18
  258. data/test/connections/jdbc_jdbchsqldb/connection.rb +0 -18
  259. data/test/connections/jdbc_jdbcmysql/connection.rb +0 -26
  260. data/test/connections/jdbc_jdbcpostgresql/connection.rb +0 -26
  261. data/test/connections/jdbc_jdbcsqlite3/connection.rb +0 -25
  262. data/test/connections/native_db2/connection.rb +0 -25
  263. data/test/connections/native_firebird/connection.rb +0 -26
  264. data/test/connections/native_frontbase/connection.rb +0 -27
  265. data/test/connections/native_mysql/connection.rb +0 -25
  266. data/test/connections/native_openbase/connection.rb +0 -21
  267. data/test/connections/native_oracle/connection.rb +0 -27
  268. data/test/connections/native_postgresql/connection.rb +0 -21
  269. data/test/connections/native_sqlite/connection.rb +0 -25
  270. data/test/connections/native_sqlite3/connection.rb +0 -25
  271. data/test/connections/native_sqlite3/in_memory_connection.rb +0 -18
  272. data/test/connections/native_sybase/connection.rb +0 -23
  273. data/test/fixtures/accounts.yml +0 -29
  274. data/test/fixtures/all/developers.yml +0 -0
  275. data/test/fixtures/all/people.csv +0 -0
  276. data/test/fixtures/all/tasks.yml +0 -0
  277. data/test/fixtures/author_addresses.yml +0 -5
  278. data/test/fixtures/author_favorites.yml +0 -4
  279. data/test/fixtures/authors.yml +0 -9
  280. data/test/fixtures/binaries.yml +0 -132
  281. data/test/fixtures/books.yml +0 -7
  282. data/test/fixtures/categories/special_categories.yml +0 -9
  283. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +0 -4
  284. data/test/fixtures/categories.yml +0 -14
  285. data/test/fixtures/categories_ordered.yml +0 -7
  286. data/test/fixtures/categories_posts.yml +0 -23
  287. data/test/fixtures/categorizations.yml +0 -17
  288. data/test/fixtures/clubs.yml +0 -6
  289. data/test/fixtures/comments.yml +0 -59
  290. data/test/fixtures/companies.yml +0 -56
  291. data/test/fixtures/computers.yml +0 -4
  292. data/test/fixtures/courses.yml +0 -7
  293. data/test/fixtures/customers.yml +0 -26
  294. data/test/fixtures/developers.yml +0 -21
  295. data/test/fixtures/developers_projects.yml +0 -17
  296. data/test/fixtures/edges.yml +0 -6
  297. data/test/fixtures/entrants.yml +0 -14
  298. data/test/fixtures/faces.yml +0 -11
  299. data/test/fixtures/fk_test_has_fk.yml +0 -3
  300. data/test/fixtures/fk_test_has_pk.yml +0 -2
  301. data/test/fixtures/funny_jokes.yml +0 -10
  302. data/test/fixtures/interests.yml +0 -33
  303. data/test/fixtures/items.yml +0 -4
  304. data/test/fixtures/jobs.yml +0 -7
  305. data/test/fixtures/legacy_things.yml +0 -3
  306. data/test/fixtures/mateys.yml +0 -4
  307. data/test/fixtures/member_types.yml +0 -6
  308. data/test/fixtures/members.yml +0 -6
  309. data/test/fixtures/memberships.yml +0 -20
  310. data/test/fixtures/men.yml +0 -5
  311. data/test/fixtures/minimalistics.yml +0 -2
  312. data/test/fixtures/mixed_case_monkeys.yml +0 -6
  313. data/test/fixtures/mixins.yml +0 -29
  314. data/test/fixtures/movies.yml +0 -7
  315. data/test/fixtures/naked/csv/accounts.csv +0 -1
  316. data/test/fixtures/naked/yml/accounts.yml +0 -1
  317. data/test/fixtures/naked/yml/companies.yml +0 -1
  318. data/test/fixtures/naked/yml/courses.yml +0 -1
  319. data/test/fixtures/organizations.yml +0 -5
  320. data/test/fixtures/owners.yml +0 -7
  321. data/test/fixtures/parrots.yml +0 -27
  322. data/test/fixtures/parrots_pirates.yml +0 -7
  323. data/test/fixtures/people.yml +0 -15
  324. data/test/fixtures/pets.yml +0 -14
  325. data/test/fixtures/pirates.yml +0 -9
  326. data/test/fixtures/polymorphic_designs.yml +0 -19
  327. data/test/fixtures/polymorphic_prices.yml +0 -19
  328. data/test/fixtures/posts.yml +0 -52
  329. data/test/fixtures/price_estimates.yml +0 -7
  330. data/test/fixtures/projects.yml +0 -7
  331. data/test/fixtures/readers.yml +0 -9
  332. data/test/fixtures/references.yml +0 -17
  333. data/test/fixtures/reserved_words/distinct.yml +0 -5
  334. data/test/fixtures/reserved_words/distincts_selects.yml +0 -11
  335. data/test/fixtures/reserved_words/group.yml +0 -14
  336. data/test/fixtures/reserved_words/select.yml +0 -8
  337. data/test/fixtures/reserved_words/values.yml +0 -7
  338. data/test/fixtures/ships.yml +0 -5
  339. data/test/fixtures/sponsors.yml +0 -9
  340. data/test/fixtures/subscribers.yml +0 -7
  341. data/test/fixtures/subscriptions.yml +0 -12
  342. data/test/fixtures/taggings.yml +0 -28
  343. data/test/fixtures/tags.yml +0 -7
  344. data/test/fixtures/tasks.yml +0 -7
  345. data/test/fixtures/tees.yml +0 -4
  346. data/test/fixtures/ties.yml +0 -4
  347. data/test/fixtures/topics.yml +0 -42
  348. data/test/fixtures/toys.yml +0 -4
  349. data/test/fixtures/treasures.yml +0 -10
  350. data/test/fixtures/vertices.yml +0 -4
  351. data/test/fixtures/warehouse-things.yml +0 -3
  352. data/test/fixtures/zines.yml +0 -5
  353. data/test/migrations/broken/100_migration_that_raises_exception.rb +0 -10
  354. data/test/migrations/decimal/1_give_me_big_numbers.rb +0 -15
  355. data/test/migrations/duplicate/1_people_have_last_names.rb +0 -9
  356. data/test/migrations/duplicate/2_we_need_reminders.rb +0 -12
  357. data/test/migrations/duplicate/3_foo.rb +0 -7
  358. data/test/migrations/duplicate/3_innocent_jointable.rb +0 -12
  359. data/test/migrations/duplicate_names/20080507052938_chunky.rb +0 -7
  360. data/test/migrations/duplicate_names/20080507053028_chunky.rb +0 -7
  361. data/test/migrations/interleaved/pass_1/3_innocent_jointable.rb +0 -12
  362. data/test/migrations/interleaved/pass_2/1_people_have_last_names.rb +0 -9
  363. data/test/migrations/interleaved/pass_2/3_innocent_jointable.rb +0 -12
  364. data/test/migrations/interleaved/pass_3/1_people_have_last_names.rb +0 -9
  365. data/test/migrations/interleaved/pass_3/2_i_raise_on_down.rb +0 -8
  366. data/test/migrations/interleaved/pass_3/3_innocent_jointable.rb +0 -12
  367. data/test/migrations/missing/1000_people_have_middle_names.rb +0 -9
  368. data/test/migrations/missing/1_people_have_last_names.rb +0 -9
  369. data/test/migrations/missing/3_we_need_reminders.rb +0 -12
  370. data/test/migrations/missing/4_innocent_jointable.rb +0 -12
  371. data/test/migrations/valid/1_people_have_last_names.rb +0 -9
  372. data/test/migrations/valid/2_we_need_reminders.rb +0 -12
  373. data/test/migrations/valid/3_innocent_jointable.rb +0 -12
  374. data/test/models/author.rb +0 -151
  375. data/test/models/auto_id.rb +0 -4
  376. data/test/models/binary.rb +0 -2
  377. data/test/models/bird.rb +0 -9
  378. data/test/models/book.rb +0 -4
  379. data/test/models/categorization.rb +0 -5
  380. data/test/models/category.rb +0 -34
  381. data/test/models/citation.rb +0 -6
  382. data/test/models/club.rb +0 -13
  383. data/test/models/column_name.rb +0 -3
  384. data/test/models/comment.rb +0 -29
  385. data/test/models/company.rb +0 -173
  386. data/test/models/company_in_module.rb +0 -78
  387. data/test/models/computer.rb +0 -3
  388. data/test/models/contact.rb +0 -16
  389. data/test/models/contract.rb +0 -5
  390. data/test/models/course.rb +0 -3
  391. data/test/models/customer.rb +0 -73
  392. data/test/models/default.rb +0 -2
  393. data/test/models/developer.rb +0 -101
  394. data/test/models/edge.rb +0 -5
  395. data/test/models/entrant.rb +0 -3
  396. data/test/models/essay.rb +0 -3
  397. data/test/models/event.rb +0 -3
  398. data/test/models/event_author.rb +0 -8
  399. data/test/models/face.rb +0 -7
  400. data/test/models/guid.rb +0 -2
  401. data/test/models/interest.rb +0 -5
  402. data/test/models/invoice.rb +0 -4
  403. data/test/models/item.rb +0 -7
  404. data/test/models/job.rb +0 -5
  405. data/test/models/joke.rb +0 -3
  406. data/test/models/keyboard.rb +0 -3
  407. data/test/models/legacy_thing.rb +0 -3
  408. data/test/models/line_item.rb +0 -3
  409. data/test/models/man.rb +0 -9
  410. data/test/models/matey.rb +0 -4
  411. data/test/models/member.rb +0 -12
  412. data/test/models/member_detail.rb +0 -5
  413. data/test/models/member_type.rb +0 -3
  414. data/test/models/membership.rb +0 -9
  415. data/test/models/minimalistic.rb +0 -2
  416. data/test/models/mixed_case_monkey.rb +0 -3
  417. data/test/models/movie.rb +0 -5
  418. data/test/models/order.rb +0 -4
  419. data/test/models/organization.rb +0 -6
  420. data/test/models/owner.rb +0 -5
  421. data/test/models/parrot.rb +0 -22
  422. data/test/models/person.rb +0 -16
  423. data/test/models/pet.rb +0 -5
  424. data/test/models/pirate.rb +0 -80
  425. data/test/models/polymorphic_design.rb +0 -3
  426. data/test/models/polymorphic_price.rb +0 -3
  427. data/test/models/post.rb +0 -102
  428. data/test/models/price_estimate.rb +0 -3
  429. data/test/models/project.rb +0 -30
  430. data/test/models/reader.rb +0 -4
  431. data/test/models/reference.rb +0 -4
  432. data/test/models/reply.rb +0 -46
  433. data/test/models/ship.rb +0 -19
  434. data/test/models/ship_part.rb +0 -7
  435. data/test/models/sponsor.rb +0 -4
  436. data/test/models/subject.rb +0 -4
  437. data/test/models/subscriber.rb +0 -8
  438. data/test/models/subscription.rb +0 -4
  439. data/test/models/tag.rb +0 -7
  440. data/test/models/tagging.rb +0 -10
  441. data/test/models/task.rb +0 -3
  442. data/test/models/tee.rb +0 -4
  443. data/test/models/tie.rb +0 -4
  444. data/test/models/topic.rb +0 -80
  445. data/test/models/toy.rb +0 -6
  446. data/test/models/treasure.rb +0 -8
  447. data/test/models/vertex.rb +0 -9
  448. data/test/models/warehouse_thing.rb +0 -5
  449. data/test/models/zine.rb +0 -3
  450. data/test/schema/mysql_specific_schema.rb +0 -31
  451. data/test/schema/postgresql_specific_schema.rb +0 -114
  452. data/test/schema/schema.rb +0 -550
  453. data/test/schema/schema2.rb +0 -6
  454. data/test/schema/sqlite_specific_schema.rb +0 -25
@@ -1,12 +0,0 @@
1
- class InnocentJointable < ActiveRecord::Migration
2
- def self.up
3
- create_table("people_reminders", :id => false) do |t|
4
- t.column :reminder_id, :integer
5
- t.column :person_id, :integer
6
- end
7
- end
8
-
9
- def self.down
10
- drop_table "people_reminders"
11
- end
12
- end
@@ -1,9 +0,0 @@
1
- class PeopleHaveMiddleNames < ActiveRecord::Migration
2
- def self.up
3
- add_column "people", "middle_name", :string
4
- end
5
-
6
- def self.down
7
- remove_column "people", "middle_name"
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- class PeopleHaveLastNames < ActiveRecord::Migration
2
- def self.up
3
- add_column "people", "last_name", :string
4
- end
5
-
6
- def self.down
7
- remove_column "people", "last_name"
8
- end
9
- end
@@ -1,12 +0,0 @@
1
- class WeNeedReminders < ActiveRecord::Migration
2
- def self.up
3
- create_table("reminders") do |t|
4
- t.column :content, :text
5
- t.column :remind_at, :datetime
6
- end
7
- end
8
-
9
- def self.down
10
- drop_table "reminders"
11
- end
12
- end
@@ -1,12 +0,0 @@
1
- class InnocentJointable < ActiveRecord::Migration
2
- def self.up
3
- create_table("people_reminders", :id => false) do |t|
4
- t.column :reminder_id, :integer
5
- t.column :person_id, :integer
6
- end
7
- end
8
-
9
- def self.down
10
- drop_table "people_reminders"
11
- end
12
- end
@@ -1,9 +0,0 @@
1
- class PeopleHaveLastNames < ActiveRecord::Migration
2
- def self.up
3
- add_column "people", "last_name", :string
4
- end
5
-
6
- def self.down
7
- remove_column "people", "last_name"
8
- end
9
- end
@@ -1,12 +0,0 @@
1
- class WeNeedReminders < ActiveRecord::Migration
2
- def self.up
3
- create_table("reminders") do |t|
4
- t.column :content, :text
5
- t.column :remind_at, :datetime
6
- end
7
- end
8
-
9
- def self.down
10
- drop_table "reminders"
11
- end
12
- end
@@ -1,12 +0,0 @@
1
- class InnocentJointable < ActiveRecord::Migration
2
- def self.up
3
- create_table("people_reminders", :id => false) do |t|
4
- t.column :reminder_id, :integer
5
- t.column :person_id, :integer
6
- end
7
- end
8
-
9
- def self.down
10
- drop_table "people_reminders"
11
- end
12
- end
@@ -1,151 +0,0 @@
1
- class Author < ActiveRecord::Base
2
- has_many :posts
3
- has_many :very_special_comments, :through => :posts
4
- has_many :posts_with_comments, :include => :comments, :class_name => "Post"
5
- has_many :popular_grouped_posts, :include => :comments, :class_name => "Post", :group => "type", :having => "SUM(comments_count) > 1", :select => "type"
6
- has_many :posts_with_comments_sorted_by_comment_id, :include => :comments, :class_name => "Post", :order => 'comments.id'
7
- has_many :posts_sorted_by_id_limited, :class_name => "Post", :order => 'posts.id', :limit => 1
8
- has_many :posts_with_categories, :include => :categories, :class_name => "Post"
9
- has_many :posts_with_comments_and_categories, :include => [ :comments, :categories ], :order => "posts.id", :class_name => "Post"
10
- has_many :posts_containing_the_letter_a, :class_name => "Post"
11
- has_many :posts_with_extension, :class_name => "Post" do #, :extend => ProxyTestExtension
12
- def testing_proxy_owner
13
- proxy_owner
14
- end
15
- def testing_proxy_reflection
16
- proxy_reflection
17
- end
18
- def testing_proxy_target
19
- proxy_target
20
- end
21
- end
22
- has_one :post_about_thinking, :class_name => 'Post', :conditions => "posts.title like '%thinking%'"
23
- has_one :post_about_thinking_with_last_comment, :class_name => 'Post', :conditions => "posts.title like '%thinking%'", :include => :last_comment
24
- has_many :comments, :through => :posts
25
- has_many :comments_containing_the_letter_e, :through => :posts, :source => :comments
26
- has_many :comments_with_order_and_conditions, :through => :posts, :source => :comments, :order => 'comments.body', :conditions => "comments.body like 'Thank%'"
27
- has_many :comments_with_include, :through => :posts, :source => :comments, :include => :post
28
-
29
- has_many :thinking_posts, :class_name => 'Post', :conditions => { :title => 'So I was thinking' }, :dependent => :delete_all
30
- has_many :welcome_posts, :class_name => 'Post', :conditions => { :title => 'Welcome to the weblog' }
31
-
32
- has_many :comments_desc, :through => :posts, :source => :comments, :order => 'comments.id DESC'
33
- has_many :limited_comments, :through => :posts, :source => :comments, :limit => 1
34
- has_many :funky_comments, :through => :posts, :source => :comments
35
- has_many :ordered_uniq_comments, :through => :posts, :source => :comments, :uniq => true, :order => 'comments.id'
36
- has_many :ordered_uniq_comments_desc, :through => :posts, :source => :comments, :uniq => true, :order => 'comments.id DESC'
37
- has_many :readonly_comments, :through => :posts, :source => :comments, :readonly => true
38
-
39
- has_many :special_posts
40
- has_many :special_post_comments, :through => :special_posts, :source => :comments
41
-
42
- has_many :sti_posts, :class_name => 'StiPost'
43
- has_many :sti_post_comments, :through => :sti_posts, :source => :comments
44
-
45
- has_many :special_nonexistant_posts, :class_name => "SpecialPost", :conditions => "posts.body = 'nonexistant'"
46
- has_many :special_nonexistant_post_comments, :through => :special_nonexistant_posts, :source => :comments, :conditions => "comments.post_id = 0"
47
- has_many :nonexistant_comments, :through => :posts
48
-
49
- has_many :hello_posts, :class_name => "Post", :conditions => "posts.body = 'hello'"
50
- has_many :hello_post_comments, :through => :hello_posts, :source => :comments
51
- has_many :posts_with_no_comments, :class_name => 'Post', :conditions => 'comments.id is null', :include => :comments
52
-
53
- has_many :hello_posts_with_hash_conditions, :class_name => "Post",
54
- :conditions => {:body => 'hello'}
55
- has_many :hello_post_comments_with_hash_conditions, :through =>
56
- :hello_posts_with_hash_conditions, :source => :comments
57
-
58
- has_many :other_posts, :class_name => "Post"
59
- has_many :posts_with_callbacks, :class_name => "Post", :before_add => :log_before_adding,
60
- :after_add => :log_after_adding,
61
- :before_remove => :log_before_removing,
62
- :after_remove => :log_after_removing
63
- has_many :posts_with_proc_callbacks, :class_name => "Post",
64
- :before_add => Proc.new {|o, r| o.post_log << "before_adding#{r.id || '<new>'}"},
65
- :after_add => Proc.new {|o, r| o.post_log << "after_adding#{r.id || '<new>'}"},
66
- :before_remove => Proc.new {|o, r| o.post_log << "before_removing#{r.id}"},
67
- :after_remove => Proc.new {|o, r| o.post_log << "after_removing#{r.id}"}
68
- has_many :posts_with_multiple_callbacks, :class_name => "Post",
69
- :before_add => [:log_before_adding, Proc.new {|o, r| o.post_log << "before_adding_proc#{r.id || '<new>'}"}],
70
- :after_add => [:log_after_adding, Proc.new {|o, r| o.post_log << "after_adding_proc#{r.id || '<new>'}"}]
71
- has_many :unchangable_posts, :class_name => "Post", :before_add => :raise_exception, :after_add => :log_after_adding
72
-
73
- has_many :categorizations
74
- has_many :categories, :through => :categorizations
75
-
76
- has_many :categories_like_general, :through => :categorizations, :source => :category, :class_name => 'Category', :conditions => { :name => 'General' }
77
-
78
- has_many :categorized_posts, :through => :categorizations, :source => :post
79
- has_many :unique_categorized_posts, :through => :categorizations, :source => :post, :uniq => true
80
-
81
- has_many :nothings, :through => :kateggorisatons, :class_name => 'Category'
82
-
83
- has_many :author_favorites
84
- has_many :favorite_authors, :through => :author_favorites, :order => 'name'
85
-
86
- has_many :tagging, :through => :posts # through polymorphic has_one
87
- has_many :taggings, :through => :posts, :source => :taggings # through polymorphic has_many
88
- has_many :tags, :through => :posts # through has_many :through
89
- has_many :post_categories, :through => :posts, :source => :categories
90
-
91
- has_many :event_authors
92
- has_many :events, :through => :event_authors
93
-
94
- has_one :essay, :primary_key => :name, :as => :writer
95
-
96
- belongs_to :author_address, :dependent => :destroy
97
- belongs_to :author_address_extra, :dependent => :delete, :class_name => "AuthorAddress"
98
-
99
- attr_accessor :post_log
100
-
101
- def after_initialize
102
- @post_log = []
103
- end
104
-
105
- def label
106
- "#{id}-#{name}"
107
- end
108
-
109
- validates_presence_of :name
110
-
111
- private
112
- def log_before_adding(object)
113
- @post_log << "before_adding#{object.id || '<new>'}"
114
- end
115
-
116
- def log_after_adding(object)
117
- @post_log << "after_adding#{object.id}"
118
- end
119
-
120
- def log_before_removing(object)
121
- @post_log << "before_removing#{object.id}"
122
- end
123
-
124
- def log_after_removing(object)
125
- @post_log << "after_removing#{object.id}"
126
- end
127
-
128
- def raise_exception(object)
129
- raise Exception.new("You can't add a post")
130
- end
131
- end
132
-
133
- class AuthorAddress < ActiveRecord::Base
134
- has_one :author
135
-
136
- def self.destroyed_author_address_ids
137
- @destroyed_author_address_ids ||= Hash.new { |h,k| h[k] = [] }
138
- end
139
-
140
- before_destroy do |author_address|
141
- if author_address.author
142
- AuthorAddress.destroyed_author_address_ids[author_address.author.id] << author_address.id
143
- end
144
- true
145
- end
146
- end
147
-
148
- class AuthorFavorite < ActiveRecord::Base
149
- belongs_to :author
150
- belongs_to :favorite_author, :class_name => "Author"
151
- end
@@ -1,4 +0,0 @@
1
- class AutoId < ActiveRecord::Base
2
- def self.table_name () "auto_id_tests" end
3
- def self.primary_key () "auto_id" end
4
- end
@@ -1,2 +0,0 @@
1
- class Binary < ActiveRecord::Base
2
- end
data/test/models/bird.rb DELETED
@@ -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
data/test/models/book.rb DELETED
@@ -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
data/test/models/club.rb DELETED
@@ -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