sequel 5.8.0 → 5.38.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 (510) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +409 -1795
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +4 -4
  5. data/bin/sequel +4 -0
  6. data/doc/advanced_associations.rdoc +136 -18
  7. data/doc/association_basics.rdoc +10 -5
  8. data/doc/cheat_sheet.rdoc +1 -0
  9. data/doc/code_order.rdoc +12 -2
  10. data/doc/dataset_filtering.rdoc +17 -2
  11. data/doc/mass_assignment.rdoc +3 -3
  12. data/doc/model_dataset_method_design.rdoc +1 -1
  13. data/doc/model_plugins.rdoc +1 -1
  14. data/doc/opening_databases.rdoc +30 -8
  15. data/doc/postgresql.rdoc +107 -2
  16. data/doc/release_notes/5.10.0.txt +84 -0
  17. data/doc/release_notes/5.11.0.txt +83 -0
  18. data/doc/release_notes/5.12.0.txt +141 -0
  19. data/doc/release_notes/5.13.0.txt +27 -0
  20. data/doc/release_notes/5.14.0.txt +63 -0
  21. data/doc/release_notes/5.15.0.txt +39 -0
  22. data/doc/release_notes/5.16.0.txt +110 -0
  23. data/doc/release_notes/5.17.0.txt +31 -0
  24. data/doc/release_notes/5.18.0.txt +69 -0
  25. data/doc/release_notes/5.19.0.txt +28 -0
  26. data/doc/release_notes/5.20.0.txt +89 -0
  27. data/doc/release_notes/5.21.0.txt +87 -0
  28. data/doc/release_notes/5.22.0.txt +48 -0
  29. data/doc/release_notes/5.23.0.txt +56 -0
  30. data/doc/release_notes/5.24.0.txt +56 -0
  31. data/doc/release_notes/5.25.0.txt +32 -0
  32. data/doc/release_notes/5.26.0.txt +35 -0
  33. data/doc/release_notes/5.27.0.txt +21 -0
  34. data/doc/release_notes/5.28.0.txt +16 -0
  35. data/doc/release_notes/5.29.0.txt +22 -0
  36. data/doc/release_notes/5.30.0.txt +20 -0
  37. data/doc/release_notes/5.31.0.txt +148 -0
  38. data/doc/release_notes/5.32.0.txt +46 -0
  39. data/doc/release_notes/5.33.0.txt +24 -0
  40. data/doc/release_notes/5.34.0.txt +40 -0
  41. data/doc/release_notes/5.35.0.txt +56 -0
  42. data/doc/release_notes/5.36.0.txt +60 -0
  43. data/doc/release_notes/5.37.0.txt +30 -0
  44. data/doc/release_notes/5.38.0.txt +28 -0
  45. data/doc/release_notes/5.9.0.txt +99 -0
  46. data/doc/security.rdoc +10 -0
  47. data/doc/sharding.rdoc +42 -28
  48. data/doc/sql.rdoc +12 -0
  49. data/doc/testing.rdoc +24 -17
  50. data/doc/transactions.rdoc +78 -0
  51. data/doc/validations.rdoc +2 -2
  52. data/lib/sequel/adapters/ado.rb +26 -18
  53. data/lib/sequel/adapters/ado/access.rb +2 -2
  54. data/lib/sequel/adapters/ado/mssql.rb +5 -8
  55. data/lib/sequel/adapters/amalgalite.rb +1 -1
  56. data/lib/sequel/adapters/jdbc.rb +71 -27
  57. data/lib/sequel/adapters/jdbc/mysql.rb +6 -6
  58. data/lib/sequel/adapters/jdbc/oracle.rb +7 -6
  59. data/lib/sequel/adapters/jdbc/postgresql.rb +17 -28
  60. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +5 -6
  61. data/lib/sequel/adapters/jdbc/sqlite.rb +33 -2
  62. data/lib/sequel/adapters/jdbc/sqlserver.rb +4 -3
  63. data/lib/sequel/adapters/jdbc/transactions.rb +14 -28
  64. data/lib/sequel/adapters/mysql.rb +14 -15
  65. data/lib/sequel/adapters/mysql2.rb +5 -3
  66. data/lib/sequel/adapters/odbc.rb +4 -6
  67. data/lib/sequel/adapters/oracle.rb +7 -7
  68. data/lib/sequel/adapters/postgres.rb +52 -16
  69. data/lib/sequel/adapters/shared/access.rb +16 -12
  70. data/lib/sequel/adapters/shared/db2.rb +5 -0
  71. data/lib/sequel/adapters/shared/mssql.rb +41 -18
  72. data/lib/sequel/adapters/shared/mysql.rb +66 -19
  73. data/lib/sequel/adapters/shared/oracle.rb +29 -23
  74. data/lib/sequel/adapters/shared/postgres.rb +341 -95
  75. data/lib/sequel/adapters/shared/sqlanywhere.rb +23 -10
  76. data/lib/sequel/adapters/shared/sqlite.rb +174 -21
  77. data/lib/sequel/adapters/sqlanywhere.rb +33 -17
  78. data/lib/sequel/adapters/sqlite.rb +78 -68
  79. data/lib/sequel/adapters/tinytds.rb +14 -6
  80. data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +2 -5
  81. data/lib/sequel/adapters/utils/mysql_mysql2.rb +5 -1
  82. data/lib/sequel/connection_pool.rb +2 -6
  83. data/lib/sequel/connection_pool/sharded_single.rb +7 -4
  84. data/lib/sequel/connection_pool/sharded_threaded.rb +32 -21
  85. data/lib/sequel/connection_pool/single.rb +1 -1
  86. data/lib/sequel/connection_pool/threaded.rb +26 -11
  87. data/lib/sequel/core.rb +327 -319
  88. data/lib/sequel/database/connecting.rb +7 -8
  89. data/lib/sequel/database/logging.rb +7 -1
  90. data/lib/sequel/database/misc.rb +68 -34
  91. data/lib/sequel/database/query.rb +6 -4
  92. data/lib/sequel/database/schema_generator.rb +31 -11
  93. data/lib/sequel/database/schema_methods.rb +32 -22
  94. data/lib/sequel/database/transactions.rb +129 -25
  95. data/lib/sequel/dataset.rb +4 -2
  96. data/lib/sequel/dataset/actions.rb +34 -23
  97. data/lib/sequel/dataset/features.rb +34 -0
  98. data/lib/sequel/dataset/graph.rb +27 -11
  99. data/lib/sequel/dataset/misc.rb +17 -3
  100. data/lib/sequel/dataset/placeholder_literalizer.rb +50 -21
  101. data/lib/sequel/dataset/prepared_statements.rb +96 -26
  102. data/lib/sequel/dataset/query.rb +43 -8
  103. data/lib/sequel/dataset/sql.rb +189 -41
  104. data/lib/sequel/deprecated.rb +3 -1
  105. data/lib/sequel/exceptions.rb +2 -0
  106. data/lib/sequel/extensions/_pretty_table.rb +1 -2
  107. data/lib/sequel/extensions/any_not_empty.rb +45 -0
  108. data/lib/sequel/extensions/caller_logging.rb +79 -0
  109. data/lib/sequel/extensions/columns_introspection.rb +1 -2
  110. data/lib/sequel/extensions/connection_expiration.rb +6 -6
  111. data/lib/sequel/extensions/connection_validator.rb +7 -6
  112. data/lib/sequel/extensions/constant_sql_override.rb +65 -0
  113. data/lib/sequel/extensions/constraint_validations.rb +53 -28
  114. data/lib/sequel/extensions/core_refinements.rb +2 -0
  115. data/lib/sequel/extensions/duplicate_columns_handler.rb +2 -0
  116. data/lib/sequel/extensions/escaped_like.rb +100 -0
  117. data/lib/sequel/extensions/eval_inspect.rb +3 -1
  118. data/lib/sequel/extensions/exclude_or_null.rb +68 -0
  119. data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
  120. data/lib/sequel/extensions/index_caching.rb +9 -7
  121. data/lib/sequel/extensions/integer64.rb +3 -1
  122. data/lib/sequel/extensions/looser_typecasting.rb +3 -3
  123. data/lib/sequel/extensions/migration.rb +13 -6
  124. data/lib/sequel/extensions/named_timezones.rb +84 -23
  125. data/lib/sequel/extensions/pg_array.rb +87 -79
  126. data/lib/sequel/extensions/pg_array_ops.rb +14 -6
  127. data/lib/sequel/extensions/pg_enum.rb +34 -18
  128. data/lib/sequel/extensions/pg_extended_date_support.rb +34 -14
  129. data/lib/sequel/extensions/pg_hstore.rb +6 -0
  130. data/lib/sequel/extensions/pg_hstore_ops.rb +2 -0
  131. data/lib/sequel/extensions/pg_inet.rb +15 -5
  132. data/lib/sequel/extensions/pg_interval.rb +2 -0
  133. data/lib/sequel/extensions/pg_json.rb +387 -123
  134. data/lib/sequel/extensions/pg_json_ops.rb +168 -0
  135. data/lib/sequel/extensions/pg_range.rb +20 -10
  136. data/lib/sequel/extensions/pg_range_ops.rb +2 -0
  137. data/lib/sequel/extensions/pg_row.rb +3 -2
  138. data/lib/sequel/extensions/pg_row_ops.rb +24 -0
  139. data/lib/sequel/extensions/pg_static_cache_updater.rb +2 -2
  140. data/lib/sequel/extensions/pg_timestamptz.rb +2 -0
  141. data/lib/sequel/extensions/query.rb +1 -0
  142. data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
  143. data/lib/sequel/extensions/s.rb +2 -0
  144. data/lib/sequel/extensions/schema_dumper.rb +13 -7
  145. data/lib/sequel/extensions/sequel_4_dataset_methods.rb +4 -2
  146. data/lib/sequel/extensions/server_block.rb +18 -7
  147. data/lib/sequel/extensions/sql_comments.rb +2 -2
  148. data/lib/sequel/extensions/symbol_aref_refinement.rb +2 -0
  149. data/lib/sequel/extensions/symbol_as_refinement.rb +2 -0
  150. data/lib/sequel/extensions/to_dot.rb +9 -3
  151. data/lib/sequel/model.rb +3 -1
  152. data/lib/sequel/model/associations.rb +403 -69
  153. data/lib/sequel/model/base.rb +170 -90
  154. data/lib/sequel/model/plugins.rb +105 -0
  155. data/lib/sequel/plugins/after_initialize.rb +1 -1
  156. data/lib/sequel/plugins/association_dependencies.rb +3 -3
  157. data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
  158. data/lib/sequel/plugins/association_multi_add_remove.rb +85 -0
  159. data/lib/sequel/plugins/association_pks.rb +74 -22
  160. data/lib/sequel/plugins/association_proxies.rb +6 -2
  161. data/lib/sequel/plugins/auto_validations.rb +36 -17
  162. data/lib/sequel/plugins/blacklist_security.rb +1 -2
  163. data/lib/sequel/plugins/boolean_subsets.rb +4 -1
  164. data/lib/sequel/plugins/caching.rb +3 -0
  165. data/lib/sequel/plugins/class_table_inheritance.rb +62 -34
  166. data/lib/sequel/plugins/composition.rb +13 -9
  167. data/lib/sequel/plugins/csv_serializer.rb +28 -9
  168. data/lib/sequel/plugins/defaults_setter.rb +2 -2
  169. data/lib/sequel/plugins/dirty.rb +60 -22
  170. data/lib/sequel/plugins/eager_graph_eager.rb +139 -0
  171. data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
  172. data/lib/sequel/plugins/finder.rb +2 -2
  173. data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
  174. data/lib/sequel/plugins/hook_class_methods.rb +17 -5
  175. data/lib/sequel/plugins/insert_conflict.rb +72 -0
  176. data/lib/sequel/plugins/instance_specific_default.rb +113 -0
  177. data/lib/sequel/plugins/inverted_subsets.rb +2 -2
  178. data/lib/sequel/plugins/json_serializer.rb +21 -14
  179. data/lib/sequel/plugins/lazy_attributes.rb +1 -1
  180. data/lib/sequel/plugins/list.rb +22 -10
  181. data/lib/sequel/plugins/many_through_many.rb +1 -1
  182. data/lib/sequel/plugins/nested_attributes.rb +27 -5
  183. data/lib/sequel/plugins/pg_array_associations.rb +12 -9
  184. data/lib/sequel/plugins/pg_auto_constraint_validations.rb +149 -61
  185. data/lib/sequel/plugins/prepared_statements.rb +6 -12
  186. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -3
  187. data/lib/sequel/plugins/rcte_tree.rb +20 -22
  188. data/lib/sequel/plugins/sharding.rb +13 -7
  189. data/lib/sequel/plugins/single_table_inheritance.rb +20 -15
  190. data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
  191. data/lib/sequel/plugins/static_cache.rb +36 -17
  192. data/lib/sequel/plugins/static_cache_cache.rb +53 -0
  193. data/lib/sequel/plugins/string_stripper.rb +1 -1
  194. data/lib/sequel/plugins/subclasses.rb +2 -0
  195. data/lib/sequel/plugins/subset_conditions.rb +2 -2
  196. data/lib/sequel/plugins/tactical_eager_loading.rb +73 -2
  197. data/lib/sequel/plugins/throw_failures.rb +110 -0
  198. data/lib/sequel/plugins/tree.rb +49 -31
  199. data/lib/sequel/plugins/typecast_on_load.rb +3 -2
  200. data/lib/sequel/plugins/validation_class_methods.rb +11 -5
  201. data/lib/sequel/plugins/validation_helpers.rb +2 -2
  202. data/lib/sequel/sql.rb +120 -30
  203. data/lib/sequel/timezones.rb +55 -14
  204. data/lib/sequel/version.rb +6 -1
  205. metadata +101 -361
  206. data/Rakefile +0 -151
  207. data/doc/release_notes/4.0.0.txt +0 -262
  208. data/doc/release_notes/4.1.0.txt +0 -85
  209. data/doc/release_notes/4.10.0.txt +0 -226
  210. data/doc/release_notes/4.11.0.txt +0 -147
  211. data/doc/release_notes/4.12.0.txt +0 -105
  212. data/doc/release_notes/4.13.0.txt +0 -169
  213. data/doc/release_notes/4.14.0.txt +0 -68
  214. data/doc/release_notes/4.15.0.txt +0 -56
  215. data/doc/release_notes/4.16.0.txt +0 -36
  216. data/doc/release_notes/4.17.0.txt +0 -38
  217. data/doc/release_notes/4.18.0.txt +0 -36
  218. data/doc/release_notes/4.19.0.txt +0 -45
  219. data/doc/release_notes/4.2.0.txt +0 -129
  220. data/doc/release_notes/4.20.0.txt +0 -79
  221. data/doc/release_notes/4.21.0.txt +0 -94
  222. data/doc/release_notes/4.22.0.txt +0 -72
  223. data/doc/release_notes/4.23.0.txt +0 -65
  224. data/doc/release_notes/4.24.0.txt +0 -99
  225. data/doc/release_notes/4.25.0.txt +0 -181
  226. data/doc/release_notes/4.26.0.txt +0 -44
  227. data/doc/release_notes/4.27.0.txt +0 -78
  228. data/doc/release_notes/4.28.0.txt +0 -57
  229. data/doc/release_notes/4.29.0.txt +0 -41
  230. data/doc/release_notes/4.3.0.txt +0 -40
  231. data/doc/release_notes/4.30.0.txt +0 -37
  232. data/doc/release_notes/4.31.0.txt +0 -57
  233. data/doc/release_notes/4.32.0.txt +0 -132
  234. data/doc/release_notes/4.33.0.txt +0 -88
  235. data/doc/release_notes/4.34.0.txt +0 -86
  236. data/doc/release_notes/4.35.0.txt +0 -130
  237. data/doc/release_notes/4.36.0.txt +0 -116
  238. data/doc/release_notes/4.37.0.txt +0 -50
  239. data/doc/release_notes/4.38.0.txt +0 -67
  240. data/doc/release_notes/4.39.0.txt +0 -127
  241. data/doc/release_notes/4.4.0.txt +0 -92
  242. data/doc/release_notes/4.40.0.txt +0 -179
  243. data/doc/release_notes/4.41.0.txt +0 -77
  244. data/doc/release_notes/4.42.0.txt +0 -221
  245. data/doc/release_notes/4.43.0.txt +0 -87
  246. data/doc/release_notes/4.44.0.txt +0 -125
  247. data/doc/release_notes/4.45.0.txt +0 -370
  248. data/doc/release_notes/4.46.0.txt +0 -404
  249. data/doc/release_notes/4.47.0.txt +0 -56
  250. data/doc/release_notes/4.48.0.txt +0 -293
  251. data/doc/release_notes/4.49.0.txt +0 -222
  252. data/doc/release_notes/4.5.0.txt +0 -34
  253. data/doc/release_notes/4.6.0.txt +0 -30
  254. data/doc/release_notes/4.7.0.txt +0 -103
  255. data/doc/release_notes/4.8.0.txt +0 -175
  256. data/doc/release_notes/4.9.0.txt +0 -190
  257. data/spec/adapter_spec.rb +0 -4
  258. data/spec/adapters/db2_spec.rb +0 -170
  259. data/spec/adapters/mssql_spec.rb +0 -804
  260. data/spec/adapters/mysql_spec.rb +0 -1041
  261. data/spec/adapters/oracle_spec.rb +0 -327
  262. data/spec/adapters/postgres_spec.rb +0 -4000
  263. data/spec/adapters/spec_helper.rb +0 -43
  264. data/spec/adapters/sqlanywhere_spec.rb +0 -97
  265. data/spec/adapters/sqlite_spec.rb +0 -600
  266. data/spec/bin_spec.rb +0 -269
  267. data/spec/core/connection_pool_spec.rb +0 -1228
  268. data/spec/core/database_spec.rb +0 -2673
  269. data/spec/core/dataset_spec.rb +0 -5419
  270. data/spec/core/deprecated_spec.rb +0 -70
  271. data/spec/core/expression_filters_spec.rb +0 -1344
  272. data/spec/core/mock_adapter_spec.rb +0 -722
  273. data/spec/core/object_graph_spec.rb +0 -306
  274. data/spec/core/placeholder_literalizer_spec.rb +0 -166
  275. data/spec/core/schema_generator_spec.rb +0 -214
  276. data/spec/core/schema_spec.rb +0 -1820
  277. data/spec/core/spec_helper.rb +0 -23
  278. data/spec/core/version_spec.rb +0 -7
  279. data/spec/core_extensions_spec.rb +0 -762
  280. data/spec/core_model_spec.rb +0 -2
  281. data/spec/core_spec.rb +0 -1
  282. data/spec/deprecation_helper.rb +0 -30
  283. data/spec/extensions/accessed_columns_spec.rb +0 -51
  284. data/spec/extensions/active_model_spec.rb +0 -99
  285. data/spec/extensions/after_initialize_spec.rb +0 -24
  286. data/spec/extensions/arbitrary_servers_spec.rb +0 -109
  287. data/spec/extensions/association_dependencies_spec.rb +0 -125
  288. data/spec/extensions/association_pks_spec.rb +0 -423
  289. data/spec/extensions/association_proxies_spec.rb +0 -100
  290. data/spec/extensions/auto_literal_strings_spec.rb +0 -205
  291. data/spec/extensions/auto_validations_spec.rb +0 -202
  292. data/spec/extensions/blacklist_security_spec.rb +0 -95
  293. data/spec/extensions/blank_spec.rb +0 -69
  294. data/spec/extensions/boolean_readers_spec.rb +0 -93
  295. data/spec/extensions/boolean_subsets_spec.rb +0 -47
  296. data/spec/extensions/caching_spec.rb +0 -273
  297. data/spec/extensions/class_table_inheritance_spec.rb +0 -568
  298. data/spec/extensions/column_conflicts_spec.rb +0 -75
  299. data/spec/extensions/column_select_spec.rb +0 -129
  300. data/spec/extensions/columns_introspection_spec.rb +0 -90
  301. data/spec/extensions/columns_updated_spec.rb +0 -35
  302. data/spec/extensions/composition_spec.rb +0 -248
  303. data/spec/extensions/connection_expiration_spec.rb +0 -133
  304. data/spec/extensions/connection_validator_spec.rb +0 -127
  305. data/spec/extensions/constraint_validations_plugin_spec.rb +0 -300
  306. data/spec/extensions/constraint_validations_spec.rb +0 -395
  307. data/spec/extensions/core_refinements_spec.rb +0 -528
  308. data/spec/extensions/csv_serializer_spec.rb +0 -183
  309. data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
  310. data/spec/extensions/dataset_associations_spec.rb +0 -365
  311. data/spec/extensions/dataset_source_alias_spec.rb +0 -51
  312. data/spec/extensions/date_arithmetic_spec.rb +0 -181
  313. data/spec/extensions/datetime_parse_to_time_spec.rb +0 -169
  314. data/spec/extensions/def_dataset_method_spec.rb +0 -100
  315. data/spec/extensions/defaults_setter_spec.rb +0 -141
  316. data/spec/extensions/delay_add_association_spec.rb +0 -73
  317. data/spec/extensions/dirty_spec.rb +0 -189
  318. data/spec/extensions/duplicate_columns_handler_spec.rb +0 -104
  319. data/spec/extensions/eager_each_spec.rb +0 -62
  320. data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
  321. data/spec/extensions/error_splitter_spec.rb +0 -18
  322. data/spec/extensions/error_sql_spec.rb +0 -20
  323. data/spec/extensions/eval_inspect_spec.rb +0 -74
  324. data/spec/extensions/finder_spec.rb +0 -260
  325. data/spec/extensions/force_encoding_spec.rb +0 -126
  326. data/spec/extensions/freeze_datasets_spec.rb +0 -31
  327. data/spec/extensions/graph_each_spec.rb +0 -113
  328. data/spec/extensions/hook_class_methods_spec.rb +0 -380
  329. data/spec/extensions/identifier_mangling_spec.rb +0 -201
  330. data/spec/extensions/implicit_subquery_spec.rb +0 -58
  331. data/spec/extensions/index_caching_spec.rb +0 -66
  332. data/spec/extensions/inflector_spec.rb +0 -183
  333. data/spec/extensions/input_transformer_spec.rb +0 -69
  334. data/spec/extensions/insert_returning_select_spec.rb +0 -72
  335. data/spec/extensions/instance_filters_spec.rb +0 -79
  336. data/spec/extensions/instance_hooks_spec.rb +0 -246
  337. data/spec/extensions/integer64_spec.rb +0 -22
  338. data/spec/extensions/inverted_subsets_spec.rb +0 -33
  339. data/spec/extensions/json_serializer_spec.rb +0 -336
  340. data/spec/extensions/lazy_attributes_spec.rb +0 -183
  341. data/spec/extensions/list_spec.rb +0 -275
  342. data/spec/extensions/looser_typecasting_spec.rb +0 -43
  343. data/spec/extensions/many_through_many_spec.rb +0 -2177
  344. data/spec/extensions/migration_spec.rb +0 -840
  345. data/spec/extensions/modification_detection_spec.rb +0 -93
  346. data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -92
  347. data/spec/extensions/named_timezones_spec.rb +0 -109
  348. data/spec/extensions/nested_attributes_spec.rb +0 -703
  349. data/spec/extensions/null_dataset_spec.rb +0 -85
  350. data/spec/extensions/optimistic_locking_spec.rb +0 -127
  351. data/spec/extensions/pagination_spec.rb +0 -116
  352. data/spec/extensions/pg_array_associations_spec.rb +0 -802
  353. data/spec/extensions/pg_array_ops_spec.rb +0 -144
  354. data/spec/extensions/pg_array_spec.rb +0 -398
  355. data/spec/extensions/pg_auto_constraint_validations_spec.rb +0 -165
  356. data/spec/extensions/pg_enum_spec.rb +0 -113
  357. data/spec/extensions/pg_extended_date_support_spec.rb +0 -126
  358. data/spec/extensions/pg_hstore_ops_spec.rb +0 -238
  359. data/spec/extensions/pg_hstore_spec.rb +0 -219
  360. data/spec/extensions/pg_inet_ops_spec.rb +0 -102
  361. data/spec/extensions/pg_inet_spec.rb +0 -72
  362. data/spec/extensions/pg_interval_spec.rb +0 -103
  363. data/spec/extensions/pg_json_ops_spec.rb +0 -289
  364. data/spec/extensions/pg_json_spec.rb +0 -262
  365. data/spec/extensions/pg_loose_count_spec.rb +0 -23
  366. data/spec/extensions/pg_range_ops_spec.rb +0 -60
  367. data/spec/extensions/pg_range_spec.rb +0 -487
  368. data/spec/extensions/pg_row_ops_spec.rb +0 -61
  369. data/spec/extensions/pg_row_plugin_spec.rb +0 -60
  370. data/spec/extensions/pg_row_spec.rb +0 -363
  371. data/spec/extensions/pg_static_cache_updater_spec.rb +0 -93
  372. data/spec/extensions/pg_timestamptz_spec.rb +0 -17
  373. data/spec/extensions/prepared_statements_safe_spec.rb +0 -66
  374. data/spec/extensions/prepared_statements_spec.rb +0 -182
  375. data/spec/extensions/pretty_table_spec.rb +0 -123
  376. data/spec/extensions/query_spec.rb +0 -94
  377. data/spec/extensions/rcte_tree_spec.rb +0 -381
  378. data/spec/extensions/round_timestamps_spec.rb +0 -39
  379. data/spec/extensions/s_spec.rb +0 -60
  380. data/spec/extensions/schema_caching_spec.rb +0 -64
  381. data/spec/extensions/schema_dumper_spec.rb +0 -868
  382. data/spec/extensions/select_remove_spec.rb +0 -38
  383. data/spec/extensions/sequel_4_dataset_methods_spec.rb +0 -121
  384. data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
  385. data/spec/extensions/serialization_spec.rb +0 -365
  386. data/spec/extensions/server_block_spec.rb +0 -97
  387. data/spec/extensions/server_logging_spec.rb +0 -45
  388. data/spec/extensions/sharding_spec.rb +0 -189
  389. data/spec/extensions/shared_caching_spec.rb +0 -151
  390. data/spec/extensions/single_table_inheritance_spec.rb +0 -347
  391. data/spec/extensions/singular_table_names_spec.rb +0 -22
  392. data/spec/extensions/skip_create_refresh_spec.rb +0 -18
  393. data/spec/extensions/spec_helper.rb +0 -61
  394. data/spec/extensions/split_array_nil_spec.rb +0 -24
  395. data/spec/extensions/split_values_spec.rb +0 -57
  396. data/spec/extensions/sql_comments_spec.rb +0 -33
  397. data/spec/extensions/sql_expr_spec.rb +0 -59
  398. data/spec/extensions/static_cache_spec.rb +0 -410
  399. data/spec/extensions/string_agg_spec.rb +0 -90
  400. data/spec/extensions/string_date_time_spec.rb +0 -95
  401. data/spec/extensions/string_stripper_spec.rb +0 -68
  402. data/spec/extensions/subclasses_spec.rb +0 -79
  403. data/spec/extensions/subset_conditions_spec.rb +0 -38
  404. data/spec/extensions/symbol_aref_refinement_spec.rb +0 -28
  405. data/spec/extensions/symbol_as_refinement_spec.rb +0 -21
  406. data/spec/extensions/synchronize_sql_spec.rb +0 -124
  407. data/spec/extensions/table_select_spec.rb +0 -83
  408. data/spec/extensions/tactical_eager_loading_spec.rb +0 -141
  409. data/spec/extensions/thread_local_timezones_spec.rb +0 -67
  410. data/spec/extensions/timestamps_spec.rb +0 -209
  411. data/spec/extensions/to_dot_spec.rb +0 -153
  412. data/spec/extensions/touch_spec.rb +0 -226
  413. data/spec/extensions/tree_spec.rb +0 -284
  414. data/spec/extensions/typecast_on_load_spec.rb +0 -86
  415. data/spec/extensions/unlimited_update_spec.rb +0 -21
  416. data/spec/extensions/update_or_create_spec.rb +0 -83
  417. data/spec/extensions/update_primary_key_spec.rb +0 -105
  418. data/spec/extensions/update_refresh_spec.rb +0 -59
  419. data/spec/extensions/uuid_spec.rb +0 -101
  420. data/spec/extensions/validate_associated_spec.rb +0 -52
  421. data/spec/extensions/validation_class_methods_spec.rb +0 -1040
  422. data/spec/extensions/validation_contexts_spec.rb +0 -31
  423. data/spec/extensions/validation_helpers_spec.rb +0 -525
  424. data/spec/extensions/whitelist_security_spec.rb +0 -157
  425. data/spec/extensions/xml_serializer_spec.rb +0 -213
  426. data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
  427. data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
  428. data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  429. data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  430. data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
  431. data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
  432. data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
  433. data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
  434. data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
  435. data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
  436. data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
  437. data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
  438. data/spec/files/double_migration/001_create_sessions.rb +0 -9
  439. data/spec/files/double_migration/002_create_nodes.rb +0 -19
  440. data/spec/files/double_migration/003_3_create_users.rb +0 -4
  441. data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
  442. data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
  443. data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  444. data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
  445. data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
  446. data/spec/files/empty_migration/001_create_sessions.rb +0 -9
  447. data/spec/files/empty_migration/002_create_nodes.rb +0 -0
  448. data/spec/files/empty_migration/003_3_create_users.rb +0 -4
  449. data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
  450. data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
  451. data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
  452. data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  453. data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
  454. data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  455. data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
  456. data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  457. data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
  458. data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
  459. data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  460. data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  461. data/spec/files/reversible_migrations/001_reversible.rb +0 -5
  462. data/spec/files/reversible_migrations/002_reversible.rb +0 -5
  463. data/spec/files/reversible_migrations/003_reversible.rb +0 -5
  464. data/spec/files/reversible_migrations/004_reversible.rb +0 -5
  465. data/spec/files/reversible_migrations/005_reversible.rb +0 -10
  466. data/spec/files/reversible_migrations/006_reversible.rb +0 -10
  467. data/spec/files/reversible_migrations/007_reversible.rb +0 -10
  468. data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
  469. data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
  470. data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
  471. data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
  472. data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
  473. data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
  474. data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
  475. data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
  476. data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
  477. data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
  478. data/spec/guards_helper.rb +0 -58
  479. data/spec/integration/associations_test.rb +0 -2513
  480. data/spec/integration/database_test.rb +0 -113
  481. data/spec/integration/dataset_test.rb +0 -1880
  482. data/spec/integration/eager_loader_test.rb +0 -687
  483. data/spec/integration/migrator_test.rb +0 -262
  484. data/spec/integration/model_test.rb +0 -203
  485. data/spec/integration/plugin_test.rb +0 -2302
  486. data/spec/integration/prepared_statement_test.rb +0 -398
  487. data/spec/integration/schema_test.rb +0 -869
  488. data/spec/integration/spec_helper.rb +0 -64
  489. data/spec/integration/timezone_test.rb +0 -86
  490. data/spec/integration/transaction_test.rb +0 -354
  491. data/spec/integration/type_test.rb +0 -127
  492. data/spec/model/association_reflection_spec.rb +0 -803
  493. data/spec/model/associations_spec.rb +0 -4538
  494. data/spec/model/base_spec.rb +0 -817
  495. data/spec/model/class_dataset_methods_spec.rb +0 -146
  496. data/spec/model/dataset_methods_spec.rb +0 -198
  497. data/spec/model/eager_loading_spec.rb +0 -2262
  498. data/spec/model/hooks_spec.rb +0 -370
  499. data/spec/model/inflector_spec.rb +0 -26
  500. data/spec/model/model_spec.rb +0 -953
  501. data/spec/model/plugins_spec.rb +0 -318
  502. data/spec/model/record_spec.rb +0 -2107
  503. data/spec/model/spec_helper.rb +0 -45
  504. data/spec/model/validations_spec.rb +0 -193
  505. data/spec/model_no_assoc_spec.rb +0 -1
  506. data/spec/model_spec.rb +0 -1
  507. data/spec/plugin_spec.rb +0 -1
  508. data/spec/sequel_coverage.rb +0 -15
  509. data/spec/sequel_warning.rb +0 -4
  510. data/spec/spec_config.rb +0 -12
