sequel 5.29.0 → 5.34.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 (387) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +70 -1922
  3. data/README.rdoc +1 -1
  4. data/doc/advanced_associations.rdoc +4 -4
  5. data/doc/association_basics.rdoc +3 -3
  6. data/doc/code_order.rdoc +12 -2
  7. data/doc/model_dataset_method_design.rdoc +1 -1
  8. data/doc/postgresql.rdoc +71 -0
  9. data/doc/release_notes/5.30.0.txt +20 -0
  10. data/doc/release_notes/5.31.0.txt +148 -0
  11. data/doc/release_notes/5.32.0.txt +46 -0
  12. data/doc/release_notes/5.33.0.txt +24 -0
  13. data/doc/release_notes/5.34.0.txt +40 -0
  14. data/doc/testing.rdoc +1 -1
  15. data/lib/sequel/adapters/shared/access.rb +6 -6
  16. data/lib/sequel/adapters/shared/mssql.rb +5 -5
  17. data/lib/sequel/adapters/shared/mysql.rb +9 -9
  18. data/lib/sequel/adapters/shared/oracle.rb +16 -16
  19. data/lib/sequel/adapters/shared/postgres.rb +169 -14
  20. data/lib/sequel/adapters/shared/sqlanywhere.rb +9 -9
  21. data/lib/sequel/adapters/shared/sqlite.rb +32 -5
  22. data/lib/sequel/connection_pool/sharded_single.rb +4 -1
  23. data/lib/sequel/connection_pool/sharded_threaded.rb +12 -12
  24. data/lib/sequel/connection_pool/single.rb +1 -1
  25. data/lib/sequel/connection_pool/threaded.rb +2 -2
  26. data/lib/sequel/core.rb +318 -314
  27. data/lib/sequel/database/connecting.rb +1 -1
  28. data/lib/sequel/database/misc.rb +16 -10
  29. data/lib/sequel/database/query.rb +3 -1
  30. data/lib/sequel/database/schema_generator.rb +0 -1
  31. data/lib/sequel/database/schema_methods.rb +15 -16
  32. data/lib/sequel/database/transactions.rb +12 -13
  33. data/lib/sequel/dataset/placeholder_literalizer.rb +3 -7
  34. data/lib/sequel/dataset/query.rb +4 -3
  35. data/lib/sequel/deprecated.rb +2 -0
  36. data/lib/sequel/exceptions.rb +2 -0
  37. data/lib/sequel/extensions/connection_expiration.rb +2 -2
  38. data/lib/sequel/extensions/connection_validator.rb +2 -2
  39. data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
  40. data/lib/sequel/extensions/index_caching.rb +9 -7
  41. data/lib/sequel/extensions/integer64.rb +2 -0
  42. data/lib/sequel/extensions/migration.rb +1 -1
  43. data/lib/sequel/extensions/pg_enum.rb +5 -2
  44. data/lib/sequel/extensions/pg_hstore.rb +6 -0
  45. data/lib/sequel/extensions/pg_inet.rb +13 -5
  46. data/lib/sequel/extensions/pg_interval.rb +2 -0
  47. data/lib/sequel/extensions/pg_range.rb +2 -0
  48. data/lib/sequel/extensions/pg_timestamptz.rb +2 -0
  49. data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
  50. data/lib/sequel/extensions/schema_dumper.rb +10 -4
  51. data/lib/sequel/extensions/server_block.rb +3 -3
  52. data/lib/sequel/model.rb +2 -0
  53. data/lib/sequel/model/associations.rb +30 -18
  54. data/lib/sequel/model/base.rb +64 -55
  55. data/lib/sequel/model/plugins.rb +3 -3
  56. data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
  57. data/lib/sequel/plugins/association_multi_add_remove.rb +2 -0
  58. data/lib/sequel/plugins/association_pks.rb +57 -16
  59. data/lib/sequel/plugins/association_proxies.rb +2 -0
  60. data/lib/sequel/plugins/boolean_subsets.rb +4 -1
  61. data/lib/sequel/plugins/class_table_inheritance.rb +26 -26
  62. data/lib/sequel/plugins/dirty.rb +13 -13
  63. data/lib/sequel/plugins/forbid_lazy_load.rb +214 -0
  64. data/lib/sequel/plugins/json_serializer.rb +3 -7
  65. data/lib/sequel/plugins/rcte_tree.rb +2 -2
  66. data/lib/sequel/plugins/single_table_inheritance.rb +15 -15
  67. data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
  68. data/lib/sequel/plugins/subclasses.rb +2 -0
  69. data/lib/sequel/timezones.rb +6 -4
  70. data/lib/sequel/version.rb +1 -1
  71. metadata +17 -368
  72. data/Rakefile +0 -151
  73. data/doc/release_notes/4.0.0.txt +0 -262
  74. data/doc/release_notes/4.1.0.txt +0 -85
  75. data/doc/release_notes/4.10.0.txt +0 -226
  76. data/doc/release_notes/4.11.0.txt +0 -147
  77. data/doc/release_notes/4.12.0.txt +0 -105
  78. data/doc/release_notes/4.13.0.txt +0 -169
  79. data/doc/release_notes/4.14.0.txt +0 -68
  80. data/doc/release_notes/4.15.0.txt +0 -56
  81. data/doc/release_notes/4.16.0.txt +0 -36
  82. data/doc/release_notes/4.17.0.txt +0 -38
  83. data/doc/release_notes/4.18.0.txt +0 -36
  84. data/doc/release_notes/4.19.0.txt +0 -45
  85. data/doc/release_notes/4.2.0.txt +0 -129
  86. data/doc/release_notes/4.20.0.txt +0 -79
  87. data/doc/release_notes/4.21.0.txt +0 -94
  88. data/doc/release_notes/4.22.0.txt +0 -72
  89. data/doc/release_notes/4.23.0.txt +0 -65
  90. data/doc/release_notes/4.24.0.txt +0 -99
  91. data/doc/release_notes/4.25.0.txt +0 -181
  92. data/doc/release_notes/4.26.0.txt +0 -44
  93. data/doc/release_notes/4.27.0.txt +0 -78
  94. data/doc/release_notes/4.28.0.txt +0 -57
  95. data/doc/release_notes/4.29.0.txt +0 -41
  96. data/doc/release_notes/4.3.0.txt +0 -40
  97. data/doc/release_notes/4.30.0.txt +0 -37
  98. data/doc/release_notes/4.31.0.txt +0 -57
  99. data/doc/release_notes/4.32.0.txt +0 -132
  100. data/doc/release_notes/4.33.0.txt +0 -88
  101. data/doc/release_notes/4.34.0.txt +0 -86
  102. data/doc/release_notes/4.35.0.txt +0 -130
  103. data/doc/release_notes/4.36.0.txt +0 -116
  104. data/doc/release_notes/4.37.0.txt +0 -50
  105. data/doc/release_notes/4.38.0.txt +0 -67
  106. data/doc/release_notes/4.39.0.txt +0 -127
  107. data/doc/release_notes/4.4.0.txt +0 -92
  108. data/doc/release_notes/4.40.0.txt +0 -179
  109. data/doc/release_notes/4.41.0.txt +0 -77
  110. data/doc/release_notes/4.42.0.txt +0 -221
  111. data/doc/release_notes/4.43.0.txt +0 -87
  112. data/doc/release_notes/4.44.0.txt +0 -125
  113. data/doc/release_notes/4.45.0.txt +0 -370
  114. data/doc/release_notes/4.46.0.txt +0 -404
  115. data/doc/release_notes/4.47.0.txt +0 -56
  116. data/doc/release_notes/4.48.0.txt +0 -293
  117. data/doc/release_notes/4.49.0.txt +0 -222
  118. data/doc/release_notes/4.5.0.txt +0 -34
  119. data/doc/release_notes/4.6.0.txt +0 -30
  120. data/doc/release_notes/4.7.0.txt +0 -103
  121. data/doc/release_notes/4.8.0.txt +0 -175
  122. data/doc/release_notes/4.9.0.txt +0 -190
  123. data/spec/adapter_spec.rb +0 -4
  124. data/spec/adapters/db2_spec.rb +0 -170
  125. data/spec/adapters/mssql_spec.rb +0 -828
  126. data/spec/adapters/mysql_spec.rb +0 -1060
  127. data/spec/adapters/oracle_spec.rb +0 -371
  128. data/spec/adapters/postgres_spec.rb +0 -4476
  129. data/spec/adapters/spec_helper.rb +0 -44
  130. data/spec/adapters/sqlanywhere_spec.rb +0 -97
  131. data/spec/adapters/sqlite_spec.rb +0 -652
  132. data/spec/bin_spec.rb +0 -278
  133. data/spec/core/connection_pool_spec.rb +0 -1250
  134. data/spec/core/database_spec.rb +0 -2915
  135. data/spec/core/dataset_spec.rb +0 -5544
  136. data/spec/core/deprecated_spec.rb +0 -70
  137. data/spec/core/expression_filters_spec.rb +0 -1498
  138. data/spec/core/mock_adapter_spec.rb +0 -722
  139. data/spec/core/object_graph_spec.rb +0 -336
  140. data/spec/core/placeholder_literalizer_spec.rb +0 -166
  141. data/spec/core/schema_generator_spec.rb +0 -214
  142. data/spec/core/schema_spec.rb +0 -1844
  143. data/spec/core/spec_helper.rb +0 -24
  144. data/spec/core/version_spec.rb +0 -14
  145. data/spec/core_extensions_spec.rb +0 -763
  146. data/spec/core_model_spec.rb +0 -2
  147. data/spec/core_spec.rb +0 -1
  148. data/spec/deprecation_helper.rb +0 -30
  149. data/spec/extensions/accessed_columns_spec.rb +0 -51
  150. data/spec/extensions/active_model_spec.rb +0 -99
  151. data/spec/extensions/after_initialize_spec.rb +0 -28
  152. data/spec/extensions/any_not_empty_spec.rb +0 -23
  153. data/spec/extensions/arbitrary_servers_spec.rb +0 -109
  154. data/spec/extensions/association_dependencies_spec.rb +0 -125
  155. data/spec/extensions/association_multi_add_remove_spec.rb +0 -1041
  156. data/spec/extensions/association_pks_spec.rb +0 -423
  157. data/spec/extensions/association_proxies_spec.rb +0 -100
  158. data/spec/extensions/auto_literal_strings_spec.rb +0 -205
  159. data/spec/extensions/auto_validations_spec.rb +0 -229
  160. data/spec/extensions/blacklist_security_spec.rb +0 -95
  161. data/spec/extensions/blank_spec.rb +0 -69
  162. data/spec/extensions/boolean_readers_spec.rb +0 -93
  163. data/spec/extensions/boolean_subsets_spec.rb +0 -47
  164. data/spec/extensions/caching_spec.rb +0 -273
  165. data/spec/extensions/caller_logging_spec.rb +0 -52
  166. data/spec/extensions/class_table_inheritance_spec.rb +0 -750
  167. data/spec/extensions/column_conflicts_spec.rb +0 -75
  168. data/spec/extensions/column_select_spec.rb +0 -129
  169. data/spec/extensions/columns_introspection_spec.rb +0 -90
  170. data/spec/extensions/columns_updated_spec.rb +0 -35
  171. data/spec/extensions/composition_spec.rb +0 -248
  172. data/spec/extensions/connection_expiration_spec.rb +0 -151
  173. data/spec/extensions/connection_validator_spec.rb +0 -144
  174. data/spec/extensions/constant_sql_override_spec.rb +0 -24
  175. data/spec/extensions/constraint_validations_plugin_spec.rb +0 -300
  176. data/spec/extensions/constraint_validations_spec.rb +0 -439
  177. data/spec/extensions/core_refinements_spec.rb +0 -528
  178. data/spec/extensions/csv_serializer_spec.rb +0 -183
  179. data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
  180. data/spec/extensions/dataset_associations_spec.rb +0 -365
  181. data/spec/extensions/dataset_source_alias_spec.rb +0 -51
  182. data/spec/extensions/date_arithmetic_spec.rb +0 -181
  183. data/spec/extensions/datetime_parse_to_time_spec.rb +0 -169
  184. data/spec/extensions/def_dataset_method_spec.rb +0 -100
  185. data/spec/extensions/defaults_setter_spec.rb +0 -150
  186. data/spec/extensions/delay_add_association_spec.rb +0 -73
  187. data/spec/extensions/dirty_spec.rb +0 -222
  188. data/spec/extensions/duplicate_columns_handler_spec.rb +0 -104
  189. data/spec/extensions/eager_each_spec.rb +0 -62
  190. data/spec/extensions/eager_graph_eager_spec.rb +0 -100
  191. data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
  192. data/spec/extensions/empty_failure_backtraces_spec.rb +0 -60
  193. data/spec/extensions/error_splitter_spec.rb +0 -18
  194. data/spec/extensions/error_sql_spec.rb +0 -20
  195. data/spec/extensions/escaped_like_spec.rb +0 -40
  196. data/spec/extensions/eval_inspect_spec.rb +0 -81
  197. data/spec/extensions/exclude_or_null_spec.rb +0 -15
  198. data/spec/extensions/finder_spec.rb +0 -260
  199. data/spec/extensions/force_encoding_spec.rb +0 -126
  200. data/spec/extensions/freeze_datasets_spec.rb +0 -31
  201. data/spec/extensions/graph_each_spec.rb +0 -113
  202. data/spec/extensions/hook_class_methods_spec.rb +0 -402
  203. data/spec/extensions/identifier_mangling_spec.rb +0 -201
  204. data/spec/extensions/implicit_subquery_spec.rb +0 -58
  205. data/spec/extensions/index_caching_spec.rb +0 -66
  206. data/spec/extensions/inflector_spec.rb +0 -183
  207. data/spec/extensions/input_transformer_spec.rb +0 -69
  208. data/spec/extensions/insert_conflict_spec.rb +0 -103
  209. data/spec/extensions/insert_returning_select_spec.rb +0 -72
  210. data/spec/extensions/instance_filters_spec.rb +0 -79
  211. data/spec/extensions/instance_hooks_spec.rb +0 -246
  212. data/spec/extensions/integer64_spec.rb +0 -22
  213. data/spec/extensions/inverted_subsets_spec.rb +0 -33
  214. data/spec/extensions/json_serializer_spec.rb +0 -346
  215. data/spec/extensions/lazy_attributes_spec.rb +0 -183
  216. data/spec/extensions/list_spec.rb +0 -291
  217. data/spec/extensions/looser_typecasting_spec.rb +0 -43
  218. data/spec/extensions/many_through_many_spec.rb +0 -2177
  219. data/spec/extensions/migration_spec.rb +0 -864
  220. data/spec/extensions/modification_detection_spec.rb +0 -93
  221. data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -92
  222. data/spec/extensions/named_timezones_spec.rb +0 -218
  223. data/spec/extensions/nested_attributes_spec.rb +0 -815
  224. data/spec/extensions/null_dataset_spec.rb +0 -85
  225. data/spec/extensions/optimistic_locking_spec.rb +0 -127
  226. data/spec/extensions/pagination_spec.rb +0 -116
  227. data/spec/extensions/pg_array_associations_spec.rb +0 -802
  228. data/spec/extensions/pg_array_ops_spec.rb +0 -144
  229. data/spec/extensions/pg_array_spec.rb +0 -398
  230. data/spec/extensions/pg_auto_constraint_validations_spec.rb +0 -209
  231. data/spec/extensions/pg_enum_spec.rb +0 -118
  232. data/spec/extensions/pg_extended_date_support_spec.rb +0 -126
  233. data/spec/extensions/pg_hstore_ops_spec.rb +0 -238
  234. data/spec/extensions/pg_hstore_spec.rb +0 -219
  235. data/spec/extensions/pg_inet_ops_spec.rb +0 -102
  236. data/spec/extensions/pg_inet_spec.rb +0 -72
  237. data/spec/extensions/pg_interval_spec.rb +0 -103
  238. data/spec/extensions/pg_json_ops_spec.rb +0 -356
  239. data/spec/extensions/pg_json_spec.rb +0 -451
  240. data/spec/extensions/pg_loose_count_spec.rb +0 -23
  241. data/spec/extensions/pg_range_ops_spec.rb +0 -60
  242. data/spec/extensions/pg_range_spec.rb +0 -600
  243. data/spec/extensions/pg_row_ops_spec.rb +0 -61
  244. data/spec/extensions/pg_row_plugin_spec.rb +0 -60
  245. data/spec/extensions/pg_row_spec.rb +0 -363
  246. data/spec/extensions/pg_static_cache_updater_spec.rb +0 -93
  247. data/spec/extensions/pg_timestamptz_spec.rb +0 -17
  248. data/spec/extensions/prepared_statements_safe_spec.rb +0 -66
  249. data/spec/extensions/prepared_statements_spec.rb +0 -177
  250. data/spec/extensions/pretty_table_spec.rb +0 -123
  251. data/spec/extensions/query_spec.rb +0 -94
  252. data/spec/extensions/rcte_tree_spec.rb +0 -387
  253. data/spec/extensions/round_timestamps_spec.rb +0 -39
  254. data/spec/extensions/s_spec.rb +0 -60
  255. data/spec/extensions/schema_caching_spec.rb +0 -64
  256. data/spec/extensions/schema_dumper_spec.rb +0 -870
  257. data/spec/extensions/select_remove_spec.rb +0 -38
  258. data/spec/extensions/sequel_4_dataset_methods_spec.rb +0 -121
  259. data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
  260. data/spec/extensions/serialization_spec.rb +0 -365
  261. data/spec/extensions/server_block_spec.rb +0 -135
  262. data/spec/extensions/server_logging_spec.rb +0 -45
  263. data/spec/extensions/sharding_spec.rb +0 -197
  264. data/spec/extensions/shared_caching_spec.rb +0 -151
  265. data/spec/extensions/single_table_inheritance_spec.rb +0 -347
  266. data/spec/extensions/singular_table_names_spec.rb +0 -22
  267. data/spec/extensions/skip_create_refresh_spec.rb +0 -18
  268. data/spec/extensions/spec_helper.rb +0 -70
  269. data/spec/extensions/split_array_nil_spec.rb +0 -24
  270. data/spec/extensions/split_values_spec.rb +0 -57
  271. data/spec/extensions/sql_comments_spec.rb +0 -33
  272. data/spec/extensions/sql_expr_spec.rb +0 -59
  273. data/spec/extensions/static_cache_cache_spec.rb +0 -35
  274. data/spec/extensions/static_cache_spec.rb +0 -471
  275. data/spec/extensions/string_agg_spec.rb +0 -90
  276. data/spec/extensions/string_date_time_spec.rb +0 -95
  277. data/spec/extensions/string_stripper_spec.rb +0 -68
  278. data/spec/extensions/subclasses_spec.rb +0 -79
  279. data/spec/extensions/subset_conditions_spec.rb +0 -38
  280. data/spec/extensions/symbol_aref_refinement_spec.rb +0 -28
  281. data/spec/extensions/symbol_as_refinement_spec.rb +0 -21
  282. data/spec/extensions/synchronize_sql_spec.rb +0 -124
  283. data/spec/extensions/table_select_spec.rb +0 -83
  284. data/spec/extensions/tactical_eager_loading_spec.rb +0 -402
  285. data/spec/extensions/thread_local_timezones_spec.rb +0 -67
  286. data/spec/extensions/throw_failures_spec.rb +0 -74
  287. data/spec/extensions/timestamps_spec.rb +0 -209
  288. data/spec/extensions/to_dot_spec.rb +0 -153
  289. data/spec/extensions/touch_spec.rb +0 -226
  290. data/spec/extensions/tree_spec.rb +0 -334
  291. data/spec/extensions/typecast_on_load_spec.rb +0 -86
  292. data/spec/extensions/unlimited_update_spec.rb +0 -21
  293. data/spec/extensions/update_or_create_spec.rb +0 -83
  294. data/spec/extensions/update_primary_key_spec.rb +0 -105
  295. data/spec/extensions/update_refresh_spec.rb +0 -59
  296. data/spec/extensions/uuid_spec.rb +0 -101
  297. data/spec/extensions/validate_associated_spec.rb +0 -52
  298. data/spec/extensions/validation_class_methods_spec.rb +0 -1040
  299. data/spec/extensions/validation_contexts_spec.rb +0 -31
  300. data/spec/extensions/validation_helpers_spec.rb +0 -525
  301. data/spec/extensions/whitelist_security_spec.rb +0 -157
  302. data/spec/extensions/xml_serializer_spec.rb +0 -213
  303. data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
  304. data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
  305. data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  306. data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  307. data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
  308. data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
  309. data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
  310. data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
  311. data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
  312. data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
  313. data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
  314. data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
  315. data/spec/files/double_migration/001_create_sessions.rb +0 -9
  316. data/spec/files/double_migration/002_create_nodes.rb +0 -19
  317. data/spec/files/double_migration/003_3_create_users.rb +0 -4
  318. data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
  319. data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
  320. data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  321. data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
  322. data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
  323. data/spec/files/empty_migration/001_create_sessions.rb +0 -9
  324. data/spec/files/empty_migration/002_create_nodes.rb +0 -0
  325. data/spec/files/empty_migration/003_3_create_users.rb +0 -4
  326. data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
  327. data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
  328. data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
  329. data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  330. data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
  331. data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  332. data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
  333. data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  334. data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
  335. data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
  336. data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  337. data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  338. data/spec/files/reversible_migrations/001_reversible.rb +0 -5
  339. data/spec/files/reversible_migrations/002_reversible.rb +0 -5
  340. data/spec/files/reversible_migrations/003_reversible.rb +0 -5
  341. data/spec/files/reversible_migrations/004_reversible.rb +0 -5
  342. data/spec/files/reversible_migrations/005_reversible.rb +0 -10
  343. data/spec/files/reversible_migrations/006_reversible.rb +0 -10
  344. data/spec/files/reversible_migrations/007_reversible.rb +0 -10
  345. data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
  346. data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
  347. data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
  348. data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
  349. data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
  350. data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
  351. data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
  352. data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
  353. data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
  354. data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
  355. data/spec/guards_helper.rb +0 -59
  356. data/spec/integration/associations_test.rb +0 -2597
  357. data/spec/integration/database_test.rb +0 -113
  358. data/spec/integration/dataset_test.rb +0 -2037
  359. data/spec/integration/eager_loader_test.rb +0 -687
  360. data/spec/integration/migrator_test.rb +0 -262
  361. data/spec/integration/model_test.rb +0 -203
  362. data/spec/integration/plugin_test.rb +0 -2423
  363. data/spec/integration/prepared_statement_test.rb +0 -405
  364. data/spec/integration/schema_test.rb +0 -903
  365. data/spec/integration/spec_helper.rb +0 -71
  366. data/spec/integration/timezone_test.rb +0 -86
  367. data/spec/integration/transaction_test.rb +0 -603
  368. data/spec/integration/type_test.rb +0 -127
  369. data/spec/model/association_reflection_spec.rb +0 -803
  370. data/spec/model/associations_spec.rb +0 -4738
  371. data/spec/model/base_spec.rb +0 -875
  372. data/spec/model/class_dataset_methods_spec.rb +0 -146
  373. data/spec/model/dataset_methods_spec.rb +0 -198
  374. data/spec/model/eager_loading_spec.rb +0 -2377
  375. data/spec/model/hooks_spec.rb +0 -370
  376. data/spec/model/inflector_spec.rb +0 -26
  377. data/spec/model/model_spec.rb +0 -956
  378. data/spec/model/plugins_spec.rb +0 -429
  379. data/spec/model/record_spec.rb +0 -2118
  380. data/spec/model/spec_helper.rb +0 -46
  381. data/spec/model/validations_spec.rb +0 -220
  382. data/spec/model_no_assoc_spec.rb +0 -1
  383. data/spec/model_spec.rb +0 -1
  384. data/spec/plugin_spec.rb +0 -1
  385. data/spec/sequel_coverage.rb +0 -15
  386. data/spec/sequel_warning.rb +0 -5
  387. data/spec/spec_config.rb +0 -12
