ibm_db 3.0.5-x86-mingw32 → 4.0.0-x86-mingw32

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 (586) 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/lib/mswin32/ibm_db.rb +91 -123
  20. data/lib/mswin32/rb2x/i386/ibm_db.so +0 -0
  21. data/test/active_record/connection_adapters/fake_adapter.rb +49 -46
  22. data/test/assets/example.log +1 -1
  23. data/test/assets/test.txt +1 -1
  24. data/test/cases/adapter_test.rb +351 -276
  25. data/test/cases/adapters/mysql2/active_schema_test.rb +193 -0
  26. data/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -0
  27. data/test/cases/adapters/mysql2/boolean_test.rb +100 -0
  28. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +63 -0
  29. data/test/cases/adapters/mysql2/charset_collation_test.rb +54 -0
  30. data/test/cases/adapters/mysql2/connection_test.rb +210 -0
  31. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +45 -0
  32. data/test/cases/adapters/mysql2/enum_test.rb +26 -0
  33. data/test/cases/adapters/mysql2/explain_test.rb +21 -0
  34. data/test/cases/adapters/mysql2/json_test.rb +195 -0
  35. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +83 -0
  36. data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -0
  37. data/test/cases/adapters/mysql2/schema_migrations_test.rb +59 -0
  38. data/test/cases/adapters/mysql2/schema_test.rb +126 -0
  39. data/test/cases/adapters/mysql2/sp_test.rb +36 -0
  40. data/test/cases/adapters/mysql2/sql_types_test.rb +14 -0
  41. data/test/cases/adapters/mysql2/table_options_test.rb +42 -0
  42. data/test/cases/adapters/mysql2/unsigned_type_test.rb +66 -0
  43. data/test/cases/adapters/postgresql/active_schema_test.rb +98 -0
  44. data/test/cases/adapters/postgresql/array_test.rb +339 -0
  45. data/test/cases/adapters/postgresql/bit_string_test.rb +82 -0
  46. data/test/cases/adapters/postgresql/bytea_test.rb +134 -0
  47. data/test/cases/adapters/postgresql/case_insensitive_test.rb +26 -0
  48. data/test/cases/adapters/postgresql/change_schema_test.rb +38 -0
  49. data/test/cases/adapters/postgresql/cidr_test.rb +25 -0
  50. data/test/cases/adapters/postgresql/citext_test.rb +78 -0
  51. data/test/cases/adapters/postgresql/collation_test.rb +53 -0
  52. data/test/cases/adapters/postgresql/composite_test.rb +132 -0
  53. data/test/cases/adapters/postgresql/connection_test.rb +257 -0
  54. data/test/cases/adapters/postgresql/datatype_test.rb +92 -0
  55. data/test/cases/adapters/postgresql/domain_test.rb +47 -0
  56. data/test/cases/adapters/postgresql/enum_test.rb +91 -0
  57. data/test/cases/adapters/postgresql/explain_test.rb +20 -0
  58. data/test/cases/adapters/postgresql/extension_migration_test.rb +63 -0
  59. data/test/cases/adapters/postgresql/full_text_test.rb +44 -0
  60. data/test/cases/adapters/postgresql/geometric_test.rb +378 -0
  61. data/test/cases/adapters/postgresql/hstore_test.rb +382 -0
  62. data/test/cases/adapters/postgresql/infinity_test.rb +69 -0
  63. data/test/cases/adapters/postgresql/integer_test.rb +25 -0
  64. data/test/cases/adapters/postgresql/json_test.rb +237 -0
  65. data/test/cases/adapters/postgresql/ltree_test.rb +53 -0
  66. data/test/cases/adapters/postgresql/money_test.rb +96 -0
  67. data/test/cases/adapters/postgresql/network_test.rb +94 -0
  68. data/test/cases/adapters/postgresql/numbers_test.rb +49 -0
  69. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +405 -0
  70. data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -0
  71. data/test/cases/adapters/postgresql/quoting_test.rb +44 -0
  72. data/test/cases/adapters/postgresql/range_test.rb +343 -0
  73. data/test/cases/adapters/postgresql/referential_integrity_test.rb +111 -0
  74. data/test/cases/adapters/postgresql/rename_table_test.rb +34 -0
  75. data/test/cases/adapters/postgresql/schema_authorization_test.rb +119 -0
  76. data/test/cases/adapters/postgresql/schema_test.rb +597 -0
  77. data/test/cases/adapters/postgresql/serial_test.rb +154 -0
  78. data/test/cases/adapters/postgresql/statement_pool_test.rb +41 -0
  79. data/test/cases/adapters/postgresql/timestamp_test.rb +90 -0
  80. data/test/cases/adapters/postgresql/type_lookup_test.rb +33 -0
  81. data/test/cases/adapters/postgresql/utils_test.rb +62 -0
  82. data/test/cases/adapters/postgresql/uuid_test.rb +294 -0
  83. data/test/cases/adapters/postgresql/xml_test.rb +54 -0
  84. data/test/cases/adapters/sqlite3/collation_test.rb +53 -0
  85. data/test/cases/adapters/sqlite3/copy_table_test.rb +98 -0
  86. data/test/cases/adapters/sqlite3/explain_test.rb +21 -0
  87. data/test/cases/adapters/sqlite3/quoting_test.rb +101 -0
  88. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +441 -0
  89. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -0
  90. data/test/cases/adapters/sqlite3/statement_pool_test.rb +20 -0
  91. data/test/cases/aggregations_test.rb +168 -158
  92. data/test/cases/ar_schema_test.rb +146 -161
  93. data/test/cases/associations/association_scope_test.rb +16 -21
  94. data/test/cases/associations/belongs_to_associations_test.rb +1141 -1029
  95. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -0
  96. data/test/cases/associations/callbacks_test.rb +190 -192
  97. data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
  98. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
  99. data/test/cases/associations/eager_load_nested_include_test.rb +126 -128
  100. data/test/cases/associations/eager_singularization_test.rb +148 -148
  101. data/test/cases/associations/eager_test.rb +1514 -1429
  102. data/test/cases/associations/extension_test.rb +87 -82
  103. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +1004 -972
  104. data/test/cases/associations/has_many_associations_test.rb +2501 -2182
  105. data/test/cases/associations/has_many_through_associations_test.rb +1271 -1204
  106. data/test/cases/associations/has_one_associations_test.rb +707 -610
  107. data/test/cases/associations/has_one_through_associations_test.rb +383 -380
  108. data/test/cases/associations/inner_join_association_test.rb +139 -139
  109. data/test/cases/associations/inverse_associations_test.rb +733 -706
  110. data/test/cases/associations/join_model_test.rb +777 -754
  111. data/test/cases/associations/left_outer_join_association_test.rb +88 -0
  112. data/test/cases/associations/nested_through_associations_test.rb +579 -579
  113. data/test/cases/associations/required_test.rb +102 -82
  114. data/test/cases/associations_test.rb +385 -380
  115. data/test/cases/attribute_decorators_test.rb +125 -125
  116. data/test/cases/attribute_methods/read_test.rb +60 -60
  117. data/test/cases/attribute_methods_test.rb +1009 -952
  118. data/test/cases/attribute_set_test.rb +270 -210
  119. data/test/cases/attribute_test.rb +246 -180
  120. data/test/cases/attributes_test.rb +253 -136
  121. data/test/cases/autosave_association_test.rb +1708 -1595
  122. data/test/cases/base_test.rb +1713 -1664
  123. data/test/cases/batches_test.rb +489 -212
  124. data/test/cases/binary_test.rb +44 -52
  125. data/test/cases/bind_parameter_test.rb +110 -100
  126. data/test/cases/cache_key_test.rb +25 -0
  127. data/test/cases/calculations_test.rb +798 -646
  128. data/test/cases/callbacks_test.rb +636 -543
  129. data/test/cases/clone_test.rb +40 -40
  130. data/test/cases/coders/json_test.rb +15 -0
  131. data/test/cases/coders/yaml_column_test.rb +63 -63
  132. data/test/cases/collection_cache_key_test.rb +115 -0
  133. data/test/cases/column_alias_test.rb +17 -17
  134. data/test/cases/column_definition_test.rb +92 -123
  135. data/test/cases/comment_test.rb +143 -0
  136. data/test/cases/connection_adapters/adapter_leasing_test.rb +56 -54
  137. data/test/cases/connection_adapters/connection_handler_test.rb +160 -53
  138. data/test/cases/connection_adapters/connection_specification_test.rb +12 -12
  139. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +255 -293
  140. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +69 -65
  141. data/test/cases/connection_adapters/quoting_test.rb +13 -13
  142. data/test/cases/connection_adapters/schema_cache_test.rb +61 -56
  143. data/test/cases/connection_adapters/type_lookup_test.rb +118 -110
  144. data/test/cases/connection_management_test.rb +112 -122
  145. data/test/cases/connection_pool_test.rb +521 -346
  146. data/test/cases/connection_specification/resolver_test.rb +131 -116
  147. data/test/cases/core_test.rb +112 -112
  148. data/test/cases/counter_cache_test.rb +214 -209
  149. data/test/cases/custom_locking_test.rb +17 -17
  150. data/test/cases/database_statements_test.rb +34 -19
  151. data/test/cases/{invalid_date_test.rb → date_test.rb} +44 -32
  152. data/test/cases/date_time_precision_test.rb +106 -0
  153. data/test/cases/date_time_test.rb +61 -61
  154. data/test/cases/defaults_test.rb +218 -223
  155. data/test/cases/dirty_test.rb +763 -785
  156. data/test/cases/disconnected_test.rb +30 -28
  157. data/test/cases/dup_test.rb +157 -157
  158. data/test/cases/enum_test.rb +444 -290
  159. data/test/cases/errors_test.rb +16 -0
  160. data/test/cases/explain_subscriber_test.rb +64 -64
  161. data/test/cases/explain_test.rb +87 -76
  162. data/test/cases/finder_respond_to_test.rb +60 -60
  163. data/test/cases/finder_test.rb +1294 -1169
  164. data/test/cases/fixture_set/file_test.rb +156 -138
  165. data/test/cases/fixtures_test.rb +988 -908
  166. data/test/cases/forbidden_attributes_protection_test.rb +165 -99
  167. data/test/cases/habtm_destroy_order_test.rb +61 -61
  168. data/test/cases/helper.rb +204 -210
  169. data/test/cases/hot_compatibility_test.rb +142 -54
  170. data/test/cases/i18n_test.rb +45 -45
  171. data/test/cases/inheritance_test.rb +606 -375
  172. data/test/cases/integration_test.rb +155 -139
  173. data/test/cases/invalid_connection_test.rb +24 -22
  174. data/test/cases/invertible_migration_test.rb +387 -295
  175. data/test/cases/json_serialization_test.rb +311 -302
  176. data/test/cases/locking_test.rb +493 -477
  177. data/test/cases/log_subscriber_test.rb +225 -136
  178. data/test/cases/migration/change_schema_test.rb +458 -512
  179. data/test/cases/migration/change_table_test.rb +256 -224
  180. data/test/cases/migration/column_attributes_test.rb +176 -192
  181. data/test/cases/migration/column_positioning_test.rb +56 -56
  182. data/test/cases/migration/columns_test.rb +310 -304
  183. data/test/cases/migration/command_recorder_test.rb +350 -305
  184. data/test/cases/migration/compatibility_test.rb +118 -0
  185. data/test/cases/migration/create_join_table_test.rb +157 -148
  186. data/test/cases/migration/foreign_key_test.rb +360 -328
  187. data/test/cases/migration/helper.rb +39 -39
  188. data/test/cases/migration/index_test.rb +218 -216
  189. data/test/cases/migration/logger_test.rb +36 -36
  190. data/test/cases/migration/pending_migrations_test.rb +52 -53
  191. data/test/cases/migration/references_foreign_key_test.rb +216 -169
  192. data/test/cases/migration/references_index_test.rb +101 -101
  193. data/test/cases/migration/references_statements_test.rb +136 -116
  194. data/test/cases/migration/rename_table_test.rb +93 -93
  195. data/test/cases/migration_test.rb +1157 -959
  196. data/test/cases/migrator_test.rb +470 -388
  197. data/test/cases/mixin_test.rb +68 -70
  198. data/test/cases/modules_test.rb +172 -173
  199. data/test/cases/multiparameter_attributes_test.rb +372 -350
  200. data/test/cases/multiple_db_test.rb +122 -115
  201. data/test/cases/nested_attributes_test.rb +1098 -1070
  202. data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
  203. data/test/cases/persistence_test.rb +1001 -909
  204. data/test/cases/pooled_connections_test.rb +81 -81
  205. data/test/cases/primary_keys_test.rb +376 -237
  206. data/test/cases/query_cache_test.rb +446 -326
  207. data/test/cases/quoting_test.rb +202 -156
  208. data/test/cases/readonly_test.rb +119 -118
  209. data/test/cases/reaper_test.rb +85 -85
  210. data/test/cases/reflection_test.rb +509 -463
  211. data/test/cases/relation/delegation_test.rb +63 -68
  212. data/test/cases/relation/merging_test.rb +157 -161
  213. data/test/cases/relation/mutation_test.rb +183 -165
  214. data/test/cases/relation/or_test.rb +92 -0
  215. data/test/cases/relation/predicate_builder_test.rb +16 -14
  216. data/test/cases/relation/record_fetch_warning_test.rb +40 -0
  217. data/test/cases/relation/where_chain_test.rb +105 -181
  218. data/test/cases/relation/where_clause_test.rb +182 -0
  219. data/test/cases/relation/where_test.rb +322 -300
  220. data/test/cases/relation_test.rb +328 -319
  221. data/test/cases/relations_test.rb +2026 -1815
  222. data/test/cases/reload_models_test.rb +22 -22
  223. data/test/cases/result_test.rb +90 -80
  224. data/test/cases/sanitize_test.rb +176 -83
  225. data/test/cases/schema_dumper_test.rb +457 -463
  226. data/test/cases/schema_loading_test.rb +52 -0
  227. data/test/cases/scoping/default_scoping_test.rb +528 -454
  228. data/test/cases/scoping/named_scoping_test.rb +561 -524
  229. data/test/cases/scoping/relation_scoping_test.rb +400 -357
  230. data/test/cases/secure_token_test.rb +32 -0
  231. data/test/cases/serialization_test.rb +104 -104
  232. data/test/cases/serialized_attribute_test.rb +364 -277
  233. data/test/cases/statement_cache_test.rb +136 -98
  234. data/test/cases/store_test.rb +195 -194
  235. data/test/cases/suppressor_test.rb +63 -0
  236. data/test/cases/tasks/database_tasks_test.rb +462 -398
  237. data/test/cases/tasks/mysql_rake_test.rb +345 -324
  238. data/test/cases/tasks/postgresql_rake_test.rb +304 -250
  239. data/test/cases/tasks/sqlite_rake_test.rb +220 -193
  240. data/test/cases/test_case.rb +131 -123
  241. data/test/cases/test_fixtures_test.rb +36 -0
  242. data/test/cases/time_precision_test.rb +102 -0
  243. data/test/cases/timestamp_test.rb +501 -467
  244. data/test/cases/touch_later_test.rb +121 -0
  245. data/test/cases/transaction_callbacks_test.rb +518 -452
  246. data/test/cases/transaction_isolation_test.rb +106 -106
  247. data/test/cases/transactions_test.rb +834 -817
  248. data/test/cases/type/adapter_specific_registry_test.rb +133 -0
  249. data/test/cases/type/date_time_test.rb +14 -0
  250. data/test/cases/type/integer_test.rb +27 -121
  251. data/test/cases/type/string_test.rb +22 -36
  252. data/test/cases/type/type_map_test.rb +177 -177
  253. data/test/cases/type_test.rb +39 -0
  254. data/test/cases/types_test.rb +24 -141
  255. data/test/cases/unconnected_test.rb +33 -33
  256. data/test/cases/validations/absence_validation_test.rb +73 -0
  257. data/test/cases/validations/association_validation_test.rb +97 -86
  258. data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
  259. data/test/cases/validations/i18n_validation_test.rb +86 -90
  260. data/test/cases/validations/length_validation_test.rb +79 -47
  261. data/test/cases/validations/presence_validation_test.rb +103 -68
  262. data/test/cases/validations/uniqueness_validation_test.rb +548 -457
  263. data/test/cases/validations_repair_helper.rb +19 -23
  264. data/test/cases/validations_test.rb +194 -165
  265. data/test/cases/view_test.rb +216 -119
  266. data/test/cases/yaml_serialization_test.rb +121 -126
  267. data/test/config.example.yml +97 -0
  268. data/test/config.rb +5 -5
  269. data/test/fixtures/accounts.yml +29 -29
  270. data/test/fixtures/admin/accounts.yml +2 -2
  271. data/test/fixtures/admin/users.yml +10 -10
  272. data/test/fixtures/author_addresses.original +11 -0
  273. data/test/fixtures/author_addresses.yml +17 -17
  274. data/test/fixtures/author_favorites.yml +3 -3
  275. data/test/fixtures/authors.original +17 -0
  276. data/test/fixtures/authors.yml +23 -23
  277. data/test/fixtures/bad_posts.yml +9 -0
  278. data/test/fixtures/binaries.yml +133 -133
  279. data/test/fixtures/books.yml +31 -11
  280. data/test/fixtures/bulbs.yml +5 -5
  281. data/test/fixtures/cars.yml +9 -9
  282. data/test/fixtures/categories.yml +19 -19
  283. data/test/fixtures/categories/special_categories.yml +9 -9
  284. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -4
  285. data/test/fixtures/categories_ordered.yml +7 -7
  286. data/test/fixtures/categories_posts.yml +31 -31
  287. data/test/fixtures/categorizations.yml +23 -23
  288. data/test/fixtures/clubs.yml +8 -8
  289. data/test/fixtures/collections.yml +3 -3
  290. data/test/fixtures/colleges.yml +3 -3
  291. data/test/fixtures/comments.yml +65 -65
  292. data/test/fixtures/companies.yml +67 -67
  293. data/test/fixtures/computers.yml +10 -10
  294. data/test/fixtures/content.yml +3 -0
  295. data/test/fixtures/content_positions.yml +3 -0
  296. data/test/fixtures/courses.yml +8 -8
  297. data/test/fixtures/customers.yml +25 -25
  298. data/test/fixtures/dashboards.yml +6 -6
  299. data/test/fixtures/dead_parrots.yml +5 -0
  300. data/test/fixtures/developers.yml +22 -22
  301. data/test/fixtures/developers_projects.yml +16 -16
  302. data/test/fixtures/dog_lovers.yml +7 -7
  303. data/test/fixtures/dogs.yml +4 -4
  304. data/test/fixtures/doubloons.yml +3 -3
  305. data/test/fixtures/edges.yml +5 -5
  306. data/test/fixtures/entrants.yml +14 -14
  307. data/test/fixtures/essays.yml +6 -6
  308. data/test/fixtures/faces.yml +11 -11
  309. data/test/fixtures/fk_test_has_fk.yml +3 -3
  310. data/test/fixtures/fk_test_has_pk.yml +1 -1
  311. data/test/fixtures/friendships.yml +4 -4
  312. data/test/fixtures/funny_jokes.yml +10 -10
  313. data/test/fixtures/interests.yml +33 -33
  314. data/test/fixtures/items.yml +3 -3
  315. data/test/fixtures/jobs.yml +7 -7
  316. data/test/fixtures/legacy_things.yml +3 -3
  317. data/test/fixtures/live_parrots.yml +4 -0
  318. data/test/fixtures/mateys.yml +4 -4
  319. data/test/fixtures/member_details.yml +8 -8
  320. data/test/fixtures/member_types.yml +6 -6
  321. data/test/fixtures/members.yml +11 -11
  322. data/test/fixtures/memberships.yml +34 -34
  323. data/test/fixtures/men.yml +5 -5
  324. data/test/fixtures/minimalistics.yml +2 -2
  325. data/test/fixtures/minivans.yml +5 -5
  326. data/test/fixtures/mixed_case_monkeys.yml +6 -6
  327. data/test/fixtures/mixins.yml +29 -29
  328. data/test/fixtures/movies.yml +7 -7
  329. data/test/fixtures/naked/yml/accounts.yml +1 -1
  330. data/test/fixtures/naked/yml/companies.yml +1 -1
  331. data/test/fixtures/naked/yml/courses.yml +1 -1
  332. data/test/fixtures/naked/yml/parrots.yml +2 -0
  333. data/test/fixtures/naked/yml/trees.yml +3 -0
  334. data/test/fixtures/nodes.yml +29 -0
  335. data/test/fixtures/organizations.yml +5 -5
  336. data/test/fixtures/other_comments.yml +6 -0
  337. data/test/fixtures/other_dogs.yml +2 -0
  338. data/test/fixtures/other_posts.yml +7 -0
  339. data/test/fixtures/other_topics.yml +42 -42
  340. data/test/fixtures/owners.yml +9 -9
  341. data/test/fixtures/parrots.yml +27 -27
  342. data/test/fixtures/parrots_pirates.yml +7 -7
  343. data/test/fixtures/people.yml +24 -24
  344. data/test/fixtures/peoples_treasures.yml +3 -3
  345. data/test/fixtures/pets.yml +19 -19
  346. data/test/fixtures/pirates.yml +15 -12
  347. data/test/fixtures/posts.yml +80 -80
  348. data/test/fixtures/price_estimates.yml +16 -7
  349. data/test/fixtures/products.yml +4 -4
  350. data/test/fixtures/projects.yml +7 -7
  351. data/test/fixtures/ratings.yml +14 -14
  352. data/test/fixtures/readers.yml +11 -11
  353. data/test/fixtures/references.yml +17 -17
  354. data/test/fixtures/reserved_words/distinct.yml +5 -5
  355. data/test/fixtures/reserved_words/distinct_select.yml +11 -11
  356. data/test/fixtures/reserved_words/group.yml +14 -14
  357. data/test/fixtures/reserved_words/select.yml +8 -8
  358. data/test/fixtures/reserved_words/values.yml +7 -7
  359. data/test/fixtures/ships.yml +6 -6
  360. data/test/fixtures/speedometers.yml +8 -8
  361. data/test/fixtures/sponsors.yml +12 -12
  362. data/test/fixtures/string_key_objects.yml +7 -7
  363. data/test/fixtures/subscribers.yml +10 -10
  364. data/test/fixtures/subscriptions.yml +12 -12
  365. data/test/fixtures/taggings.yml +78 -78
  366. data/test/fixtures/tags.yml +11 -11
  367. data/test/fixtures/tasks.yml +7 -7
  368. data/test/fixtures/teapots.yml +3 -3
  369. data/test/fixtures/to_be_linked/accounts.yml +2 -2
  370. data/test/fixtures/to_be_linked/users.yml +10 -10
  371. data/test/fixtures/topics.yml +49 -49
  372. data/test/fixtures/toys.yml +14 -14
  373. data/test/fixtures/traffic_lights.yml +9 -9
  374. data/test/fixtures/treasures.yml +10 -10
  375. data/test/fixtures/trees.yml +3 -0
  376. data/test/fixtures/uuid_children.yml +3 -3
  377. data/test/fixtures/uuid_parents.yml +2 -2
  378. data/test/fixtures/variants.yml +4 -4
  379. data/test/fixtures/vegetables.yml +19 -19
  380. data/test/fixtures/vertices.yml +3 -3
  381. data/test/fixtures/warehouse_things.yml +2 -2
  382. data/test/fixtures/zines.yml +5 -5
  383. data/test/migrations/10_urban/9_add_expressions.rb +11 -11
  384. data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -15
  385. data/test/migrations/magic/1_currencies_have_symbols.rb +12 -12
  386. data/test/migrations/missing/1000_people_have_middle_names.rb +9 -9
  387. data/test/migrations/missing/1_people_have_last_names.rb +9 -9
  388. data/test/migrations/missing/3_we_need_reminders.rb +12 -12
  389. data/test/migrations/missing/4_innocent_jointable.rb +12 -12
  390. data/test/migrations/rename/1_we_need_things.rb +11 -11
  391. data/test/migrations/rename/2_rename_things.rb +9 -9
  392. data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -9
  393. data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -9
  394. data/test/migrations/to_copy2/1_create_articles.rb +7 -7
  395. data/test/migrations/to_copy2/2_create_comments.rb +7 -7
  396. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -9
  397. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -9
  398. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -9
  399. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -7
  400. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -7
  401. data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -9
  402. data/test/migrations/valid/2_we_need_reminders.rb +12 -12
  403. data/test/migrations/valid/3_innocent_jointable.rb +12 -12
  404. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -9
  405. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +12 -12
  406. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +12 -12
  407. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -9
  408. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -12
  409. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -12
  410. data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -8
  411. data/test/models/admin.rb +5 -5
  412. data/test/models/admin/account.rb +3 -3
  413. data/test/models/admin/randomly_named_c1.rb +6 -2
  414. data/test/models/admin/user.rb +40 -40
  415. data/test/models/aircraft.rb +5 -4
  416. data/test/models/arunit2_model.rb +3 -3
  417. data/test/models/author.rb +209 -212
  418. data/test/models/auto_id.rb +4 -4
  419. data/test/models/autoloadable/extra_firm.rb +2 -2
  420. data/test/models/binary.rb +2 -2
  421. data/test/models/bird.rb +12 -12
  422. data/test/models/book.rb +23 -18
  423. data/test/models/boolean.rb +2 -2
  424. data/test/models/bulb.rb +52 -51
  425. data/test/models/cake_designer.rb +3 -3
  426. data/test/models/car.rb +29 -26
  427. data/test/models/carrier.rb +2 -2
  428. data/test/models/cat.rb +10 -0
  429. data/test/models/categorization.rb +19 -19
  430. data/test/models/category.rb +35 -35
  431. data/test/models/chef.rb +8 -7
  432. data/test/models/citation.rb +3 -3
  433. data/test/models/club.rb +25 -23
  434. data/test/models/college.rb +10 -10
  435. data/test/models/column.rb +3 -3
  436. data/test/models/column_name.rb +3 -3
  437. data/test/models/comment.rb +76 -64
  438. data/test/models/company.rb +230 -228
  439. data/test/models/company_in_module.rb +98 -98
  440. data/test/models/computer.rb +3 -3
  441. data/test/models/contact.rb +41 -41
  442. data/test/models/content.rb +40 -0
  443. data/test/models/contract.rb +20 -20
  444. data/test/models/country.rb +7 -7
  445. data/test/models/course.rb +6 -6
  446. data/test/models/customer.rb +83 -77
  447. data/test/models/customer_carrier.rb +14 -14
  448. data/test/models/dashboard.rb +3 -3
  449. data/test/models/default.rb +2 -2
  450. data/test/models/department.rb +4 -4
  451. data/test/models/developer.rb +274 -255
  452. data/test/models/dog.rb +5 -5
  453. data/test/models/dog_lover.rb +5 -5
  454. data/test/models/doubloon.rb +12 -12
  455. data/test/models/drink_designer.rb +3 -3
  456. data/test/models/edge.rb +5 -5
  457. data/test/models/electron.rb +5 -5
  458. data/test/models/engine.rb +4 -4
  459. data/test/models/entrant.rb +3 -3
  460. data/test/models/essay.rb +5 -5
  461. data/test/models/event.rb +3 -3
  462. data/test/models/eye.rb +37 -37
  463. data/test/models/face.rb +9 -9
  464. data/test/models/friendship.rb +6 -6
  465. data/test/models/guid.rb +2 -2
  466. data/test/models/guitar.rb +4 -0
  467. data/test/models/hotel.rb +11 -9
  468. data/test/models/image.rb +3 -3
  469. data/test/models/interest.rb +5 -5
  470. data/test/models/invoice.rb +4 -4
  471. data/test/models/item.rb +7 -7
  472. data/test/models/job.rb +7 -7
  473. data/test/models/joke.rb +7 -7
  474. data/test/models/keyboard.rb +3 -3
  475. data/test/models/legacy_thing.rb +3 -3
  476. data/test/models/lesson.rb +11 -11
  477. data/test/models/line_item.rb +3 -3
  478. data/test/models/liquid.rb +4 -4
  479. data/test/models/man.rb +11 -11
  480. data/test/models/matey.rb +4 -4
  481. data/test/models/member.rb +42 -41
  482. data/test/models/member_detail.rb +8 -7
  483. data/test/models/member_type.rb +3 -3
  484. data/test/models/membership.rb +35 -35
  485. data/test/models/mentor.rb +3 -0
  486. data/test/models/minimalistic.rb +2 -2
  487. data/test/models/minivan.rb +9 -9
  488. data/test/models/mixed_case_monkey.rb +3 -3
  489. data/test/models/mocktail_designer.rb +2 -0
  490. data/test/models/molecule.rb +6 -6
  491. data/test/models/movie.rb +5 -5
  492. data/test/models/node.rb +5 -0
  493. data/test/models/non_primary_key.rb +2 -0
  494. data/test/models/notification.rb +3 -0
  495. data/test/models/order.rb +4 -4
  496. data/test/models/organization.rb +14 -14
  497. data/test/models/other_dog.rb +5 -0
  498. data/test/models/owner.rb +37 -34
  499. data/test/models/parrot.rb +28 -29
  500. data/test/models/person.rb +142 -143
  501. data/test/models/personal_legacy_thing.rb +4 -4
  502. data/test/models/pet.rb +18 -15
  503. data/test/models/pet_treasure.rb +6 -0
  504. data/test/models/pirate.rb +92 -92
  505. data/test/models/possession.rb +3 -3
  506. data/test/models/post.rb +273 -264
  507. data/test/models/price_estimate.rb +4 -4
  508. data/test/models/professor.rb +5 -5
  509. data/test/models/project.rb +40 -31
  510. data/test/models/publisher.rb +2 -2
  511. data/test/models/publisher/article.rb +4 -4
  512. data/test/models/publisher/magazine.rb +3 -3
  513. data/test/models/randomly_named_c1.rb +1 -1
  514. data/test/models/rating.rb +4 -4
  515. data/test/models/reader.rb +23 -23
  516. data/test/models/recipe.rb +3 -0
  517. data/test/models/record.rb +2 -2
  518. data/test/models/reference.rb +22 -22
  519. data/test/models/reply.rb +61 -61
  520. data/test/models/ship.rb +39 -33
  521. data/test/models/ship_part.rb +8 -8
  522. data/test/models/shop.rb +17 -17
  523. data/test/models/shop_account.rb +6 -6
  524. data/test/models/speedometer.rb +6 -6
  525. data/test/models/sponsor.rb +7 -7
  526. data/test/models/string_key_object.rb +3 -3
  527. data/test/models/student.rb +4 -4
  528. data/test/models/subject.rb +16 -16
  529. data/test/models/subscriber.rb +8 -8
  530. data/test/models/subscription.rb +4 -4
  531. data/test/models/tag.rb +13 -7
  532. data/test/models/tagging.rb +13 -13
  533. data/test/models/task.rb +5 -5
  534. data/test/models/topic.rb +118 -124
  535. data/test/models/toy.rb +6 -6
  536. data/test/models/traffic_light.rb +4 -4
  537. data/test/models/treasure.rb +14 -14
  538. data/test/models/treaty.rb +7 -7
  539. data/test/models/tree.rb +3 -0
  540. data/test/models/tuning_peg.rb +4 -0
  541. data/test/models/tyre.rb +11 -11
  542. data/test/models/user.rb +14 -0
  543. data/test/models/uuid_child.rb +3 -3
  544. data/test/models/uuid_item.rb +6 -0
  545. data/test/models/uuid_parent.rb +3 -3
  546. data/test/models/vegetables.rb +24 -24
  547. data/test/models/vehicle.rb +6 -6
  548. data/test/models/vertex.rb +9 -9
  549. data/test/models/warehouse_thing.rb +5 -5
  550. data/test/models/wheel.rb +3 -3
  551. data/test/models/without_table.rb +3 -3
  552. data/test/models/zine.rb +3 -3
  553. data/test/schema/mysql2_specific_schema.rb +68 -58
  554. data/test/schema/oracle_specific_schema.rb +40 -43
  555. data/test/schema/postgresql_specific_schema.rb +114 -202
  556. data/test/schema/schema.rb +1057 -952
  557. data/test/schema/schema.rb.original +1057 -0
  558. data/test/schema/sqlite_specific_schema.rb +18 -22
  559. data/test/support/config.rb +43 -43
  560. data/test/support/connection.rb +23 -22
  561. data/test/support/connection_helper.rb +14 -14
  562. data/test/support/ddl_helper.rb +8 -8
  563. data/test/support/schema_dumping_helper.rb +20 -20
  564. data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -0
  565. data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -0
  566. metadata +129 -28
  567. data/lib/mswin32/rb19x/ibm_db.so +0 -0
  568. data/lib/mswin32/rb21x/i386/ibm_db.so +0 -0
  569. data/lib/mswin32/rb22x/i386/ibm_db.so +0 -0
  570. data/lib/mswin32/rb23x/i386/ibm_db.so +0 -0
  571. data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +0 -26
  572. data/test/cases/attribute_methods/serialization_test.rb +0 -29
  573. data/test/cases/migration/change_schema_test - Copy.rb +0 -448
  574. data/test/cases/migration/foreign_key_test - Changed.rb +0 -325
  575. data/test/cases/migration/table_and_index_test.rb +0 -24
  576. data/test/cases/relation/where_test2.rb +0 -36
  577. data/test/cases/type/decimal_test.rb +0 -56
  578. data/test/cases/type/unsigned_integer_test.rb +0 -18
  579. data/test/cases/xml_serialization_test.rb +0 -457
  580. data/test/connections/native_ibm_db/connection.rb +0 -44
  581. data/test/fixtures/naked/csv/accounts.csv +0 -1
  582. data/test/schema/i5/ibm_db_specific_schema.rb +0 -137
  583. data/test/schema/ids/ibm_db_specific_schema.rb +0 -140
  584. data/test/schema/luw/ibm_db_specific_schema.rb +0 -137
  585. data/test/schema/mysql_specific_schema.rb +0 -70
  586. data/test/schema/zOS/ibm_db_specific_schema.rb +0 -208
@@ -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