activerecord 2.3.18 → 3.0.0.beta

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

Potentially problematic release.


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

Files changed (378) hide show
  1. data/CHANGELOG +105 -34
  2. data/examples/performance.rb +3 -39
  3. data/examples/simple.rb +14 -0
  4. data/lib/active_record.rb +81 -47
  5. data/lib/active_record/aggregations.rb +1 -3
  6. data/lib/active_record/association_preload.rb +39 -54
  7. data/lib/active_record/associations.rb +262 -419
  8. data/lib/active_record/associations/association_collection.rb +85 -100
  9. data/lib/active_record/associations/association_proxy.rb +20 -18
  10. data/lib/active_record/associations/belongs_to_association.rb +8 -8
  11. data/lib/active_record/associations/has_and_belongs_to_many_association.rb +13 -35
  12. data/lib/active_record/associations/has_many_association.rb +11 -19
  13. data/lib/active_record/associations/has_many_through_association.rb +30 -183
  14. data/lib/active_record/associations/has_one_association.rb +10 -10
  15. data/lib/active_record/associations/has_one_through_association.rb +13 -11
  16. data/lib/active_record/associations/through_association_scope.rb +153 -0
  17. data/lib/active_record/attribute_methods.rb +17 -370
  18. data/lib/active_record/attribute_methods/before_type_cast.rb +33 -0
  19. data/lib/active_record/attribute_methods/dirty.rb +87 -0
  20. data/lib/active_record/attribute_methods/primary_key.rb +44 -0
  21. data/lib/active_record/attribute_methods/query.rb +37 -0
  22. data/lib/active_record/attribute_methods/read.rb +116 -0
  23. data/lib/active_record/attribute_methods/time_zone_conversion.rb +60 -0
  24. data/lib/active_record/attribute_methods/write.rb +37 -0
  25. data/lib/active_record/autosave_association.rb +20 -41
  26. data/lib/active_record/base.rb +357 -1180
  27. data/lib/active_record/batches.rb +10 -16
  28. data/lib/active_record/callbacks.rb +66 -126
  29. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +17 -13
  30. data/lib/active_record/connection_adapters/abstract/connection_specification.rb +5 -25
  31. data/lib/active_record/connection_adapters/abstract/database_statements.rb +4 -43
  32. data/lib/active_record/connection_adapters/abstract/query_cache.rb +3 -2
  33. data/lib/active_record/connection_adapters/abstract/quoting.rb +15 -4
  34. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +1 -1
  35. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +18 -72
  36. data/lib/active_record/connection_adapters/abstract_adapter.rb +16 -49
  37. data/lib/active_record/connection_adapters/mysql_adapter.rb +15 -27
  38. data/lib/active_record/connection_adapters/postgresql_adapter.rb +84 -46
  39. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +9 -3
  40. data/lib/active_record/connection_adapters/sqlite_adapter.rb +34 -65
  41. data/lib/active_record/fixtures.rb +21 -25
  42. data/lib/active_record/locale/en.yml +9 -27
  43. data/lib/active_record/locking/optimistic.rb +16 -48
  44. data/lib/active_record/migration.rb +59 -46
  45. data/lib/active_record/named_scope.rb +85 -92
  46. data/lib/active_record/nested_attributes.rb +18 -24
  47. data/lib/active_record/observer.rb +18 -94
  48. data/lib/active_record/railtie.rb +83 -0
  49. data/lib/active_record/railties/controller_runtime.rb +38 -0
  50. data/lib/active_record/railties/databases.rake +477 -0
  51. data/lib/active_record/railties/subscriber.rb +27 -0
  52. data/lib/active_record/reflection.rb +2 -15
  53. data/lib/active_record/relation.rb +339 -0
  54. data/lib/active_record/relation/calculations.rb +259 -0
  55. data/lib/active_record/relation/finder_methods.rb +315 -0
  56. data/lib/active_record/relation/predicate_builder.rb +46 -0
  57. data/lib/active_record/relation/query_methods.rb +218 -0
  58. data/lib/active_record/relation/spawn_methods.rb +102 -0
  59. data/lib/active_record/schema_dumper.rb +10 -6
  60. data/lib/active_record/serialization.rb +31 -74
  61. data/lib/active_record/serializers/xml_serializer.rb +33 -121
  62. data/lib/active_record/session_store.rb +1 -9
  63. data/lib/active_record/test_case.rb +1 -3
  64. data/lib/active_record/timestamp.rb +7 -5
  65. data/lib/active_record/transactions.rb +9 -9
  66. data/lib/active_record/validations.rb +51 -1100
  67. data/lib/active_record/validations/associated.rb +47 -0
  68. data/lib/active_record/validations/uniqueness.rb +181 -0
  69. data/lib/active_record/version.rb +3 -3
  70. data/lib/generators/active_record.rb +30 -0
  71. data/lib/generators/active_record/migration/migration_generator.rb +25 -0
  72. data/lib/generators/active_record/migration/templates/migration.rb +11 -0
  73. data/lib/generators/active_record/model/model_generator.rb +33 -0
  74. data/lib/generators/active_record/model/templates/migration.rb +16 -0
  75. data/lib/generators/active_record/model/templates/model.rb +5 -0
  76. data/lib/generators/active_record/observer/observer_generator.rb +15 -0
  77. data/lib/generators/active_record/observer/templates/observer.rb +2 -0
  78. data/lib/generators/active_record/session_migration/session_migration_generator.rb +24 -0
  79. data/lib/generators/active_record/session_migration/templates/migration.rb +16 -0
  80. metadata +67 -325
  81. data/RUNNING_UNIT_TESTS +0 -36
  82. data/Rakefile +0 -268
  83. data/install.rb +0 -30
  84. data/lib/active_record/calculations.rb +0 -321
  85. data/lib/active_record/connection_adapters/abstract/database_limits.rb +0 -57
  86. data/lib/active_record/dirty.rb +0 -183
  87. data/lib/active_record/serializers/json_serializer.rb +0 -91
  88. data/lib/activerecord.rb +0 -2
  89. data/test/assets/example.log +0 -1
  90. data/test/assets/flowers.jpg +0 -0
  91. data/test/cases/aaa_create_tables_test.rb +0 -24
  92. data/test/cases/active_schema_test_mysql.rb +0 -122
  93. data/test/cases/active_schema_test_postgresql.rb +0 -24
  94. data/test/cases/adapter_test.rb +0 -144
  95. data/test/cases/aggregations_test.rb +0 -167
  96. data/test/cases/ar_schema_test.rb +0 -32
  97. data/test/cases/associations/belongs_to_associations_test.rb +0 -438
  98. data/test/cases/associations/callbacks_test.rb +0 -161
  99. data/test/cases/associations/cascaded_eager_loading_test.rb +0 -131
  100. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +0 -36
  101. data/test/cases/associations/eager_load_nested_include_test.rb +0 -131
  102. data/test/cases/associations/eager_load_nested_polymorphic_include.rb +0 -19
  103. data/test/cases/associations/eager_singularization_test.rb +0 -145
  104. data/test/cases/associations/eager_test.rb +0 -852
  105. data/test/cases/associations/extension_test.rb +0 -62
  106. data/test/cases/associations/habtm_join_table_test.rb +0 -56
  107. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +0 -827
  108. data/test/cases/associations/has_many_associations_test.rb +0 -1273
  109. data/test/cases/associations/has_many_through_associations_test.rb +0 -360
  110. data/test/cases/associations/has_one_associations_test.rb +0 -330
  111. data/test/cases/associations/has_one_through_associations_test.rb +0 -209
  112. data/test/cases/associations/inner_join_association_test.rb +0 -93
  113. data/test/cases/associations/inverse_associations_test.rb +0 -566
  114. data/test/cases/associations/join_model_test.rb +0 -712
  115. data/test/cases/associations_test.rb +0 -282
  116. data/test/cases/attribute_methods_test.rb +0 -305
  117. data/test/cases/autosave_association_test.rb +0 -1218
  118. data/test/cases/base_test.rb +0 -2166
  119. data/test/cases/batches_test.rb +0 -81
  120. data/test/cases/binary_test.rb +0 -30
  121. data/test/cases/calculations_test.rb +0 -360
  122. data/test/cases/callbacks_observers_test.rb +0 -38
  123. data/test/cases/callbacks_test.rb +0 -438
  124. data/test/cases/class_inheritable_attributes_test.rb +0 -32
  125. data/test/cases/column_alias_test.rb +0 -17
  126. data/test/cases/column_definition_test.rb +0 -70
  127. data/test/cases/connection_pool_test.rb +0 -25
  128. data/test/cases/connection_test_firebird.rb +0 -8
  129. data/test/cases/connection_test_mysql.rb +0 -65
  130. data/test/cases/copy_table_test_sqlite.rb +0 -80
  131. data/test/cases/counter_cache_test.rb +0 -84
  132. data/test/cases/database_statements_test.rb +0 -12
  133. data/test/cases/datatype_test_postgresql.rb +0 -204
  134. data/test/cases/date_time_test.rb +0 -37
  135. data/test/cases/default_test_firebird.rb +0 -16
  136. data/test/cases/defaults_test.rb +0 -111
  137. data/test/cases/deprecated_finder_test.rb +0 -30
  138. data/test/cases/dirty_test.rb +0 -316
  139. data/test/cases/finder_respond_to_test.rb +0 -76
  140. data/test/cases/finder_test.rb +0 -1098
  141. data/test/cases/fixtures_test.rb +0 -661
  142. data/test/cases/helper.rb +0 -68
  143. data/test/cases/i18n_test.rb +0 -46
  144. data/test/cases/inheritance_test.rb +0 -262
  145. data/test/cases/invalid_date_test.rb +0 -24
  146. data/test/cases/json_serialization_test.rb +0 -219
  147. data/test/cases/lifecycle_test.rb +0 -193
  148. data/test/cases/locking_test.rb +0 -350
  149. data/test/cases/method_scoping_test.rb +0 -704
  150. data/test/cases/migration_test.rb +0 -1649
  151. data/test/cases/migration_test_firebird.rb +0 -124
  152. data/test/cases/mixin_test.rb +0 -96
  153. data/test/cases/modules_test.rb +0 -109
  154. data/test/cases/multiple_db_test.rb +0 -85
  155. data/test/cases/named_scope_test.rb +0 -372
  156. data/test/cases/nested_attributes_test.rb +0 -840
  157. data/test/cases/pk_test.rb +0 -119
  158. data/test/cases/pooled_connections_test.rb +0 -103
  159. data/test/cases/query_cache_test.rb +0 -129
  160. data/test/cases/readonly_test.rb +0 -107
  161. data/test/cases/reflection_test.rb +0 -234
  162. data/test/cases/reload_models_test.rb +0 -22
  163. data/test/cases/repair_helper.rb +0 -50
  164. data/test/cases/reserved_word_test_mysql.rb +0 -176
  165. data/test/cases/sanitize_test.rb +0 -25
  166. data/test/cases/schema_authorization_test_postgresql.rb +0 -75
  167. data/test/cases/schema_dumper_test.rb +0 -211
  168. data/test/cases/schema_test_postgresql.rb +0 -178
  169. data/test/cases/serialization_test.rb +0 -47
  170. data/test/cases/sp_test_mysql.rb +0 -16
  171. data/test/cases/synonym_test_oracle.rb +0 -17
  172. data/test/cases/timestamp_test.rb +0 -75
  173. data/test/cases/transactions_test.rb +0 -543
  174. data/test/cases/unconnected_test.rb +0 -32
  175. data/test/cases/validations_i18n_test.rb +0 -925
  176. data/test/cases/validations_test.rb +0 -1684
  177. data/test/cases/xml_serialization_test.rb +0 -240
  178. data/test/cases/yaml_serialization_test.rb +0 -11
  179. data/test/config.rb +0 -5
  180. data/test/connections/jdbc_jdbcderby/connection.rb +0 -18
  181. data/test/connections/jdbc_jdbch2/connection.rb +0 -18
  182. data/test/connections/jdbc_jdbchsqldb/connection.rb +0 -18
  183. data/test/connections/jdbc_jdbcmysql/connection.rb +0 -26
  184. data/test/connections/jdbc_jdbcpostgresql/connection.rb +0 -26
  185. data/test/connections/jdbc_jdbcsqlite3/connection.rb +0 -25
  186. data/test/connections/native_db2/connection.rb +0 -25
  187. data/test/connections/native_firebird/connection.rb +0 -26
  188. data/test/connections/native_frontbase/connection.rb +0 -27
  189. data/test/connections/native_mysql/connection.rb +0 -25
  190. data/test/connections/native_openbase/connection.rb +0 -21
  191. data/test/connections/native_oracle/connection.rb +0 -27
  192. data/test/connections/native_postgresql/connection.rb +0 -21
  193. data/test/connections/native_sqlite/connection.rb +0 -25
  194. data/test/connections/native_sqlite3/connection.rb +0 -25
  195. data/test/connections/native_sqlite3/in_memory_connection.rb +0 -18
  196. data/test/connections/native_sybase/connection.rb +0 -23
  197. data/test/fixtures/accounts.yml +0 -29
  198. data/test/fixtures/all/developers.yml +0 -0
  199. data/test/fixtures/all/people.csv +0 -0
  200. data/test/fixtures/all/tasks.yml +0 -0
  201. data/test/fixtures/author_addresses.yml +0 -5
  202. data/test/fixtures/author_favorites.yml +0 -4
  203. data/test/fixtures/authors.yml +0 -9
  204. data/test/fixtures/binaries.yml +0 -132
  205. data/test/fixtures/books.yml +0 -7
  206. data/test/fixtures/categories.yml +0 -14
  207. data/test/fixtures/categories/special_categories.yml +0 -9
  208. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +0 -4
  209. data/test/fixtures/categories_ordered.yml +0 -7
  210. data/test/fixtures/categories_posts.yml +0 -23
  211. data/test/fixtures/categorizations.yml +0 -17
  212. data/test/fixtures/clubs.yml +0 -6
  213. data/test/fixtures/comments.yml +0 -59
  214. data/test/fixtures/companies.yml +0 -56
  215. data/test/fixtures/computers.yml +0 -4
  216. data/test/fixtures/courses.yml +0 -7
  217. data/test/fixtures/customers.yml +0 -26
  218. data/test/fixtures/developers.yml +0 -21
  219. data/test/fixtures/developers_projects.yml +0 -17
  220. data/test/fixtures/edges.yml +0 -6
  221. data/test/fixtures/entrants.yml +0 -14
  222. data/test/fixtures/faces.yml +0 -11
  223. data/test/fixtures/fk_test_has_fk.yml +0 -3
  224. data/test/fixtures/fk_test_has_pk.yml +0 -2
  225. data/test/fixtures/funny_jokes.yml +0 -10
  226. data/test/fixtures/interests.yml +0 -33
  227. data/test/fixtures/items.yml +0 -4
  228. data/test/fixtures/jobs.yml +0 -7
  229. data/test/fixtures/legacy_things.yml +0 -3
  230. data/test/fixtures/mateys.yml +0 -4
  231. data/test/fixtures/member_types.yml +0 -6
  232. data/test/fixtures/members.yml +0 -6
  233. data/test/fixtures/memberships.yml +0 -20
  234. data/test/fixtures/men.yml +0 -5
  235. data/test/fixtures/minimalistics.yml +0 -2
  236. data/test/fixtures/mixed_case_monkeys.yml +0 -6
  237. data/test/fixtures/mixins.yml +0 -29
  238. data/test/fixtures/movies.yml +0 -7
  239. data/test/fixtures/naked/csv/accounts.csv +0 -1
  240. data/test/fixtures/naked/yml/accounts.yml +0 -1
  241. data/test/fixtures/naked/yml/companies.yml +0 -1
  242. data/test/fixtures/naked/yml/courses.yml +0 -1
  243. data/test/fixtures/organizations.yml +0 -5
  244. data/test/fixtures/owners.yml +0 -7
  245. data/test/fixtures/parrots.yml +0 -27
  246. data/test/fixtures/parrots_pirates.yml +0 -7
  247. data/test/fixtures/people.yml +0 -15
  248. data/test/fixtures/pets.yml +0 -14
  249. data/test/fixtures/pirates.yml +0 -9
  250. data/test/fixtures/polymorphic_designs.yml +0 -19
  251. data/test/fixtures/polymorphic_prices.yml +0 -19
  252. data/test/fixtures/posts.yml +0 -52
  253. data/test/fixtures/price_estimates.yml +0 -7
  254. data/test/fixtures/projects.yml +0 -7
  255. data/test/fixtures/readers.yml +0 -9
  256. data/test/fixtures/references.yml +0 -17
  257. data/test/fixtures/reserved_words/distinct.yml +0 -5
  258. data/test/fixtures/reserved_words/distincts_selects.yml +0 -11
  259. data/test/fixtures/reserved_words/group.yml +0 -14
  260. data/test/fixtures/reserved_words/select.yml +0 -8
  261. data/test/fixtures/reserved_words/values.yml +0 -7
  262. data/test/fixtures/ships.yml +0 -5
  263. data/test/fixtures/sponsors.yml +0 -9
  264. data/test/fixtures/subscribers.yml +0 -7
  265. data/test/fixtures/subscriptions.yml +0 -12
  266. data/test/fixtures/taggings.yml +0 -28
  267. data/test/fixtures/tags.yml +0 -7
  268. data/test/fixtures/tasks.yml +0 -7
  269. data/test/fixtures/tees.yml +0 -4
  270. data/test/fixtures/ties.yml +0 -4
  271. data/test/fixtures/topics.yml +0 -42
  272. data/test/fixtures/toys.yml +0 -4
  273. data/test/fixtures/treasures.yml +0 -10
  274. data/test/fixtures/vertices.yml +0 -4
  275. data/test/fixtures/warehouse-things.yml +0 -3
  276. data/test/fixtures/zines.yml +0 -5
  277. data/test/migrations/broken/100_migration_that_raises_exception.rb +0 -10
  278. data/test/migrations/decimal/1_give_me_big_numbers.rb +0 -15
  279. data/test/migrations/duplicate/1_people_have_last_names.rb +0 -9
  280. data/test/migrations/duplicate/2_we_need_reminders.rb +0 -12
  281. data/test/migrations/duplicate/3_foo.rb +0 -7
  282. data/test/migrations/duplicate/3_innocent_jointable.rb +0 -12
  283. data/test/migrations/duplicate_names/20080507052938_chunky.rb +0 -7
  284. data/test/migrations/duplicate_names/20080507053028_chunky.rb +0 -7
  285. data/test/migrations/interleaved/pass_1/3_innocent_jointable.rb +0 -12
  286. data/test/migrations/interleaved/pass_2/1_people_have_last_names.rb +0 -9
  287. data/test/migrations/interleaved/pass_2/3_innocent_jointable.rb +0 -12
  288. data/test/migrations/interleaved/pass_3/1_people_have_last_names.rb +0 -9
  289. data/test/migrations/interleaved/pass_3/2_i_raise_on_down.rb +0 -8
  290. data/test/migrations/interleaved/pass_3/3_innocent_jointable.rb +0 -12
  291. data/test/migrations/missing/1000_people_have_middle_names.rb +0 -9
  292. data/test/migrations/missing/1_people_have_last_names.rb +0 -9
  293. data/test/migrations/missing/3_we_need_reminders.rb +0 -12
  294. data/test/migrations/missing/4_innocent_jointable.rb +0 -12
  295. data/test/migrations/valid/1_people_have_last_names.rb +0 -9
  296. data/test/migrations/valid/2_we_need_reminders.rb +0 -12
  297. data/test/migrations/valid/3_innocent_jointable.rb +0 -12
  298. data/test/models/author.rb +0 -151
  299. data/test/models/auto_id.rb +0 -4
  300. data/test/models/binary.rb +0 -2
  301. data/test/models/bird.rb +0 -9
  302. data/test/models/book.rb +0 -4
  303. data/test/models/categorization.rb +0 -5
  304. data/test/models/category.rb +0 -34
  305. data/test/models/citation.rb +0 -6
  306. data/test/models/club.rb +0 -13
  307. data/test/models/column_name.rb +0 -3
  308. data/test/models/comment.rb +0 -29
  309. data/test/models/company.rb +0 -173
  310. data/test/models/company_in_module.rb +0 -78
  311. data/test/models/computer.rb +0 -3
  312. data/test/models/contact.rb +0 -16
  313. data/test/models/contract.rb +0 -5
  314. data/test/models/course.rb +0 -3
  315. data/test/models/customer.rb +0 -73
  316. data/test/models/default.rb +0 -2
  317. data/test/models/developer.rb +0 -101
  318. data/test/models/edge.rb +0 -5
  319. data/test/models/entrant.rb +0 -3
  320. data/test/models/essay.rb +0 -3
  321. data/test/models/event.rb +0 -3
  322. data/test/models/event_author.rb +0 -8
  323. data/test/models/face.rb +0 -7
  324. data/test/models/guid.rb +0 -2
  325. data/test/models/interest.rb +0 -5
  326. data/test/models/invoice.rb +0 -4
  327. data/test/models/item.rb +0 -7
  328. data/test/models/job.rb +0 -5
  329. data/test/models/joke.rb +0 -3
  330. data/test/models/keyboard.rb +0 -3
  331. data/test/models/legacy_thing.rb +0 -3
  332. data/test/models/line_item.rb +0 -3
  333. data/test/models/man.rb +0 -9
  334. data/test/models/matey.rb +0 -4
  335. data/test/models/member.rb +0 -12
  336. data/test/models/member_detail.rb +0 -5
  337. data/test/models/member_type.rb +0 -3
  338. data/test/models/membership.rb +0 -9
  339. data/test/models/minimalistic.rb +0 -2
  340. data/test/models/mixed_case_monkey.rb +0 -3
  341. data/test/models/movie.rb +0 -5
  342. data/test/models/order.rb +0 -4
  343. data/test/models/organization.rb +0 -6
  344. data/test/models/owner.rb +0 -5
  345. data/test/models/parrot.rb +0 -22
  346. data/test/models/person.rb +0 -16
  347. data/test/models/pet.rb +0 -5
  348. data/test/models/pirate.rb +0 -80
  349. data/test/models/polymorphic_design.rb +0 -3
  350. data/test/models/polymorphic_price.rb +0 -3
  351. data/test/models/post.rb +0 -102
  352. data/test/models/price_estimate.rb +0 -3
  353. data/test/models/project.rb +0 -30
  354. data/test/models/reader.rb +0 -4
  355. data/test/models/reference.rb +0 -4
  356. data/test/models/reply.rb +0 -46
  357. data/test/models/ship.rb +0 -19
  358. data/test/models/ship_part.rb +0 -7
  359. data/test/models/sponsor.rb +0 -4
  360. data/test/models/subject.rb +0 -4
  361. data/test/models/subscriber.rb +0 -8
  362. data/test/models/subscription.rb +0 -4
  363. data/test/models/tag.rb +0 -7
  364. data/test/models/tagging.rb +0 -10
  365. data/test/models/task.rb +0 -3
  366. data/test/models/tee.rb +0 -4
  367. data/test/models/tie.rb +0 -4
  368. data/test/models/topic.rb +0 -80
  369. data/test/models/toy.rb +0 -6
  370. data/test/models/treasure.rb +0 -8
  371. data/test/models/vertex.rb +0 -9
  372. data/test/models/warehouse_thing.rb +0 -5
  373. data/test/models/zine.rb +0 -3
  374. data/test/schema/mysql_specific_schema.rb +0 -31
  375. data/test/schema/postgresql_specific_schema.rb +0 -114
  376. data/test/schema/schema.rb +0 -550
  377. data/test/schema/schema2.rb +0 -6
  378. data/test/schema/sqlite_specific_schema.rb +0 -25