@@ -1,86 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe Sequel::Model, "TypecastOnLoad plugin" do
4
- before do
5
- @db = Sequel.mock(:fetch=>{:id=>1, :b=>"1", :y=>"0"}, :columns=>[:id, :b, :y], :numrows=>1)
6
- def @db.supports_schema_parsing?() true end
7
- def @db.schema(*args)
8
- [[:id, {}], [:y, {:type=>:boolean, :db_type=>'tinyint(1)'}], [:b, {:type=>:integer, :db_type=>'integer'}]]
9
- end
10
- @c = Class.new(Sequel::Model(@db[:items])) do
11
- attr_accessor :bset
12
- def b=(x)
13
- self.bset = true
14
- super
15
- end
16
- end
17
- end
18
-
19
- it "should call setter method with value when loading the object, for all given columns" do
20
- @c.plugin :typecast_on_load, :b
21
- o = @c.load(:id=>1, :b=>"1", :y=>"0")
22
- o.values.must_equal(:id=>1, :b=>1, :y=>"0")
23
- o.bset.must_equal true
24
- end
25
-
26
- it "should call setter method with value when reloading the object, for all given columns" do
27
- @c.plugin :typecast_on_load, :b
28
- o = @c.load(:id=>1, :b=>"1", :y=>"0")
29
- o.refresh
30
- o.values.must_equal(:id=>1, :b=>1, :y=>"0")
31
- o.bset.must_equal true
32
- end
33
-
34
- it "should call setter method with value when automatically reloading the object on creation" do
35
- @c.plugin :typecast_on_load, :b
36
- o = @c.new(:b=>"1", :y=>"0")
37
- o.save.values.must_equal(:id=>1, :b=>1, :y=>"0")
38
- o.bset.must_equal true
39
- end
40
-
41
- it "should call setter method with value when automatically reloading the object on creation via insert_select" do
42
- @c.plugin :typecast_on_load, :b
43
- @c.dataset = @c.dataset.with_extend{def insert_select(h) insert(h); first end}
44
- o = @c.new(:b=>"1", :y=>"0")
45
- o.save.values.must_equal(:id=>1, :b=>1, :y=>"0")
46
- o.bset.must_equal true
47
- end
48
-
49
- it "should allowing setting columns separately via add_typecast_on_load_columns" do
50
- @c.plugin :typecast_on_load
51
- @c.load(:id=>1, :b=>"1", :y=>"0").values.must_equal(:id=>1, :b=>"1", :y=>"0")
52
- @c.add_typecast_on_load_columns :b
53
- @c.load(:id=>1, :b=>"1", :y=>"0").values.must_equal(:id=>1, :b=>1, :y=>"0")
54
- @c.add_typecast_on_load_columns :y
55
- @c.load(:id=>1, :b=>"1", :y=>"0").values.must_equal(:id=>1, :b=>1, :y=>false)
56
- end
57
-
58
- it "should work with subclasses" do
59
- @c.plugin :typecast_on_load
60
- @c.load(:id=>1, :b=>"1", :y=>"0").values.must_equal(:id=>1, :b=>"1", :y=>"0")
61
-
62
- c1 = Class.new(@c)
63
- @c.add_typecast_on_load_columns :b
64
- @c.load(:id=>1, :b=>"1", :y=>"0").values.must_equal(:id=>1, :b=>1, :y=>"0")
65
- c1.load(:id=>1, :b=>"1", :y=>"0").values.must_equal(:id=>1, :b=>"1", :y=>"0")
66
-
67
- c2 = Class.new(@c)
68
- @c.add_typecast_on_load_columns :y
69
- @c.load(:id=>1, :b=>"1", :y=>"0").values.must_equal(:id=>1, :b=>1, :y=>false)
70
- c2.load(:id=>1, :b=>"1", :y=>"0").values.must_equal(:id=>1, :b=>1, :y=>"0")
71
-
72
- c1.add_typecast_on_load_columns :y
73
- c1.load(:id=>1, :b=>"1", :y=>"0").values.must_equal(:id=>1, :b=>"1", :y=>false)
74
- end
75
-
76
- it "should not mark the object as modified" do
77
- @c.plugin :typecast_on_load, :b
78
- @c.load(:id=>1, :b=>"1", :y=>"0").modified?.must_equal false
79
- end
80
-
81
- it "should freeze typecast_on_load columns when freezing model class" do
82
- @c.plugin :typecast_on_load, :b
83
- @c.freeze
84
- @c.typecast_on_load_columns.frozen?.must_equal true
85
- end
86
- end
@@ -1,21 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "Sequel::Plugins::UnlimitedUpdate" do
4
- before do
5
- @db = Sequel.mock(:host=>'mysql', :numrows=>1)
6
- @db.extend_datasets{def quote_identifiers?; false end}
7
- @c = Class.new(Sequel::Model(@db[:test]))
8
- @c.columns :id, :name
9
- @o = @c.load(:id=>1, :name=>'a')
10
- @db.sqls
11
- end
12
-
13
- it "should remove limit from update dataset" do
14
- @o.save
15
- @db.sqls.must_equal ["UPDATE test SET name = 'a' WHERE (id = 1) LIMIT 1"]
16
-
17
- @c.plugin :unlimited_update
18
- @o.save
19
- @db.sqls.must_equal ["UPDATE test SET name = 'a' WHERE (id = 1)"]
20
- end
21
- end
@@ -1,83 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "Sequel::Plugins::UpdateOrCreate" do
4
- before do
5
- @db = Sequel.mock(:autoid=>proc{1}, :numrows=>1)
6
- @c = Class.new(Sequel::Model(@db[:test]))
7
- @c.plugin :update_or_create
8
- @c.columns :id, :a, :b
9
- @db.sqls
10
- end
11
-
12
- it ".update_or_create should update an existing record if one exists" do
13
- @db.fetch = [[{:id=>1, :a=>2, :b=>3}]]
14
- @c.update_or_create(:a=>2){|t| t.b = 4}.must_equal @c.load(:id=>1, :a=>2, :b=>4)
15
- @db.sqls.must_equal ["SELECT * FROM test WHERE (a = 2) LIMIT 1", "UPDATE test SET b = 4 WHERE (id = 1)"]
16
-
17
- @db.fetch = [[{:id=>1, :a=>2, :b=>3}]]
18
- @c.update_or_create({:a=>2}, :b=>4).must_equal @c.load(:id=>1, :a=>2, :b=>4)
19
- @db.sqls.must_equal ["SELECT * FROM test WHERE (a = 2) LIMIT 1", "UPDATE test SET b = 4 WHERE (id = 1)"]
20
-
21
- @db.fetch = [[{:id=>1, :a=>2, :b=>3}]]
22
- @c.update_or_create({:a=>2}, :a=>3){|t| t.b = 4}.must_equal @c.load(:id=>1, :a=>3, :b=>4)
23
- @db.sqls.must_equal ["SELECT * FROM test WHERE (a = 2) LIMIT 1",
24
- 'UPDATE test SET a = 3, b = 4 WHERE (id = 1)']
25
- end
26
-
27
- it ".update_or_create should create a record if an existing record does not exist" do
28
- @db.fetch = [[], [{:id=>1, :a=>1, :b=>4}]]
29
- @c.update_or_create(:a=>1){|t| t.b = 4}.must_equal @c.load(:id=>1, :a=>1, :b=>4)
30
- @db.sqls.must_equal ["SELECT * FROM test WHERE (a = 1) LIMIT 1",
31
- "INSERT INTO test (a, b) VALUES (1, 4)",
32
- "SELECT * FROM test WHERE (id = 1) LIMIT 1"]
33
-
34
- @db.fetch = [[], [{:id=>1, :a=>1, :b=>4}]]
35
- @c.update_or_create({:a=>1}, :b=>4).must_equal @c.load(:id=>1, :a=>1, :b=>4)
36
- @db.sqls.must_equal ["SELECT * FROM test WHERE (a = 1) LIMIT 1",
37
- "INSERT INTO test (a, b) VALUES (1, 4)",
38
- "SELECT * FROM test WHERE (id = 1) LIMIT 1"]
39
-
40
- @db.fetch = [[], [{:id=>1, :a=>3, :b=>4}]]
41
- @c.update_or_create({:a=>1}, :a=>3){|t| t.b = 4}.must_equal @c.load(:id=>1, :a=>3, :b=>4)
42
- @db.sqls.must_equal ["SELECT * FROM test WHERE (a = 1) LIMIT 1",
43
- "INSERT INTO test (a, b) VALUES (3, 4)",
44
- "SELECT * FROM test WHERE (id = 1) LIMIT 1"]
45
- end
46
-
47
- it ".update_or_create should return an existing record even if no changes necessary" do
48
- @db.fetch = [[{:id=>1, :a=>2, :b=>3}]]
49
- @c.update_or_create(:a=>2){|t| t.b = 3}.must_equal @c.load(:id=>1, :a=>2, :b=>3)
50
- @db.sqls.must_equal ["SELECT * FROM test WHERE (a = 2) LIMIT 1"]
51
- end
52
-
53
- it ".find_or_new should return an existing record" do
54
- @db.fetch = [[{:id=>1, :a=>2, :b=>3}]]
55
- @c.find_or_new(:a=>2){|t| t.b = 4}.must_equal @c.load(:id=>1, :a=>2, :b=>4)
56
- @db.sqls.must_equal ["SELECT * FROM test WHERE (a = 2) LIMIT 1"]
57
-
58
- @db.fetch = [[{:id=>1, :a=>2, :b=>3}]]
59
- @c.find_or_new({:a=>2}, :b=>4).must_equal @c.load(:id=>1, :a=>2, :b=>4)
60
- @db.sqls.must_equal ["SELECT * FROM test WHERE (a = 2) LIMIT 1"]
61
-
62
- @db.fetch = [[{:id=>1, :a=>2, :b=>3}]]
63
- @c.find_or_new({:a=>2}, :a=>3){|t| t.b = 4}.must_equal @c.load(:id=>1, :a=>3, :b=>4)
64
- @db.sqls.must_equal ["SELECT * FROM test WHERE (a = 2) LIMIT 1"]
65
- end
66
-
67
- it ".find_or_new should return a new record if no record exists" do
68
- o = @c.find_or_new(:a=>1){|t| t.b = 4}
69
- o.must_equal @c.load(:a=>1, :b=>4)
70
- o.new?.must_equal true
71
- @db.sqls.must_equal ["SELECT * FROM test WHERE (a = 1) LIMIT 1"]
72
-
73
- o = @c.find_or_new({:a=>1}, :b=>4)
74
- o.must_equal @c.load(:a=>1, :b=>4)
75
- o.new?.must_equal true
76
- @db.sqls.must_equal ["SELECT * FROM test WHERE (a = 1) LIMIT 1"]
77
-
78
- o = @c.find_or_new({:a=>1}, :a=>3){|t| t.b = 4}
79
- o.must_equal @c.load(:a=>3, :b=>4)
80
- o.new?.must_equal true
81
- @db.sqls.must_equal ["SELECT * FROM test WHERE (a = 1) LIMIT 1"]
82
- end
83
- end
@@ -1,105 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "Sequel::Plugins::UpdatePrimaryKey" do
4
- before do
5
- @c = Class.new(Sequel::Model(:a))
6
- @c.plugin :update_primary_key
7
- @c.columns :a, :b
8
- def @c.set_dataset(*)
9
- super
10
- set_primary_key :a
11
- end
12
- @c.set_primary_key :a
13
- @c.unrestrict_primary_key
14
- @ds = @c.dataset
15
- DB.reset
16
- end
17
-
18
- it "should handle regular updates" do
19
- @c.dataset = @c.dataset.with_fetch([[{:a=>1, :b=>3}], [{:a=>1, :b=>4}], [{:a=>1, :b=>4}], [{:a=>1, :b=>5}], [{:a=>1, :b=>5}], [{:a=>1, :b=>6}], [{:a=>1, :b=>6}]])
20
- @c.first.update(:b=>4)
21
- @c.all.must_equal [@c.load(:a=>1, :b=>4)]
22
- DB.sqls.must_equal ["SELECT * FROM a LIMIT 1", "UPDATE a SET b = 4 WHERE (a = 1)", "SELECT * FROM a"]
23
- @c.first.set(:b=>5).save
24
- @c.all.must_equal [@c.load(:a=>1, :b=>5)]
25
- DB.sqls.must_equal ["SELECT * FROM a LIMIT 1", "UPDATE a SET b = 5 WHERE (a = 1)", "SELECT * FROM a"]
26
- @c.first.set(:b=>6).save(:columns=>:b)
27
- @c.all.must_equal [@c.load(:a=>1, :b=>6)]
28
- DB.sqls.must_equal ["SELECT * FROM a LIMIT 1", "UPDATE a SET b = 6 WHERE (a = 1)", "SELECT * FROM a"]
29
- end
30
-
31
- it "should handle updating the primary key field with another field" do
32
- @c.dataset = @c.dataset.with_fetch([[{:a=>1, :b=>3}], [{:a=>2, :b=>4}]])
33
- @c.first.update(:a=>2, :b=>4)
34
- @c.all.must_equal [@c.load(:a=>2, :b=>4)]
35
- sqls = DB.sqls
36
- ["UPDATE a SET a = 2, b = 4 WHERE (a = 1)", "UPDATE a SET b = 4, a = 2 WHERE (a = 1)"].must_include(sqls.slice!(1))
37
- sqls.must_equal ["SELECT * FROM a LIMIT 1", "SELECT * FROM a"]
38
- end
39
-
40
- it "should handle updating just the primary key field when saving changes" do
41
- @c.dataset = @c.dataset.with_fetch([[{:a=>1, :b=>3}], [{:a=>2, :b=>3}], [{:a=>2, :b=>3}], [{:a=>3, :b=>3}]])
42
- @c.first.update(:a=>2)
43
- @c.all.must_equal [@c.load(:a=>2, :b=>3)]
44
- DB.sqls.must_equal ["SELECT * FROM a LIMIT 1", "UPDATE a SET a = 2 WHERE (a = 1)", "SELECT * FROM a"]
45
- @c.first.set(:a=>3).save(:columns=>:a)
46
- @c.all.must_equal [@c.load(:a=>3, :b=>3)]
47
- DB.sqls.must_equal ["SELECT * FROM a LIMIT 1", "UPDATE a SET a = 3 WHERE (a = 2)", "SELECT * FROM a"]
48
- end
49
-
50
- it "should handle saving after modifying the primary key field with another field" do
51
- @c.dataset = @c.dataset.with_fetch([[{:a=>1, :b=>3}], [{:a=>2, :b=>4}]])
52
- @c.first.set(:a=>2, :b=>4).save
53
- @c.all.must_equal [@c.load(:a=>2, :b=>4)]
54
- sqls = DB.sqls
55
- ["UPDATE a SET a = 2, b = 4 WHERE (a = 1)", "UPDATE a SET b = 4, a = 2 WHERE (a = 1)"].must_include(sqls.slice!(1))
56
- sqls.must_equal ["SELECT * FROM a LIMIT 1", "SELECT * FROM a"]
57
- end
58
-
59
- it "should handle saving after modifying just the primary key field" do
60
- @c.dataset = @c.dataset.with_fetch([[{:a=>1, :b=>3}], [{:a=>2, :b=>3}]])
61
- @c.first.set(:a=>2).save
62
- @c.all.must_equal [@c.load(:a=>2, :b=>3)]
63
- sqls = DB.sqls
64
- ["UPDATE a SET a = 2, b = 3 WHERE (a = 1)", "UPDATE a SET b = 3, a = 2 WHERE (a = 1)"].must_include(sqls.slice!(1))
65
- sqls.must_equal ["SELECT * FROM a LIMIT 1", "SELECT * FROM a"]
66
- end
67
-
68
- it "should handle saving after updating the primary key" do
69
- @c.dataset = @c.dataset.with_fetch([[{:a=>1, :b=>3}], [{:a=>2, :b=>5}]])
70
- @c.first.update(:a=>2).update(:b=>4).set(:b=>5).save
71
- @c.all.must_equal [@c.load(:a=>2, :b=>5)]
72
- DB.sqls.must_equal ["SELECT * FROM a LIMIT 1", "UPDATE a SET a = 2 WHERE (a = 1)", "UPDATE a SET b = 4 WHERE (a = 2)", "UPDATE a SET b = 5 WHERE (a = 2)", "SELECT * FROM a"]
73
- end
74
-
75
- it "should work correctly when using the prepared_statements plugin" do
76
- @c.plugin :prepared_statements
77
- @c.dataset = @c.dataset.with_fetch([[{:a=>1, :b=>3}], [{:a=>2, :b=>4}], [{:a=>3}]])
78
- o = @c.first
79
- o.update(:a=>2, :b=>4)
80
- @c.all.must_equal [@c.load(:a=>2, :b=>4)]
81
- sqls = DB.sqls
82
- ["UPDATE a SET a = 2, b = 4 WHERE (a = 1)", "UPDATE a SET b = 4, a = 2 WHERE (a = 1)"].must_include(sqls.slice!(1))
83
- sqls.must_equal ["SELECT * FROM a LIMIT 1", "SELECT * FROM a"]
84
-
85
- @c.create(:a=>3)
86
- DB.sqls.must_equal ["INSERT INTO a (a) VALUES (3)", "SELECT * FROM a WHERE a = 3"]
87
- end
88
-
89
- it "should clear the associations cache of non-many_to_one associations when changing the primary key" do
90
- @c.one_to_many :cs, :class=>@c
91
- @c.many_to_one :c, :class=>@c
92
- o = @c.new(:a=>1)
93
- o.associations[:cs] = @c.new
94
- o.associations[:c] = o2 = @c.new
95
- o.a = 2
96
- o.associations.must_equal(:c=>o2)
97
- end
98
-
99
- it "should handle frozen instances" do
100
- o = @c.new
101
- o.a = 1
102
- o.freeze
103
- o.pk_hash.must_equal(:a=>1)
104
- end
105
- end
@@ -1,59 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "Sequel::Plugins::UpdateRefresh" do
4
- before do
5
- @db = Sequel.mock(:numrows=>1, :fetch=>{:id=>1, :name=>'b'})
6
- @c = Class.new(Sequel::Model(@db[:test]))
7
- @ds = @c.dataset
8
- @c.columns :id, :name
9
- @c.plugin :update_refresh
10
- @db.sqls
11
- end
12
-
13
- it "should refresh the instance after updating" do
14
- o = @c.load(:id=>1, :name=>'a')
15
- o.save
16
- @db.sqls.must_equal ["UPDATE test SET name = 'a' WHERE (id = 1)", "SELECT * FROM test WHERE (id = 1) LIMIT 1"]
17
- o.name.must_equal 'b'
18
- end
19
-
20
- it "should refresh the instance after updating" do
21
- @db.extend_datasets{def supports_returning?(x) true end; def update_sql(*); sql = super; update_returning_sql(sql); sql end}
22
- @c.dataset = @db[:test]
23
- @db.sqls
24
- o = @c.load(:id=>1, :name=>'a')
25
- o.save
26
- @db.sqls.must_equal ["UPDATE test SET name = 'a' WHERE (id = 1) RETURNING *"]
27
- o.name.must_equal 'b'
28
- end
29
-
30
- it "should support specifying columns to return" do
31
- @db.extend_datasets{def supports_returning?(x) true end; def update_sql(*); sql = super; update_returning_sql(sql); sql end}
32
- @c.plugin :update_refresh, :columns => [ :a ]
33
- @c.dataset = @db[:test]
34
- @db.sqls
35
- o = @c.load(:id=>1, :name=>'a')
36
- o.save
37
- @db.sqls.must_equal ["UPDATE test SET name = 'a' WHERE (id = 1) RETURNING a"]
38
- o.name.must_equal 'b'
39
- end
40
-
41
- it "should refresh the instance after updating when returning specific columns" do
42
- @db.extend_datasets{def supports_returning?(x) true end; def update_sql(*); sql = super; update_returning_sql(sql); sql end}
43
- @c.plugin :insert_returning_select
44
- @c.dataset = @db[:test].select(:id, :name)
45
- @db.sqls
46
- o = @c.load(:id=>1, :name=>'a')
47
- o.instance_variable_set(:@this, o.this.returning(:id, :name))
48
- o.save
49
- @db.sqls.must_equal ["UPDATE test SET name = 'a' WHERE (id = 1) RETURNING id, name"]
50
- o.name.must_equal 'b'
51
- end
52
-
53
- it "should freeze update refresh columns when freezing model class" do
54
- @db.extend_datasets{def supports_returning?(x) true end; def update_sql(*); sql = super; update_returning_sql(sql); sql end}
55
- @c.plugin :update_refresh, :columns => [ :a ]
56
- @c.freeze
57
- @c.update_refresh_columns.frozen?.must_equal true
58
- end
59
- end
@@ -1,101 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "Sequel::Plugins::Uuid" do
4
- before do
5
- uuid = @uuid = '57308544-4e83-47b8-b87f-6f68b987f4f9'
6
- @alt_uuid = 'd5d1ec46-5e8e-4a7b-adc9-50e76b819e19'
7
- @c = Class.new(Sequel::Model(:t))
8
- @c.class_eval do
9
- columns :id, :uuid
10
- plugin :uuid
11
- def _save_refresh(*) end
12
- define_method(:create_uuid) do
13
- uuid
14
- end
15
- db.reset
16
- end
17
- end
18
-
19
- it "should handle validations on the uuid field for new objects" do
20
- @c.plugin :uuid, :force=>true
21
- o = @c.new
22
- def o.validate
23
- errors.add(model.uuid_field, 'not present') unless send(model.uuid_field)
24
- end
25
- o.valid?.must_equal true
26
- end
27
-
28
- it "should set uuid field when skipping validations" do
29
- @c.plugin :uuid
30
- @c.new.save(:validate=>false)
31
- @c.db.sqls.must_equal ["INSERT INTO t (uuid) VALUES ('#{@uuid}')"]
32
- end
33
-
34
- it "should set the uuid field on creation" do
35
- o = @c.create
36
- @c.db.sqls.must_equal ["INSERT INTO t (uuid) VALUES ('#{@uuid}')"]
37
- o.uuid.must_equal @uuid
38
- end
39
-
40
- it "should allow specifying the uuid field via the :field option" do
41
- c = Class.new(Sequel::Model(:t))
42
- c.class_eval do
43
- columns :id, :u
44
- plugin :uuid, :field=>:u
45
- def _save_refresh(*) end
46
- end
47
- o = c.create
48
- c.db.sqls.must_equal ["INSERT INTO t (u) VALUES ('#{o.u}')"]
49
- end
50
-
51
- it "should not raise an error if the model doesn't have the uuid column" do
52
- @c.columns :id, :x
53
- @c.send(:undef_method, :uuid)
54
- @c.create(:x=>2)
55
- @c.load(:id=>1, :x=>2).save
56
- @c.db.sqls.must_equal ["INSERT INTO t (x) VALUES (2)", "UPDATE t SET x = 2 WHERE (id = 1)"]
57
- end
58
-
59
- it "should not overwrite an existing uuid value" do
60
- o = @c.create(:uuid=>@alt_uuid)
61
- @c.db.sqls.must_equal ["INSERT INTO t (uuid) VALUES ('#{@alt_uuid}')"]
62
- o.uuid.must_equal @alt_uuid
63
- end
64
-
65
- it "should overwrite an existing uuid if the :force option is used" do
66
- @c.plugin :uuid, :force=>true
67
- o = @c.create(:uuid=>@alt_uuid)
68
- @c.db.sqls.must_equal ["INSERT INTO t (uuid) VALUES ('#{@uuid}')"]
69
- o.uuid.must_equal @uuid
70
- end
71
-
72
- it "should have uuid_field give the uuid field" do
73
- @c.uuid_field.must_equal :uuid
74
- @c.plugin :uuid, :field=>:u
75
- @c.uuid_field.must_equal :u
76
- end
77
-
78
- it "should have uuid_overwrite? give the whether to overwrite an existing uuid" do
79
- @c.uuid_overwrite?.must_equal false
80
- @c.plugin :uuid, :force=>true
81
- @c.uuid_overwrite?.must_equal true
82
- end
83
-
84
- it "should work with subclasses" do
85
- c = Class.new(@c)
86
- o = c.create
87
- o.uuid.must_equal @uuid
88
- c.db.sqls.must_equal ["INSERT INTO t (uuid) VALUES ('#{@uuid}')"]
89
- c.create(:uuid=>@alt_uuid).uuid.must_equal @alt_uuid
90
-
91
- c.class_eval do
92
- columns :id, :u
93
- plugin :uuid, :field=>:u, :force=>true
94
- end
95
- c2 = Class.new(c)
96
- c2.db.reset
97
- o = c2.create
98
- o.u.must_equal @uuid
99
- c2.db.sqls.must_equal ["INSERT INTO t (u) VALUES ('#{@uuid}')"]
100
- end
101
- end