ibm_db 3.0.5 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (580) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +4 -0
  3. data/LICENSE +1 -1
  4. data/MANIFEST +14 -14
  5. data/ParameterizedQueries README +6 -6
  6. data/README +208 -225
  7. data/ext/Makefile.nt32 +181 -181
  8. data/ext/Makefile.nt32.191 +212 -212
  9. data/ext/extconf.rb +291 -291
  10. data/ext/ibm_db.c +11887 -11887
  11. data/ext/ruby_ibm_db.h +241 -241
  12. data/ext/ruby_ibm_db_cli.c +866 -866
  13. data/ext/ruby_ibm_db_cli.h +500 -500
  14. data/init.rb +41 -41
  15. data/lib/IBM_DB.rb +27 -27
  16. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +3452 -3177
  17. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +5 -2
  18. data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
  19. data/test/active_record/connection_adapters/fake_adapter.rb +49 -46
  20. data/test/assets/example.log +1 -1
  21. data/test/assets/test.txt +1 -1
  22. data/test/cases/adapter_test.rb +351 -276
  23. data/test/cases/adapters/mysql2/active_schema_test.rb +193 -0
  24. data/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -0
  25. data/test/cases/adapters/mysql2/boolean_test.rb +100 -0
  26. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +63 -0
  27. data/test/cases/adapters/mysql2/charset_collation_test.rb +54 -0
  28. data/test/cases/adapters/mysql2/connection_test.rb +210 -0
  29. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +45 -0
  30. data/test/cases/adapters/mysql2/enum_test.rb +26 -0
  31. data/test/cases/adapters/mysql2/explain_test.rb +21 -0
  32. data/test/cases/adapters/mysql2/json_test.rb +195 -0
  33. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +83 -0
  34. data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -0
  35. data/test/cases/adapters/mysql2/schema_migrations_test.rb +59 -0
  36. data/test/cases/adapters/mysql2/schema_test.rb +126 -0
  37. data/test/cases/adapters/mysql2/sp_test.rb +36 -0
  38. data/test/cases/adapters/mysql2/sql_types_test.rb +14 -0
  39. data/test/cases/adapters/mysql2/table_options_test.rb +42 -0
  40. data/test/cases/adapters/mysql2/unsigned_type_test.rb +66 -0
  41. data/test/cases/adapters/postgresql/active_schema_test.rb +98 -0
  42. data/test/cases/adapters/postgresql/array_test.rb +339 -0
  43. data/test/cases/adapters/postgresql/bit_string_test.rb +82 -0
  44. data/test/cases/adapters/postgresql/bytea_test.rb +134 -0
  45. data/test/cases/adapters/postgresql/case_insensitive_test.rb +26 -0
  46. data/test/cases/adapters/postgresql/change_schema_test.rb +38 -0
  47. data/test/cases/adapters/postgresql/cidr_test.rb +25 -0
  48. data/test/cases/adapters/postgresql/citext_test.rb +78 -0
  49. data/test/cases/adapters/postgresql/collation_test.rb +53 -0
  50. data/test/cases/adapters/postgresql/composite_test.rb +132 -0
  51. data/test/cases/adapters/postgresql/connection_test.rb +257 -0
  52. data/test/cases/adapters/postgresql/datatype_test.rb +92 -0
  53. data/test/cases/adapters/postgresql/domain_test.rb +47 -0
  54. data/test/cases/adapters/postgresql/enum_test.rb +91 -0
  55. data/test/cases/adapters/postgresql/explain_test.rb +20 -0
  56. data/test/cases/adapters/postgresql/extension_migration_test.rb +63 -0
  57. data/test/cases/adapters/postgresql/full_text_test.rb +44 -0
  58. data/test/cases/adapters/postgresql/geometric_test.rb +378 -0
  59. data/test/cases/adapters/postgresql/hstore_test.rb +382 -0
  60. data/test/cases/adapters/postgresql/infinity_test.rb +69 -0
  61. data/test/cases/adapters/postgresql/integer_test.rb +25 -0
  62. data/test/cases/adapters/postgresql/json_test.rb +237 -0
  63. data/test/cases/adapters/postgresql/ltree_test.rb +53 -0
  64. data/test/cases/adapters/postgresql/money_test.rb +96 -0
  65. data/test/cases/adapters/postgresql/network_test.rb +94 -0
  66. data/test/cases/adapters/postgresql/numbers_test.rb +49 -0
  67. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +405 -0
  68. data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -0
  69. data/test/cases/adapters/postgresql/quoting_test.rb +44 -0
  70. data/test/cases/adapters/postgresql/range_test.rb +343 -0
  71. data/test/cases/adapters/postgresql/referential_integrity_test.rb +111 -0
  72. data/test/cases/adapters/postgresql/rename_table_test.rb +34 -0
  73. data/test/cases/adapters/postgresql/schema_authorization_test.rb +119 -0
  74. data/test/cases/adapters/postgresql/schema_test.rb +597 -0
  75. data/test/cases/adapters/postgresql/serial_test.rb +154 -0
  76. data/test/cases/adapters/postgresql/statement_pool_test.rb +41 -0
  77. data/test/cases/adapters/postgresql/timestamp_test.rb +90 -0
  78. data/test/cases/adapters/postgresql/type_lookup_test.rb +33 -0
  79. data/test/cases/adapters/postgresql/utils_test.rb +62 -0
  80. data/test/cases/adapters/postgresql/uuid_test.rb +294 -0
  81. data/test/cases/adapters/postgresql/xml_test.rb +54 -0
  82. data/test/cases/adapters/sqlite3/collation_test.rb +53 -0
  83. data/test/cases/adapters/sqlite3/copy_table_test.rb +98 -0
  84. data/test/cases/adapters/sqlite3/explain_test.rb +21 -0
  85. data/test/cases/adapters/sqlite3/quoting_test.rb +101 -0
  86. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +441 -0
  87. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -0
  88. data/test/cases/adapters/sqlite3/statement_pool_test.rb +20 -0
  89. data/test/cases/aggregations_test.rb +168 -158
  90. data/test/cases/ar_schema_test.rb +146 -161
  91. data/test/cases/associations/association_scope_test.rb +16 -21
  92. data/test/cases/associations/belongs_to_associations_test.rb +1141 -1029
  93. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -0
  94. data/test/cases/associations/callbacks_test.rb +190 -192
  95. data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
  96. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
  97. data/test/cases/associations/eager_load_nested_include_test.rb +126 -128
  98. data/test/cases/associations/eager_singularization_test.rb +148 -148
  99. data/test/cases/associations/eager_test.rb +1514 -1429
  100. data/test/cases/associations/extension_test.rb +87 -82
  101. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +1004 -972
  102. data/test/cases/associations/has_many_associations_test.rb +2501 -2182
  103. data/test/cases/associations/has_many_through_associations_test.rb +1271 -1204
  104. data/test/cases/associations/has_one_associations_test.rb +707 -610
  105. data/test/cases/associations/has_one_through_associations_test.rb +383 -380
  106. data/test/cases/associations/inner_join_association_test.rb +139 -139
  107. data/test/cases/associations/inverse_associations_test.rb +733 -706
  108. data/test/cases/associations/join_model_test.rb +777 -754
  109. data/test/cases/associations/left_outer_join_association_test.rb +88 -0
  110. data/test/cases/associations/nested_through_associations_test.rb +579 -579
  111. data/test/cases/associations/required_test.rb +102 -82
  112. data/test/cases/associations_test.rb +385 -380
  113. data/test/cases/attribute_decorators_test.rb +125 -125
  114. data/test/cases/attribute_methods/read_test.rb +60 -60
  115. data/test/cases/attribute_methods_test.rb +1009 -952
  116. data/test/cases/attribute_set_test.rb +270 -210
  117. data/test/cases/attribute_test.rb +246 -180
  118. data/test/cases/attributes_test.rb +253 -136
  119. data/test/cases/autosave_association_test.rb +1708 -1595
  120. data/test/cases/base_test.rb +1713 -1664
  121. data/test/cases/batches_test.rb +489 -212
  122. data/test/cases/binary_test.rb +44 -52
  123. data/test/cases/bind_parameter_test.rb +110 -100
  124. data/test/cases/cache_key_test.rb +25 -0
  125. data/test/cases/calculations_test.rb +798 -646
  126. data/test/cases/callbacks_test.rb +636 -543
  127. data/test/cases/clone_test.rb +40 -40
  128. data/test/cases/coders/json_test.rb +15 -0
  129. data/test/cases/coders/yaml_column_test.rb +63 -63
  130. data/test/cases/collection_cache_key_test.rb +115 -0
  131. data/test/cases/column_alias_test.rb +17 -17
  132. data/test/cases/column_definition_test.rb +92 -123
  133. data/test/cases/comment_test.rb +143 -0
  134. data/test/cases/connection_adapters/adapter_leasing_test.rb +56 -54
  135. data/test/cases/connection_adapters/connection_handler_test.rb +160 -53
  136. data/test/cases/connection_adapters/connection_specification_test.rb +12 -12
  137. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +255 -293
  138. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +69 -65
  139. data/test/cases/connection_adapters/quoting_test.rb +13 -13
  140. data/test/cases/connection_adapters/schema_cache_test.rb +61 -56
  141. data/test/cases/connection_adapters/type_lookup_test.rb +118 -110
  142. data/test/cases/connection_management_test.rb +112 -122
  143. data/test/cases/connection_pool_test.rb +521 -346
  144. data/test/cases/connection_specification/resolver_test.rb +131 -116
  145. data/test/cases/core_test.rb +112 -112
  146. data/test/cases/counter_cache_test.rb +214 -209
  147. data/test/cases/custom_locking_test.rb +17 -17
  148. data/test/cases/database_statements_test.rb +34 -19
  149. data/test/cases/{invalid_date_test.rb → date_test.rb} +44 -32
  150. data/test/cases/date_time_precision_test.rb +106 -0
  151. data/test/cases/date_time_test.rb +61 -61
  152. data/test/cases/defaults_test.rb +218 -223
  153. data/test/cases/dirty_test.rb +763 -785
  154. data/test/cases/disconnected_test.rb +30 -28
  155. data/test/cases/dup_test.rb +157 -157
  156. data/test/cases/enum_test.rb +444 -290
  157. data/test/cases/errors_test.rb +16 -0
  158. data/test/cases/explain_subscriber_test.rb +64 -64
  159. data/test/cases/explain_test.rb +87 -76
  160. data/test/cases/finder_respond_to_test.rb +60 -60
  161. data/test/cases/finder_test.rb +1294 -1169
  162. data/test/cases/fixture_set/file_test.rb +156 -138
  163. data/test/cases/fixtures_test.rb +988 -908
  164. data/test/cases/forbidden_attributes_protection_test.rb +165 -99
  165. data/test/cases/habtm_destroy_order_test.rb +61 -61
  166. data/test/cases/helper.rb +204 -210
  167. data/test/cases/hot_compatibility_test.rb +142 -54
  168. data/test/cases/i18n_test.rb +45 -45
  169. data/test/cases/inheritance_test.rb +606 -375
  170. data/test/cases/integration_test.rb +155 -139
  171. data/test/cases/invalid_connection_test.rb +24 -22
  172. data/test/cases/invertible_migration_test.rb +387 -295
  173. data/test/cases/json_serialization_test.rb +311 -302
  174. data/test/cases/locking_test.rb +493 -477
  175. data/test/cases/log_subscriber_test.rb +225 -136
  176. data/test/cases/migration/change_schema_test.rb +458 -512
  177. data/test/cases/migration/change_table_test.rb +256 -224
  178. data/test/cases/migration/column_attributes_test.rb +176 -192
  179. data/test/cases/migration/column_positioning_test.rb +56 -56
  180. data/test/cases/migration/columns_test.rb +310 -304
  181. data/test/cases/migration/command_recorder_test.rb +350 -305
  182. data/test/cases/migration/compatibility_test.rb +118 -0
  183. data/test/cases/migration/create_join_table_test.rb +157 -148
  184. data/test/cases/migration/foreign_key_test.rb +360 -328
  185. data/test/cases/migration/helper.rb +39 -39
  186. data/test/cases/migration/index_test.rb +218 -216
  187. data/test/cases/migration/logger_test.rb +36 -36
  188. data/test/cases/migration/pending_migrations_test.rb +52 -53
  189. data/test/cases/migration/references_foreign_key_test.rb +216 -169
  190. data/test/cases/migration/references_index_test.rb +101 -101
  191. data/test/cases/migration/references_statements_test.rb +136 -116
  192. data/test/cases/migration/rename_table_test.rb +93 -93
  193. data/test/cases/migration_test.rb +1157 -959
  194. data/test/cases/migrator_test.rb +470 -388
  195. data/test/cases/mixin_test.rb +68 -70
  196. data/test/cases/modules_test.rb +172 -173
  197. data/test/cases/multiparameter_attributes_test.rb +372 -350
  198. data/test/cases/multiple_db_test.rb +122 -115
  199. data/test/cases/nested_attributes_test.rb +1098 -1070
  200. data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
  201. data/test/cases/persistence_test.rb +1001 -909
  202. data/test/cases/pooled_connections_test.rb +81 -81
  203. data/test/cases/primary_keys_test.rb +376 -237
  204. data/test/cases/query_cache_test.rb +446 -326
  205. data/test/cases/quoting_test.rb +202 -156
  206. data/test/cases/readonly_test.rb +119 -118
  207. data/test/cases/reaper_test.rb +85 -85
  208. data/test/cases/reflection_test.rb +509 -463
  209. data/test/cases/relation/delegation_test.rb +63 -68
  210. data/test/cases/relation/merging_test.rb +157 -161
  211. data/test/cases/relation/mutation_test.rb +183 -165
  212. data/test/cases/relation/or_test.rb +92 -0
  213. data/test/cases/relation/predicate_builder_test.rb +16 -14
  214. data/test/cases/relation/record_fetch_warning_test.rb +40 -0
  215. data/test/cases/relation/where_chain_test.rb +105 -181
  216. data/test/cases/relation/where_clause_test.rb +182 -0
  217. data/test/cases/relation/where_test.rb +322 -300
  218. data/test/cases/relation_test.rb +328 -319
  219. data/test/cases/relations_test.rb +2026 -1815
  220. data/test/cases/reload_models_test.rb +22 -22
  221. data/test/cases/result_test.rb +90 -80
  222. data/test/cases/sanitize_test.rb +176 -83
  223. data/test/cases/schema_dumper_test.rb +457 -463
  224. data/test/cases/schema_loading_test.rb +52 -0
  225. data/test/cases/scoping/default_scoping_test.rb +528 -454
  226. data/test/cases/scoping/named_scoping_test.rb +561 -524
  227. data/test/cases/scoping/relation_scoping_test.rb +400 -357
  228. data/test/cases/secure_token_test.rb +32 -0
  229. data/test/cases/serialization_test.rb +104 -104
  230. data/test/cases/serialized_attribute_test.rb +364 -277
  231. data/test/cases/statement_cache_test.rb +136 -98
  232. data/test/cases/store_test.rb +195 -194
  233. data/test/cases/suppressor_test.rb +63 -0
  234. data/test/cases/tasks/database_tasks_test.rb +462 -398
  235. data/test/cases/tasks/mysql_rake_test.rb +345 -324
  236. data/test/cases/tasks/postgresql_rake_test.rb +304 -250
  237. data/test/cases/tasks/sqlite_rake_test.rb +220 -193
  238. data/test/cases/test_case.rb +131 -123
  239. data/test/cases/test_fixtures_test.rb +36 -0
  240. data/test/cases/time_precision_test.rb +102 -0
  241. data/test/cases/timestamp_test.rb +501 -467
  242. data/test/cases/touch_later_test.rb +121 -0
  243. data/test/cases/transaction_callbacks_test.rb +518 -452
  244. data/test/cases/transaction_isolation_test.rb +106 -106
  245. data/test/cases/transactions_test.rb +834 -817
  246. data/test/cases/type/adapter_specific_registry_test.rb +133 -0
  247. data/test/cases/type/date_time_test.rb +14 -0
  248. data/test/cases/type/integer_test.rb +27 -121
  249. data/test/cases/type/string_test.rb +22 -36
  250. data/test/cases/type/type_map_test.rb +177 -177
  251. data/test/cases/type_test.rb +39 -0
  252. data/test/cases/types_test.rb +24 -141
  253. data/test/cases/unconnected_test.rb +33 -33
  254. data/test/cases/validations/absence_validation_test.rb +73 -0
  255. data/test/cases/validations/association_validation_test.rb +97 -86
  256. data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
  257. data/test/cases/validations/i18n_validation_test.rb +86 -90
  258. data/test/cases/validations/length_validation_test.rb +79 -47
  259. data/test/cases/validations/presence_validation_test.rb +103 -68
  260. data/test/cases/validations/uniqueness_validation_test.rb +548 -457
  261. data/test/cases/validations_repair_helper.rb +19 -23
  262. data/test/cases/validations_test.rb +194 -165
  263. data/test/cases/view_test.rb +216 -119
  264. data/test/cases/yaml_serialization_test.rb +121 -126
  265. data/test/config.example.yml +97 -0
  266. data/test/config.rb +5 -5
  267. data/test/fixtures/accounts.yml +29 -29
  268. data/test/fixtures/admin/accounts.yml +2 -2
  269. data/test/fixtures/admin/users.yml +10 -10
  270. data/test/fixtures/author_addresses.original +11 -0
  271. data/test/fixtures/author_addresses.yml +17 -17
  272. data/test/fixtures/author_favorites.yml +3 -3
  273. data/test/fixtures/authors.original +17 -0
  274. data/test/fixtures/authors.yml +23 -23
  275. data/test/fixtures/bad_posts.yml +9 -0
  276. data/test/fixtures/binaries.yml +133 -133
  277. data/test/fixtures/books.yml +31 -11
  278. data/test/fixtures/bulbs.yml +5 -5
  279. data/test/fixtures/cars.yml +9 -9
  280. data/test/fixtures/categories.yml +19 -19
  281. data/test/fixtures/categories/special_categories.yml +9 -9
  282. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -4
  283. data/test/fixtures/categories_ordered.yml +7 -7
  284. data/test/fixtures/categories_posts.yml +31 -31
  285. data/test/fixtures/categorizations.yml +23 -23
  286. data/test/fixtures/clubs.yml +8 -8
  287. data/test/fixtures/collections.yml +3 -3
  288. data/test/fixtures/colleges.yml +3 -3
  289. data/test/fixtures/comments.yml +65 -65
  290. data/test/fixtures/companies.yml +67 -67
  291. data/test/fixtures/computers.yml +10 -10
  292. data/test/fixtures/content.yml +3 -0
  293. data/test/fixtures/content_positions.yml +3 -0
  294. data/test/fixtures/courses.yml +8 -8
  295. data/test/fixtures/customers.yml +25 -25
  296. data/test/fixtures/dashboards.yml +6 -6
  297. data/test/fixtures/dead_parrots.yml +5 -0
  298. data/test/fixtures/developers.yml +22 -22
  299. data/test/fixtures/developers_projects.yml +16 -16
  300. data/test/fixtures/dog_lovers.yml +7 -7
  301. data/test/fixtures/dogs.yml +4 -4
  302. data/test/fixtures/doubloons.yml +3 -3
  303. data/test/fixtures/edges.yml +5 -5
  304. data/test/fixtures/entrants.yml +14 -14
  305. data/test/fixtures/essays.yml +6 -6
  306. data/test/fixtures/faces.yml +11 -11
  307. data/test/fixtures/fk_test_has_fk.yml +3 -3
  308. data/test/fixtures/fk_test_has_pk.yml +1 -1
  309. data/test/fixtures/friendships.yml +4 -4
  310. data/test/fixtures/funny_jokes.yml +10 -10
  311. data/test/fixtures/interests.yml +33 -33
  312. data/test/fixtures/items.yml +3 -3
  313. data/test/fixtures/jobs.yml +7 -7
  314. data/test/fixtures/legacy_things.yml +3 -3
  315. data/test/fixtures/live_parrots.yml +4 -0
  316. data/test/fixtures/mateys.yml +4 -4
  317. data/test/fixtures/member_details.yml +8 -8
  318. data/test/fixtures/member_types.yml +6 -6
  319. data/test/fixtures/members.yml +11 -11
  320. data/test/fixtures/memberships.yml +34 -34
  321. data/test/fixtures/men.yml +5 -5
  322. data/test/fixtures/minimalistics.yml +2 -2
  323. data/test/fixtures/minivans.yml +5 -5
  324. data/test/fixtures/mixed_case_monkeys.yml +6 -6
  325. data/test/fixtures/mixins.yml +29 -29
  326. data/test/fixtures/movies.yml +7 -7
  327. data/test/fixtures/naked/yml/accounts.yml +1 -1
  328. data/test/fixtures/naked/yml/companies.yml +1 -1
  329. data/test/fixtures/naked/yml/courses.yml +1 -1
  330. data/test/fixtures/naked/yml/parrots.yml +2 -0
  331. data/test/fixtures/naked/yml/trees.yml +3 -0
  332. data/test/fixtures/nodes.yml +29 -0
  333. data/test/fixtures/organizations.yml +5 -5
  334. data/test/fixtures/other_comments.yml +6 -0
  335. data/test/fixtures/other_dogs.yml +2 -0
  336. data/test/fixtures/other_posts.yml +7 -0
  337. data/test/fixtures/other_topics.yml +42 -42
  338. data/test/fixtures/owners.yml +9 -9
  339. data/test/fixtures/parrots.yml +27 -27
  340. data/test/fixtures/parrots_pirates.yml +7 -7
  341. data/test/fixtures/people.yml +24 -24
  342. data/test/fixtures/peoples_treasures.yml +3 -3
  343. data/test/fixtures/pets.yml +19 -19
  344. data/test/fixtures/pirates.yml +15 -12
  345. data/test/fixtures/posts.yml +80 -80
  346. data/test/fixtures/price_estimates.yml +16 -7
  347. data/test/fixtures/products.yml +4 -4
  348. data/test/fixtures/projects.yml +7 -7
  349. data/test/fixtures/ratings.yml +14 -14
  350. data/test/fixtures/readers.yml +11 -11
  351. data/test/fixtures/references.yml +17 -17
  352. data/test/fixtures/reserved_words/distinct.yml +5 -5
  353. data/test/fixtures/reserved_words/distinct_select.yml +11 -11
  354. data/test/fixtures/reserved_words/group.yml +14 -14
  355. data/test/fixtures/reserved_words/select.yml +8 -8
  356. data/test/fixtures/reserved_words/values.yml +7 -7
  357. data/test/fixtures/ships.yml +6 -6
  358. data/test/fixtures/speedometers.yml +8 -8
  359. data/test/fixtures/sponsors.yml +12 -12
  360. data/test/fixtures/string_key_objects.yml +7 -7
  361. data/test/fixtures/subscribers.yml +10 -10
  362. data/test/fixtures/subscriptions.yml +12 -12
  363. data/test/fixtures/taggings.yml +78 -78
  364. data/test/fixtures/tags.yml +11 -11
  365. data/test/fixtures/tasks.yml +7 -7
  366. data/test/fixtures/teapots.yml +3 -3
  367. data/test/fixtures/to_be_linked/accounts.yml +2 -2
  368. data/test/fixtures/to_be_linked/users.yml +10 -10
  369. data/test/fixtures/topics.yml +49 -49
  370. data/test/fixtures/toys.yml +14 -14
  371. data/test/fixtures/traffic_lights.yml +9 -9
  372. data/test/fixtures/treasures.yml +10 -10
  373. data/test/fixtures/trees.yml +3 -0
  374. data/test/fixtures/uuid_children.yml +3 -3
  375. data/test/fixtures/uuid_parents.yml +2 -2
  376. data/test/fixtures/variants.yml +4 -4
  377. data/test/fixtures/vegetables.yml +19 -19
  378. data/test/fixtures/vertices.yml +3 -3
  379. data/test/fixtures/warehouse_things.yml +2 -2
  380. data/test/fixtures/zines.yml +5 -5
  381. data/test/migrations/10_urban/9_add_expressions.rb +11 -11
  382. data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -15
  383. data/test/migrations/magic/1_currencies_have_symbols.rb +12 -12
  384. data/test/migrations/missing/1000_people_have_middle_names.rb +9 -9
  385. data/test/migrations/missing/1_people_have_last_names.rb +9 -9
  386. data/test/migrations/missing/3_we_need_reminders.rb +12 -12
  387. data/test/migrations/missing/4_innocent_jointable.rb +12 -12
  388. data/test/migrations/rename/1_we_need_things.rb +11 -11
  389. data/test/migrations/rename/2_rename_things.rb +9 -9
  390. data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -9
  391. data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -9
  392. data/test/migrations/to_copy2/1_create_articles.rb +7 -7
  393. data/test/migrations/to_copy2/2_create_comments.rb +7 -7
  394. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -9
  395. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -9
  396. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -9
  397. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -7
  398. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -7
  399. data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -9
  400. data/test/migrations/valid/2_we_need_reminders.rb +12 -12
  401. data/test/migrations/valid/3_innocent_jointable.rb +12 -12
  402. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -9
  403. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +12 -12
  404. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +12 -12
  405. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -9
  406. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -12
  407. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -12
  408. data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -8
  409. data/test/models/admin.rb +5 -5
  410. data/test/models/admin/account.rb +3 -3
  411. data/test/models/admin/randomly_named_c1.rb +6 -2
  412. data/test/models/admin/user.rb +40 -40
  413. data/test/models/aircraft.rb +5 -4
  414. data/test/models/arunit2_model.rb +3 -3
  415. data/test/models/author.rb +209 -212
  416. data/test/models/auto_id.rb +4 -4
  417. data/test/models/autoloadable/extra_firm.rb +2 -2
  418. data/test/models/binary.rb +2 -2
  419. data/test/models/bird.rb +12 -12
  420. data/test/models/book.rb +23 -18
  421. data/test/models/boolean.rb +2 -2
  422. data/test/models/bulb.rb +52 -51
  423. data/test/models/cake_designer.rb +3 -3
  424. data/test/models/car.rb +29 -26
  425. data/test/models/carrier.rb +2 -2
  426. data/test/models/cat.rb +10 -0
  427. data/test/models/categorization.rb +19 -19
  428. data/test/models/category.rb +35 -35
  429. data/test/models/chef.rb +8 -7
  430. data/test/models/citation.rb +3 -3
  431. data/test/models/club.rb +25 -23
  432. data/test/models/college.rb +10 -10
  433. data/test/models/column.rb +3 -3
  434. data/test/models/column_name.rb +3 -3
  435. data/test/models/comment.rb +76 -64
  436. data/test/models/company.rb +230 -228
  437. data/test/models/company_in_module.rb +98 -98
  438. data/test/models/computer.rb +3 -3
  439. data/test/models/contact.rb +41 -41
  440. data/test/models/content.rb +40 -0
  441. data/test/models/contract.rb +20 -20
  442. data/test/models/country.rb +7 -7
  443. data/test/models/course.rb +6 -6
  444. data/test/models/customer.rb +83 -77
  445. data/test/models/customer_carrier.rb +14 -14
  446. data/test/models/dashboard.rb +3 -3
  447. data/test/models/default.rb +2 -2
  448. data/test/models/department.rb +4 -4
  449. data/test/models/developer.rb +274 -255
  450. data/test/models/dog.rb +5 -5
  451. data/test/models/dog_lover.rb +5 -5
  452. data/test/models/doubloon.rb +12 -12
  453. data/test/models/drink_designer.rb +3 -3
  454. data/test/models/edge.rb +5 -5
  455. data/test/models/electron.rb +5 -5
  456. data/test/models/engine.rb +4 -4
  457. data/test/models/entrant.rb +3 -3
  458. data/test/models/essay.rb +5 -5
  459. data/test/models/event.rb +3 -3
  460. data/test/models/eye.rb +37 -37
  461. data/test/models/face.rb +9 -9
  462. data/test/models/friendship.rb +6 -6
  463. data/test/models/guid.rb +2 -2
  464. data/test/models/guitar.rb +4 -0
  465. data/test/models/hotel.rb +11 -9
  466. data/test/models/image.rb +3 -3
  467. data/test/models/interest.rb +5 -5
  468. data/test/models/invoice.rb +4 -4
  469. data/test/models/item.rb +7 -7
  470. data/test/models/job.rb +7 -7
  471. data/test/models/joke.rb +7 -7
  472. data/test/models/keyboard.rb +3 -3
  473. data/test/models/legacy_thing.rb +3 -3
  474. data/test/models/lesson.rb +11 -11
  475. data/test/models/line_item.rb +3 -3
  476. data/test/models/liquid.rb +4 -4
  477. data/test/models/man.rb +11 -11
  478. data/test/models/matey.rb +4 -4
  479. data/test/models/member.rb +42 -41
  480. data/test/models/member_detail.rb +8 -7
  481. data/test/models/member_type.rb +3 -3
  482. data/test/models/membership.rb +35 -35
  483. data/test/models/mentor.rb +3 -0
  484. data/test/models/minimalistic.rb +2 -2
  485. data/test/models/minivan.rb +9 -9
  486. data/test/models/mixed_case_monkey.rb +3 -3
  487. data/test/models/mocktail_designer.rb +2 -0
  488. data/test/models/molecule.rb +6 -6
  489. data/test/models/movie.rb +5 -5
  490. data/test/models/node.rb +5 -0
  491. data/test/models/non_primary_key.rb +2 -0
  492. data/test/models/notification.rb +3 -0
  493. data/test/models/order.rb +4 -4
  494. data/test/models/organization.rb +14 -14
  495. data/test/models/other_dog.rb +5 -0
  496. data/test/models/owner.rb +37 -34
  497. data/test/models/parrot.rb +28 -29
  498. data/test/models/person.rb +142 -143
  499. data/test/models/personal_legacy_thing.rb +4 -4
  500. data/test/models/pet.rb +18 -15
  501. data/test/models/pet_treasure.rb +6 -0
  502. data/test/models/pirate.rb +92 -92
  503. data/test/models/possession.rb +3 -3
  504. data/test/models/post.rb +273 -264
  505. data/test/models/price_estimate.rb +4 -4
  506. data/test/models/professor.rb +5 -5
  507. data/test/models/project.rb +40 -31
  508. data/test/models/publisher.rb +2 -2
  509. data/test/models/publisher/article.rb +4 -4
  510. data/test/models/publisher/magazine.rb +3 -3
  511. data/test/models/randomly_named_c1.rb +1 -1
  512. data/test/models/rating.rb +4 -4
  513. data/test/models/reader.rb +23 -23
  514. data/test/models/recipe.rb +3 -0
  515. data/test/models/record.rb +2 -2
  516. data/test/models/reference.rb +22 -22
  517. data/test/models/reply.rb +61 -61
  518. data/test/models/ship.rb +39 -33
  519. data/test/models/ship_part.rb +8 -8
  520. data/test/models/shop.rb +17 -17
  521. data/test/models/shop_account.rb +6 -6
  522. data/test/models/speedometer.rb +6 -6
  523. data/test/models/sponsor.rb +7 -7
  524. data/test/models/string_key_object.rb +3 -3
  525. data/test/models/student.rb +4 -4
  526. data/test/models/subject.rb +16 -16
  527. data/test/models/subscriber.rb +8 -8
  528. data/test/models/subscription.rb +4 -4
  529. data/test/models/tag.rb +13 -7
  530. data/test/models/tagging.rb +13 -13
  531. data/test/models/task.rb +5 -5
  532. data/test/models/topic.rb +118 -124
  533. data/test/models/toy.rb +6 -6
  534. data/test/models/traffic_light.rb +4 -4
  535. data/test/models/treasure.rb +14 -14
  536. data/test/models/treaty.rb +7 -7
  537. data/test/models/tree.rb +3 -0
  538. data/test/models/tuning_peg.rb +4 -0
  539. data/test/models/tyre.rb +11 -11
  540. data/test/models/user.rb +14 -0
  541. data/test/models/uuid_child.rb +3 -3
  542. data/test/models/uuid_item.rb +6 -0
  543. data/test/models/uuid_parent.rb +3 -3
  544. data/test/models/vegetables.rb +24 -24
  545. data/test/models/vehicle.rb +6 -6
  546. data/test/models/vertex.rb +9 -9
  547. data/test/models/warehouse_thing.rb +5 -5
  548. data/test/models/wheel.rb +3 -3
  549. data/test/models/without_table.rb +3 -3
  550. data/test/models/zine.rb +3 -3
  551. data/test/schema/mysql2_specific_schema.rb +68 -58
  552. data/test/schema/oracle_specific_schema.rb +40 -43
  553. data/test/schema/postgresql_specific_schema.rb +114 -202
  554. data/test/schema/schema.rb +1057 -952
  555. data/test/schema/schema.rb.original +1057 -0
  556. data/test/schema/sqlite_specific_schema.rb +18 -22
  557. data/test/support/config.rb +43 -43
  558. data/test/support/connection.rb +23 -22
  559. data/test/support/connection_helper.rb +14 -14
  560. data/test/support/ddl_helper.rb +8 -8
  561. data/test/support/schema_dumping_helper.rb +20 -20
  562. data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -0
  563. data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -0
  564. metadata +129 -24
  565. data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +0 -26
  566. data/test/cases/attribute_methods/serialization_test.rb +0 -29
  567. data/test/cases/migration/change_schema_test - Copy.rb +0 -448
  568. data/test/cases/migration/foreign_key_test - Changed.rb +0 -325
  569. data/test/cases/migration/table_and_index_test.rb +0 -24
  570. data/test/cases/relation/where_test2.rb +0 -36
  571. data/test/cases/type/decimal_test.rb +0 -56
  572. data/test/cases/type/unsigned_integer_test.rb +0 -18
  573. data/test/cases/xml_serialization_test.rb +0 -457
  574. data/test/connections/native_ibm_db/connection.rb +0 -44
  575. data/test/fixtures/naked/csv/accounts.csv +0 -1
  576. data/test/schema/i5/ibm_db_specific_schema.rb +0 -137
  577. data/test/schema/ids/ibm_db_specific_schema.rb +0 -140
  578. data/test/schema/luw/ibm_db_specific_schema.rb +0 -137
  579. data/test/schema/mysql_specific_schema.rb +0 -70
  580. data/test/schema/zOS/ibm_db_specific_schema.rb +0 -208