@@ -1,240 +0,0 @@
1
- require "cases/helper"
2
- require 'models/contact'
3
- require 'models/post'
4
- require 'models/author'
5
- require 'models/tagging'
6
- require 'models/comment'
7
- require 'models/company_in_module'
8
-
9
- class XmlSerializationTest < ActiveRecord::TestCase
10
- def test_should_serialize_default_root
11
- @xml = Contact.new.to_xml
12
- assert_match %r{^<contact>}, @xml
13
- assert_match %r{</contact>$}, @xml
14
- end
15
-
16
- def test_should_serialize_default_root_with_namespace
17
- @xml = Contact.new.to_xml :namespace=>"http://xml.rubyonrails.org/contact"
18
- assert_match %r{^<contact xmlns="http://xml.rubyonrails.org/contact">}, @xml
19
- assert_match %r{</contact>$}, @xml
20
- end
21
-
22
- def test_should_serialize_custom_root
23
- @xml = Contact.new.to_xml :root => 'xml_contact'
24
- assert_match %r{^<xml-contact>}, @xml
25
- assert_match %r{</xml-contact>$}, @xml
26
- end
27
-
28
- def test_should_allow_undasherized_tags
29
- @xml = Contact.new.to_xml :root => 'xml_contact', :dasherize => false
30
- assert_match %r{^<xml_contact>}, @xml
31
- assert_match %r{</xml_contact>$}, @xml
32
- assert_match %r{<created_at}, @xml
33
- end
34
-
35
- def test_should_allow_camelized_tags
36
- @xml = Contact.new.to_xml :root => 'xml_contact', :camelize => true
37
- assert_match %r{^<XmlContact>}, @xml
38
- assert_match %r{</XmlContact>$}, @xml
39
- assert_match %r{<CreatedAt}, @xml
40
- end
41
-
42
- def test_should_allow_skipped_types
43
- @xml = Contact.new(:age => 25).to_xml :skip_types => true
44
- assert %r{<age>25</age>}.match(@xml)
45
- end
46
-
47
- def test_should_include_yielded_additions
48
- @xml = Contact.new.to_xml do |xml|
49
- xml.creator "David"
50
- end
51
- assert_match %r{<creator>David</creator>}, @xml
52
- end
53
- end
54
-
55
- class DefaultXmlSerializationTest < ActiveRecord::TestCase
56
- def setup
57
- @xml = Contact.new(:name => 'aaron stack', :age => 25, :avatar => 'binarydata', :created_at => Time.utc(2006, 8, 1), :awesome => false, :preferences => { :gem => 'ruby' }).to_xml
58
- end
59
-
60
- def test_should_serialize_string
61
- assert_match %r{<name>aaron stack</name>}, @xml
62
- end
63
-
64
- def test_should_serialize_integer
65
- assert_match %r{<age type="integer">25</age>}, @xml
66
- end
67
-
68
- def test_should_serialize_binary
69
- assert_match %r{YmluYXJ5ZGF0YQ==\n</avatar>}, @xml
70
- assert_match %r{<avatar(.*)(type="binary")}, @xml
71
- assert_match %r{<avatar(.*)(encoding="base64")}, @xml
72
- end
73
-
74
- def test_should_serialize_datetime
75
- assert_match %r{<created-at type=\"datetime\">2006-08-01T00:00:00Z</created-at>}, @xml
76
- end
77
-
78
- def test_should_serialize_boolean
79
- assert_match %r{<awesome type=\"boolean\">false</awesome>}, @xml
80
- end
81
-
82
- def test_should_serialize_yaml
83
- assert_match %r{<preferences type=\"yaml\">--- \n:gem: ruby\n</preferences>}, @xml
84
- end
85
- end
86
-
87
- class NilXmlSerializationTest < ActiveRecord::TestCase
88
- def setup
89
- @xml = Contact.new.to_xml(:root => 'xml_contact')
90
- end
91
-
92
- def test_should_serialize_string
93
- assert_match %r{<name nil="true"></name>}, @xml
94
- end
95
-
96
- def test_should_serialize_integer
97
- assert %r{<age (.*)></age>}.match(@xml)
98
- attributes = $1
99
- assert_match %r{nil="true"}, attributes
100
- assert_match %r{type="integer"}, attributes
101
- end
102
-
103
- def test_should_serialize_binary
104
- assert %r{<avatar (.*)></avatar>}.match(@xml)
105
- attributes = $1
106
- assert_match %r{type="binary"}, attributes
107
- assert_match %r{encoding="base64"}, attributes
108
- assert_match %r{nil="true"}, attributes
109
- end
110
-
111
- def test_should_serialize_datetime
112
- assert %r{<created-at (.*)></created-at>}.match(@xml)
113
- attributes = $1
114
- assert_match %r{nil="true"}, attributes
115
- assert_match %r{type="datetime"}, attributes
116
- end
117
-
118
- def test_should_serialize_boolean
119
- assert %r{<awesome (.*)></awesome>}.match(@xml)
120
- attributes = $1
121
- assert_match %r{type="boolean"}, attributes
122
- assert_match %r{nil="true"}, attributes
123
- end
124
-
125
- def test_should_serialize_yaml
126
- assert %r{<preferences(.*)></preferences>}.match(@xml)
127
- attributes = $1
128
- assert_match %r{type="yaml"}, attributes
129
- assert_match %r{nil="true"}, attributes
130
- end
131
- end
132
-
133
- class DatabaseConnectedXmlModuleSerializationTest < ActiveRecord::TestCase
134
-
135
- fixtures :projects, :developers, :developers_projects
136
-
137
- def test_module
138
- project = MyApplication::Business::Project.find :first
139
- xml = project.to_xml
140
- assert_match %r{<my-application-business-project>}, xml
141
- assert_match %r{</my-application-business-project>}, xml
142
- end
143
-
144
- def test_module_with_include
145
- project = MyApplication::Business::Project.find :first
146
- xml = project.to_xml :include => :developers
147
- assert_match %r{<developer type="MyApplication::Business::Developer">}, xml
148
- assert_match %r{</developer>}, xml
149
- end
150
- end
151
-
152
- class DatabaseConnectedXmlSerializationTest < ActiveRecord::TestCase
153
- fixtures :authors, :posts
154
- # to_xml used to mess with the hash the user provided which
155
- # caused the builder to be reused. This meant the document kept
156
- # getting appended to.
157
- def test_passing_hash_shouldnt_reuse_builder
158
- options = {:include=>:posts}
159
- david = authors(:david)
160
- first_xml_size = david.to_xml(options).size
161
- second_xml_size = david.to_xml(options).size
162
- assert_equal first_xml_size, second_xml_size
163
- end
164
-
165
- def test_include_uses_association_name
166
- xml = authors(:david).to_xml :include=>:hello_posts, :indent => 0
167
- assert_match %r{<hello-posts type="array">}, xml
168
- assert_match %r{<hello-post type="Post">}, xml
169
- assert_match %r{<hello-post type="StiPost">}, xml
170
- end
171
-
172
- def test_included_associations_should_skip_types
173
- xml = authors(:david).to_xml :include=>:hello_posts, :indent => 0, :skip_types => true
174
- assert_match %r{<hello-posts>}, xml
175
- assert_match %r{<hello-post>}, xml
176
- assert_match %r{<hello-post>}, xml
177
- end
178
-
179
- def test_methods_are_called_on_object
180
- xml = authors(:david).to_xml :methods => :label, :indent => 0
181
- assert_match %r{<label>.*</label>}, xml
182
- end
183
-
184
- def test_should_not_call_methods_on_associations_that_dont_respond
185
- xml = authors(:david).to_xml :include=>:hello_posts, :methods => :label, :indent => 2
186
- assert !authors(:david).hello_posts.first.respond_to?(:label)
187
- assert_match %r{^ <label>.*</label>}, xml
188
- assert_no_match %r{^ <label>}, xml
189
- end
190
-
191
- def test_procs_are_called_on_object
192
- proc = Proc.new { |options| options[:builder].tag!('nationality', 'Danish') }
193
- xml = authors(:david).to_xml(:procs => [ proc ])
194
- assert_match %r{<nationality>Danish</nationality>}, xml
195
- end
196
-
197
- def test_top_level_procs_arent_applied_to_associations
198
- author_proc = Proc.new { |options| options[:builder].tag!('nationality', 'Danish') }
199
- xml = authors(:david).to_xml(:procs => [ author_proc ], :include => :posts, :indent => 2)
200
-
201
- assert_match %r{^ <nationality>Danish</nationality>}, xml
202
- assert_no_match %r{^ {6}<nationality>Danish</nationality>}, xml
203
- end
204
-
205
- def test_procs_on_included_associations_are_called
206
- posts_proc = Proc.new { |options| options[:builder].tag!('copyright', 'DHH') }
207
- xml = authors(:david).to_xml(
208
- :indent => 2,
209
- :include => {
210
- :posts => { :procs => [ posts_proc ] }
211
- }
212
- )
213
-
214
- assert_no_match %r{^ <copyright>DHH</copyright>}, xml
215
- assert_match %r{^ {6}<copyright>DHH</copyright>}, xml
216
- end
217
-
218
- def test_should_include_empty_has_many_as_empty_array
219
- authors(:david).posts.delete_all
220
- xml = authors(:david).to_xml :include=>:posts, :indent => 2
221
-
222
- assert_equal [], Hash.from_xml(xml)['author']['posts']
223
- assert_match %r{^ <posts type="array"/>}, xml
224
- end
225
-
226
- def test_should_has_many_array_elements_should_include_type_when_different_from_guessed_value
227
- xml = authors(:david).to_xml :include=>:posts_with_comments, :indent => 2
228
-
229
- assert Hash.from_xml(xml)
230
- assert_match %r{^ <posts-with-comments type="array">}, xml
231
- assert_match %r{^ <posts-with-comment type="Post">}, xml
232
- assert_match %r{^ <posts-with-comment type="StiPost">}, xml
233
-
234
- types = Hash.from_xml(xml)['author']['posts_with_comments'].collect {|t| t['type'] }
235
- assert types.include?('SpecialPost')
236
- assert types.include?('Post')
237
- assert types.include?('StiPost')
238
- end
239
-
240
- end
@@ -1,11 +0,0 @@
1
- require "cases/helper"
2
- require 'models/topic'
3
-
4
- class YamlSerializationTest < ActiveRecord::TestCase
5
- def test_to_yaml_with_time_with_zone_should_not_raise_exception
6
- Time.zone = ActiveSupport::TimeZone["Pacific Time (US & Canada)"]
7
- ActiveRecord::Base.time_zone_aware_attributes = true
8
- topic = Topic.new(:written_on => DateTime.now)
9
- assert_nothing_raised { topic.to_yaml }
10
- end
11
- end
@@ -1,5 +0,0 @@
1
- TEST_ROOT = File.expand_path(File.dirname(__FILE__))
2
- ASSETS_ROOT = TEST_ROOT + "/assets"
3
- FIXTURES_ROOT = TEST_ROOT + "/fixtures"
4
- MIGRATIONS_ROOT = TEST_ROOT + "/migrations"
5
- SCHEMA_ROOT = TEST_ROOT + "/schema"
@@ -1,18 +0,0 @@
1
- print "Using Derby via JRuby, activerecord-jdbc-adapter and activerecord-jdbcderby-adapter\n"
2
- require_dependency 'models/course'
3
- require 'logger'
4
- ActiveRecord::Base.logger = Logger.new("debug.log")
5
-
6
- ActiveRecord::Base.configurations = {
7
- 'arunit' => {
8
- :adapter => 'jdbcderby',
9
- :database => 'activerecord_unittest'
10
- },
11
- 'arunit2' => {
12
- :adapter => 'jdbcderby',
13
- :database => 'activerecord_unittest2'
14
- }
15
- }
16
-
17
- ActiveRecord::Base.establish_connection 'arunit'
18
- Course.establish_connection 'arunit2'
@@ -1,18 +0,0 @@
1
- print "Using H2 via JRuby, activerecord-jdbc-adapter and activerecord-jdbch2-adapter\n"
2
- require_dependency 'models/course'
3
- require 'logger'
4
- ActiveRecord::Base.logger = Logger.new("debug.log")
5
-
6
- ActiveRecord::Base.configurations = {
7
- 'arunit' => {
8
- :adapter => 'jdbch2',
9
- :database => 'activerecord_unittest'
10
- },
11
- 'arunit2' => {
12
- :adapter => 'jdbch2',
13
- :database => 'activerecord_unittest2'
14
- }
15
- }
16
-
17
- ActiveRecord::Base.establish_connection 'arunit'
18
- Course.establish_connection 'arunit2'
@@ -1,18 +0,0 @@
1
- print "Using HSQLDB via JRuby, activerecord-jdbc-adapter and activerecord-jdbchsqldb-adapter\n"
2
- require_dependency 'models/course'
3
- require 'logger'
4
- ActiveRecord::Base.logger = Logger.new("debug.log")
5
-
6
- ActiveRecord::Base.configurations = {
7
- 'arunit' => {
8
- :adapter => 'jdbchsqldb',
9
- :database => 'activerecord_unittest'
10
- },
11
- 'arunit2' => {
12
- :adapter => 'jdbchsqldb',
13
- :database => 'activerecord_unittest2'
14
- }
15
- }
16
-
17
- ActiveRecord::Base.establish_connection 'arunit'
18
- Course.establish_connection 'arunit2'
@@ -1,26 +0,0 @@
1
- print "Using MySQL via JRuby, activerecord-jdbc-adapter and activerecord-jdbcmysql-adapter\n"
2
- require_dependency 'models/course'
3
- require 'logger'
4
-
5
- ActiveRecord::Base.logger = Logger.new("debug.log")
6
-
7
- # GRANT ALL PRIVILEGES ON activerecord_unittest.* to 'rails'@'localhost';
8
- # GRANT ALL PRIVILEGES ON activerecord_unittest2.* to 'rails'@'localhost';
9
-
10
- ActiveRecord::Base.configurations = {
11
- 'arunit' => {
12
- :adapter => 'jdbcmysql',
13
- :username => 'rails',
14
- :encoding => 'utf8',
15
- :database => 'activerecord_unittest',
16
- },
17
- 'arunit2' => {
18
- :adapter => 'jdbcmysql',
19
- :username => 'rails',
20
- :database => 'activerecord_unittest2'
21
- }
22
- }
23
-
24
- ActiveRecord::Base.establish_connection 'arunit'
25
- Course.establish_connection 'arunit2'
26
-
@@ -1,26 +0,0 @@
1
- print "Using Postgrsql via JRuby, activerecord-jdbc-adapter and activerecord-postgresql-adapter\n"
2
- require_dependency 'models/course'
3
- require 'logger'
4
-
5
- ActiveRecord::Base.logger = Logger.new("debug.log")
6
-
7
- # createuser rails --createdb --no-superuser --no-createrole
8
- # createdb -O rails activerecord_unittest
9
- # createdb -O rails activerecord_unittest2
10
-
11
- ActiveRecord::Base.configurations = {
12
- 'arunit' => {
13
- :adapter => 'jdbcpostgresql',
14
- :username => ENV['USER'] || 'rails',
15
- :database => 'activerecord_unittest'
16
- },
17
- 'arunit2' => {
18
- :adapter => 'jdbcpostgresql',
19
- :username => ENV['USER'] || 'rails',
20
- :database => 'activerecord_unittest2'
21
- }
22
- }
23
-
24
- ActiveRecord::Base.establish_connection 'arunit'
25
- Course.establish_connection 'arunit2'
26
-
@@ -1,25 +0,0 @@
1
- print "Using SQLite3 via JRuby, activerecord-jdbc-adapter and activerecord-jdbcsqlite3-adapter\n"
2
- require_dependency 'models/course'
3
- require 'logger'
4
- ActiveRecord::Base.logger = Logger.new("debug.log")
5
-
6
- class SqliteError < StandardError
7
- end
8
-
9
- BASE_DIR = FIXTURES_ROOT
10
- sqlite_test_db = "#{BASE_DIR}/fixture_database.sqlite3"
11
- sqlite_test_db2 = "#{BASE_DIR}/fixture_database_2.sqlite3"
12
-
13
- def make_connection(clazz, db_file)
14
- ActiveRecord::Base.configurations = { clazz.name => { :adapter => 'jdbcsqlite3', :database => db_file, :timeout => 5000 } }
15
- unless File.exist?(db_file)
16
- puts "SQLite3 database not found at #{db_file}. Rebuilding it."
17
- sqlite_command = %Q{sqlite3 "#{db_file}" "create table a (a integer); drop table a;"}
18
- puts "Executing '#{sqlite_command}'"
19
- raise SqliteError.new("Seems that there is no sqlite3 executable available") unless system(sqlite_command)
20
- end
21
- clazz.establish_connection(clazz.name)
22
- end
23
-
24
- make_connection(ActiveRecord::Base, sqlite_test_db)
25
- make_connection(Course, sqlite_test_db2)
@@ -1,25 +0,0 @@
1
- print "Using native DB2\n"
2
- require_dependency 'models/course'
3
- require 'logger'
4
-
5
- ActiveRecord::Base.logger = Logger.new("debug.log")
6
-
7
- ActiveRecord::Base.configurations = {
8
- 'arunit' => {
9
- :adapter => 'db2',
10
- :host => 'localhost',
11
- :username => 'arunit',
12
- :password => 'arunit',
13
- :database => 'arunit'
14
- },
15
- 'arunit2' => {
16
- :adapter => 'db2',
17
- :host => 'localhost',
18
- :username => 'arunit',
19
- :password => 'arunit',
20
- :database => 'arunit2'
21
- }
22
- }
23
-
24
- ActiveRecord::Base.establish_connection 'arunit'
25
- Course.establish_connection 'arunit2'
@@ -1,26 +0,0 @@
1
- print "Using native Firebird\n"
2
- require_dependency 'models/course'
3
- require 'logger'
4
-
5
- ActiveRecord::Base.logger = Logger.new("debug.log")
6
-
7
- ActiveRecord::Base.configurations = {
8
- 'arunit' => {
9
- :adapter => 'firebird',
10
- :host => 'localhost',
11
- :username => 'rails',
12
- :password => 'rails',
13
- :database => 'activerecord_unittest',
14
- :charset => 'UTF8'
15
- },
16
- 'arunit2' => {
17
- :adapter => 'firebird',
18
- :host => 'localhost',
19
- :username => 'rails',
20
- :password => 'rails',
21
- :database => 'activerecord_unittest2'
22
- }
23
- }
24
-
25
- ActiveRecord::Base.establish_connection 'arunit'
26
- Course.establish_connection 'arunit2'