ibm_db 3.0.5-x86-mingw32 → 5.0.5-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 (358) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGES +4 -0
  3. data/LICENSE +1 -1
  4. data/ParameterizedQueries README +6 -6
  5. data/README +38 -55
  6. data/ext/Makefile +269 -0
  7. data/ext/extconf.rb +34 -3
  8. data/ext/gil_release_version +3 -0
  9. data/ext/ibm_db-i386-mingw32.def +2 -0
  10. data/ext/ibm_db.c +100 -108
  11. data/ext/ibm_db.o +0 -0
  12. data/ext/ibm_db.so +0 -0
  13. data/ext/mkmf.log +110 -0
  14. data/ext/ruby_ibm_db_cli.o +0 -0
  15. data/ext/unicode_support_version +3 -0
  16. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +923 -527
  17. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +4 -1
  18. data/lib/mswin32/ibm_db.rb +7 -39
  19. data/lib/mswin32/rb2x/i386/ibm_db.so +0 -0
  20. data/test/active_record/connection_adapters/fake_adapter.rb +8 -5
  21. data/test/cases/adapter_test.rb +133 -58
  22. data/test/cases/adapters/mysql2/active_schema_test.rb +193 -0
  23. data/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -0
  24. data/test/cases/adapters/mysql2/boolean_test.rb +100 -0
  25. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +63 -0
  26. data/test/cases/adapters/mysql2/charset_collation_test.rb +54 -0
  27. data/test/cases/adapters/mysql2/connection_test.rb +210 -0
  28. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +45 -0
  29. data/test/cases/adapters/mysql2/enum_test.rb +26 -0
  30. data/test/cases/adapters/mysql2/explain_test.rb +21 -0
  31. data/test/cases/adapters/mysql2/json_test.rb +195 -0
  32. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +83 -0
  33. data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -0
  34. data/test/cases/adapters/mysql2/schema_migrations_test.rb +59 -0
  35. data/test/cases/adapters/mysql2/schema_test.rb +126 -0
  36. data/test/cases/adapters/mysql2/sp_test.rb +36 -0
  37. data/test/cases/adapters/mysql2/sql_types_test.rb +14 -0
  38. data/test/cases/adapters/mysql2/table_options_test.rb +42 -0
  39. data/test/cases/adapters/mysql2/unsigned_type_test.rb +66 -0
  40. data/test/cases/adapters/postgresql/active_schema_test.rb +98 -0
  41. data/test/cases/adapters/postgresql/array_test.rb +339 -0
  42. data/test/cases/adapters/postgresql/bit_string_test.rb +82 -0
  43. data/test/cases/adapters/postgresql/bytea_test.rb +134 -0
  44. data/test/cases/adapters/postgresql/case_insensitive_test.rb +26 -0
  45. data/test/cases/adapters/postgresql/change_schema_test.rb +38 -0
  46. data/test/cases/adapters/postgresql/cidr_test.rb +25 -0
  47. data/test/cases/adapters/postgresql/citext_test.rb +78 -0
  48. data/test/cases/adapters/postgresql/collation_test.rb +53 -0
  49. data/test/cases/adapters/postgresql/composite_test.rb +132 -0
  50. data/test/cases/adapters/postgresql/connection_test.rb +257 -0
  51. data/test/cases/adapters/postgresql/datatype_test.rb +92 -0
  52. data/test/cases/adapters/postgresql/domain_test.rb +47 -0
  53. data/test/cases/adapters/postgresql/enum_test.rb +91 -0
  54. data/test/cases/adapters/postgresql/explain_test.rb +20 -0
  55. data/test/cases/adapters/postgresql/extension_migration_test.rb +63 -0
  56. data/test/cases/adapters/postgresql/full_text_test.rb +44 -0
  57. data/test/cases/adapters/postgresql/geometric_test.rb +378 -0
  58. data/test/cases/adapters/postgresql/hstore_test.rb +382 -0
  59. data/test/cases/adapters/postgresql/infinity_test.rb +69 -0
  60. data/test/cases/adapters/postgresql/integer_test.rb +25 -0
  61. data/test/cases/adapters/postgresql/json_test.rb +237 -0
  62. data/test/cases/adapters/postgresql/ltree_test.rb +53 -0
  63. data/test/cases/adapters/postgresql/money_test.rb +96 -0
  64. data/test/cases/adapters/postgresql/network_test.rb +94 -0
  65. data/test/cases/adapters/postgresql/numbers_test.rb +49 -0
  66. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +405 -0
  67. data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -0
  68. data/test/cases/adapters/postgresql/quoting_test.rb +44 -0
  69. data/test/cases/adapters/postgresql/range_test.rb +343 -0
  70. data/test/cases/adapters/postgresql/referential_integrity_test.rb +111 -0
  71. data/test/cases/adapters/postgresql/rename_table_test.rb +34 -0
  72. data/test/cases/adapters/postgresql/schema_authorization_test.rb +119 -0
  73. data/test/cases/adapters/postgresql/schema_test.rb +597 -0
  74. data/test/cases/adapters/postgresql/serial_test.rb +154 -0
  75. data/test/cases/adapters/postgresql/statement_pool_test.rb +41 -0
  76. data/test/cases/adapters/postgresql/timestamp_test.rb +90 -0
  77. data/test/cases/adapters/postgresql/type_lookup_test.rb +33 -0
  78. data/test/cases/adapters/postgresql/utils_test.rb +62 -0
  79. data/test/cases/adapters/postgresql/uuid_test.rb +294 -0
  80. data/test/cases/adapters/postgresql/xml_test.rb +54 -0
  81. data/test/cases/adapters/sqlite3/collation_test.rb +53 -0
  82. data/test/cases/adapters/sqlite3/copy_table_test.rb +98 -0
  83. data/test/cases/adapters/sqlite3/explain_test.rb +21 -0
  84. data/test/cases/adapters/sqlite3/quoting_test.rb +101 -0
  85. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +441 -0
  86. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -0
  87. data/test/cases/adapters/sqlite3/statement_pool_test.rb +20 -0
  88. data/test/cases/aggregations_test.rb +11 -1
  89. data/test/cases/ar_schema_test.rb +35 -50
  90. data/test/cases/associations/association_scope_test.rb +1 -6
  91. data/test/cases/associations/belongs_to_associations_test.rb +122 -10
  92. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -0
  93. data/test/cases/associations/callbacks_test.rb +5 -7
  94. data/test/cases/associations/cascaded_eager_loading_test.rb +1 -1
  95. data/test/cases/associations/eager_load_nested_include_test.rb +1 -3
  96. data/test/cases/associations/eager_test.rb +158 -73
  97. data/test/cases/associations/extension_test.rb +7 -2
  98. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +64 -32
  99. data/test/cases/associations/has_many_associations_test.rb +362 -43
  100. data/test/cases/associations/has_many_through_associations_test.rb +108 -41
  101. data/test/cases/associations/has_one_associations_test.rb +105 -8
  102. data/test/cases/associations/has_one_through_associations_test.rb +6 -3
  103. data/test/cases/associations/inner_join_association_test.rb +3 -3
  104. data/test/cases/associations/inverse_associations_test.rb +38 -11
  105. data/test/cases/associations/join_model_test.rb +59 -36
  106. data/test/cases/associations/left_outer_join_association_test.rb +88 -0
  107. data/test/cases/associations/nested_through_associations_test.rb +2 -2
  108. data/test/cases/associations/required_test.rb +25 -5
  109. data/test/cases/associations_test.rb +39 -34
  110. data/test/cases/attribute_decorators_test.rb +9 -8
  111. data/test/cases/attribute_methods/read_test.rb +5 -5
  112. data/test/cases/attribute_methods_test.rb +97 -40
  113. data/test/cases/attribute_set_test.rb +64 -4
  114. data/test/cases/attribute_test.rb +84 -18
  115. data/test/cases/attributes_test.rb +151 -34
  116. data/test/cases/autosave_association_test.rb +149 -36
  117. data/test/cases/base_test.rb +290 -241
  118. data/test/cases/batches_test.rb +299 -22
  119. data/test/cases/binary_test.rb +2 -10
  120. data/test/cases/bind_parameter_test.rb +76 -66
  121. data/test/cases/cache_key_test.rb +26 -0
  122. data/test/cases/calculations_test.rb +167 -15
  123. data/test/cases/callbacks_test.rb +161 -68
  124. data/test/cases/coders/json_test.rb +15 -0
  125. data/test/cases/collection_cache_key_test.rb +115 -0
  126. data/test/cases/column_definition_test.rb +26 -57
  127. data/test/cases/comment_test.rb +145 -0
  128. data/test/cases/connection_adapters/adapter_leasing_test.rb +5 -3
  129. data/test/cases/connection_adapters/connection_handler_test.rb +128 -21
  130. data/test/cases/connection_adapters/connection_specification_test.rb +1 -1
  131. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +0 -38
  132. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +5 -1
  133. data/test/cases/connection_adapters/schema_cache_test.rb +8 -3
  134. data/test/cases/connection_adapters/type_lookup_test.rb +15 -7
  135. data/test/cases/connection_management_test.rb +46 -56
  136. data/test/cases/connection_pool_test.rb +195 -20
  137. data/test/cases/connection_specification/resolver_test.rb +15 -0
  138. data/test/cases/counter_cache_test.rb +10 -5
  139. data/test/cases/custom_locking_test.rb +1 -1
  140. data/test/cases/database_statements_test.rb +18 -3
  141. data/test/cases/{invalid_date_test.rb → date_test.rb} +13 -1
  142. data/test/cases/date_time_precision_test.rb +107 -0
  143. data/test/cases/defaults_test.rb +85 -89
  144. data/test/cases/dirty_test.rb +30 -52
  145. data/test/cases/disconnected_test.rb +4 -2
  146. data/test/cases/enum_test.rb +178 -24
  147. data/test/cases/errors_test.rb +16 -0
  148. data/test/cases/explain_test.rb +32 -21
  149. data/test/cases/finder_test.rb +273 -148
  150. data/test/cases/fixture_set/file_test.rb +18 -0
  151. data/test/cases/fixtures_test.rb +112 -32
  152. data/test/cases/forbidden_attributes_protection_test.rb +69 -3
  153. data/test/cases/helper.rb +10 -16
  154. data/test/cases/hot_compatibility_test.rb +89 -1
  155. data/test/cases/inheritance_test.rb +284 -53
  156. data/test/cases/integration_test.rb +23 -7
  157. data/test/cases/invalid_connection_test.rb +4 -2
  158. data/test/cases/invertible_migration_test.rb +124 -32
  159. data/test/cases/json_serialization_test.rb +11 -2
  160. data/test/cases/locking_test.rb +22 -6
  161. data/test/cases/log_subscriber_test.rb +106 -17
  162. data/test/cases/migration/change_schema_test.rb +60 -114
  163. data/test/cases/migration/change_table_test.rb +34 -2
  164. data/test/cases/migration/column_attributes_test.rb +7 -23
  165. data/test/cases/migration/column_positioning_test.rb +8 -8
  166. data/test/cases/migration/columns_test.rb +17 -11
  167. data/test/cases/migration/command_recorder_test.rb +47 -2
  168. data/test/cases/migration/compatibility_test.rb +118 -0
  169. data/test/cases/migration/create_join_table_test.rb +21 -12
  170. data/test/cases/migration/foreign_key_test.rb +52 -18
  171. data/test/cases/migration/index_test.rb +14 -12
  172. data/test/cases/migration/logger_test.rb +1 -1
  173. data/test/cases/migration/pending_migrations_test.rb +0 -1
  174. data/test/cases/migration/references_foreign_key_test.rb +59 -7
  175. data/test/cases/migration/references_index_test.rb +4 -4
  176. data/test/cases/migration/references_statements_test.rb +26 -6
  177. data/test/cases/migration/rename_table_test.rb +25 -25
  178. data/test/cases/migration_test.rb +279 -81
  179. data/test/cases/migrator_test.rb +91 -8
  180. data/test/cases/mixin_test.rb +0 -2
  181. data/test/cases/modules_test.rb +3 -4
  182. data/test/cases/multiparameter_attributes_test.rb +24 -2
  183. data/test/cases/multiple_db_test.rb +11 -4
  184. data/test/cases/nested_attributes_test.rb +61 -33
  185. data/test/cases/persistence_test.rb +102 -10
  186. data/test/cases/pooled_connections_test.rb +3 -3
  187. data/test/cases/primary_keys_test.rb +170 -31
  188. data/test/cases/query_cache_test.rb +216 -96
  189. data/test/cases/quoting_test.rb +65 -19
  190. data/test/cases/readonly_test.rb +2 -1
  191. data/test/cases/reflection_test.rb +68 -22
  192. data/test/cases/relation/delegation_test.rb +3 -8
  193. data/test/cases/relation/merging_test.rb +10 -14
  194. data/test/cases/relation/mutation_test.rb +42 -24
  195. data/test/cases/relation/or_test.rb +92 -0
  196. data/test/cases/relation/predicate_builder_test.rb +4 -2
  197. data/test/cases/relation/record_fetch_warning_test.rb +40 -0
  198. data/test/cases/relation/where_chain_test.rb +23 -99
  199. data/test/cases/relation/where_clause_test.rb +182 -0
  200. data/test/cases/relation/where_test.rb +45 -23
  201. data/test/cases/relation_test.rb +67 -58
  202. data/test/cases/relations_test.rb +249 -38
  203. data/test/cases/result_test.rb +10 -0
  204. data/test/cases/sanitize_test.rb +108 -15
  205. data/test/cases/schema_dumper_test.rb +119 -125
  206. data/test/cases/schema_loading_test.rb +52 -0
  207. data/test/cases/scoping/default_scoping_test.rb +113 -39
  208. data/test/cases/scoping/named_scoping_test.rb +46 -9
  209. data/test/cases/scoping/relation_scoping_test.rb +47 -4
  210. data/test/cases/secure_token_test.rb +32 -0
  211. data/test/cases/serialization_test.rb +1 -1
  212. data/test/cases/serialized_attribute_test.rb +93 -6
  213. data/test/cases/statement_cache_test.rb +38 -0
  214. data/test/cases/store_test.rb +2 -1
  215. data/test/cases/suppressor_test.rb +63 -0
  216. data/test/cases/tasks/database_tasks_test.rb +73 -9
  217. data/test/cases/tasks/mysql_rake_test.rb +139 -118
  218. data/test/cases/tasks/postgresql_rake_test.rb +60 -6
  219. data/test/cases/tasks/sqlite_rake_test.rb +30 -3
  220. data/test/cases/test_case.rb +28 -20
  221. data/test/cases/test_fixtures_test.rb +36 -0
  222. data/test/cases/time_precision_test.rb +103 -0
  223. data/test/cases/timestamp_test.rb +44 -10
  224. data/test/cases/touch_later_test.rb +121 -0
  225. data/test/cases/transaction_callbacks_test.rb +128 -62
  226. data/test/cases/transaction_isolation_test.rb +2 -2
  227. data/test/cases/transactions_test.rb +61 -43
  228. data/test/cases/type/adapter_specific_registry_test.rb +133 -0
  229. data/test/cases/type/date_time_test.rb +14 -0
  230. data/test/cases/type/integer_test.rb +2 -96
  231. data/test/cases/type/string_test.rb +0 -14
  232. data/test/cases/type_test.rb +39 -0
  233. data/test/cases/types_test.rb +1 -118
  234. data/test/cases/unconnected_test.rb +1 -1
  235. data/test/cases/validations/absence_validation_test.rb +73 -0
  236. data/test/cases/validations/association_validation_test.rb +13 -2
  237. data/test/cases/validations/i18n_validation_test.rb +6 -10
  238. data/test/cases/validations/length_validation_test.rb +62 -30
  239. data/test/cases/validations/presence_validation_test.rb +36 -1
  240. data/test/cases/validations/uniqueness_validation_test.rb +128 -37
  241. data/test/cases/validations_repair_helper.rb +2 -6
  242. data/test/cases/validations_test.rb +36 -7
  243. data/test/cases/view_test.rb +102 -5
  244. data/test/cases/yaml_serialization_test.rb +21 -26
  245. data/test/config.example.yml +97 -0
  246. data/test/fixtures/bad_posts.yml +9 -0
  247. data/test/fixtures/books.yml +20 -0
  248. data/test/fixtures/content.yml +3 -0
  249. data/test/fixtures/content_positions.yml +3 -0
  250. data/test/fixtures/dead_parrots.yml +5 -0
  251. data/test/fixtures/live_parrots.yml +4 -0
  252. data/test/fixtures/naked/yml/parrots.yml +2 -0
  253. data/test/fixtures/naked/yml/trees.yml +3 -0
  254. data/test/fixtures/nodes.yml +29 -0
  255. data/test/fixtures/other_comments.yml +6 -0
  256. data/test/fixtures/other_dogs.yml +2 -0
  257. data/test/fixtures/other_posts.yml +7 -0
  258. data/test/fixtures/price_estimates.yml +10 -1
  259. data/test/fixtures/trees.yml +3 -0
  260. data/test/migrations/10_urban/9_add_expressions.rb +1 -1
  261. data/test/migrations/decimal/1_give_me_big_numbers.rb +1 -1
  262. data/test/migrations/magic/1_currencies_have_symbols.rb +1 -1
  263. data/test/migrations/missing/1000_people_have_middle_names.rb +2 -2
  264. data/test/migrations/missing/1_people_have_last_names.rb +2 -2
  265. data/test/migrations/missing/3_we_need_reminders.rb +2 -2
  266. data/test/migrations/missing/4_innocent_jointable.rb +2 -2
  267. data/test/migrations/rename/1_we_need_things.rb +2 -2
  268. data/test/migrations/rename/2_rename_things.rb +2 -2
  269. data/test/migrations/to_copy/1_people_have_hobbies.rb +1 -1
  270. data/test/migrations/to_copy/2_people_have_descriptions.rb +1 -1
  271. data/test/migrations/to_copy2/1_create_articles.rb +1 -1
  272. data/test/migrations/to_copy2/2_create_comments.rb +1 -1
  273. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +1 -1
  274. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +1 -1
  275. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +1 -1
  276. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +1 -1
  277. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +1 -1
  278. data/test/migrations/valid/1_valid_people_have_last_names.rb +1 -1
  279. data/test/migrations/valid/2_we_need_reminders.rb +2 -2
  280. data/test/migrations/valid/3_innocent_jointable.rb +2 -2
  281. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +1 -1
  282. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -2
  283. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +2 -2
  284. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +1 -1
  285. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +1 -1
  286. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +1 -1
  287. data/test/migrations/version_check/20131219224947_migration_version_check.rb +1 -1
  288. data/test/models/admin/randomly_named_c1.rb +6 -2
  289. data/test/models/aircraft.rb +1 -0
  290. data/test/models/author.rb +4 -7
  291. data/test/models/bird.rb +1 -1
  292. data/test/models/book.rb +5 -0
  293. data/test/models/bulb.rb +2 -1
  294. data/test/models/car.rb +3 -0
  295. data/test/models/cat.rb +10 -0
  296. data/test/models/chef.rb +1 -0
  297. data/test/models/club.rb +2 -0
  298. data/test/models/comment.rb +17 -5
  299. data/test/models/company.rb +4 -2
  300. data/test/models/company_in_module.rb +1 -1
  301. data/test/models/contact.rb +1 -1
  302. data/test/models/content.rb +40 -0
  303. data/test/models/customer.rb +8 -2
  304. data/test/models/developer.rb +19 -0
  305. data/test/models/face.rb +1 -1
  306. data/test/models/guitar.rb +4 -0
  307. data/test/models/hotel.rb +2 -0
  308. data/test/models/member.rb +1 -0
  309. data/test/models/member_detail.rb +4 -3
  310. data/test/models/mentor.rb +3 -0
  311. data/test/models/mocktail_designer.rb +2 -0
  312. data/test/models/node.rb +5 -0
  313. data/test/models/non_primary_key.rb +2 -0
  314. data/test/models/notification.rb +3 -0
  315. data/test/models/other_dog.rb +5 -0
  316. data/test/models/owner.rb +4 -1
  317. data/test/models/parrot.rb +6 -7
  318. data/test/models/person.rb +0 -1
  319. data/test/models/pet.rb +3 -0
  320. data/test/models/pet_treasure.rb +6 -0
  321. data/test/models/pirate.rb +3 -3
  322. data/test/models/post.rb +18 -9
  323. data/test/models/project.rb +9 -0
  324. data/test/models/randomly_named_c1.rb +1 -1
  325. data/test/models/recipe.rb +3 -0
  326. data/test/models/ship.rb +8 -2
  327. data/test/models/tag.rb +6 -0
  328. data/test/models/topic.rb +2 -8
  329. data/test/models/tree.rb +3 -0
  330. data/test/models/tuning_peg.rb +4 -0
  331. data/test/models/user.rb +14 -0
  332. data/test/models/uuid_item.rb +6 -0
  333. data/test/schema/mysql2_specific_schema.rb +33 -23
  334. data/test/schema/oracle_specific_schema.rb +1 -4
  335. data/test/schema/postgresql_specific_schema.rb +36 -124
  336. data/test/schema/schema.rb +170 -65
  337. data/test/schema/schema.rb.original +1057 -0
  338. data/test/schema/sqlite_specific_schema.rb +1 -5
  339. data/test/support/connection.rb +1 -0
  340. data/test/support/schema_dumping_helper.rb +1 -1
  341. data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -0
  342. data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -0
  343. metadata +146 -30
  344. data/lib/mswin32/rb19x/ibm_db.so +0 -0
  345. data/lib/mswin32/rb21x/i386/ibm_db.so +0 -0
  346. data/lib/mswin32/rb22x/i386/ibm_db.so +0 -0
  347. data/lib/mswin32/rb23x/i386/ibm_db.so +0 -0
  348. data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +0 -26
  349. data/test/cases/attribute_methods/serialization_test.rb +0 -29
  350. data/test/cases/migration/change_schema_test - Copy.rb +0 -448
  351. data/test/cases/migration/foreign_key_test - Changed.rb +0 -325
  352. data/test/cases/migration/table_and_index_test.rb +0 -24
  353. data/test/cases/relation/where_test2.rb +0 -36
  354. data/test/cases/type/decimal_test.rb +0 -56
  355. data/test/cases/type/unsigned_integer_test.rb +0 -18
  356. data/test/cases/xml_serialization_test.rb +0 -457
  357. data/test/fixtures/naked/csv/accounts.csv +0 -1
  358. data/test/schema/mysql_specific_schema.rb +0 -70
@@ -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