@@ -1,24 +0,0 @@
1
- require "cases/helper"
2
-
3
- module ActiveRecord
4
- class Migration
5
- class TableAndIndexTest < ActiveRecord::TestCase
6
- def test_add_schema_info_respects_prefix_and_suffix
7
- conn = ActiveRecord::Base.connection
8
-
9
- conn.drop_table(ActiveRecord::Migrator.schema_migrations_table_name) if conn.table_exists?(ActiveRecord::Migrator.schema_migrations_table_name)
10
- # Use shorter prefix and suffix as in Oracle database identifier cannot be larger than 30 characters
11
- ActiveRecord::Base.table_name_prefix = 'p_'
12
- ActiveRecord::Base.table_name_suffix = '_s'
13
- conn.drop_table(ActiveRecord::Migrator.schema_migrations_table_name) if conn.table_exists?(ActiveRecord::Migrator.schema_migrations_table_name)
14
-
15
- conn.initialize_schema_migrations_table
16
-
17
- assert_equal "p_unique_schema_migrations_s", conn.indexes(ActiveRecord::Migrator.schema_migrations_table_name)[0][:name]
18
- ensure
19
- ActiveRecord::Base.table_name_prefix = ""
20
- ActiveRecord::Base.table_name_suffix = ""
21
- end
22
- end
23
- end
24
- end
@@ -1,36 +0,0 @@
1
- require "cases/helper"
2
- require "models/author"
3
- require "models/binary"
4
- require "models/cake_designer"
5
- require "models/category"
6
- require "models/chef"
7
- require "models/comment"
8
- require "models/edge"
9
- require "models/essay"
10
- require "models/post"
11
- require "models/price_estimate"
12
- require "models/topic"
13
- require "models/treasure"
14
- require "models/vertex"
15
-
16
- module ActiveRecord
17
- class WhereTest < ActiveRecord::TestCase
18
- fixtures :posts, :edges, :authors, :binaries, :essays, :author_addresses
19
-
20
- unless current_adapter?(:IBM_DBAdapter)
21
- def test_where_with_boolean_for_string_column
22
- #count = Post.where(:title => false).count
23
- count = Post.where(:title => 0.0).count
24
- assert_equal 0, count
25
- end
26
- end
27
-
28
- =begin
29
- def test_where_with_integer_for_binary_column
30
- count = Binary.where(:data => 0).count
31
- assert_equal 0, count
32
- end
33
- =end
34
-
35
- end
36
- end
@@ -1,56 +0,0 @@
1
- require "cases/helper"
2
-
3
- module ActiveRecord
4
- module Type
5
- class DecimalTest < ActiveRecord::TestCase
6
- def test_type_cast_decimal
7
- type = Decimal.new
8
- assert_equal BigDecimal.new("0"), type.type_cast_from_user(BigDecimal.new("0"))
9
- assert_equal BigDecimal.new("123"), type.type_cast_from_user(123.0)
10
- assert_equal BigDecimal.new("1"), type.type_cast_from_user(:"1")
11
- end
12
-
13
- def test_type_cast_decimal_from_float_with_large_precision
14
- type = Decimal.new(precision: ::Float::DIG + 2)
15
- assert_equal BigDecimal.new("123.0"), type.type_cast_from_user(123.0)
16
- end
17
-
18
- def test_type_cast_from_float_with_unspecified_precision
19
- type = Decimal.new
20
- assert_equal 22.68.to_d, type.type_cast_from_user(22.68)
21
- end
22
-
23
- def test_type_cast_decimal_from_rational_with_precision
24
- type = Decimal.new(precision: 2)
25
- assert_equal BigDecimal("0.33"), type.type_cast_from_user(Rational(1, 3))
26
- end
27
-
28
- def test_type_cast_decimal_from_rational_with_precision_and_scale
29
- type = Decimal.new(precision: 4, scale: 2)
30
- assert_equal BigDecimal("0.33"), type.type_cast_from_user(Rational(1, 3))
31
- end
32
-
33
- def test_type_cast_decimal_from_rational_without_precision_defaults_to_18_36
34
- type = Decimal.new
35
- assert_equal BigDecimal("0.333333333333333333E0"), type.type_cast_from_user(Rational(1, 3))
36
- end
37
-
38
- def test_type_cast_decimal_from_object_responding_to_d
39
- value = Object.new
40
- def value.to_d
41
- BigDecimal.new("1")
42
- end
43
- type = Decimal.new
44
- assert_equal BigDecimal("1"), type.type_cast_from_user(value)
45
- end
46
-
47
- def test_changed?
48
- type = Decimal.new
49
-
50
- assert type.changed?(5.0, 5.0, '5.0wibble')
51
- assert_not type.changed?(5.0, 5.0, '5.0')
52
- assert_not type.changed?(-5.0, -5.0, '-5.0')
53
- end
54
- end
55
- end
56
- end
@@ -1,18 +0,0 @@
1
- require "cases/helper"
2
- require "models/company"
3
-
4
- module ActiveRecord
5
- module Type
6
- class UnsignedIntegerTest < ActiveRecord::TestCase
7
- test "unsigned int max value is in range" do
8
- assert_equal(4294967295, UnsignedInteger.new.type_cast_for_database(4294967295))
9
- end
10
-
11
- test "minus value is out of range" do
12
- assert_raises(::RangeError) do
13
- UnsignedInteger.new.type_cast_for_database(-1)
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,457 +0,0 @@
1
- require "cases/helper"
2
- require "rexml/document"
3
- require 'models/contact'
4
- require 'models/post'
5
- require 'models/author'
6
- require 'models/comment'
7
- require 'models/company_in_module'
8
- require 'models/toy'
9
- require 'models/topic'
10
- require 'models/reply'
11
- require 'models/company'
12
-
13
- class XmlSerializationTest < ActiveRecord::TestCase
14
- def test_should_serialize_default_root
15
- @xml = Contact.new.to_xml
16
- assert_match %r{^<contact>}, @xml
17
- assert_match %r{</contact>$}, @xml
18
- end
19
-
20
- def test_should_serialize_default_root_with_namespace
21
- @xml = Contact.new.to_xml :namespace=>"http://xml.rubyonrails.org/contact"
22
- assert_match %r{^<contact xmlns="http://xml.rubyonrails.org/contact">}, @xml
23
- assert_match %r{</contact>$}, @xml
24
- end
25
-
26
- def test_should_serialize_custom_root
27
- @xml = Contact.new.to_xml :root => 'xml_contact'
28
- assert_match %r{^<xml-contact>}, @xml
29
- assert_match %r{</xml-contact>$}, @xml
30
- end
31
-
32
- def test_should_allow_undasherized_tags
33
- @xml = Contact.new.to_xml :root => 'xml_contact', :dasherize => false
34
- assert_match %r{^<xml_contact>}, @xml
35
- assert_match %r{</xml_contact>$}, @xml
36
- assert_match %r{<created_at}, @xml
37
- end
38
-
39
- def test_should_allow_camelized_tags
40
- @xml = Contact.new.to_xml :root => 'xml_contact', :camelize => true
41
- assert_match %r{^<XmlContact>}, @xml
42
- assert_match %r{</XmlContact>$}, @xml
43
- assert_match %r{<CreatedAt}, @xml
44
- end
45
-
46
- def test_should_allow_skipped_types
47
- @xml = Contact.new(:age => 25).to_xml :skip_types => true
48
- assert %r{<age>25</age>}.match(@xml)
49
- end
50
-
51
- def test_should_include_yielded_additions
52
- @xml = Contact.new.to_xml do |xml|
53
- xml.creator "David"
54
- end
55
- assert_match %r{<creator>David</creator>}, @xml
56
- end
57
-
58
- def test_to_xml_with_block
59
- value = "Rockin' the block"
60
- xml = Contact.new.to_xml(:skip_instruct => true) do |_xml|
61
- _xml.tag! "arbitrary-element", value
62
- end
63
- assert_equal "<contact>", xml.first(9)
64
- assert xml.include?(%(<arbitrary-element>#{value}</arbitrary-element>))
65
- end
66
-
67
- def test_should_skip_instruct_for_included_records
68
- @contact = Contact.new
69
- @contact.alternative = Contact.new(:name => 'Copa Cabana')
70
- @xml = @contact.to_xml(:include => [ :alternative ])
71
- assert_equal @xml.index('<?xml '), 0
72
- assert_nil @xml.index('<?xml ', 1)
73
- end
74
- end
75
-
76
- class DefaultXmlSerializationTest < ActiveRecord::TestCase
77
- def setup
78
- @contact = Contact.new(
79
- :name => 'aaron stack',
80
- :age => 25,
81
- :avatar => 'binarydata',
82
- :created_at => Time.utc(2006, 8, 1),
83
- :awesome => false,
84
- :preferences => { :gem => 'ruby' }
85
- )
86
- end
87
-
88
- def test_should_serialize_string
89
- assert_match %r{<name>aaron stack</name>}, @contact.to_xml
90
- end
91
-
92
- def test_should_serialize_integer
93
- assert_match %r{<age type="integer">25</age>}, @contact.to_xml
94
- end
95
-
96
- def test_should_serialize_binary
97
- xml = @contact.to_xml
98
- assert_match %r{YmluYXJ5ZGF0YQ==\n</avatar>}, xml
99
- assert_match %r{<avatar(.*)(type="binary")}, xml
100
- assert_match %r{<avatar(.*)(encoding="base64")}, xml
101
- end
102
-
103
- def test_should_serialize_datetime
104
- assert_match %r{<created-at type=\"dateTime\">2006-08-01T00:00:00Z</created-at>}, @contact.to_xml
105
- end
106
-
107
- def test_should_serialize_boolean
108
- assert_match %r{<awesome type=\"boolean\">false</awesome>}, @contact.to_xml
109
- end
110
-
111
- def test_should_serialize_hash
112
- assert_match %r{<preferences>\s*<gem>ruby</gem>\s*</preferences>}m, @contact.to_xml
113
- end
114
-
115
- def test_uses_serializable_hash_with_only_option
116
- def @contact.serializable_hash(options=nil)
117
- super(only: %w(name))
118
- end
119
-
120
- xml = @contact.to_xml
121
- assert_match %r{<name>aaron stack</name>}, xml
122
- assert_no_match %r{age}, xml
123
- assert_no_match %r{awesome}, xml
124
- end
125
-
126
- def test_uses_serializable_hash_with_except_option
127
- def @contact.serializable_hash(options=nil)
128
- super(except: %w(age))
129
- end
130
-
131
- xml = @contact.to_xml
132
- assert_match %r{<name>aaron stack</name>}, xml
133
- assert_match %r{<awesome type=\"boolean\">false</awesome>}, xml
134
- assert_no_match %r{age}, xml
135
- end
136
-
137
- def test_does_not_include_inheritance_column_from_sti
138
- @contact = ContactSti.new(@contact.attributes)
139
- assert_equal 'ContactSti', @contact.type
140
-
141
- xml = @contact.to_xml
142
- assert_match %r{<name>aaron stack</name>}, xml
143
- assert_no_match %r{<type}, xml
144
- assert_no_match %r{ContactSti}, xml
145
- end
146
-
147
- def test_serializable_hash_with_default_except_option_and_excluding_inheritance_column_from_sti
148
- @contact = ContactSti.new(@contact.attributes)
149
- assert_equal 'ContactSti', @contact.type
150
-
151
- def @contact.serializable_hash(options={})
152
- super({ except: %w(age) }.merge!(options))
153
- end
154
-
155
- xml = @contact.to_xml
156
- assert_match %r{<name>aaron stack</name>}, xml
157
- assert_no_match %r{age}, xml
158
- assert_no_match %r{<type}, xml
159
- assert_no_match %r{ContactSti}, xml
160
- end
161
- end
162
-
163
- class DefaultXmlSerializationTimezoneTest < ActiveRecord::TestCase
164
- def test_should_serialize_datetime_with_timezone
165
- with_timezone_config zone: "Pacific Time (US & Canada)" do
166
- toy = Toy.create(:name => 'Mickey', :updated_at => Time.utc(2006, 8, 1))
167
- unless current_adapter?(:IBM_DBAdapter)
168
- assert_match %r{<updated-at type=\"datetime\">2006-07-31T17:00:00-07:00</updated-at>}, toy.to_xml
169
- else
170
- #assert_match %r{<updated-at type=\"timestamp\">2006-07-31 17:00:00 -0700</updated-at>}, toy.to_xml
171
- assert_match %r{<updated-at type=\"dateTime\">2006-07-31T17:00:00-07:00</updated-at>}, toy.to_xml
172
- end
173
- end
174
- end
175
-
176
- def test_should_serialize_datetime_with_timezone_reloaded
177
- with_timezone_config zone: "Pacific Time (US & Canada)" do
178
- toy = Toy.create(:name => 'Minnie', :updated_at => Time.utc(2006, 8, 1)).reload
179
- unless current_adapter?(:IBM_DBAdapter)
180
- assert_match %r{<updated-at type=\"datetime\">2006-07-31T17:00:00-07:00</updated-at>}, toy.to_xml
181
- else
182
- #assert_match %r{<updated-at type=\"timestamp\">2006-07-31 17:00:00 -0700</updated-at>}, toy.to_xml
183
- assert_match %r{<updated-at type=\"dateTime\">2006-07-31T17:00:00-07:00</updated-at>}, toy.to_xml
184
- end
185
- end
186
- end
187
- end
188
-
189
- class NilXmlSerializationTest < ActiveRecord::TestCase
190
- def setup
191
- @xml = Contact.new.to_xml(:root => 'xml_contact')
192
- end
193
-
194
- def test_should_serialize_string
195
- assert_match %r{<name nil="true"/>}, @xml
196
- end
197
-
198
- def test_should_serialize_integer
199
- assert %r{<age (.*)/>}.match(@xml)
200
- attributes = $1
201
- assert_match %r{nil="true"}, attributes
202
- assert_match %r{type="integer"}, attributes
203
- end
204
-
205
- def test_should_serialize_binary
206
- assert %r{<avatar (.*)/>}.match(@xml)
207
- attributes = $1
208
- assert_match %r{type="binary"}, attributes
209
- assert_match %r{encoding="base64"}, attributes
210
- assert_match %r{nil="true"}, attributes
211
- end
212
-
213
- def test_should_serialize_datetime
214
- assert %r{<created-at (.*)/>}.match(@xml)
215
- attributes = $1
216
- assert_match %r{nil="true"}, attributes
217
- assert_match %r{type="dateTime"}, attributes
218
- end
219
-
220
- def test_should_serialize_boolean
221
- assert %r{<awesome (.*)/>}.match(@xml)
222
- attributes = $1
223
- assert_match %r{type="boolean"}, attributes
224
- assert_match %r{nil="true"}, attributes
225
- end
226
-
227
- def test_should_serialize_yaml
228
- assert_match %r{<preferences nil=\"true\"/>}, @xml
229
- end
230
- end
231
-
232
- class DatabaseConnectedXmlSerializationTest < ActiveRecord::TestCase
233
- fixtures :topics, :companies, :accounts, :authors, :posts, :projects, :author_addresses
234
-
235
- def test_to_xml
236
- xml = REXML::Document.new(topics(:first).to_xml(:indent => 0))
237
- bonus_time_in_current_timezone = topics(:first).bonus_time.xmlschema
238
- written_on_in_current_timezone = topics(:first).written_on.xmlschema
239
-
240
- assert_equal "topic", xml.root.name
241
- assert_equal "The First Topic" , xml.elements["//title"].text
242
- assert_equal "David" , xml.elements["//author-name"].text
243
- assert_match "Have a nice day", xml.elements["//content"].text
244
-
245
- assert_equal "1", xml.elements["//id"].text
246
- assert_equal "integer" , xml.elements["//id"].attributes['type']
247
-
248
- assert_equal "1", xml.elements["//replies-count"].text
249
- assert_equal "integer" , xml.elements["//replies-count"].attributes['type']
250
-
251
- assert_equal written_on_in_current_timezone, xml.elements["//written-on"].text
252
- assert_equal "dateTime" , xml.elements["//written-on"].attributes['type']
253
-
254
- assert_equal "david@loudthinking.com", xml.elements["//author-email-address"].text
255
-
256
- assert_equal nil, xml.elements["//parent-id"].text
257
- assert_equal "integer", xml.elements["//parent-id"].attributes['type']
258
- assert_equal "true", xml.elements["//parent-id"].attributes['nil']
259
-
260
- # Oracle enhanced adapter allows to define Date attributes in model class (see topic.rb)
261
- assert_equal "2004-04-15", xml.elements["//last-read"].text
262
- assert_equal "date" , xml.elements["//last-read"].attributes['type']
263
-
264
- # Oracle and DB2 don't have true boolean or time-only fields
265
- unless current_adapter?(:OracleAdapter, :DB2Adapter)
266
- assert_equal "false", xml.elements["//approved"].text
267
- assert_equal "boolean" , xml.elements["//approved"].attributes['type']
268
-
269
- assert_equal bonus_time_in_current_timezone, xml.elements["//bonus-time"].text
270
- assert_equal "dateTime" , xml.elements["//bonus-time"].attributes['type']
271
- end
272
- end
273
-
274
- def test_except_option
275
- xml = topics(:first).to_xml(:indent => 0, :skip_instruct => true, :except => [:title, :replies_count])
276
- assert_equal "<topic>", xml.first(7)
277
- assert !xml.include?(%(<title>The First Topic</title>))
278
- assert xml.include?(%(<author-name>David</author-name>))
279
-
280
- xml = topics(:first).to_xml(:indent => 0, :skip_instruct => true, :except => [:title, :author_name, :replies_count])
281
- assert !xml.include?(%(<title>The First Topic</title>))
282
- assert !xml.include?(%(<author-name>David</author-name>))
283
- end
284
-
285
- # to_xml used to mess with the hash the user provided which
286
- # caused the builder to be reused. This meant the document kept
287
- # getting appended to.
288
-
289
- def test_modules
290
- projects = MyApplication::Business::Project.all
291
- xml = projects.to_xml
292
- root = projects.first.class.to_s.underscore.pluralize.tr('/','_').dasherize
293
- assert_match "<#{root} type=\"array\">", xml
294
- assert_match "</#{root}>", xml
295
- end
296
-
297
- def test_passing_hash_shouldnt_reuse_builder
298
- options = {:include=>:posts}
299
- david = authors(:david)
300
- first_xml_size = david.to_xml(options).size
301
- second_xml_size = david.to_xml(options).size
302
- assert_equal first_xml_size, second_xml_size
303
- end
304
-
305
- def test_include_uses_association_name
306
- xml = authors(:david).to_xml :include=>:hello_posts, :indent => 0
307
- assert_match %r{<hello-posts type="array">}, xml
308
- assert_match %r{<hello-post type="Post">}, xml
309
- assert_match %r{<hello-post type="StiPost">}, xml
310
- end
311
-
312
- def test_included_associations_should_skip_types
313
- xml = authors(:david).to_xml :include=>:hello_posts, :indent => 0, :skip_types => true
314
- assert_match %r{<hello-posts>}, xml
315
- assert_match %r{<hello-post>}, xml
316
- assert_match %r{<hello-post>}, xml
317
- end
318
-
319
- def test_including_has_many_association
320
- xml = topics(:first).to_xml(:indent => 0, :skip_instruct => true, :include => :replies, :except => :replies_count)
321
- assert_equal "<topic>", xml.first(7)
322
- assert xml.include?(%(<replies type="array"><reply>))
323
- assert xml.include?(%(<title>The Second Topic of the day</title>))
324
- end
325
-
326
- def test_including_belongs_to_association
327
- xml = companies(:first_client).to_xml(:indent => 0, :skip_instruct => true, :include => :firm)
328
- assert !xml.include?("<firm>")
329
-
330
- xml = companies(:second_client).to_xml(:indent => 0, :skip_instruct => true, :include => :firm)
331
- assert xml.include?("<firm>")
332
- end
333
-
334
- def test_including_multiple_associations
335
- xml = companies(:first_firm).to_xml(:indent => 0, :skip_instruct => true, :include => [ :clients, :account ])
336
- assert_equal "<firm>", xml.first(6)
337
- assert xml.include?(%(<account>))
338
- assert xml.include?(%(<clients type="array"><client>))
339
- end
340
-
341
- def test_including_association_with_options
342
- xml = companies(:first_firm).to_xml(
343
- :indent => 0, :skip_instruct => true,
344
- :include => { :clients => { :only => :name } }
345
- )
346
-
347
- assert_equal "<firm>", xml.first(6)
348
- assert xml.include?(%(<client><name>Summit</name></client>))
349
- assert xml.include?(%(<clients type="array"><client>))
350
- end
351
-
352
- def test_methods_are_called_on_object
353
- xml = authors(:david).to_xml :methods => :label, :indent => 0
354
- assert_match %r{<label>.*</label>}, xml
355
- end
356
-
357
- def test_should_not_call_methods_on_associations_that_dont_respond
358
- xml = authors(:david).to_xml :include=>:hello_posts, :methods => :label, :indent => 2
359
- assert !authors(:david).hello_posts.first.respond_to?(:label)
360
- assert_match %r{^ <label>.*</label>}, xml
361
- assert_no_match %r{^ <label>}, xml
362
- end
363
-
364
- def test_procs_are_called_on_object
365
- proc = Proc.new { |options| options[:builder].tag!('nationality', 'Danish') }
366
- xml = authors(:david).to_xml(:procs => [ proc ])
367
- assert_match %r{<nationality>Danish</nationality>}, xml
368
- end
369
-
370
- def test_dual_arity_procs_are_called_on_object
371
- proc = Proc.new { |options, record| options[:builder].tag!('name-reverse', record.name.reverse) }
372
- xml = authors(:david).to_xml(:procs => [ proc ])
373
- assert_match %r{<name-reverse>divaD</name-reverse>}, xml
374
- end
375
-
376
- def test_top_level_procs_arent_applied_to_associations
377
- author_proc = Proc.new { |options| options[:builder].tag!('nationality', 'Danish') }
378
- xml = authors(:david).to_xml(:procs => [ author_proc ], :include => :posts, :indent => 2)
379
-
380
- assert_match %r{^ <nationality>Danish</nationality>}, xml
381
- assert_no_match %r{^ {6}<nationality>Danish</nationality>}, xml
382
- end
383
-
384
- def test_procs_on_included_associations_are_called
385
- posts_proc = Proc.new { |options| options[:builder].tag!('copyright', 'DHH') }
386
- xml = authors(:david).to_xml(
387
- :indent => 2,
388
- :include => {
389
- :posts => { :procs => [ posts_proc ] }
390
- }
391
- )
392
-
393
- assert_no_match %r{^ <copyright>DHH</copyright>}, xml
394
- assert_match %r{^ {6}<copyright>DHH</copyright>}, xml
395
- end
396
-
397
- def test_should_include_empty_has_many_as_empty_array
398
- authors(:david).posts.delete_all
399
- xml = authors(:david).to_xml :include=>:posts, :indent => 2
400
-
401
- assert_equal [], Hash.from_xml(xml)['author']['posts']
402
- assert_match %r{^ <posts type="array"/>}, xml
403
- end
404
-
405
- def test_should_has_many_array_elements_should_include_type_when_different_from_guessed_value
406
- xml = authors(:david).to_xml :include=>:posts_with_comments, :indent => 2
407
-
408
- assert Hash.from_xml(xml)
409
- assert_match %r{^ <posts-with-comments type="array">}, xml
410
- assert_match %r{^ <posts-with-comment type="Post">}, xml
411
- assert_match %r{^ <posts-with-comment type="StiPost">}, xml
412
-
413
- types = Hash.from_xml(xml)['author']['posts_with_comments'].collect {|t| t['type'] }
414
- assert types.include?('SpecialPost')
415
- assert types.include?('Post')
416
- assert types.include?('StiPost')
417
- end
418
-
419
- def test_should_produce_xml_for_methods_returning_array
420
- xml = authors(:david).to_xml(:methods => :social)
421
- array = Hash.from_xml(xml)['author']['social']
422
- assert_equal 2, array.size
423
- assert array.include? 'twitter'
424
- assert array.include? 'github'
425
- end
426
-
427
- def test_should_support_aliased_attributes
428
- xml = Author.select("name as firstname").to_xml
429
- Author.all.each do |author|
430
- assert xml.include?(%(<firstname>#{author.name}</firstname>)), xml
431
- end
432
- end
433
-
434
- def test_array_to_xml_including_has_many_association
435
- xml = [ topics(:first), topics(:second) ].to_xml(:indent => 0, :skip_instruct => true, :include => :replies)
436
- assert xml.include?(%(<replies type="array"><reply>))
437
- end
438
-
439
- def test_array_to_xml_including_methods
440
- xml = [ topics(:first), topics(:second) ].to_xml(:indent => 0, :skip_instruct => true, :methods => [ :topic_id ])
441
- assert xml.include?(%(<topic-id type="integer">#{topics(:first).topic_id}</topic-id>)), xml
442
- assert xml.include?(%(<topic-id type="integer">#{topics(:second).topic_id}</topic-id>)), xml
443
- end
444
-
445
- def test_array_to_xml_including_has_one_association
446
- xml = [ companies(:first_firm), companies(:rails_core) ].to_xml(:indent => 0, :skip_instruct => true, :include => :account)
447
- assert xml.include?(companies(:first_firm).account.to_xml(:indent => 0, :skip_instruct => true))
448
- assert xml.include?(companies(:rails_core).account.to_xml(:indent => 0, :skip_instruct => true))
449
- end
450
-
451
- def test_array_to_xml_including_belongs_to_association
452
- xml = [ companies(:first_client), companies(:second_client), companies(:another_client) ].to_xml(:indent => 0, :skip_instruct => true, :include => :firm)
453
- assert xml.include?(companies(:first_client).to_xml(:indent => 0, :skip_instruct => true))
454
- assert xml.include?(companies(:second_client).firm.to_xml(:indent => 0, :skip_instruct => true))
455
- assert xml.include?(companies(:another_client).firm.to_xml(:indent => 0, :skip_instruct => true))
456
- end
457
- end