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,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
@@ -1,2 +0,0 @@
1
- class Default < ActiveRecord::Base
2
- end
@@ -1,101 +0,0 @@
1
- module DeveloperProjectsAssociationExtension
2
- def find_most_recent
3
- find(:first, :order => "id DESC")
4
- end
5
- end
6
-
7
- module DeveloperProjectsAssociationExtension2
8
- def find_least_recent
9
- find(:first, :order => "id ASC")
10
- end
11
- end
12
-
13
- class Developer < ActiveRecord::Base
14
- has_and_belongs_to_many :projects do
15
- def find_most_recent
16
- find(:first, :order => "id DESC")
17
- end
18
- end
19
-
20
- has_and_belongs_to_many :projects_extended_by_name,
21
- :class_name => "Project",
22
- :join_table => "developers_projects",
23
- :association_foreign_key => "project_id",
24
- :extend => DeveloperProjectsAssociationExtension
25
-
26
- has_and_belongs_to_many :projects_extended_by_name_twice,
27
- :class_name => "Project",
28
- :join_table => "developers_projects",
29
- :association_foreign_key => "project_id",
30
- :extend => [DeveloperProjectsAssociationExtension, DeveloperProjectsAssociationExtension2]
31
-
32
- has_and_belongs_to_many :projects_extended_by_name_and_block,
33
- :class_name => "Project",
34
- :join_table => "developers_projects",
35
- :association_foreign_key => "project_id",
36
- :extend => DeveloperProjectsAssociationExtension do
37
- def find_least_recent
38
- find(:first, :order => "id ASC")
39
- end
40
- end
41
-
42
- has_and_belongs_to_many :special_projects, :join_table => 'developers_projects', :association_foreign_key => 'project_id'
43
-
44
- has_many :audit_logs
45
-
46
- named_scope :jamises, :conditions => {:name => 'Jamis'}
47
-
48
- validates_inclusion_of :salary, :in => 50000..200000
49
- validates_length_of :name, :within => 3..20
50
-
51
- before_create do |developer|
52
- developer.audit_logs.build :message => "Computer created"
53
- end
54
-
55
- def log=(message)
56
- audit_logs.build :message => message
57
- end
58
- end
59
-
60
- class AuditLog < ActiveRecord::Base
61
- belongs_to :developer, :validate => true
62
- belongs_to :unvalidated_developer, :class_name => 'Developer'
63
- end
64
-
65
- DeveloperSalary = Struct.new(:amount)
66
- class DeveloperWithAggregate < ActiveRecord::Base
67
- self.table_name = 'developers'
68
- composed_of :salary, :class_name => 'DeveloperSalary', :mapping => [%w(salary amount)]
69
- end
70
-
71
- class DeveloperWithBeforeDestroyRaise < ActiveRecord::Base
72
- self.table_name = 'developers'
73
- has_and_belongs_to_many :projects, :join_table => 'developers_projects', :foreign_key => 'developer_id'
74
- before_destroy :raise_if_projects_empty!
75
-
76
- def raise_if_projects_empty!
77
- raise if projects.empty?
78
- end
79
- end
80
-
81
- class DeveloperOrderedBySalary < ActiveRecord::Base
82
- self.table_name = 'developers'
83
- default_scope :order => 'salary DESC'
84
- named_scope :by_name, :order => 'name DESC'
85
-
86
- def self.all_ordered_by_name
87
- with_scope(:find => { :order => 'name DESC' }) do
88
- find(:all)
89
- end
90
- end
91
- end
92
-
93
- class DeveloperCalledDavid < ActiveRecord::Base
94
- self.table_name = 'developers'
95
- default_scope :conditions => "name = 'David'"
96
- end
97
-
98
- class DeveloperCalledJamis < ActiveRecord::Base
99
- self.table_name = 'developers'
100
- default_scope :conditions => { :name => 'Jamis' }
101
- end
data/test/models/edge.rb DELETED
@@ -1,5 +0,0 @@
1
- # This class models an edge in a directed graph.
2
- class Edge < ActiveRecord::Base
3
- belongs_to :source, :class_name => 'Vertex', :foreign_key => 'source_id'
4
- belongs_to :sink, :class_name => 'Vertex', :foreign_key => 'sink_id'
5
- end
@@ -1,3 +0,0 @@
1
- class Entrant < ActiveRecord::Base
2
- belongs_to :course
3
- end
data/test/models/essay.rb DELETED
@@ -1,3 +0,0 @@
1
- class Essay < ActiveRecord::Base
2
- belongs_to :writer, :primary_key => :name, :polymorphic => true
3
- end
data/test/models/event.rb DELETED
@@ -1,3 +0,0 @@
1
- class Event < ActiveRecord::Base
2
- validates_uniqueness_of :title
3
- end
@@ -1,8 +0,0 @@
1
- require 'models/author'
2
- require 'models/event'
3
-
4
- class EventAuthor < ActiveRecord::Base
5
- belongs_to :author
6
- belongs_to :event
7
- end
8
-
data/test/models/face.rb DELETED
@@ -1,7 +0,0 @@
1
- class Face < ActiveRecord::Base
2
- belongs_to :man, :inverse_of => :face
3
- belongs_to :polymorphic_man, :polymorphic => true, :inverse_of => :polymorphic_face
4
- # These is a "broken" inverse_of for the purposes of testing
5
- belongs_to :horrible_man, :class_name => 'Man', :inverse_of => :horrible_face
6
- belongs_to :horrible_polymorphic_man, :polymorphic => true, :inverse_of => :horrible_polymorphic_face
7
- end
data/test/models/guid.rb DELETED
@@ -1,2 +0,0 @@
1
- class Guid < ActiveRecord::Base
2
- end
@@ -1,5 +0,0 @@
1
- class Interest < ActiveRecord::Base
2
- belongs_to :man, :inverse_of => :interests
3
- belongs_to :polymorphic_man, :polymorphic => true, :inverse_of => :polymorphic_interests
4
- belongs_to :zine, :inverse_of => :interests
5
- end
@@ -1,4 +0,0 @@
1
- class Invoice < ActiveRecord::Base
2
- has_many :line_items, :autosave => true
3
- before_save {|record| record.balance = record.line_items.map(&:amount).sum }
4
- end
data/test/models/item.rb DELETED
@@ -1,7 +0,0 @@
1
- class AbstractItem < ActiveRecord::Base
2
- self.abstract_class = true
3
- has_one :tagging, :as => :taggable
4
- end
5
-
6
- class Item < AbstractItem
7
- end
data/test/models/job.rb DELETED
@@ -1,5 +0,0 @@
1
- class Job < ActiveRecord::Base
2
- has_many :references
3
- has_many :people, :through => :references
4
- belongs_to :ideal_reference, :class_name => 'Reference'
5
- end
data/test/models/joke.rb DELETED
@@ -1,3 +0,0 @@
1
- class Joke < ActiveRecord::Base
2
- set_table_name 'funny_jokes'
3
- end
@@ -1,3 +0,0 @@
1
- class Keyboard < ActiveRecord::Base
2
- set_primary_key 'key_number'
3
- end
@@ -1,3 +0,0 @@
1
- class LegacyThing < ActiveRecord::Base
2
- set_locking_column :version
3
- end
@@ -1,3 +0,0 @@
1
- class LineItem < ActiveRecord::Base
2
- belongs_to :invoice, :touch => true
3
- end
data/test/models/man.rb DELETED
@@ -1,9 +0,0 @@
1
- class Man < ActiveRecord::Base
2
- has_one :face, :inverse_of => :man
3
- has_one :polymorphic_face, :class_name => 'Face', :as => :polymorphic_man, :inverse_of => :polymorphic_man
4
- has_many :interests, :inverse_of => :man
5
- has_many :polymorphic_interests, :class_name => 'Interest', :as => :polymorphic_man, :inverse_of => :polymorphic_man
6
- # These are "broken" inverse_of associations for the purposes of testing
7
- has_one :dirty_face, :class_name => 'Face', :inverse_of => :dirty_man
8
- has_many :secret_interests, :class_name => 'Interest', :inverse_of => :secret_man
9
- end
data/test/models/matey.rb DELETED
@@ -1,4 +0,0 @@
1
- class Matey < ActiveRecord::Base
2
- belongs_to :pirate
3
- belongs_to :target, :class_name => 'Pirate'
4
- end
@@ -1,12 +0,0 @@
1
- class Member < ActiveRecord::Base
2
- has_one :current_membership
3
- has_many :memberships
4
- has_many :fellow_members, :through => :club, :source => :members
5
- has_one :club, :through => :current_membership
6
- has_one :favourite_club, :through => :memberships, :conditions => ["memberships.favourite = ?", true], :source => :club
7
- has_one :sponsor, :as => :sponsorable
8
- has_one :sponsor_club, :through => :sponsor
9
- has_one :member_detail
10
- has_one :organization, :through => :member_detail
11
- belongs_to :member_type
12
- end
@@ -1,5 +0,0 @@
1
- class MemberDetail < ActiveRecord::Base
2
- belongs_to :member
3
- belongs_to :organization
4
- has_one :member_type, :through => :member
5
- end
@@ -1,3 +0,0 @@
1
- class MemberType < ActiveRecord::Base
2
- has_many :members
3
- end
@@ -1,9 +0,0 @@
1
- class Membership < ActiveRecord::Base
2
- belongs_to :member
3
- belongs_to :club
4
- end
5
-
6
- class CurrentMembership < Membership
7
- belongs_to :member
8
- belongs_to :club
9
- end
@@ -1,2 +0,0 @@
1
- class Minimalistic < ActiveRecord::Base
2
- end
@@ -1,3 +0,0 @@
1
- class MixedCaseMonkey < ActiveRecord::Base
2
- set_primary_key 'monkeyID'
3
- end
data/test/models/movie.rb DELETED
@@ -1,5 +0,0 @@
1
- class Movie < ActiveRecord::Base
2
- def self.primary_key
3
- "movieid"
4
- end
5
- end
data/test/models/order.rb DELETED
@@ -1,4 +0,0 @@
1
- class Order < ActiveRecord::Base
2
- belongs_to :billing, :class_name => 'Customer', :foreign_key => 'billing_customer_id'
3
- belongs_to :shipping, :class_name => 'Customer', :foreign_key => 'shipping_customer_id'
4
- end
@@ -1,6 +0,0 @@
1
- class Organization < ActiveRecord::Base
2
- has_many :member_details
3
- has_many :members, :through => :member_details
4
-
5
- named_scope :clubs, { :from => 'clubs' }
6
- end
data/test/models/owner.rb DELETED
@@ -1,5 +0,0 @@
1
- class Owner < ActiveRecord::Base
2
- set_primary_key :owner_id
3
- has_many :pets
4
- has_many :toys, :through => :pets
5
- end
@@ -1,22 +0,0 @@
1
- class Parrot < ActiveRecord::Base
2
- set_inheritance_column :parrot_sti_class
3
- has_and_belongs_to_many :pirates
4
- has_and_belongs_to_many :treasures
5
- has_many :loots, :as => :looter
6
- alias_attribute :title, :name
7
-
8
- validates_presence_of :name
9
-
10
- attr_accessor :cancel_save_from_callback
11
- before_save :cancel_save_callback_method, :if => :cancel_save_from_callback
12
- def cancel_save_callback_method
13
- false
14
- end
15
- end
16
-
17
- class LiveParrot < Parrot
18
- end
19
-
20
- class DeadParrot < Parrot
21
- belongs_to :killer, :class_name => 'Pirate'
22
- end
@@ -1,16 +0,0 @@
1
- class Person < ActiveRecord::Base
2
- has_many :readers
3
- has_many :posts, :through => :readers
4
- has_many :posts_with_no_comments, :through => :readers, :source => :post, :include => :comments, :conditions => 'comments.id is null'
5
-
6
- has_many :references
7
- has_many :jobs, :through => :references
8
- has_one :favourite_reference, :class_name => 'Reference', :conditions => ['favourite=?', true]
9
- has_many :posts_with_comments_sorted_by_comment_id, :through => :readers, :source => :post, :include => :comments, :order => 'comments.id'
10
-
11
- belongs_to :primary_contact, :class_name => 'Person'
12
- has_many :agents, :class_name => 'Person', :foreign_key => 'primary_contact_id'
13
-
14
- named_scope :males, :conditions => { :gender => 'M' }
15
- named_scope :females, :conditions => { :gender => 'F' }
16
- end
data/test/models/pet.rb DELETED
@@ -1,5 +0,0 @@
1
- class Pet < ActiveRecord::Base
2
- set_primary_key :pet_id
3
- belongs_to :owner, :touch => true
4
- has_many :toys
5
- end
@@ -1,80 +0,0 @@
1
- class Pirate < ActiveRecord::Base
2
- belongs_to :parrot, :validate => true
3
- belongs_to :non_validated_parrot, :class_name => 'Parrot'
4
- has_and_belongs_to_many :parrots, :validate => true, :order => 'parrots.id ASC'
5
- has_and_belongs_to_many :non_validated_parrots, :class_name => 'Parrot'
6
- has_and_belongs_to_many :parrots_with_method_callbacks, :class_name => "Parrot",
7
- :before_add => :log_before_add,
8
- :after_add => :log_after_add,
9
- :before_remove => :log_before_remove,
10
- :after_remove => :log_after_remove
11
- has_and_belongs_to_many :parrots_with_proc_callbacks, :class_name => "Parrot",
12
- :before_add => proc {|p,pa| p.ship_log << "before_adding_proc_parrot_#{pa.id || '<new>'}"},
13
- :after_add => proc {|p,pa| p.ship_log << "after_adding_proc_parrot_#{pa.id || '<new>'}"},
14
- :before_remove => proc {|p,pa| p.ship_log << "before_removing_proc_parrot_#{pa.id}"},
15
- :after_remove => proc {|p,pa| p.ship_log << "after_removing_proc_parrot_#{pa.id}"}
16
-
17
- has_many :treasures, :as => :looter
18
- has_many :treasure_estimates, :through => :treasures, :source => :price_estimates
19
-
20
- # These both have :autosave enabled because accepts_nested_attributes_for is used on them.
21
- has_one :ship
22
- has_one :update_only_ship, :class_name => 'Ship'
23
- has_one :non_validated_ship, :class_name => 'Ship'
24
- has_many :birds, :order => 'birds.id ASC'
25
- has_many :birds_with_method_callbacks, :class_name => "Bird",
26
- :before_add => :log_before_add,
27
- :after_add => :log_after_add,
28
- :before_remove => :log_before_remove,
29
- :after_remove => :log_after_remove
30
- has_many :birds_with_proc_callbacks, :class_name => "Bird",
31
- :before_add => proc {|p,b| p.ship_log << "before_adding_proc_bird_#{b.id || '<new>'}"},
32
- :after_add => proc {|p,b| p.ship_log << "after_adding_proc_bird_#{b.id || '<new>'}"},
33
- :before_remove => proc {|p,b| p.ship_log << "before_removing_proc_bird_#{b.id}"},
34
- :after_remove => proc {|p,b| p.ship_log << "after_removing_proc_bird_#{b.id}"}
35
- has_many :birds_with_reject_all_blank, :class_name => "Bird"
36
-
37
- accepts_nested_attributes_for :parrots, :birds, :allow_destroy => true, :reject_if => proc { |attributes| attributes.empty? }
38
- accepts_nested_attributes_for :ship, :allow_destroy => true, :reject_if => proc { |attributes| attributes.empty? }
39
- accepts_nested_attributes_for :update_only_ship, :update_only => true
40
- accepts_nested_attributes_for :parrots_with_method_callbacks, :parrots_with_proc_callbacks,
41
- :birds_with_method_callbacks, :birds_with_proc_callbacks, :allow_destroy => true
42
- accepts_nested_attributes_for :birds_with_reject_all_blank, :reject_if => :all_blank
43
-
44
- validates_presence_of :catchphrase
45
-
46
- def ship_log
47
- @ship_log ||= []
48
- end
49
-
50
- def reject_empty_ships_on_create(attributes)
51
- attributes.delete('_reject_me_if_new').present? && new_record?
52
- end
53
-
54
- attr_accessor :cancel_save_from_callback
55
- before_save :cancel_save_callback_method, :if => :cancel_save_from_callback
56
- def cancel_save_callback_method
57
- false
58
- end
59
-
60
- private
61
- def log_before_add(record)
62
- log(record, "before_adding_method")
63
- end
64
-
65
- def log_after_add(record)
66
- log(record, "after_adding_method")
67
- end
68
-
69
- def log_before_remove(record)
70
- log(record, "before_removing_method")
71
- end
72
-
73
- def log_after_remove(record)
74
- log(record, "after_removing_method")
75
- end
76
-
77
- def log(record, callback)
78
- ship_log << "#{callback}_#{record.class.name.downcase}_#{record.id || '<new>'}"
79
- end
80
- end
@@ -1,3 +0,0 @@
1
- class PolymorphicDesign < ActiveRecord::Base
2
- belongs_to :designable, :polymorphic => true
3
- end
@@ -1,3 +0,0 @@
1
- class PolymorphicPrice < ActiveRecord::Base
2
- belongs_to :sellable, :polymorphic => true
3
- end
data/test/models/post.rb DELETED
@@ -1,102 +0,0 @@
1
- class Post < ActiveRecord::Base
2
- named_scope :with_type_self, lambda{{:conditions => ["type=?", self.name]}}
3
- named_scope :containing_the_letter_a, :conditions => "body LIKE '%a%'"
4
- named_scope :ranked_by_comments, :order => "comments_count DESC"
5
- named_scope :limit, lambda {|limit| {:limit => limit} }
6
- named_scope :with_authors_at_address, lambda { |address| {
7
- :conditions => [ 'authors.author_address_id = ?', address.id ],
8
- :joins => 'JOIN authors ON authors.id = posts.author_id'
9
- }
10
- }
11
-
12
- belongs_to :author do
13
- def greeting
14
- "hello"
15
- end
16
- end
17
-
18
- belongs_to :author_with_posts, :class_name => "Author", :foreign_key => :author_id, :include => :posts
19
- belongs_to :author_with_address, :class_name => "Author", :foreign_key => :author_id, :include => :author_address
20
-
21
- has_one :last_comment, :class_name => 'Comment', :order => 'id desc'
22
-
23
- named_scope :with_special_comments, :joins => :comments, :conditions => {:comments => {:type => 'SpecialComment'} }
24
- named_scope :with_very_special_comments, :joins => :comments, :conditions => {:comments => {:type => 'VerySpecialComment'} }
25
- named_scope :with_post, lambda {|post_id|
26
- { :joins => :comments, :conditions => {:comments => {:post_id => post_id} } }
27
- }
28
-
29
- has_many :comments, :order => "body" do
30
- def find_most_recent
31
- find(:first, :order => "id DESC")
32
- end
33
- end
34
-
35
- has_many :author_favorites, :through => :author
36
-
37
- has_many :comments_with_interpolated_conditions, :class_name => 'Comment',
38
- :conditions => ['#{"#{aliased_table_name}." rescue ""}body = ?', 'Thank you for the welcome']
39
-
40
- has_one :very_special_comment
41
- has_one :very_special_comment_with_post, :class_name => "VerySpecialComment", :include => :post
42
- has_many :special_comments
43
- has_many :nonexistant_comments, :class_name => 'Comment', :conditions => 'comments.id < 0'
44
-
45
- has_and_belongs_to_many :categories
46
- has_and_belongs_to_many :special_categories, :join_table => "categories_posts", :association_foreign_key => 'category_id'
47
-
48
- has_many :taggings, :as => :taggable
49
- has_many :tags, :through => :taggings do
50
- def add_joins_and_select
51
- find :all, :select => 'tags.*, authors.id as author_id', :include => false,
52
- :joins => 'left outer join posts on taggings.taggable_id = posts.id left outer join authors on posts.author_id = authors.id'
53
- end
54
- end
55
-
56
- has_many :misc_tags, :through => :taggings, :source => :tag, :conditions => "tags.name = 'Misc'"
57
- has_many :funky_tags, :through => :taggings, :source => :tag
58
- has_many :super_tags, :through => :taggings
59
- has_one :tagging, :as => :taggable
60
-
61
- has_many :invalid_taggings, :as => :taggable, :class_name => "Tagging", :conditions => 'taggings.id < 0'
62
- has_many :invalid_tags, :through => :invalid_taggings, :source => :tag
63
-
64
- has_many :categorizations, :foreign_key => :category_id
65
- has_many :authors, :through => :categorizations
66
-
67
- has_many :readers
68
- has_many :people, :through => :readers
69
- has_many :people_with_callbacks, :source=>:person, :through => :readers,
70
- :before_add => lambda {|owner, reader| log(:added, :before, reader.first_name) },
71
- :after_add => lambda {|owner, reader| log(:added, :after, reader.first_name) },
72
- :before_remove => lambda {|owner, reader| log(:removed, :before, reader.first_name) },
73
- :after_remove => lambda {|owner, reader| log(:removed, :after, reader.first_name) }
74
-
75
- def self.top(limit)
76
- ranked_by_comments.limit(limit)
77
- end
78
-
79
- def self.reset_log
80
- @log = []
81
- end
82
-
83
- def self.log(message=nil, side=nil, new_record=nil)
84
- return @log if message.nil?
85
- @log << [message, side, new_record]
86
- end
87
-
88
- def self.what_are_you
89
- 'a post...'
90
- end
91
- end
92
-
93
- class SpecialPost < Post; end
94
-
95
- class StiPost < Post
96
- self.abstract_class = true
97
- has_one :special_comment, :class_name => "SpecialComment"
98
- end
99
-
100
- class SubStiPost < StiPost
101
- self.table_name = Post.table_name
102
- end
@@ -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