sequel 5.28.0 → 5.33.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 (380) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +64 -1922
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +1 -1
  5. data/doc/advanced_associations.rdoc +4 -4
  6. data/doc/association_basics.rdoc +3 -3
  7. data/doc/code_order.rdoc +12 -2
  8. data/doc/model_dataset_method_design.rdoc +1 -1
  9. data/doc/postgresql.rdoc +71 -0
  10. data/doc/release_notes/5.29.0.txt +22 -0
  11. data/doc/release_notes/5.30.0.txt +20 -0
  12. data/doc/release_notes/5.31.0.txt +148 -0
  13. data/doc/release_notes/5.32.0.txt +46 -0
  14. data/doc/release_notes/5.33.0.txt +24 -0
  15. data/doc/testing.rdoc +1 -1
  16. data/lib/sequel/adapters/postgres.rb +5 -1
  17. data/lib/sequel/adapters/shared/access.rb +6 -6
  18. data/lib/sequel/adapters/shared/mssql.rb +5 -5
  19. data/lib/sequel/adapters/shared/mysql.rb +10 -10
  20. data/lib/sequel/adapters/shared/oracle.rb +16 -16
  21. data/lib/sequel/adapters/shared/postgres.rb +169 -14
  22. data/lib/sequel/adapters/shared/sqlanywhere.rb +9 -9
  23. data/lib/sequel/adapters/shared/sqlite.rb +32 -5
  24. data/lib/sequel/adapters/tinytds.rb +1 -1
  25. data/lib/sequel/connection_pool/sharded_threaded.rb +2 -2
  26. data/lib/sequel/connection_pool/threaded.rb +1 -1
  27. data/lib/sequel/core.rb +318 -314
  28. data/lib/sequel/database/query.rb +1 -1
  29. data/lib/sequel/database/schema_generator.rb +1 -1
  30. data/lib/sequel/database/transactions.rb +8 -12
  31. data/lib/sequel/dataset/misc.rb +2 -2
  32. data/lib/sequel/extensions/connection_expiration.rb +2 -2
  33. data/lib/sequel/extensions/connection_validator.rb +2 -2
  34. data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
  35. data/lib/sequel/extensions/index_caching.rb +9 -7
  36. data/lib/sequel/extensions/integer64.rb +2 -0
  37. data/lib/sequel/extensions/migration.rb +1 -1
  38. data/lib/sequel/extensions/pg_enum.rb +5 -2
  39. data/lib/sequel/extensions/pg_hstore.rb +6 -0
  40. data/lib/sequel/extensions/pg_inet.rb +13 -5
  41. data/lib/sequel/extensions/pg_interval.rb +2 -0
  42. data/lib/sequel/extensions/pg_range.rb +2 -0
  43. data/lib/sequel/extensions/pg_timestamptz.rb +2 -0
  44. data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
  45. data/lib/sequel/extensions/schema_dumper.rb +10 -4
  46. data/lib/sequel/extensions/server_block.rb +3 -3
  47. data/lib/sequel/model/associations.rb +18 -5
  48. data/lib/sequel/model/base.rb +60 -53
  49. data/lib/sequel/model/plugins.rb +1 -0
  50. data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
  51. data/lib/sequel/plugins/association_multi_add_remove.rb +2 -0
  52. data/lib/sequel/plugins/association_proxies.rb +2 -0
  53. data/lib/sequel/plugins/boolean_subsets.rb +4 -1
  54. data/lib/sequel/plugins/class_table_inheritance.rb +26 -26
  55. data/lib/sequel/plugins/dirty.rb +13 -13
  56. data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
  57. data/lib/sequel/plugins/forbid_lazy_load.rb +214 -0
  58. data/lib/sequel/plugins/json_serializer.rb +18 -11
  59. data/lib/sequel/plugins/single_table_inheritance.rb +15 -15
  60. data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
  61. data/lib/sequel/plugins/subclasses.rb +2 -0
  62. data/lib/sequel/plugins/throw_failures.rb +1 -1
  63. data/lib/sequel/timezones.rb +6 -4
  64. data/lib/sequel/version.rb +1 -1
  65. metadata +18 -367
  66. data/Rakefile +0 -151
  67. data/doc/release_notes/4.0.0.txt +0 -262
  68. data/doc/release_notes/4.1.0.txt +0 -85
  69. data/doc/release_notes/4.10.0.txt +0 -226
  70. data/doc/release_notes/4.11.0.txt +0 -147
  71. data/doc/release_notes/4.12.0.txt +0 -105
  72. data/doc/release_notes/4.13.0.txt +0 -169
  73. data/doc/release_notes/4.14.0.txt +0 -68
  74. data/doc/release_notes/4.15.0.txt +0 -56
  75. data/doc/release_notes/4.16.0.txt +0 -36
  76. data/doc/release_notes/4.17.0.txt +0 -38
  77. data/doc/release_notes/4.18.0.txt +0 -36
  78. data/doc/release_notes/4.19.0.txt +0 -45
  79. data/doc/release_notes/4.2.0.txt +0 -129
  80. data/doc/release_notes/4.20.0.txt +0 -79
  81. data/doc/release_notes/4.21.0.txt +0 -94
  82. data/doc/release_notes/4.22.0.txt +0 -72
  83. data/doc/release_notes/4.23.0.txt +0 -65
  84. data/doc/release_notes/4.24.0.txt +0 -99
  85. data/doc/release_notes/4.25.0.txt +0 -181
  86. data/doc/release_notes/4.26.0.txt +0 -44
  87. data/doc/release_notes/4.27.0.txt +0 -78
  88. data/doc/release_notes/4.28.0.txt +0 -57
  89. data/doc/release_notes/4.29.0.txt +0 -41
  90. data/doc/release_notes/4.3.0.txt +0 -40
  91. data/doc/release_notes/4.30.0.txt +0 -37
  92. data/doc/release_notes/4.31.0.txt +0 -57
  93. data/doc/release_notes/4.32.0.txt +0 -132
  94. data/doc/release_notes/4.33.0.txt +0 -88
  95. data/doc/release_notes/4.34.0.txt +0 -86
  96. data/doc/release_notes/4.35.0.txt +0 -130
  97. data/doc/release_notes/4.36.0.txt +0 -116
  98. data/doc/release_notes/4.37.0.txt +0 -50
  99. data/doc/release_notes/4.38.0.txt +0 -67
  100. data/doc/release_notes/4.39.0.txt +0 -127
  101. data/doc/release_notes/4.4.0.txt +0 -92
  102. data/doc/release_notes/4.40.0.txt +0 -179
  103. data/doc/release_notes/4.41.0.txt +0 -77
  104. data/doc/release_notes/4.42.0.txt +0 -221
  105. data/doc/release_notes/4.43.0.txt +0 -87
  106. data/doc/release_notes/4.44.0.txt +0 -125
  107. data/doc/release_notes/4.45.0.txt +0 -370
  108. data/doc/release_notes/4.46.0.txt +0 -404
  109. data/doc/release_notes/4.47.0.txt +0 -56
  110. data/doc/release_notes/4.48.0.txt +0 -293
  111. data/doc/release_notes/4.49.0.txt +0 -222
  112. data/doc/release_notes/4.5.0.txt +0 -34
  113. data/doc/release_notes/4.6.0.txt +0 -30
  114. data/doc/release_notes/4.7.0.txt +0 -103
  115. data/doc/release_notes/4.8.0.txt +0 -175
  116. data/doc/release_notes/4.9.0.txt +0 -190
  117. data/spec/adapter_spec.rb +0 -4
  118. data/spec/adapters/db2_spec.rb +0 -170
  119. data/spec/adapters/mssql_spec.rb +0 -828
  120. data/spec/adapters/mysql_spec.rb +0 -1060
  121. data/spec/adapters/oracle_spec.rb +0 -371
  122. data/spec/adapters/postgres_spec.rb +0 -4476
  123. data/spec/adapters/spec_helper.rb +0 -44
  124. data/spec/adapters/sqlanywhere_spec.rb +0 -97
  125. data/spec/adapters/sqlite_spec.rb +0 -652
  126. data/spec/bin_spec.rb +0 -278
  127. data/spec/core/connection_pool_spec.rb +0 -1250
  128. data/spec/core/database_spec.rb +0 -2915
  129. data/spec/core/dataset_spec.rb +0 -5547
  130. data/spec/core/deprecated_spec.rb +0 -70
  131. data/spec/core/expression_filters_spec.rb +0 -1498
  132. data/spec/core/mock_adapter_spec.rb +0 -722
  133. data/spec/core/object_graph_spec.rb +0 -336
  134. data/spec/core/placeholder_literalizer_spec.rb +0 -166
  135. data/spec/core/schema_generator_spec.rb +0 -214
  136. data/spec/core/schema_spec.rb +0 -1844
  137. data/spec/core/spec_helper.rb +0 -24
  138. data/spec/core/version_spec.rb +0 -14
  139. data/spec/core_extensions_spec.rb +0 -763
  140. data/spec/core_model_spec.rb +0 -2
  141. data/spec/core_spec.rb +0 -1
  142. data/spec/deprecation_helper.rb +0 -30
  143. data/spec/extensions/accessed_columns_spec.rb +0 -51
  144. data/spec/extensions/active_model_spec.rb +0 -99
  145. data/spec/extensions/after_initialize_spec.rb +0 -28
  146. data/spec/extensions/any_not_empty_spec.rb +0 -23
  147. data/spec/extensions/arbitrary_servers_spec.rb +0 -109
  148. data/spec/extensions/association_dependencies_spec.rb +0 -125
  149. data/spec/extensions/association_multi_add_remove_spec.rb +0 -1041
  150. data/spec/extensions/association_pks_spec.rb +0 -423
  151. data/spec/extensions/association_proxies_spec.rb +0 -100
  152. data/spec/extensions/auto_literal_strings_spec.rb +0 -205
  153. data/spec/extensions/auto_validations_spec.rb +0 -229
  154. data/spec/extensions/blacklist_security_spec.rb +0 -95
  155. data/spec/extensions/blank_spec.rb +0 -69
  156. data/spec/extensions/boolean_readers_spec.rb +0 -93
  157. data/spec/extensions/boolean_subsets_spec.rb +0 -47
  158. data/spec/extensions/caching_spec.rb +0 -273
  159. data/spec/extensions/caller_logging_spec.rb +0 -52
  160. data/spec/extensions/class_table_inheritance_spec.rb +0 -750
  161. data/spec/extensions/column_conflicts_spec.rb +0 -75
  162. data/spec/extensions/column_select_spec.rb +0 -129
  163. data/spec/extensions/columns_introspection_spec.rb +0 -90
  164. data/spec/extensions/columns_updated_spec.rb +0 -35
  165. data/spec/extensions/composition_spec.rb +0 -248
  166. data/spec/extensions/connection_expiration_spec.rb +0 -151
  167. data/spec/extensions/connection_validator_spec.rb +0 -144
  168. data/spec/extensions/constant_sql_override_spec.rb +0 -24
  169. data/spec/extensions/constraint_validations_plugin_spec.rb +0 -300
  170. data/spec/extensions/constraint_validations_spec.rb +0 -439
  171. data/spec/extensions/core_refinements_spec.rb +0 -528
  172. data/spec/extensions/csv_serializer_spec.rb +0 -183
  173. data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
  174. data/spec/extensions/dataset_associations_spec.rb +0 -365
  175. data/spec/extensions/dataset_source_alias_spec.rb +0 -51
  176. data/spec/extensions/date_arithmetic_spec.rb +0 -181
  177. data/spec/extensions/datetime_parse_to_time_spec.rb +0 -169
  178. data/spec/extensions/def_dataset_method_spec.rb +0 -100
  179. data/spec/extensions/defaults_setter_spec.rb +0 -150
  180. data/spec/extensions/delay_add_association_spec.rb +0 -73
  181. data/spec/extensions/dirty_spec.rb +0 -222
  182. data/spec/extensions/duplicate_columns_handler_spec.rb +0 -104
  183. data/spec/extensions/eager_each_spec.rb +0 -62
  184. data/spec/extensions/eager_graph_eager_spec.rb +0 -100
  185. data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
  186. data/spec/extensions/error_splitter_spec.rb +0 -18
  187. data/spec/extensions/error_sql_spec.rb +0 -20
  188. data/spec/extensions/escaped_like_spec.rb +0 -40
  189. data/spec/extensions/eval_inspect_spec.rb +0 -81
  190. data/spec/extensions/exclude_or_null_spec.rb +0 -15
  191. data/spec/extensions/finder_spec.rb +0 -260
  192. data/spec/extensions/force_encoding_spec.rb +0 -126
  193. data/spec/extensions/freeze_datasets_spec.rb +0 -31
  194. data/spec/extensions/graph_each_spec.rb +0 -113
  195. data/spec/extensions/hook_class_methods_spec.rb +0 -402
  196. data/spec/extensions/identifier_mangling_spec.rb +0 -201
  197. data/spec/extensions/implicit_subquery_spec.rb +0 -58
  198. data/spec/extensions/index_caching_spec.rb +0 -66
  199. data/spec/extensions/inflector_spec.rb +0 -183
  200. data/spec/extensions/input_transformer_spec.rb +0 -69
  201. data/spec/extensions/insert_conflict_spec.rb +0 -103
  202. data/spec/extensions/insert_returning_select_spec.rb +0 -72
  203. data/spec/extensions/instance_filters_spec.rb +0 -79
  204. data/spec/extensions/instance_hooks_spec.rb +0 -246
  205. data/spec/extensions/integer64_spec.rb +0 -22
  206. data/spec/extensions/inverted_subsets_spec.rb +0 -33
  207. data/spec/extensions/json_serializer_spec.rb +0 -336
  208. data/spec/extensions/lazy_attributes_spec.rb +0 -183
  209. data/spec/extensions/list_spec.rb +0 -291
  210. data/spec/extensions/looser_typecasting_spec.rb +0 -43
  211. data/spec/extensions/many_through_many_spec.rb +0 -2177
  212. data/spec/extensions/migration_spec.rb +0 -864
  213. data/spec/extensions/modification_detection_spec.rb +0 -93
  214. data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -92
  215. data/spec/extensions/named_timezones_spec.rb +0 -218
  216. data/spec/extensions/nested_attributes_spec.rb +0 -815
  217. data/spec/extensions/null_dataset_spec.rb +0 -85
  218. data/spec/extensions/optimistic_locking_spec.rb +0 -127
  219. data/spec/extensions/pagination_spec.rb +0 -116
  220. data/spec/extensions/pg_array_associations_spec.rb +0 -802
  221. data/spec/extensions/pg_array_ops_spec.rb +0 -144
  222. data/spec/extensions/pg_array_spec.rb +0 -398
  223. data/spec/extensions/pg_auto_constraint_validations_spec.rb +0 -209
  224. data/spec/extensions/pg_enum_spec.rb +0 -118
  225. data/spec/extensions/pg_extended_date_support_spec.rb +0 -126
  226. data/spec/extensions/pg_hstore_ops_spec.rb +0 -238
  227. data/spec/extensions/pg_hstore_spec.rb +0 -219
  228. data/spec/extensions/pg_inet_ops_spec.rb +0 -102
  229. data/spec/extensions/pg_inet_spec.rb +0 -72
  230. data/spec/extensions/pg_interval_spec.rb +0 -103
  231. data/spec/extensions/pg_json_ops_spec.rb +0 -356
  232. data/spec/extensions/pg_json_spec.rb +0 -451
  233. data/spec/extensions/pg_loose_count_spec.rb +0 -23
  234. data/spec/extensions/pg_range_ops_spec.rb +0 -60
  235. data/spec/extensions/pg_range_spec.rb +0 -600
  236. data/spec/extensions/pg_row_ops_spec.rb +0 -61
  237. data/spec/extensions/pg_row_plugin_spec.rb +0 -60
  238. data/spec/extensions/pg_row_spec.rb +0 -363
  239. data/spec/extensions/pg_static_cache_updater_spec.rb +0 -93
  240. data/spec/extensions/pg_timestamptz_spec.rb +0 -17
  241. data/spec/extensions/prepared_statements_safe_spec.rb +0 -66
  242. data/spec/extensions/prepared_statements_spec.rb +0 -177
  243. data/spec/extensions/pretty_table_spec.rb +0 -123
  244. data/spec/extensions/query_spec.rb +0 -94
  245. data/spec/extensions/rcte_tree_spec.rb +0 -387
  246. data/spec/extensions/round_timestamps_spec.rb +0 -39
  247. data/spec/extensions/s_spec.rb +0 -60
  248. data/spec/extensions/schema_caching_spec.rb +0 -64
  249. data/spec/extensions/schema_dumper_spec.rb +0 -870
  250. data/spec/extensions/select_remove_spec.rb +0 -38
  251. data/spec/extensions/sequel_4_dataset_methods_spec.rb +0 -121
  252. data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
  253. data/spec/extensions/serialization_spec.rb +0 -365
  254. data/spec/extensions/server_block_spec.rb +0 -135
  255. data/spec/extensions/server_logging_spec.rb +0 -45
  256. data/spec/extensions/sharding_spec.rb +0 -197
  257. data/spec/extensions/shared_caching_spec.rb +0 -151
  258. data/spec/extensions/single_table_inheritance_spec.rb +0 -347
  259. data/spec/extensions/singular_table_names_spec.rb +0 -22
  260. data/spec/extensions/skip_create_refresh_spec.rb +0 -18
  261. data/spec/extensions/spec_helper.rb +0 -70
  262. data/spec/extensions/split_array_nil_spec.rb +0 -24
  263. data/spec/extensions/split_values_spec.rb +0 -57
  264. data/spec/extensions/sql_comments_spec.rb +0 -33
  265. data/spec/extensions/sql_expr_spec.rb +0 -59
  266. data/spec/extensions/static_cache_cache_spec.rb +0 -35
  267. data/spec/extensions/static_cache_spec.rb +0 -471
  268. data/spec/extensions/string_agg_spec.rb +0 -90
  269. data/spec/extensions/string_date_time_spec.rb +0 -95
  270. data/spec/extensions/string_stripper_spec.rb +0 -68
  271. data/spec/extensions/subclasses_spec.rb +0 -79
  272. data/spec/extensions/subset_conditions_spec.rb +0 -38
  273. data/spec/extensions/symbol_aref_refinement_spec.rb +0 -28
  274. data/spec/extensions/symbol_as_refinement_spec.rb +0 -21
  275. data/spec/extensions/synchronize_sql_spec.rb +0 -124
  276. data/spec/extensions/table_select_spec.rb +0 -83
  277. data/spec/extensions/tactical_eager_loading_spec.rb +0 -402
  278. data/spec/extensions/thread_local_timezones_spec.rb +0 -67
  279. data/spec/extensions/throw_failures_spec.rb +0 -74
  280. data/spec/extensions/timestamps_spec.rb +0 -209
  281. data/spec/extensions/to_dot_spec.rb +0 -153
  282. data/spec/extensions/touch_spec.rb +0 -226
  283. data/spec/extensions/tree_spec.rb +0 -334
  284. data/spec/extensions/typecast_on_load_spec.rb +0 -86
  285. data/spec/extensions/unlimited_update_spec.rb +0 -21
  286. data/spec/extensions/update_or_create_spec.rb +0 -83
  287. data/spec/extensions/update_primary_key_spec.rb +0 -105
  288. data/spec/extensions/update_refresh_spec.rb +0 -59
  289. data/spec/extensions/uuid_spec.rb +0 -101
  290. data/spec/extensions/validate_associated_spec.rb +0 -52
  291. data/spec/extensions/validation_class_methods_spec.rb +0 -1040
  292. data/spec/extensions/validation_contexts_spec.rb +0 -31
  293. data/spec/extensions/validation_helpers_spec.rb +0 -525
  294. data/spec/extensions/whitelist_security_spec.rb +0 -157
  295. data/spec/extensions/xml_serializer_spec.rb +0 -213
  296. data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
  297. data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
  298. data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  299. data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  300. data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
  301. data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
  302. data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
  303. data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
  304. data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
  305. data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
  306. data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
  307. data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
  308. data/spec/files/double_migration/001_create_sessions.rb +0 -9
  309. data/spec/files/double_migration/002_create_nodes.rb +0 -19
  310. data/spec/files/double_migration/003_3_create_users.rb +0 -4
  311. data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
  312. data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
  313. data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  314. data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
  315. data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
  316. data/spec/files/empty_migration/001_create_sessions.rb +0 -9
  317. data/spec/files/empty_migration/002_create_nodes.rb +0 -0
  318. data/spec/files/empty_migration/003_3_create_users.rb +0 -4
  319. data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
  320. data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
  321. data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
  322. data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  323. data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
  324. data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  325. data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
  326. data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  327. data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
  328. data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
  329. data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  330. data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  331. data/spec/files/reversible_migrations/001_reversible.rb +0 -5
  332. data/spec/files/reversible_migrations/002_reversible.rb +0 -5
  333. data/spec/files/reversible_migrations/003_reversible.rb +0 -5
  334. data/spec/files/reversible_migrations/004_reversible.rb +0 -5
  335. data/spec/files/reversible_migrations/005_reversible.rb +0 -10
  336. data/spec/files/reversible_migrations/006_reversible.rb +0 -10
  337. data/spec/files/reversible_migrations/007_reversible.rb +0 -10
  338. data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
  339. data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
  340. data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
  341. data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
  342. data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
  343. data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
  344. data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
  345. data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
  346. data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
  347. data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
  348. data/spec/guards_helper.rb +0 -59
  349. data/spec/integration/associations_test.rb +0 -2597
  350. data/spec/integration/database_test.rb +0 -113
  351. data/spec/integration/dataset_test.rb +0 -2037
  352. data/spec/integration/eager_loader_test.rb +0 -687
  353. data/spec/integration/migrator_test.rb +0 -262
  354. data/spec/integration/model_test.rb +0 -203
  355. data/spec/integration/plugin_test.rb +0 -2423
  356. data/spec/integration/prepared_statement_test.rb +0 -405
  357. data/spec/integration/schema_test.rb +0 -903
  358. data/spec/integration/spec_helper.rb +0 -71
  359. data/spec/integration/timezone_test.rb +0 -86
  360. data/spec/integration/transaction_test.rb +0 -603
  361. data/spec/integration/type_test.rb +0 -127
  362. data/spec/model/association_reflection_spec.rb +0 -803
  363. data/spec/model/associations_spec.rb +0 -4738
  364. data/spec/model/base_spec.rb +0 -875
  365. data/spec/model/class_dataset_methods_spec.rb +0 -146
  366. data/spec/model/dataset_methods_spec.rb +0 -198
  367. data/spec/model/eager_loading_spec.rb +0 -2377
  368. data/spec/model/hooks_spec.rb +0 -370
  369. data/spec/model/inflector_spec.rb +0 -26
  370. data/spec/model/model_spec.rb +0 -956
  371. data/spec/model/plugins_spec.rb +0 -429
  372. data/spec/model/record_spec.rb +0 -2118
  373. data/spec/model/spec_helper.rb +0 -46
  374. data/spec/model/validations_spec.rb +0 -220
  375. data/spec/model_no_assoc_spec.rb +0 -1
  376. data/spec/model_spec.rb +0 -1
  377. data/spec/plugin_spec.rb +0 -1
  378. data/spec/sequel_coverage.rb +0 -15
  379. data/spec/sequel_warning.rb +0 -4
  380. data/spec/spec_config.rb +0 -12