@@ -1,69 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "Sequel::Plugins::InputTransformer" do
4
- before do
5
- @c = Class.new(Sequel::Model)
6
- @c.columns :name, :b
7
- @c.plugin(:input_transformer, :reverser){|v| v.is_a?(String) ? v.reverse : v}
8
- @o = @c.new
9
- end
10
-
11
- it "should apply transformation to input" do
12
- @o.name = ' name '
13
- @o.name.must_equal ' eman '
14
- @o.name = [1, 2, 3]
15
- @o.name.must_equal [1, 2, 3]
16
- end
17
-
18
- it "should have working .input_transformer_order" do
19
- @c.input_transformer_order.must_equal [:reverser]
20
- @c.plugin(:input_transformer, :reverser2){|v| v.is_a?(String) ? v.reverse : v}
21
- @c.input_transformer_order.must_equal [:reverser2, :reverser]
22
- end
23
-
24
- it "should not apply any transformers by default" do
25
- c = Class.new(Sequel::Model)
26
- c.columns :name, :b
27
- c.plugin :input_transformer
28
- c.new(:name => ' name ').name.must_equal ' name '
29
- end
30
-
31
- it "should allow skipping of columns using .skip_input_transformer" do
32
- @c.skip_input_transformer :reverser, :name
33
- v = ' name '
34
- @o.name = v
35
- @o.name.must_be_same_as(v)
36
- end
37
-
38
- it "should work correctly in subclasses" do
39
- o = Class.new(@c).new
40
- o.name = ' name '
41
- o.name.must_equal ' eman '
42
- end
43
-
44
- it "should raise an error if adding input filter without name" do
45
- proc{@c.add_input_transformer(nil){}}.must_raise(Sequel::Error)
46
- proc{@c.plugin(:input_transformer){}}.must_raise(Sequel::Error)
47
- end
48
-
49
- it "should raise an error if adding input filter without block" do
50
- proc{@c.add_input_transformer(:foo)}.must_raise(Sequel::Error)
51
- proc{@c.plugin(:input_transformer, :foo)}.must_raise(Sequel::Error)
52
- end
53
-
54
- it "should apply multiple input transformers in reverse order of their call" do
55
- @c.add_input_transformer(:add_bar){|v| v << 'bar'}
56
- @c.add_input_transformer(:add_foo){|v| v << 'foo'}
57
- @o.name = ' name '.dup
58
- @o.name.must_equal 'raboof eman '
59
- end
60
-
61
- it "should freeze input transformers when freezing model class" do
62
- @c.skip_input_transformer :reverser, :name
63
- @c.freeze
64
- @c.input_transformers.frozen?.must_equal true
65
- skip = @c.instance_variable_get(:@skip_input_transformer_columns)
66
- skip.frozen?.must_equal true
67
- skip.values.all?(&:frozen?).must_equal true
68
- end
69
- end
@@ -1,72 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "Sequel::Plugins::InsertReturningSelect" do
4
- before do
5
- @db = Sequel.mock(:fetch=>{:id=>1, :x=>2}, :autoid=>1)
6
- @db.extend_datasets do
7
- def supports_returning?(_) true end
8
- def insert_select(*v) with_sql_first("#{insert_sql(*v)} RETURNING #{opts[:returning].map{|x| literal(x)}.join(', ')}") end
9
- end
10
- @Album = Class.new(Sequel::Model(@db[:albums].select(:id, :x)))
11
- @Album.columns :id, :x
12
- @db.sqls
13
- end
14
-
15
- it "should work if loaded into a model without a dataset that also uses the lazy_attributes or dataset associations plugins" do
16
- c = Sequel::Model(@db)
17
- c.plugin :insert_returning_select
18
- c.columns :id, :x
19
- c.plugin :lazy_attributes
20
- c.plugin :dataset_associations
21
-
22
- c.set_dataset @db[:albums].select(:id, :x)
23
- c.plugin :lazy_attributes, :x
24
- c.many_to_one :c, :key=>:id, :class=>c
25
- @db.sqls
26
-
27
- c.dataset.sql.must_equal 'SELECT id FROM albums'
28
- c.create(:x=>2)
29
- @db.sqls.must_equal ['INSERT INTO albums (x) VALUES (2) RETURNING id']
30
- c.load(:id=>2).x
31
- @db.sqls.must_equal ['SELECT albums.x FROM albums WHERE (id = 2) LIMIT 1']
32
- c.dataset.cs.sql.must_equal "SELECT id FROM albums WHERE (albums.id IN (SELECT albums.id FROM albums))"
33
- end
34
-
35
- it "should add a returning clause when inserting using selected columns" do
36
- @Album.plugin :insert_returning_select
37
- @Album.create(:x=>2).must_equal @Album.load(:id=>1, :x=>2)
38
- @db.sqls.must_equal ['INSERT INTO albums (x) VALUES (2) RETURNING id, x']
39
- end
40
-
41
- it "should not add a returning clause if selection does not consist of just columns" do
42
- @Album.dataset = @Album.dataset.select_append(Sequel.as(1, :b))
43
- @Album.plugin :insert_returning_select
44
- @db.sqls.clear
45
- @Album.create(:x=>2).must_equal @Album.load(:id=>1, :x=>2)
46
- @db.sqls.must_equal ['INSERT INTO albums (x) VALUES (2)', 'SELECT id, x, 1 AS b FROM albums WHERE (id = 1) LIMIT 1']
47
- end
48
-
49
- it "should not add a returning clause if database doesn't support it" do
50
- @db.extend_datasets{def supports_returning?(_) false end}
51
- @Album.plugin :insert_returning_select
52
- @Album.create(:x=>2).must_equal @Album.load(:id=>1, :x=>2)
53
- @db.sqls.must_equal ['INSERT INTO albums (x) VALUES (2)', 'SELECT id, x FROM albums WHERE (id = 1) LIMIT 1']
54
- end
55
-
56
- it "should work correctly with subclasses" do
57
- c = Class.new(Sequel::Model)
58
- c.plugin :insert_returning_select
59
- b = Class.new(c)
60
- b.columns :id, :x
61
- b.dataset = @db[:albums].select(:id, :x)
62
- @db.sqls.clear
63
- b.create(:x=>2).must_equal b.load(:id=>1, :x=>2)
64
- @db.sqls.must_equal ['INSERT INTO albums (x) VALUES (2) RETURNING id, x']
65
- end
66
-
67
- it "should freeze instance_insert_dataset when freezing model class" do
68
- @Album.plugin :insert_returning_select
69
- @Album.freeze
70
- @Album.instance_insert_dataset.frozen?.must_equal true
71
- end
72
- end
@@ -1,79 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "instance_filters plugin" do
4
- before do
5
- @c = Class.new(Sequel::Model(:people))
6
- @c.columns :id, :name, :num
7
- @c.plugin :instance_filters
8
- @p = @c.load(:id=>1, :name=>'John', :num=>1)
9
- DB.sqls
10
- end
11
-
12
- it "should raise an error when updating a stale record" do
13
- @p.update(:name=>'Bob')
14
- DB.sqls.must_equal ["UPDATE people SET name = 'Bob' WHERE (id = 1)"]
15
- @p.instance_filter(:name=>'Jim')
16
- @p.instance_variable_set(:@this, @p.this.with_numrows(0))
17
- proc{@p.update(:name=>'Joe')}.must_raise(Sequel::Plugins::InstanceFilters::Error)
18
- DB.sqls.must_equal ["UPDATE people SET name = 'Joe' WHERE ((id = 1) AND (name = 'Jim'))"]
19
- end
20
-
21
- it "should raise an error when destroying a stale record" do
22
- @p.destroy
23
- DB.sqls.must_equal ["DELETE FROM people WHERE id = 1"]
24
- @p.instance_filter(:name=>'Jim')
25
- @p.instance_variable_set(:@this, @p.this.with_numrows(0))
26
- proc{@p.destroy}.must_raise(Sequel::Plugins::InstanceFilters::Error)
27
- DB.sqls.must_equal ["DELETE FROM people WHERE ((id = 1) AND (name = 'Jim'))"]
28
- end
29
-
30
- it "should work when using the prepared_statements plugin" do
31
- @c.plugin :prepared_statements
32
-
33
- @p.update(:name=>'Bob')
34
- DB.sqls.must_equal ["UPDATE people SET name = 'Bob' WHERE (id = 1)"]
35
- @p.instance_filter(:name=>'Jim')
36
- @p.instance_variable_set(:@this, @p.this.with_numrows(0))
37
- proc{@p.update(:name=>'Joe')}.must_raise(Sequel::Plugins::InstanceFilters::Error)
38
- DB.sqls.must_equal ["UPDATE people SET name = 'Joe' WHERE ((id = 1) AND (name = 'Jim'))"]
39
-
40
- @p = @c.load(:id=>1, :name=>'John', :num=>1)
41
- @p.instance_variable_set(:@this, @p.this.with_numrows(1))
42
- @c.instance_variable_set(:@fast_instance_delete_sql, nil)
43
- @p.destroy
44
- DB.sqls.must_equal ["DELETE FROM people WHERE (id = 1)"]
45
- @p.instance_filter(:name=>'Jim')
46
- @p.instance_variable_set(:@this, @p.this.with_numrows(0))
47
- proc{@p.destroy}.must_raise(Sequel::Plugins::InstanceFilters::Error)
48
- DB.sqls.must_equal ["DELETE FROM people WHERE ((id = 1) AND (name = 'Jim'))"]
49
-
50
- @c.create.must_be_kind_of(@c)
51
- end
52
-
53
- it "should apply all instance filters" do
54
- @p.instance_filter(:name=>'Jim')
55
- @p.instance_filter{num > 2}
56
- @p.update(:name=>'Bob')
57
- DB.sqls.must_equal ["UPDATE people SET name = 'Bob' WHERE ((id = 1) AND (name = 'Jim') AND (num > 2))"]
58
- end
59
-
60
- it "should drop instance filters after updating" do
61
- @p.instance_filter(:name=>'Joe')
62
- @p.update(:name=>'Joe')
63
- DB.sqls.must_equal ["UPDATE people SET name = 'Joe' WHERE ((id = 1) AND (name = 'Joe'))"]
64
- @p.update(:name=>'Bob')
65
- DB.sqls.must_equal ["UPDATE people SET name = 'Bob' WHERE (id = 1)"]
66
- end
67
-
68
- it "shouldn't allow instance filters on frozen objects" do
69
- @p.instance_filter(:name=>'Joe')
70
- @p.freeze
71
- proc{@p.instance_filter(:name=>'Jim')}.must_raise
72
- end
73
-
74
- it "should have dup duplicate internal structures" do
75
- @p.instance_filter(:name=>'Joe')
76
- @p.dup.send(:instance_filters).must_equal @p.send(:instance_filters)
77
- @p.dup.send(:instance_filters).wont_be_same_as(@p.send(:instance_filters))
78
- end
79
- end
@@ -1,246 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "InstanceHooks plugin" do
4
- def r(x=nil)
5
- @r << x
6
- yield if block_given?
7
- x
8
- end
9
-
10
- before do
11
- @c = Class.new(Sequel::Model(:items))
12
- @c.plugin :instance_hooks
13
- @c.raise_on_save_failure = false
14
- @o = @c.new
15
- @x = @c.load({:id=>1})
16
- @r = []
17
- end
18
-
19
- it "should support before_create_hook and after_create_hook" do
20
- @o.after_create_hook{r 1}
21
- @o.before_create_hook{r 2}
22
- @o.after_create_hook{r 3}
23
- @o.before_create_hook{r 4}
24
- @o.save.wont_equal nil
25
- @r.must_equal [4, 2, 1, 3]
26
- end
27
-
28
- it "should cancel the save if before_create_hook block calls cancel_action" do
29
- @o.after_create_hook{r 1}
30
- @o.before_create_hook{r{@o.cancel_action}}
31
- @o.before_create_hook{r 4}
32
- @o.save.must_be_nil
33
- @r.must_equal [4, nil]
34
- @r.clear
35
- @o.save.must_be_nil
36
- @r.must_equal [4, nil]
37
- end
38
-
39
- it "should support before_update_hook and after_update_hook" do
40
- @x.after_update_hook{r 1}
41
- @x.before_update_hook{r 2}
42
- @x.after_update_hook{r 3}
43
- @x.before_update_hook{r 4}
44
- @x.save.wont_equal nil
45
- @r.must_equal [4, 2, 1, 3]
46
- @x.save.wont_equal nil
47
- @r.must_equal [4, 2, 1, 3]
48
- end
49
-
50
- it "should cancel the save if before_update_hook block calls cancel_action" do
51
- @x.after_update_hook{r 1}
52
- @x.before_update_hook{r{@x.cancel_action}}
53
- @x.before_update_hook{r 4}
54
- @x.save.must_be_nil
55
- @r.must_equal [4, nil]
56
- @r.clear
57
- @x.save.must_be_nil
58
- @r.must_equal [4, nil]
59
- end
60
-
61
- it "should support before_save_hook and after_save_hook" do
62
- @o.after_save_hook{r 1}
63
- @o.before_save_hook{r 2}
64
- @o.after_save_hook{r 3}
65
- @o.before_save_hook{r 4}
66
- @o.save.wont_equal nil
67
- @r.must_equal [4, 2, 1, 3]
68
- @r.clear
69
-
70
- @x.after_save_hook{r 1}
71
- @x.before_save_hook{r 2}
72
- @x.after_save_hook{r 3}
73
- @x.before_save_hook{r 4}
74
- @x.save.wont_equal nil
75
- @r.must_equal [4, 2, 1, 3]
76
- @x.save.wont_equal nil
77
- @r.must_equal [4, 2, 1, 3]
78
- end
79
-
80
- it "should cancel the save if before_save_hook block calls cancel_action" do
81
- @x.after_save_hook{r 1}
82
- @x.before_save_hook{r{@x.cancel_action}}
83
- @x.before_save_hook{r 4}
84
- @x.save.must_be_nil
85
- @r.must_equal [4, nil]
86
- @r.clear
87
-
88
- @x.after_save_hook{r 1}
89
- @x.before_save_hook{r{@x.cancel_action}}
90
- @x.before_save_hook{r 4}
91
- @x.save.must_be_nil
92
- @r.must_equal [4, nil]
93
- @r.clear
94
- @x.save.must_be_nil
95
- @r.must_equal [4, nil]
96
- end
97
-
98
- it "should support before_destroy_hook and after_destroy_hook" do
99
- @x.after_destroy_hook{r 1}
100
- @x.before_destroy_hook{r 2}
101
- @x.after_destroy_hook{r 3}
102
- @x.before_destroy_hook{r 4}
103
- @x.destroy.wont_equal nil
104
- @r.must_equal [4, 2, 1, 3]
105
- end
106
-
107
- it "should cancel the destroy if before_destroy_hook block calls cancel_action" do
108
- @x.after_destroy_hook{r 1}
109
- @x.before_destroy_hook{r{@x.cancel_action}}
110
- @x.before_destroy_hook{r 4}
111
- @x.destroy.must_be_nil
112
- @r.must_equal [4, nil]
113
- end
114
-
115
- it "should support before_validation_hook and after_validation_hook" do
116
- @o.after_validation_hook{r 1}
117
- @o.before_validation_hook{r 2}
118
- @o.after_validation_hook{r 3}
119
- @o.before_validation_hook{r 4}
120
- @o.valid?.must_equal true
121
- @r.must_equal [4, 2, 1, 3]
122
- end
123
-
124
- it "should cancel the save if before_validation_hook block calls cancel_action" do
125
- @o.after_validation_hook{r 1}
126
- @o.before_validation_hook{r{@o.cancel_action}}
127
- @o.before_validation_hook{r 4}
128
- @o.valid?.must_equal false
129
- @r.must_equal [4, nil]
130
- @r.clear
131
- @o.valid?.must_equal false
132
- @r.must_equal [4, nil]
133
- end
134
-
135
- it "should clear only related hooks on successful create" do
136
- @o.after_destroy_hook{r 1}
137
- @o.before_destroy_hook{r 2}
138
- @o.after_update_hook{r 3}
139
- @o.before_update_hook{r 4}
140
- @o.before_save_hook{r 5}
141
- @o.after_save_hook{r 6}
142
- @o.before_create_hook{r 7}
143
- @o.after_create_hook{r 8}
144
- @o.save.wont_equal nil
145
- @r.must_equal [5, 7, 8, 6]
146
- @o.instance_variable_set(:@new, false)
147
- @o.save.wont_equal nil
148
- @r.must_equal [5, 7, 8, 6, 4, 3]
149
- @o.save.wont_equal nil
150
- @r.must_equal [5, 7, 8, 6, 4, 3]
151
- @o.destroy
152
- @r.must_equal [5, 7, 8, 6, 4, 3, 2, 1]
153
- end
154
-
155
- it "should clear only related hooks on successful update" do
156
- @x.after_destroy_hook{r 1}
157
- @x.before_destroy_hook{r 2}
158
- @x.before_update_hook{r 3}
159
- @x.after_update_hook{r 4}
160
- @x.before_save_hook{r 5}
161
- @x.after_save_hook{r 6}
162
- @x.save.wont_equal nil
163
- @r.must_equal [5, 3, 4, 6]
164
- @x.save.wont_equal nil
165
- @r.must_equal [5, 3, 4, 6]
166
- @x.destroy
167
- @r.must_equal [5, 3, 4, 6, 2, 1]
168
- end
169
-
170
- it "should clear only related hooks on successful destroy" do
171
- @x.after_destroy_hook{r 1}
172
- @x.before_destroy_hook{r 2}
173
- @x.before_update_hook{r 3}
174
- @x.before_save_hook{r 4}
175
- @x.destroy
176
- @r.must_equal [2, 1]
177
- @x.save.wont_equal nil
178
- @r.must_equal [2, 1, 4, 3]
179
- end
180
-
181
- it "should not clear validations hooks on successful save" do
182
- @x.after_validation_hook{@x.errors.add(:id, 'a') if @x.id == 1; r 1}
183
- @x.before_validation_hook{r 2}
184
- @x.save.must_be_nil
185
- @r.must_equal [2, 1]
186
- @x.save.must_be_nil
187
- @r.must_equal [2, 1, 2, 1]
188
- @x.id = 2
189
- @x.save.must_equal @x
190
- @r.must_equal [2, 1, 2, 1, 2, 1]
191
- @x.save.must_equal @x
192
- @r.must_equal [2, 1, 2, 1, 2, 1]
193
- end
194
-
195
- it "should not allow addition of instance hooks to frozen instances" do
196
- @x.after_destroy_hook{r 1}
197
- @x.before_destroy_hook{r 2}
198
- @x.before_update_hook{r 3}
199
- @x.before_save_hook{r 4}
200
- @x.freeze
201
- proc{@x.after_destroy_hook{r 1}}.must_raise(Sequel::Error)
202
- proc{@x.before_destroy_hook{r 2}}.must_raise(Sequel::Error)
203
- proc{@x.before_update_hook{r 3}}.must_raise(Sequel::Error)
204
- proc{@x.before_save_hook{r 4}}.must_raise(Sequel::Error)
205
- end
206
- end
207
-
208
- describe "InstanceHooks plugin with transactions" do
209
- before do
210
- @db = Sequel.mock(:numrows=>1)
211
- @c = Class.new(Sequel::Model(@db[:items])) do
212
- attr_accessor :rb
213
- def after_save
214
- super
215
- db.execute('as')
216
- raise Sequel::Rollback if rb
217
- end
218
- def after_destroy
219
- super
220
- db.execute('ad')
221
- raise Sequel::Rollback if rb
222
- end
223
- end
224
- @c.use_transactions = true
225
- @c.plugin :instance_hooks
226
- @o = @c.load({:id=>1})
227
- @or = @c.load({:id=>1})
228
- @or.rb = true
229
- @r = []
230
- @db.sqls
231
- end
232
-
233
- it "should have *_hook methods return self "do
234
- @o.before_destroy_hook{r 1}.must_be_same_as(@o)
235
- @o.before_validation_hook{r 1}.must_be_same_as(@o)
236
- @o.before_save_hook{r 1}.must_be_same_as(@o)
237
- @o.before_update_hook{r 1}.must_be_same_as(@o)
238
- @o.before_create_hook{r 1}.must_be_same_as(@o)
239
-
240
- @o.after_destroy_hook{r 1}.must_be_same_as(@o)
241
- @o.after_validation_hook{r 1}.must_be_same_as(@o)
242
- @o.after_save_hook{r 1}.must_be_same_as(@o)
243
- @o.after_update_hook{r 1}.must_be_same_as(@o)
244
- @o.after_create_hook{r 1}.must_be_same_as(@o)
245
- end
246
- end