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,126 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "force_encoding plugin" do
4
- before do
5
- @c = Class.new(Sequel::Model)
6
- @c.columns :id, :x
7
- @c.plugin :force_encoding, 'UTF-8'
8
- @e1 = Encoding.find('UTF-8')
9
- end
10
-
11
- it "should force encoding to given encoding on load" do
12
- s = 'blah'.dup
13
- s.force_encoding('US-ASCII')
14
- o = @c.load(:id=>1, :x=>s)
15
- o.x.must_equal 'blah'
16
- o.x.encoding.must_equal @e1
17
- end
18
-
19
- it "should force encoding to given encoding when setting column values" do
20
- s = 'blah'.dup
21
- s.force_encoding('US-ASCII')
22
- o = @c.new(:x=>s)
23
- o.x.must_equal 'blah'
24
- o.x.encoding.must_equal @e1
25
- end
26
-
27
- it "should not force encoding of blobs to given encoding on load" do
28
- s = Sequel.blob('blah'.dup.force_encoding('BINARY'))
29
- o = @c.load(:id=>1, :x=>s)
30
- o.x.must_equal 'blah'
31
- o.x.encoding.must_equal Encoding.find('BINARY')
32
- end
33
-
34
- it "should not force encoding of blobs to given encoding when setting column values" do
35
- s = Sequel.blob('blah'.dup.force_encoding('BINARY'))
36
- o = @c.new(:x=>s)
37
- o.x.must_equal 'blah'
38
- o.x.encoding.must_equal Encoding.find('BINARY')
39
- end
40
-
41
- it "should work correctly when given a frozen string" do
42
- s = 'blah'.dup
43
- s.force_encoding('US-ASCII')
44
- s.freeze
45
- o = @c.new(:x=>s)
46
- o.x.must_equal 'blah'
47
- o.x.encoding.must_equal @e1
48
- end
49
-
50
- it "should have a forced_encoding class accessor" do
51
- s = 'blah'.dup
52
- s.force_encoding('US-ASCII')
53
- @c.forced_encoding = 'Windows-1258'
54
- o = @c.load(:id=>1, :x=>s)
55
- o.x.must_equal 'blah'
56
- o.x.encoding.must_equal Encoding.find('Windows-1258')
57
- end
58
-
59
- it "should not force encoding if forced_encoding is nil" do
60
- s = 'blah'.dup
61
- s.force_encoding('US-ASCII')
62
- @c.forced_encoding = nil
63
- o = @c.load(:id=>1, :x=>s)
64
- o.x.must_equal 'blah'
65
- o.x.encoding.must_equal Encoding.find('US-ASCII')
66
- end
67
-
68
- it "should work correctly when subclassing" do
69
- c = Class.new(@c)
70
- s = 'blah'.dup
71
- s.force_encoding('US-ASCII')
72
- o = c.load(:id=>1, :x=>s)
73
- o.x.must_equal 'blah'
74
- o.x.encoding.must_equal @e1
75
-
76
- c.plugin :force_encoding, 'UTF-16LE'
77
- s = String.new
78
- s.force_encoding('US-ASCII')
79
- o = c.load(:id=>1, :x=>s)
80
- o.x.must_equal ''
81
- o.x.encoding.must_equal Encoding.find('UTF-16LE')
82
-
83
- @c.plugin :force_encoding, 'UTF-32LE'
84
- s = String.new
85
- s.force_encoding('US-ASCII')
86
- o = @c.load(:id=>1, :x=>s)
87
- o.x.must_equal ''
88
- o.x.encoding.must_equal Encoding.find('UTF-32LE')
89
-
90
- s = String.new
91
- s.force_encoding('US-ASCII')
92
- o = c.load(:id=>1, :x=>s)
93
- o.x.must_equal ''
94
- o.x.encoding.must_equal Encoding.find('UTF-16LE')
95
- end
96
-
97
- it "should work when saving new model instances" do
98
- o = @c.new
99
- @c.dataset = DB[:a].with_extend do
100
- def first
101
- s = 'blah'.dup
102
- s.force_encoding('US-ASCII')
103
- {:id=>1, :x=>s}
104
- end
105
- end
106
- @c.instance_variable_set(:@fast_pk_lookup_sql, nil)
107
- o.save
108
- o.x.must_equal 'blah'
109
- o.x.encoding.must_equal @e1
110
- end
111
-
112
- it "should work when refreshing model instances" do
113
- o = @c.load(:id=>1, :x=>'as'.dup)
114
- @c.dataset = DB[:a].with_extend do
115
- def first
116
- s = 'blah'.dup
117
- s.force_encoding('US-ASCII')
118
- {:id=>1, :x=>s}
119
- end
120
- end
121
- @c.instance_variable_set(:@fast_pk_lookup_sql, nil)
122
- o.refresh
123
- o.x.must_equal 'blah'
124
- o.x.encoding.must_equal @e1
125
- end
126
- end
@@ -1,31 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "freeze_datasets extension" do
4
- before do
5
- @db = Sequel.mock.extension(:freeze_datasets)
6
- end
7
-
8
- it "should freeze datasets by default" do
9
- @db.dataset.frozen?.must_equal true
10
- @db.fetch('SQL').frozen?.must_equal true
11
- @db.from(:table).frozen?.must_equal true
12
- @db[:table].frozen?.must_equal true
13
- end
14
-
15
- it "should have dataset#dup return frozen dataset" do
16
- @db.dataset.dup.frozen?.must_equal true
17
- end
18
-
19
- it "should cache Database#from calls with single symbol tables" do
20
- @db.from(:foo).must_be_same_as @db.from(:foo)
21
- @db.from(Sequel[:foo]).wont_be_same_as @db.from(Sequel[:foo])
22
- end
23
-
24
- it "should clear Database#from cache when modifying the schema" do
25
- ds = @db.from(:foo)
26
- ds.columns(:foo, :bar)
27
- @db[:foo].columns.must_equal [:foo, :bar]
28
- @db.create_table!(:foo){Integer :x}
29
- @db[:foo].columns.wont_equal [:foo, :bar]
30
- end
31
- end
@@ -1,113 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe Sequel::Dataset, " graphing" do
4
- before do
5
- @db = Sequel.mock(:columns=>proc do |sql|
6
- case sql
7
- when /points/
8
- [:id, :x, :y]
9
- when /lines/
10
- [:id, :x, :y, :graph_id]
11
- else
12
- [:id, :name, :x, :y, :lines_x]
13
- end
14
- end).extension(:graph_each)
15
- @ds1 = @db.from(:points)
16
- @ds2 = @db.from(:lines)
17
- @ds3 = @db.from(:graphs)
18
- [@ds1, @ds2, @ds3].each{|ds| ds.columns}
19
- @db.sqls
20
- end
21
-
22
- it "#graph_each should handle graph using currently selected columns as the basis for the selected columns in a new graph" do
23
- @ds1.select(:id).graph(@ds2, :x=>:id).with_fetch(:id=>1, :lines_id=>2, :x=>3, :y=>4, :graph_id=>5).all.must_equal [{:points=>{:id=>1}, :lines=>{:id=>2, :x=>3, :y=>4, :graph_id=>5}}]
24
-
25
- @ds1.select(:id, :x).graph(@ds2, :x=>:id).with_fetch(:id=>1, :x=>-1, :lines_id=>2, :lines_x=>3, :y=>4, :graph_id=>5).all.must_equal [{:points=>{:id=>1, :x=>-1}, :lines=>{:id=>2, :x=>3, :y=>4, :graph_id=>5}}]
26
-
27
- @ds1.select(Sequel.identifier(:id), Sequel.qualify(:points, :x)).graph(@ds2, :x=>:id).with_fetch(:id=>1, :x=>-1, :lines_id=>2, :lines_x=>3, :y=>4, :graph_id=>5).all.must_equal [{:points=>{:id=>1, :x=>-1}, :lines=>{:id=>2, :x=>3, :y=>4, :graph_id=>5}}]
28
-
29
- @ds1.select(Sequel.identifier(:id).qualify(:points), Sequel.identifier(:x).as(:y)).graph(@ds2, :x=>:id).with_fetch(:id=>1, :y=>-1, :lines_id=>2, :x=>3, :lines_y=>4, :graph_id=>5).all.must_equal [{:points=>{:id=>1, :y=>-1}, :lines=>{:id=>2, :x=>3, :y=>4, :graph_id=>5}}]
30
-
31
- @ds1.select(:id, Sequel.identifier(:x).qualify(Sequel.identifier(:points)).as(Sequel.identifier(:y))).graph(@ds2, :x=>:id).with_fetch(:id=>1, :y=>-1, :lines_id=>2, :x=>3, :lines_y=>4, :graph_id=>5).all.must_equal [{:points=>{:id=>1, :y=>-1}, :lines=>{:id=>2, :x=>3, :y=>4, :graph_id=>5}}]
32
- end
33
-
34
- it "#graph_each should split the result set into component tables" do
35
- @db.fetch = [[{:id=>1,:x=>2,:y=>3,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7}],
36
- [{:id=>1,:x=>2,:y=>3,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7, :graphs_id=>8, :name=>9, :graphs_x=>10, :graphs_y=>11, :graphs_lines_x=>12}],
37
- [{:id=>1,:x=>2,:y=>3,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7, :graph_id_0=>8, :graph_x=>9, :graph_y=>10, :graph_graph_id=>11}]]
38
-
39
- @ds1.graph(@ds2, :x=>:id).all.must_equal [{:points=>{:id=>1, :x=>2, :y=>3}, :lines=>{:id=>4, :x=>5, :y=>6, :graph_id=>7}}]
40
- @ds1.graph(@ds2, :x=>:id).graph(@ds3, :id=>:graph_id).all.must_equal [{:points=>{:id=>1, :x=>2, :y=>3}, :lines=>{:id=>4, :x=>5, :y=>6, :graph_id=>7}, :graphs=>{:id=>8, :name=>9, :x=>10, :y=>11, :lines_x=>12}}]
41
- @ds1.graph(@ds2, :x=>:id).graph(@ds2, {:y=>Sequel[:points][:id]}, :table_alias=>:graph).all.must_equal [{:points=>{:id=>1, :x=>2, :y=>3}, :lines=>{:id=>4, :x=>5, :y=>6, :graph_id=>7}, :graph=>{:id=>8, :x=>9, :y=>10, :graph_id=>11}}]
42
- end
43
-
44
- it "#graph_each should split the result set into component tables when using first" do
45
- @db.fetch = [[{:id=>1,:x=>2,:y=>3,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7}],
46
- [{:id=>1,:x=>2,:y=>3,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7, :graphs_id=>8, :name=>9, :graphs_x=>10, :graphs_y=>11, :graphs_lines_x=>12}],
47
- [{:id=>1,:x=>2,:y=>3,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7, :graph_id_0=>8, :graph_x=>9, :graph_y=>10, :graph_graph_id=>11}]]
48
-
49
- @ds1.graph(@ds2, :x=>:id).first.must_equal(:points=>{:id=>1, :x=>2, :y=>3}, :lines=>{:id=>4, :x=>5, :y=>6, :graph_id=>7})
50
- @ds1.graph(@ds2, :x=>:id).graph(@ds3, :id=>:graph_id).first.must_equal(:points=>{:id=>1, :x=>2, :y=>3}, :lines=>{:id=>4, :x=>5, :y=>6, :graph_id=>7}, :graphs=>{:id=>8, :name=>9, :x=>10, :y=>11, :lines_x=>12})
51
- @ds1.graph(@ds2, :x=>:id).graph(@ds2, {:y=>Sequel[:points][:id]}, :table_alias=>:graph).first.must_equal(:points=>{:id=>1, :x=>2, :y=>3}, :lines=>{:id=>4, :x=>5, :y=>6, :graph_id=>7}, :graph=>{:id=>8, :x=>9, :y=>10, :graph_id=>11})
52
- end
53
-
54
- it "#graph_each should give a nil value instead of a hash when all values for a table are nil" do
55
- @db.fetch = [[{:id=>1,:x=>2,:y=>3,:lines_id=>nil,:lines_x=>nil,:lines_y=>nil,:graph_id=>nil}],
56
- [{:id=>1,:x=>2,:y=>3,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7, :graphs_id=>nil, :name=>nil, :graphs_x=>nil, :graphs_y=>nil, :graphs_lines_x=>nil},
57
- {:id=>2,:x=>4,:y=>5,:lines_id=>nil,:lines_x=>nil,:lines_y=>nil,:graph_id=>nil, :graphs_id=>nil, :name=>nil, :graphs_x=>nil, :graphs_y=>nil, :graphs_lines_x=>nil},
58
- {:id=>3,:x=>5,:y=>6,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7, :graphs_id=>7, :name=>8, :graphs_x=>9, :graphs_y=>10, :graphs_lines_x=>11},
59
- {:id=>3,:x=>5,:y=>6,:lines_id=>7,:lines_x=>5,:lines_y=>8,:graph_id=>9, :graphs_id=>9, :name=>10, :graphs_x=>10, :graphs_y=>11, :graphs_lines_x=>12}]]
60
-
61
- @ds1.graph(@ds2, :x=>:id).all.must_equal [{:points=>{:id=>1, :x=>2, :y=>3}, :lines=>nil}]
62
- @ds1.graph(@ds2, :x=>:id).graph(@ds3, :id=>:graph_id).all.must_equal [{:points=>{:id=>1, :x=>2, :y=>3}, :lines=>{:id=>4, :x=>5, :y=>6, :graph_id=>7}, :graphs=>nil},
63
- {:points=>{:id=>2, :x=>4, :y=>5}, :lines=>nil, :graphs=>nil},
64
- {:points=>{:id=>3, :x=>5, :y=>6}, :lines=>{:id=>4, :x=>5, :y=>6, :graph_id=>7}, :graphs=>{:id=>7, :name=>8, :x=>9, :y=>10, :lines_x=>11}},
65
- {:points=>{:id=>3, :x=>5, :y=>6}, :lines=>{:id=>7, :x=>5, :y=>8, :graph_id=>9}, :graphs=>{:id=>9, :name=>10, :x=>10, :y=>11, :lines_x=>12}}]
66
- end
67
-
68
- it "#graph_each should not give a nil value instead of a hash when any value for a table is false" do
69
- @db.fetch = {:id=>1,:x=>2,:y=>3,:lines_id=>nil,:lines_x=>false,:lines_y=>nil,:graph_id=>nil}
70
- @ds1.graph(@ds2, :x=>:id).all.must_equal [{:points=>{:id=>1, :x=>2, :y=>3}, :lines=>{:id=>nil, :x=>false, :y=>nil, :graph_id=>nil}}]
71
- end
72
-
73
- it "#graph_each should not included tables graphed with the :select => false option in the result set" do
74
- @db.fetch = {:id=>1,:x=>2,:y=>3,:graphs_id=>8, :name=>9, :graphs_x=>10, :graphs_y=>11, :lines_x=>12}
75
- @ds1.graph(:lines, {:x=>:id}, :select=>false).graph(:graphs, :id=>:graph_id).all.must_equal [{:points=>{:id=>1, :x=>2, :y=>3}, :graphs=>{:id=>8, :name=>9, :x=>10, :y=>11, :lines_x=>12}}]
76
- end
77
-
78
- it "#graph_each should only include the columns selected with #set_graph_aliases and #add_graph_aliases, if called" do
79
- @db.fetch = [[{:x=>2,:y=>3}], [{:x=>2}], [{:x=>2, :q=>18}]]
80
-
81
- @ds1.graph(:lines, :x=>:id).set_graph_aliases(:x=>[:points, :x], :y=>[:lines, :y]).all.must_equal [{:points=>{:x=>2}, :lines=>{:y=>3}}]
82
- ds = @ds1.graph(:lines, :x=>:id).set_graph_aliases(:x=>[:points, :x])
83
- ds.all.must_equal [{:points=>{:x=>2}, :lines=>nil}]
84
- ds = ds.add_graph_aliases(:q=>[:points, :r, 18])
85
- ds.all.must_equal [{:points=>{:x=>2, :r=>18}, :lines=>nil}]
86
- end
87
-
88
- it "#graph_each should correctly map values when #set_graph_aliases is used with a third argument for each entry" do
89
- @db.fetch = [{:x=>2,:y=>3}]
90
- @ds1.graph(:lines, :x=>:id).set_graph_aliases(:x=>[:points, :z1, 2], :y=>[:lines, :z2, Sequel.function(:random)]).all.must_equal [{:points=>{:z1=>2}, :lines=>{:z2=>3}}]
91
- end
92
-
93
- it "#graph_each should correctly map values when #set_graph_aliases is used with a single argument for each entry" do
94
- @db.fetch = [{:x=>2,:y=>3}]
95
- @ds1.graph(:lines, :x=>:id).set_graph_aliases(:x=>[:points], :y=>[:lines]).all.must_equal [{:points=>{:x=>2}, :lines=>{:y=>3}}]
96
- end
97
-
98
- it "#graph_each should correctly map values when #set_graph_aliases is used with a symbol for each entry" do
99
- @db.fetch = [{:x=>2,:y=>3}]
100
- @ds1.graph(:lines, :x=>:id).set_graph_aliases(:x=>:points, :y=>:lines).all.must_equal [{:points=>{:x=>2}, :lines=>{:y=>3}}]
101
- end
102
-
103
- it "#graph_each should run the row_proc for graphed datasets" do
104
- @db.fetch = {:id=>1,:x=>2,:y=>3,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7}
105
- @ds1.with_row_proc(proc{|h| h.keys.each{|k| h[k] *= 2}; h}).graph(@ds2.with_row_proc(proc{|h| h.keys.each{|k| h[k] *= 3}; h}), :x=>:id).all.must_equal [{:points=>{:id=>2, :x=>4, :y=>6}, :lines=>{:id=>12, :x=>15, :y=>18, :graph_id=>21}}]
106
- end
107
-
108
- it "#with_sql_each should work normally if the dataset is not graphed" do
109
- @db.fetch = {:x=>1}
110
- @db.dataset.with_sql_each('SELECT 1 AS x'){|r| r.must_equal(:x=>1)}
111
- @db.sqls.must_equal ['SELECT 1 AS x']
112
- end
113
- end
@@ -1,380 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- model_class = proc do |klass, &block|
4
- c = Class.new(klass)
5
- c.plugin :hook_class_methods
6
- c.class_eval(&block) if block
7
- c
8
- end
9
-
10
- describe Sequel::Model, "hook_class_methods plugin" do
11
- before do
12
- DB.reset
13
- end
14
-
15
- it "should freeze hooks when freezing model class" do
16
- c = model_class.call Sequel::Model do
17
- before_save{adds << 'hi'}
18
- end
19
- c.freeze
20
- hooks = c.instance_variable_get(:@hooks)
21
- hooks.frozen?.must_equal true
22
- hooks.values.all?(&:frozen?).must_equal true
23
- end
24
-
25
- it "should be definable using a block" do
26
- adds = []
27
- c = model_class.call Sequel::Model do
28
- before_save{adds << 'hi'}
29
- end
30
-
31
- c.new.before_save
32
- adds.must_equal ['hi']
33
- end
34
-
35
- it "should be definable using a method name" do
36
- adds = []
37
- c = model_class.call Sequel::Model do
38
- define_method(:bye){adds << 'bye'}
39
- before_save :bye
40
- end
41
-
42
- c.new.before_save
43
- adds.must_equal ['bye']
44
- end
45
-
46
- it "should be additive" do
47
- adds = []
48
- c = model_class.call Sequel::Model do
49
- after_save{adds << 'hyiyie'}
50
- after_save{adds << 'byiyie'}
51
- end
52
-
53
- c.new.after_save
54
- adds.must_equal ['hyiyie', 'byiyie']
55
- end
56
-
57
- it "before hooks should run in reverse order" do
58
- adds = []
59
- c = model_class.call Sequel::Model do
60
- before_save{adds << 'hyiyie'}
61
- before_save{adds << 'byiyie'}
62
- end
63
-
64
- c.new.before_save
65
- adds.must_equal ['byiyie', 'hyiyie']
66
- end
67
-
68
- it "should not be additive if the method or tag already exists" do
69
- adds = []
70
- c = model_class.call Sequel::Model do
71
- define_method(:bye){adds << 'bye'}
72
- before_save :bye
73
- before_save :bye
74
- end
75
-
76
- c.new.before_save
77
- adds.must_equal ['bye']
78
-
79
- adds = []
80
- d = model_class.call Sequel::Model do
81
- before_save(:bye){adds << 'hyiyie'}
82
- before_save(:bye){adds << 'byiyie'}
83
- end
84
-
85
- d.new.before_save
86
- adds.must_equal ['byiyie']
87
-
88
- adds = []
89
- e = model_class.call Sequel::Model do
90
- define_method(:bye){adds << 'bye'}
91
- before_save :bye
92
- before_save(:bye){adds << 'byiyie'}
93
- end
94
-
95
- e.new.before_save
96
- adds.must_equal ['byiyie']
97
-
98
- adds = []
99
- e = model_class.call Sequel::Model do
100
- define_method(:bye){adds << 'bye'}
101
- before_save(:bye){adds << 'byiyie'}
102
- before_save :bye
103
- end
104
-
105
- e.new.before_save
106
- adds.must_equal ['bye']
107
- end
108
-
109
- it "should be inheritable" do
110
- adds = []
111
- a = model_class.call Sequel::Model do
112
- after_save{adds << '123'}
113
- end
114
-
115
- b = Class.new(a)
116
- b.class_eval do
117
- after_save{adds << '456'}
118
- after_save{adds << '789'}
119
- end
120
-
121
- b.new.after_save
122
- adds.must_equal ['123', '456', '789']
123
- end
124
-
125
- it "should be overridable in descendant classes" do
126
- adds = []
127
- a = model_class.call Sequel::Model do
128
- before_save{adds << '123'}
129
- end
130
-
131
- b = Class.new(a)
132
- b.class_eval do
133
- define_method(:before_save){adds << '456'}
134
- end
135
-
136
- a.new.before_save
137
- adds.must_equal ['123']
138
- adds = []
139
- b.new.before_save
140
- adds.must_equal ['456']
141
- end
142
-
143
- it "should stop processing if a before hook calls cancel_action" do
144
- flag = true
145
- adds = []
146
-
147
- a = model_class.call Sequel::Model(:items) do
148
- before_save{adds << 'cruel'; cancel_action if flag == false}
149
- before_save{adds << 'blah'; cancel_action if flag == false}
150
- end
151
-
152
- a.raise_on_save_failure = false
153
- a.new.save
154
- adds.must_equal ['blah', 'cruel']
155
-
156
- # chain should not break on nil
157
- adds = []
158
- flag = nil
159
- a.new.save
160
- adds.must_equal ['blah', 'cruel']
161
-
162
- adds = []
163
- flag = false
164
- a.new.save
165
- adds.must_equal ['blah']
166
-
167
- b = Class.new(a)
168
- b.class_eval do
169
- before_save{adds << 'mau'}
170
- end
171
-
172
- adds = []
173
- b.new.save
174
- adds.must_equal ['mau', 'blah']
175
- end
176
- end
177
-
178
- describe "Model#before_create && Model#after_create" do
179
- before do
180
- DB.reset
181
-
182
- @c = model_class.call Sequel::Model(:items) do
183
- columns :x
184
- no_primary_key
185
-
186
- after_create {DB << "BLAH after"}
187
- end
188
- end
189
-
190
- it "should be called around new record creation" do
191
- @c.before_create {DB << "BLAH before"}
192
- @c.create(:x => 2)
193
- DB.sqls.must_equal ['BLAH before', 'INSERT INTO items (x) VALUES (2)', 'BLAH after']
194
- end
195
-
196
- it ".create should cancel the save and raise an error if before_create calls cancel_action and raise_on_save_failure is true" do
197
- @c.before_create{cancel_action}
198
- proc{@c.create(:x => 2)}.must_raise(Sequel::HookFailed)
199
- DB.sqls.must_equal []
200
- end
201
-
202
- it ".create should cancel the save and return nil if before_create calls cancel_action and raise_on_save_failure is false" do
203
- @c.before_create{cancel_action}
204
- @c.raise_on_save_failure = false
205
- @c.create(:x => 2).must_be_nil
206
- DB.sqls.must_equal []
207
- end
208
- end
209
-
210
- describe "Model#before_update && Model#after_update" do
211
- before do
212
- DB.reset
213
-
214
- @c = model_class.call(Sequel::Model(:items)) do
215
- after_update {DB << "BLAH after"}
216
- end
217
- end
218
-
219
- it "should be called around record update" do
220
- @c.before_update {DB << "BLAH before"}
221
- m = @c.load(:id => 2233, :x=>123)
222
- m.save
223
- DB.sqls.must_equal ['BLAH before', 'UPDATE items SET x = 123 WHERE (id = 2233)', 'BLAH after']
224
- end
225
-
226
- it "#save should cancel the save and raise an error if before_update calls cancel_action and raise_on_save_failure is true" do
227
- @c.before_update{cancel_action}
228
- proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
229
- DB.sqls.must_equal []
230
- end
231
-
232
- it "#save should cancel the save and return nil if before_update calls cancel_action and raise_on_save_failure is false" do
233
- @c.before_update{cancel_action}
234
- @c.raise_on_save_failure = false
235
- @c.load(:id => 2233).save.must_be_nil
236
- DB.sqls.must_equal []
237
- end
238
- end
239
-
240
- describe "Model#before_save && Model#after_save" do
241
- before do
242
- DB.reset
243
-
244
- @c = model_class.call(Sequel::Model(:items)) do
245
- columns :x
246
- after_save {DB << "BLAH after"}
247
- end
248
- end
249
-
250
- it "should be called around record update" do
251
- @c.before_save {DB << "BLAH before"}
252
- m = @c.load(:id => 2233, :x=>123)
253
- m.save
254
- DB.sqls.must_equal ['BLAH before', 'UPDATE items SET x = 123 WHERE (id = 2233)', 'BLAH after']
255
- end
256
-
257
- it "should be called around record creation" do
258
- @c.before_save {DB << "BLAH before"}
259
- @c.no_primary_key
260
- @c.create(:x => 2)
261
- DB.sqls.must_equal ['BLAH before', 'INSERT INTO items (x) VALUES (2)', 'BLAH after']
262
- end
263
-
264
- it "#save should cancel the save and raise an error if before_save calls cancel_action and raise_on_save_failure is true" do
265
- @c.before_save{cancel_action}
266
- proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
267
- DB.sqls.must_equal []
268
- end
269
-
270
- it "#save should cancel the save and return nil if before_save calls cancel_action and raise_on_save_failure is false" do
271
- @c.before_save{cancel_action}
272
- @c.raise_on_save_failure = false
273
- @c.load(:id => 2233).save.must_be_nil
274
- DB.sqls.must_equal []
275
- end
276
- end
277
-
278
- describe "Model#before_destroy && Model#after_destroy" do
279
- before do
280
- DB.reset
281
-
282
- @c = model_class.call(Sequel::Model(:items)) do
283
- after_destroy {DB << "BLAH after"}
284
- end
285
- end
286
-
287
- it "should be called around record destruction" do
288
- @c.before_destroy {DB << "BLAH before"}
289
- m = @c.load(:id => 2233)
290
- m.destroy
291
- DB.sqls.must_equal ['BLAH before', "DELETE FROM items WHERE id = 2233", 'BLAH after']
292
- end
293
-
294
- it "#destroy should cancel the destroy and raise an error if before_destroy calls cancel_action and raise_on_save_failure is true" do
295
- @c.before_destroy{cancel_action}
296
- proc{@c.load(:id => 2233).destroy}.must_raise(Sequel::HookFailed)
297
- DB.sqls.must_equal []
298
- end
299
-
300
- it "#destroy should cancel the destroy and return nil if before_destroy calls cancel_action and raise_on_save_failure is false" do
301
- @c.before_destroy{cancel_action}
302
- @c.raise_on_save_failure = false
303
- @c.load(:id => 2233).destroy.must_be_nil
304
- DB.sqls.must_equal []
305
- end
306
- end
307
-
308
- describe "Model#before_validation && Model#after_validation" do
309
- before do
310
- DB.reset
311
-
312
- @c = model_class.call(Sequel::Model(:items)) do
313
- plugin :validation_class_methods
314
- after_validation{DB << "BLAH after"}
315
-
316
- def self.validate(o)
317
- o.errors.add(:id, 'not valid') unless o[:id] == 2233
318
- end
319
- columns :id
320
- end
321
- end
322
-
323
- it "should be called around validation" do
324
- @c.before_validation{DB << "BLAH before"}
325
- m = @c.load(:id => 2233)
326
- m.must_be :valid?
327
- DB.sqls.must_equal ['BLAH before', 'BLAH after']
328
-
329
- DB.sqls.clear
330
- m = @c.load(:id => 22)
331
- m.wont_be :valid?
332
- DB.sqls.must_equal ['BLAH before', 'BLAH after']
333
- end
334
-
335
- it "should be called when calling save" do
336
- @c.before_validation{DB << "BLAH before"}
337
- m = @c.load(:id => 2233, :x=>123)
338
- m.save.must_equal m
339
- DB.sqls.must_equal ['BLAH before', 'BLAH after', 'UPDATE items SET x = 123 WHERE (id = 2233)']
340
-
341
- DB.sqls.clear
342
- m = @c.load(:id => 22)
343
- m.raise_on_save_failure = false
344
- m.save.must_be_nil
345
- DB.sqls.must_equal ['BLAH before', 'BLAH after']
346
- end
347
-
348
- it "#save should cancel the save and raise an error if before_validation calls cancel_action and raise_on_save_failure is true" do
349
- @c.before_validation{cancel_action}
350
- proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
351
- DB.sqls.must_equal []
352
- end
353
-
354
- it "#save should cancel the save and return nil if before_validation calls cancel_action and raise_on_save_failure is false" do
355
- @c.before_validation{cancel_action}
356
- @c.raise_on_save_failure = false
357
- @c.load(:id => 2233).save.must_be_nil
358
- DB.sqls.must_equal []
359
- end
360
- end
361
-
362
- describe "Model.has_hooks?" do
363
- before do
364
- @c = model_class.call(Sequel::Model(:items))
365
- end
366
-
367
- it "should return false if no hooks are defined" do
368
- @c.has_hooks?(:before_save).must_equal false
369
- end
370
-
371
- it "should return true if hooks are defined" do
372
- @c.before_save {'blah'}
373
- @c.has_hooks?(:before_save).must_equal true
374
- end
375
-
376
- it "should return true if hooks are inherited" do
377
- @d = Class.new(@c)
378
- @d.has_hooks?(:before_save).must_equal false
379
- end
380
- end