@@ -1,93 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "pg_static_cache_updater extension" do
4
- before do
5
- @db = Sequel.connect('mock://postgres')
6
- @db.extend_datasets{def quote_identifiers?; false end}
7
- def @db.listen(chan, opts={})
8
- execute("LISTEN #{chan}")
9
- yield(*opts[:yield])
10
- end
11
- @db.extension(:pg_static_cache_updater)
12
- @model = Class.new(Sequel::Model(@db[:table]))
13
- @model.plugin :static_cache
14
- @db.sqls
15
- end
16
-
17
- it "#create_static_cache_update_function should create a function in the database" do
18
- @db.create_static_cache_update_function
19
- @db.sqls.first.gsub(/\s+/, ' ').must_equal " CREATE FUNCTION sequel_static_cache_update() RETURNS trigger LANGUAGE plpgsql AS 'BEGIN PERFORM pg_notify(''sequel_static_cache_update'', TG_RELID::text); RETURN NULL; END ' "
20
- end
21
-
22
- it "#create_static_cache_update_function should support :channel_name and :function_name options" do
23
- @db.create_static_cache_update_function(:channel_name=>'foo', :function_name=>'bar')
24
- @db.sqls.first.gsub(/\s+/, ' ').must_equal " CREATE FUNCTION bar() RETURNS trigger LANGUAGE plpgsql AS 'BEGIN PERFORM pg_notify(''foo'', TG_RELID::text); RETURN NULL; END ' "
25
- end
26
-
27
- it "#create_static_cache_update_trigger should create a trigger for the database table" do
28
- @db.create_static_cache_update_trigger(:tab)
29
- @db.sqls.first.gsub(/\s+/, ' ').must_equal "CREATE TRIGGER sequel_static_cache_update AFTER INSERT OR UPDATE OR DELETE ON tab EXECUTE PROCEDURE sequel_static_cache_update()"
30
- end
31
-
32
- it "#create_static_cache_update_trigger should support :trigger_name and :function_name options" do
33
- @db.create_static_cache_update_trigger(:tab, :trigger_name=>'foo', :function_name=>'bar')
34
- @db.sqls.first.gsub(/\s+/, ' ').must_equal "CREATE TRIGGER foo AFTER INSERT OR UPDATE OR DELETE ON tab EXECUTE PROCEDURE bar()"
35
- end
36
-
37
- it "#default_static_cache_update_name should return the default name for function, trigger, and channel" do
38
- @db.default_static_cache_update_name.must_equal :sequel_static_cache_update
39
- end
40
-
41
- it "#listen_for_static_cache_updates should listen for changes to model tables and reload model classes" do
42
- @db.fetch = {:v=>1234}
43
- @db.listen_for_static_cache_updates([@model], :yield=>[nil, nil, 1234]).join
44
- @db.sqls.must_equal ["SELECT CAST(CAST('table' AS regclass) AS oid) AS v LIMIT 1", "LISTEN sequel_static_cache_update", "SELECT * FROM table"]
45
- end
46
-
47
- it "#listen_for_static_cache_updates should not reload model classes if oid doesn't match" do
48
- @db.fetch = {:v=>1234}
49
- @db.listen_for_static_cache_updates([@model], :yield=>[nil, nil, 12345]).join
50
- @db.sqls.must_equal ["SELECT CAST(CAST('table' AS regclass) AS oid) AS v LIMIT 1", "LISTEN sequel_static_cache_update"]
51
- end
52
-
53
- it "#listen_for_static_cache_updates should support a single model argument" do
54
- @db.fetch = {:v=>1234}
55
- @db.listen_for_static_cache_updates(@model, :yield=>[nil, nil, 1234]).join
56
- @db.sqls.must_equal ["SELECT CAST(CAST('table' AS regclass) AS oid) AS v LIMIT 1", "LISTEN sequel_static_cache_update", "SELECT * FROM table"]
57
- end
58
-
59
- it "#listen_for_static_cache_updates should support the :channel_name option" do
60
- @db.fetch = {:v=>1234}
61
- @db.listen_for_static_cache_updates([@model], :yield=>[nil, nil, 12345], :channel_name=>:foo).join
62
- @db.sqls.must_equal ["SELECT CAST(CAST('table' AS regclass) AS oid) AS v LIMIT 1", "LISTEN foo"]
63
- end
64
-
65
- it "#listen_for_static_cache_updates should raise an error if given an empty array" do
66
- @db.fetch = {:v=>1234}
67
- proc{@db.listen_for_static_cache_updates([])}.must_raise(Sequel::Error)
68
- end
69
-
70
- it "#listen_for_static_cache_updates should raise an error if one of the models is not using the static cache plugin" do
71
- @db.fetch = {:v=>1234}
72
- proc{@db.listen_for_static_cache_updates(Class.new(Sequel::Model(@db[:table])))}.must_raise(Sequel::Error)
73
- end
74
-
75
- it "#listen_for_static_cache_updates should raise an error if the database doesn't respond to listen" do
76
- @db = Sequel.mock(:host=>'postgres')
77
- @db.extension(:pg_static_cache_updater)
78
- @db.fetch = {:v=>1234}
79
- proc{@db.listen_for_static_cache_updates(Class.new(Sequel::Model(@db[:table])))}.must_raise(Sequel::Error)
80
- end
81
-
82
- it "#listen_for_static_cache_updates should handle a :before_thread_exit option" do
83
- a = []
84
- @db.listen_for_static_cache_updates([@model], :yield=>[nil, nil, 12345], :before_thread_exit=>proc{a << 1}).join
85
- a.must_equal [1]
86
- end
87
-
88
- it "#listen_for_static_cache_updates should call :before_thread_exit option even if listen raises an exception" do
89
- a = []
90
- @db.listen_for_static_cache_updates([@model], :yield=>[nil, nil, 12345], :after_listen=>proc{raise ArgumentError}, :before_thread_exit=>proc{a << 1}).join
91
- a.must_equal [1]
92
- end
93
- end
@@ -1,17 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "pg_timestamptz extension" do
4
- before do
5
- @db = Sequel.mock(:host=>'postgres').extension :pg_timestamptz
6
- end
7
-
8
- it "should use timestamptz as default timestamp type" do
9
- @db.create_table(:t){Time :t; DateTime :tz; Time :ot, :only_time=>true}
10
- @db.sqls.must_equal ['CREATE TABLE "t" ("t" timestamptz, "tz" timestamptz, "ot" time)']
11
- end
12
-
13
- it "should use timestamptz when casting" do
14
- @db.get(Sequel.cast('a', Time))
15
- @db.sqls.must_equal ["SELECT CAST('a' AS timestamptz) AS \"v\" LIMIT 1"]
16
- end
17
- end
@@ -1,66 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "prepared_statements_safe plugin" do
4
- before do
5
- @db = Sequel.mock(:fetch=>{:id=>1, :name=>'foo', :i=>2}, :autoid=>proc{|sql| 1}, :numrows=>1, :servers=>{:read_only=>{}})
6
- @c = Class.new(Sequel::Model(@db[:people]))
7
- @c.columns :id, :name, :i
8
- @c.instance_variable_set(:@db_schema, {:i=>{}, :name=>{}, :id=>{:primary_key=>true}})
9
- @c.plugin :prepared_statements_safe
10
- @p = @c.load(:id=>1, :name=>'foo', :i=>2)
11
- @db.sqls
12
- end
13
-
14
- it "should load the prepared_statements plugin" do
15
- @c.plugins.must_include(Sequel::Plugins::PreparedStatements)
16
- end
17
-
18
- it "should set default values correctly" do
19
- @c.prepared_statements_column_defaults.must_equal(:name=>nil, :i=>nil)
20
- @c.instance_variable_set(:@db_schema, {:i=>{:default=>'f(x)'}, :name=>{:ruby_default=>'foo'}, :id=>{:primary_key=>true}, :bar=>{:ruby_default=>Sequel::CURRENT_TIMESTAMP}})
21
- Class.new(@c).prepared_statements_column_defaults.must_equal(:name=>'foo')
22
- end
23
-
24
- it "should set default values when creating" do
25
- @c.create
26
- @db.sqls.must_equal ['INSERT INTO people (i, name) VALUES (NULL, NULL)', "SELECT * FROM people WHERE (id = 1) LIMIT 1"]
27
- @c.create(:name=>'foo')
28
- @db.sqls.must_equal ["INSERT INTO people (i, name) VALUES (NULL, 'foo')", "SELECT * FROM people WHERE (id = 1) LIMIT 1"]
29
- @c.create(:name=>'foo', :i=>2)
30
- @db.sqls.must_equal ["INSERT INTO people (i, name) VALUES (2, 'foo')", "SELECT * FROM people WHERE (id = 1) LIMIT 1"]
31
- end
32
-
33
- it "should use database default values" do
34
- @c.instance_variable_set(:@db_schema, {:i=>{:ruby_default=>2}, :name=>{:ruby_default=>'foo'}, :id=>{:primary_key=>true}})
35
- c = Class.new(@c)
36
- c.create
37
- @db.sqls.must_equal ["INSERT INTO people (i, name) VALUES (2, 'foo')", "SELECT * FROM people WHERE (id = 1) LIMIT 1"]
38
- end
39
-
40
- it "should not set defaults for unparseable dataset default values" do
41
- @c.instance_variable_set(:@db_schema, {:i=>{:default=>'f(x)'}, :name=>{:ruby_default=>'foo'}, :id=>{:primary_key=>true}})
42
- c = Class.new(@c)
43
- c.create
44
- @db.sqls.must_equal ["INSERT INTO people (name) VALUES ('foo')", "SELECT * FROM people WHERE (id = 1) LIMIT 1"]
45
- end
46
-
47
- it "should save all fields when updating" do
48
- @p.update(:i=>3)
49
- @db.sqls.must_equal ["UPDATE people SET name = 'foo', i = 3 WHERE (id = 1)"]
50
- end
51
-
52
- it "should work with abstract classes" do
53
- c = Class.new(Sequel::Model)
54
- c.plugin :prepared_statements_safe
55
- c1 = Class.new(c)
56
- def c1.get_db_schema; @db_schema = {:i=>{:default=>'f(x)'}, :name=>{:ruby_default=>'foo'}, :id=>{:primary_key=>true}} end
57
- c1.set_dataset(:people)
58
- c1.prepared_statements_column_defaults.must_equal(:name=>'foo')
59
- Class.new(c1).prepared_statements_column_defaults.must_equal(:name=>'foo')
60
- end
61
-
62
- it "should freeze prepared statement column defaults when freezing model class" do
63
- @c.freeze
64
- @c.prepared_statements_column_defaults.frozen?.must_equal true
65
- end
66
- end
@@ -1,177 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "prepared_statements plugin" do
4
- before do
5
- @db = Sequel.mock(:fetch=>{:id=>1, :name=>'foo', :i=>2}, :autoid=>proc{|sql| 1}, :numrows=>1, :servers=>{:read_only=>{}})
6
- @c = Class.new(Sequel::Model(@db[:people]))
7
- @c.columns :id, :name, :i
8
- @c.set_primary_key :id
9
- @columns = "id, name, i"
10
- @c.plugin :prepared_statements
11
- @p = @c.load(:id=>1, :name=>'foo', :i=>2)
12
- @ds = @c.dataset
13
- @db.sqls
14
- end
15
-
16
- it "should work with implicit subqueries used for joined datasets" do
17
- @c.dataset = @c.dataset.from(:people, :people2)
18
- @db.sqls
19
- @c[1].must_equal @p
20
- @db.sqls.must_equal ["SELECT * FROM (SELECT * FROM people, people2) AS people WHERE (id = 1) LIMIT 1 -- read_only"]
21
- end
22
-
23
- it "should correctly lookup by primary key for dataset using subquery" do
24
- @c.dataset = @c.dataset.from(:people, :people2).from_self(:alias=>:people)
25
- @db.sqls
26
- @c[1].must_equal @p
27
- @db.sqls.must_equal ["SELECT * FROM (SELECT * FROM people, people2) AS people WHERE (id = 1) LIMIT 1 -- read_only"]
28
- end
29
-
30
- it "should use prepared statements for pk lookups only if default is not optimized" do
31
- @c.send(:use_prepared_statements_for_pk_lookup?).must_equal false
32
- @c.set_primary_key [:id, :name]
33
- @c.send(:use_prepared_statements_for_pk_lookup?).must_equal true
34
- @c.set_primary_key :id
35
- @c.dataset = @c.dataset.from(:people, :people2)
36
- @c.send(:use_prepared_statements_for_pk_lookup?).must_equal true
37
- @c.dataset = @db[:people].select(:id, :name, :i)
38
- @c.send(:use_prepared_statements_for_pk_lookup?).must_equal true
39
- end
40
-
41
- it "should raise Error for unsupported prepared statement types" do
42
- proc{@p.send(:use_prepared_statements_for?, :foo)}.must_raise Sequel::Error
43
- end
44
-
45
- prepared_statements_spec = shared_description do
46
- it "should correctly update instance" do
47
- @p.update(:name=>'bar').must_equal @c.load(:id=>1, :name=>'bar', :i => 2)
48
- @db.sqls.must_equal ["UPDATE people SET name = 'bar' WHERE (id = 1)"]
49
- end
50
-
51
- it "should correctly create instance if dataset supports insert_select" do
52
- @c.dataset_module do
53
- def supports_insert_select?
54
- true
55
- end
56
- def supports_returning?(type)
57
- true
58
- end
59
- def insert_select(h)
60
- cache_set(:_fetch, :id=>1, :name=>'foo', :i => 2)
61
- server(:default).with_sql_first(insert_select_sql(h))
62
- end
63
- def insert_select_sql(*v)
64
- insert_sql(*v) << " RETURNING #{(opts[:returning] && !opts[:returning].empty?) ? opts[:returning].map{|c| literal(c)}.join(', ') : '*'}"
65
- end
66
- end
67
- @c.create(:name=>'foo').must_equal @c.load(:id=>1, :name=>'foo', :i => 2)
68
- @db.sqls.must_equal ["INSERT INTO people (name) VALUES ('foo') RETURNING #{@columns}"]
69
- end
70
- end
71
-
72
- describe "when #use_prepared_statements_for? returns true" do
73
- before do
74
- @c.class_eval do
75
- def self.use_prepared_statements_for_pk_lookup?; true end
76
- def use_prepared_statements_for?(type) true end
77
- end
78
- end
79
-
80
- include prepared_statements_spec
81
-
82
- it "should correctly create instance" do
83
- @c.create(:name=>'foo').must_equal @c.load(:id=>1, :name=>'foo', :i => 2)
84
- @db.sqls.must_equal ["INSERT INTO people (name) VALUES ('foo')", "SELECT * FROM people WHERE id = 1"]
85
- end
86
-
87
- it "should correctly update instance when specifying server" do
88
- @p.set_server(:read_only).update(:name=>'bar').must_equal @c.load(:id=>1, :name=>'bar', :i => 2)
89
- @db.sqls.must_equal ["UPDATE people SET name = 'bar' WHERE (id = 1) -- read_only"]
90
- end
91
-
92
- it "should correctly create instance when specifying server" do
93
- @c.new(:name=>'foo').set_server(:read_only).save.must_equal @c.load(:id=>1, :name=>'foo', :i => 2)
94
- @db.sqls.must_equal ["INSERT INTO people (name) VALUES ('foo') -- read_only", "SELECT * FROM people WHERE id = 1 -- read_only"]
95
- end
96
-
97
- it "should correctly create instance if dataset supports insert_select when specifying server" do
98
- @c.dataset_module do
99
- def supports_insert_select?
100
- true
101
- end
102
- def supports_returning?(type)
103
- true
104
- end
105
- def insert_select(h)
106
- cache_set(:_fetch, :id=>1, :name=>'foo', :i => 2)
107
- server(:default).with_sql_first(insert_select_sql(h))
108
- end
109
- def insert_select_sql(*v)
110
- insert_sql(*v) << " RETURNING #{(opts[:returning] && !opts[:returning].empty?) ? opts[:returning].map{|c| literal(c)}.join(', ') : '*'}"
111
- end
112
- end
113
- @c.new(:name=>'foo').set_server(:read_only).save.must_equal @c.load(:id=>1, :name=>'foo', :i => 2)
114
- @db.sqls.must_equal ["INSERT INTO people (name) VALUES ('foo') RETURNING #{@columns} -- read_only"]
115
- end
116
-
117
- it "should work correctly when subclassing" do
118
- c = Class.new(@c)
119
- @db.sqls
120
- c.load(:id=>1, :name=>'foo', :i=>2).save
121
- @db.sqls.must_equal ["UPDATE people SET name = 'foo', i = 2 WHERE (id = 1)"]
122
- end
123
-
124
- it "should correctly handle without schema type when placeholder type specifiers are required" do
125
- @c.dataset = @ds.with_extend{def requires_placeholder_type_specifiers?; true end}
126
- @p.save
127
- @db.sqls.must_equal ["UPDATE people SET name = 'foo', i = 2 WHERE (id = 1)"]
128
- end
129
-
130
- it "should correctly handle with schema type when placeholder type specifiers are required" do
131
- @c.dataset = @ds.with_extend do
132
- def requires_placeholder_type_specifiers?; true end
133
- def prepared_statement_modules
134
- [Module.new do
135
- def literal_symbol_append(sql, v)
136
- if @opts[:bind_vars] && /\A\$(.*)\z/ =~ v
137
- literal_append(sql, prepared_arg($1.split('__')[0].to_sym))
138
- else
139
- super
140
- end
141
- end
142
- end]
143
- end
144
- end
145
- @c.db_schema[:id][:type] = :integer
146
- @p.save
147
- @db.sqls.must_equal ["UPDATE people SET name = 'foo', i = 2 WHERE (id = 1)"]
148
- end
149
- end
150
-
151
- describe "when #use_prepared_statements_for? returns false" do
152
- before do
153
- @columns = "*"
154
- @c.class_eval do
155
- def self.use_prepared_statements_for_pk_lookup?; false end
156
- def use_prepared_statements_for?(type) false end
157
- end
158
- end
159
-
160
- include prepared_statements_spec
161
-
162
- it "should correctly create instance" do
163
- @c.create(:name=>'foo').must_equal @c.load(:id=>1, :name=>'foo', :i => 2)
164
- @db.sqls.must_equal ["INSERT INTO people (name) VALUES ('foo')", "SELECT #{@columns} FROM people WHERE id = 1"]
165
- end
166
-
167
- it "should correctly lookup by primary key" do
168
- @c[1].must_equal @p
169
- @db.sqls.must_equal ["SELECT * FROM people WHERE id = 1 -- read_only"]
170
- end
171
-
172
- it "should correctly delete instance" do
173
- @p.destroy.must_equal @p
174
- @db.sqls.must_equal ["DELETE FROM people WHERE id = 1"]
175
- end
176
- end
177
- end
@@ -1,123 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- require 'stringio'
4
- Sequel.extension :pretty_table
5
-
6
- describe "Dataset#print" do
7
- before do
8
- @output = StringIO.new
9
- @orig_stdout = $stdout
10
- $stdout = @output
11
- @dataset = Sequel.mock(:fetch=>[{:a=>1, :b=>2}, {:a=>3, :b=>4}, {:a=>5, :b=>6}])[:items].extension(:pretty_table)
12
- end
13
-
14
- after do
15
- $stdout = @orig_stdout
16
- end
17
-
18
- it "should print out a table with the values" do
19
- @dataset.print(:a, :b)
20
- @output.rewind
21
- @output.read.must_equal \
22
- "+-+-+\n|a|b|\n+-+-+\n|1|2|\n|3|4|\n|5|6|\n+-+-+\n"
23
- end
24
-
25
- it "should default to the dataset's columns" do
26
- @dataset.columns(:a, :b)
27
- @dataset.print
28
- @output.rewind
29
- @output.read.must_equal \
30
- "+-+-+\n|a|b|\n+-+-+\n|1|2|\n|3|4|\n|5|6|\n+-+-+\n"
31
- end
32
- end
33
-
34
- describe "PrettyTable" do
35
- before do
36
- @data1 = [
37
- {:x => 3, :y => 4}
38
- ]
39
-
40
- @data2 = [
41
- {:a => 23, :b => 45},
42
- {:a => 45, :b => 2377}
43
- ]
44
-
45
- @data3 = [
46
- {:aaa => 1},
47
- {:bb => 2},
48
- {:c => 3.1}
49
- ]
50
-
51
- @output = StringIO.new
52
- @orig_stdout = $stdout
53
- $stdout = @output
54
- end
55
-
56
- after do
57
- $stdout = @orig_stdout
58
- end
59
-
60
- it "should infer the columns if not given" do
61
- Sequel::PrettyTable.print(@data1)
62
- @output.rewind
63
- @output.read.must_equal(<<OUTPUT)
64
- +-+-+
65
- |x|y|
66
- +-+-+
67
- |3|4|
68
- +-+-+
69
- OUTPUT
70
- end
71
-
72
- it "should have #string return the string without printing" do
73
- Sequel::PrettyTable.string(@data1).must_equal((<<OUTPUT).chomp)
74
- +-+-+
75
- |x|y|
76
- +-+-+
77
- |3|4|
78
- +-+-+
79
- OUTPUT
80
- @output.rewind
81
- @output.read.must_equal ''
82
- end
83
-
84
- it "should calculate the maximum width of each column correctly" do
85
- Sequel::PrettyTable.print(@data2, [:a, :b])
86
- @output.rewind
87
- @output.read.must_equal(<<OUTPUT)
88
- +--+----+
89
- |a |b |
90
- +--+----+
91
- |23| 45|
92
- |45|2377|
93
- +--+----+
94
- OUTPUT
95
- end
96
-
97
- it "should also take header width into account" do
98
- Sequel::PrettyTable.print(@data3, [:aaa, :bb, :c])
99
- @output.rewind
100
- @output.read.must_equal(<<OUTPUT)
101
- +---+--+---+
102
- |aaa|bb|c |
103
- +---+--+---+
104
- | 1| | |
105
- | | 2| |
106
- | | |3.1|
107
- +---+--+---+
108
- OUTPUT
109
- end
110
-
111
- it "should print only the specified columns" do
112
- Sequel::PrettyTable.print(@data2, [:a])
113
- @output.rewind
114
- @output.read.must_equal(<<OUTPUT)
115
- +--+
116
- |a |
117
- +--+
118
- |23|
119
- |45|
120
- +--+
121
- OUTPUT
122
- end
123
- end