sequel 5.29.0 → 5.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (387) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +70 -1922
  3. data/README.rdoc +1 -1
  4. data/doc/advanced_associations.rdoc +4 -4
  5. data/doc/association_basics.rdoc +3 -3
  6. data/doc/code_order.rdoc +12 -2
  7. data/doc/model_dataset_method_design.rdoc +1 -1
  8. data/doc/postgresql.rdoc +71 -0
  9. data/doc/release_notes/5.30.0.txt +20 -0
  10. data/doc/release_notes/5.31.0.txt +148 -0
  11. data/doc/release_notes/5.32.0.txt +46 -0
  12. data/doc/release_notes/5.33.0.txt +24 -0
  13. data/doc/release_notes/5.34.0.txt +40 -0
  14. data/doc/testing.rdoc +1 -1
  15. data/lib/sequel/adapters/shared/access.rb +6 -6
  16. data/lib/sequel/adapters/shared/mssql.rb +5 -5
  17. data/lib/sequel/adapters/shared/mysql.rb +9 -9
  18. data/lib/sequel/adapters/shared/oracle.rb +16 -16
  19. data/lib/sequel/adapters/shared/postgres.rb +169 -14
  20. data/lib/sequel/adapters/shared/sqlanywhere.rb +9 -9
  21. data/lib/sequel/adapters/shared/sqlite.rb +32 -5
  22. data/lib/sequel/connection_pool/sharded_single.rb +4 -1
  23. data/lib/sequel/connection_pool/sharded_threaded.rb +12 -12
  24. data/lib/sequel/connection_pool/single.rb +1 -1
  25. data/lib/sequel/connection_pool/threaded.rb +2 -2
  26. data/lib/sequel/core.rb +318 -314
  27. data/lib/sequel/database/connecting.rb +1 -1
  28. data/lib/sequel/database/misc.rb +16 -10
  29. data/lib/sequel/database/query.rb +3 -1
  30. data/lib/sequel/database/schema_generator.rb +0 -1
  31. data/lib/sequel/database/schema_methods.rb +15 -16
  32. data/lib/sequel/database/transactions.rb +12 -13
  33. data/lib/sequel/dataset/placeholder_literalizer.rb +3 -7
  34. data/lib/sequel/dataset/query.rb +4 -3
  35. data/lib/sequel/deprecated.rb +2 -0
  36. data/lib/sequel/exceptions.rb +2 -0
  37. data/lib/sequel/extensions/connection_expiration.rb +2 -2
  38. data/lib/sequel/extensions/connection_validator.rb +2 -2
  39. data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
  40. data/lib/sequel/extensions/index_caching.rb +9 -7
  41. data/lib/sequel/extensions/integer64.rb +2 -0
  42. data/lib/sequel/extensions/migration.rb +1 -1
  43. data/lib/sequel/extensions/pg_enum.rb +5 -2
  44. data/lib/sequel/extensions/pg_hstore.rb +6 -0
  45. data/lib/sequel/extensions/pg_inet.rb +13 -5
  46. data/lib/sequel/extensions/pg_interval.rb +2 -0
  47. data/lib/sequel/extensions/pg_range.rb +2 -0
  48. data/lib/sequel/extensions/pg_timestamptz.rb +2 -0
  49. data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
  50. data/lib/sequel/extensions/schema_dumper.rb +10 -4
  51. data/lib/sequel/extensions/server_block.rb +3 -3
  52. data/lib/sequel/model.rb +2 -0
  53. data/lib/sequel/model/associations.rb +30 -18
  54. data/lib/sequel/model/base.rb +64 -55
  55. data/lib/sequel/model/plugins.rb +3 -3
  56. data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
  57. data/lib/sequel/plugins/association_multi_add_remove.rb +2 -0
  58. data/lib/sequel/plugins/association_pks.rb +57 -16
  59. data/lib/sequel/plugins/association_proxies.rb +2 -0
  60. data/lib/sequel/plugins/boolean_subsets.rb +4 -1
  61. data/lib/sequel/plugins/class_table_inheritance.rb +26 -26
  62. data/lib/sequel/plugins/dirty.rb +13 -13
  63. data/lib/sequel/plugins/forbid_lazy_load.rb +214 -0
  64. data/lib/sequel/plugins/json_serializer.rb +3 -7
  65. data/lib/sequel/plugins/rcte_tree.rb +2 -2
  66. data/lib/sequel/plugins/single_table_inheritance.rb +15 -15
  67. data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
  68. data/lib/sequel/plugins/subclasses.rb +2 -0
  69. data/lib/sequel/timezones.rb +6 -4
  70. data/lib/sequel/version.rb +1 -1
  71. metadata +17 -368
  72. data/Rakefile +0 -151
  73. data/doc/release_notes/4.0.0.txt +0 -262
  74. data/doc/release_notes/4.1.0.txt +0 -85
  75. data/doc/release_notes/4.10.0.txt +0 -226
  76. data/doc/release_notes/4.11.0.txt +0 -147
  77. data/doc/release_notes/4.12.0.txt +0 -105
  78. data/doc/release_notes/4.13.0.txt +0 -169
  79. data/doc/release_notes/4.14.0.txt +0 -68
  80. data/doc/release_notes/4.15.0.txt +0 -56
  81. data/doc/release_notes/4.16.0.txt +0 -36
  82. data/doc/release_notes/4.17.0.txt +0 -38
  83. data/doc/release_notes/4.18.0.txt +0 -36
  84. data/doc/release_notes/4.19.0.txt +0 -45
  85. data/doc/release_notes/4.2.0.txt +0 -129
  86. data/doc/release_notes/4.20.0.txt +0 -79
  87. data/doc/release_notes/4.21.0.txt +0 -94
  88. data/doc/release_notes/4.22.0.txt +0 -72
  89. data/doc/release_notes/4.23.0.txt +0 -65
  90. data/doc/release_notes/4.24.0.txt +0 -99
  91. data/doc/release_notes/4.25.0.txt +0 -181
  92. data/doc/release_notes/4.26.0.txt +0 -44
  93. data/doc/release_notes/4.27.0.txt +0 -78
  94. data/doc/release_notes/4.28.0.txt +0 -57
  95. data/doc/release_notes/4.29.0.txt +0 -41
  96. data/doc/release_notes/4.3.0.txt +0 -40
  97. data/doc/release_notes/4.30.0.txt +0 -37
  98. data/doc/release_notes/4.31.0.txt +0 -57
  99. data/doc/release_notes/4.32.0.txt +0 -132
  100. data/doc/release_notes/4.33.0.txt +0 -88
  101. data/doc/release_notes/4.34.0.txt +0 -86
  102. data/doc/release_notes/4.35.0.txt +0 -130
  103. data/doc/release_notes/4.36.0.txt +0 -116
  104. data/doc/release_notes/4.37.0.txt +0 -50
  105. data/doc/release_notes/4.38.0.txt +0 -67
  106. data/doc/release_notes/4.39.0.txt +0 -127
  107. data/doc/release_notes/4.4.0.txt +0 -92
  108. data/doc/release_notes/4.40.0.txt +0 -179
  109. data/doc/release_notes/4.41.0.txt +0 -77
  110. data/doc/release_notes/4.42.0.txt +0 -221
  111. data/doc/release_notes/4.43.0.txt +0 -87
  112. data/doc/release_notes/4.44.0.txt +0 -125
  113. data/doc/release_notes/4.45.0.txt +0 -370
  114. data/doc/release_notes/4.46.0.txt +0 -404
  115. data/doc/release_notes/4.47.0.txt +0 -56
  116. data/doc/release_notes/4.48.0.txt +0 -293
  117. data/doc/release_notes/4.49.0.txt +0 -222
  118. data/doc/release_notes/4.5.0.txt +0 -34
  119. data/doc/release_notes/4.6.0.txt +0 -30
  120. data/doc/release_notes/4.7.0.txt +0 -103
  121. data/doc/release_notes/4.8.0.txt +0 -175
  122. data/doc/release_notes/4.9.0.txt +0 -190
  123. data/spec/adapter_spec.rb +0 -4
  124. data/spec/adapters/db2_spec.rb +0 -170
  125. data/spec/adapters/mssql_spec.rb +0 -828
  126. data/spec/adapters/mysql_spec.rb +0 -1060
  127. data/spec/adapters/oracle_spec.rb +0 -371
  128. data/spec/adapters/postgres_spec.rb +0 -4476
  129. data/spec/adapters/spec_helper.rb +0 -44
  130. data/spec/adapters/sqlanywhere_spec.rb +0 -97
  131. data/spec/adapters/sqlite_spec.rb +0 -652
  132. data/spec/bin_spec.rb +0 -278
  133. data/spec/core/connection_pool_spec.rb +0 -1250
  134. data/spec/core/database_spec.rb +0 -2915
  135. data/spec/core/dataset_spec.rb +0 -5544
  136. data/spec/core/deprecated_spec.rb +0 -70
  137. data/spec/core/expression_filters_spec.rb +0 -1498
  138. data/spec/core/mock_adapter_spec.rb +0 -722
  139. data/spec/core/object_graph_spec.rb +0 -336
  140. data/spec/core/placeholder_literalizer_spec.rb +0 -166
  141. data/spec/core/schema_generator_spec.rb +0 -214
  142. data/spec/core/schema_spec.rb +0 -1844
  143. data/spec/core/spec_helper.rb +0 -24
  144. data/spec/core/version_spec.rb +0 -14
  145. data/spec/core_extensions_spec.rb +0 -763
  146. data/spec/core_model_spec.rb +0 -2
  147. data/spec/core_spec.rb +0 -1
  148. data/spec/deprecation_helper.rb +0 -30
  149. data/spec/extensions/accessed_columns_spec.rb +0 -51
  150. data/spec/extensions/active_model_spec.rb +0 -99
  151. data/spec/extensions/after_initialize_spec.rb +0 -28
  152. data/spec/extensions/any_not_empty_spec.rb +0 -23
  153. data/spec/extensions/arbitrary_servers_spec.rb +0 -109
  154. data/spec/extensions/association_dependencies_spec.rb +0 -125
  155. data/spec/extensions/association_multi_add_remove_spec.rb +0 -1041
  156. data/spec/extensions/association_pks_spec.rb +0 -423
  157. data/spec/extensions/association_proxies_spec.rb +0 -100
  158. data/spec/extensions/auto_literal_strings_spec.rb +0 -205
  159. data/spec/extensions/auto_validations_spec.rb +0 -229
  160. data/spec/extensions/blacklist_security_spec.rb +0 -95
  161. data/spec/extensions/blank_spec.rb +0 -69
  162. data/spec/extensions/boolean_readers_spec.rb +0 -93
  163. data/spec/extensions/boolean_subsets_spec.rb +0 -47
  164. data/spec/extensions/caching_spec.rb +0 -273
  165. data/spec/extensions/caller_logging_spec.rb +0 -52
  166. data/spec/extensions/class_table_inheritance_spec.rb +0 -750
  167. data/spec/extensions/column_conflicts_spec.rb +0 -75
  168. data/spec/extensions/column_select_spec.rb +0 -129
  169. data/spec/extensions/columns_introspection_spec.rb +0 -90
  170. data/spec/extensions/columns_updated_spec.rb +0 -35
  171. data/spec/extensions/composition_spec.rb +0 -248
  172. data/spec/extensions/connection_expiration_spec.rb +0 -151
  173. data/spec/extensions/connection_validator_spec.rb +0 -144
  174. data/spec/extensions/constant_sql_override_spec.rb +0 -24
  175. data/spec/extensions/constraint_validations_plugin_spec.rb +0 -300
  176. data/spec/extensions/constraint_validations_spec.rb +0 -439
  177. data/spec/extensions/core_refinements_spec.rb +0 -528
  178. data/spec/extensions/csv_serializer_spec.rb +0 -183
  179. data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
  180. data/spec/extensions/dataset_associations_spec.rb +0 -365
  181. data/spec/extensions/dataset_source_alias_spec.rb +0 -51
  182. data/spec/extensions/date_arithmetic_spec.rb +0 -181
  183. data/spec/extensions/datetime_parse_to_time_spec.rb +0 -169
  184. data/spec/extensions/def_dataset_method_spec.rb +0 -100
  185. data/spec/extensions/defaults_setter_spec.rb +0 -150
  186. data/spec/extensions/delay_add_association_spec.rb +0 -73
  187. data/spec/extensions/dirty_spec.rb +0 -222
  188. data/spec/extensions/duplicate_columns_handler_spec.rb +0 -104
  189. data/spec/extensions/eager_each_spec.rb +0 -62
  190. data/spec/extensions/eager_graph_eager_spec.rb +0 -100
  191. data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
  192. data/spec/extensions/empty_failure_backtraces_spec.rb +0 -60
  193. data/spec/extensions/error_splitter_spec.rb +0 -18
  194. data/spec/extensions/error_sql_spec.rb +0 -20
  195. data/spec/extensions/escaped_like_spec.rb +0 -40
  196. data/spec/extensions/eval_inspect_spec.rb +0 -81
  197. data/spec/extensions/exclude_or_null_spec.rb +0 -15
  198. data/spec/extensions/finder_spec.rb +0 -260
  199. data/spec/extensions/force_encoding_spec.rb +0 -126
  200. data/spec/extensions/freeze_datasets_spec.rb +0 -31
  201. data/spec/extensions/graph_each_spec.rb +0 -113
  202. data/spec/extensions/hook_class_methods_spec.rb +0 -402
  203. data/spec/extensions/identifier_mangling_spec.rb +0 -201
  204. data/spec/extensions/implicit_subquery_spec.rb +0 -58
  205. data/spec/extensions/index_caching_spec.rb +0 -66
  206. data/spec/extensions/inflector_spec.rb +0 -183
  207. data/spec/extensions/input_transformer_spec.rb +0 -69
  208. data/spec/extensions/insert_conflict_spec.rb +0 -103
  209. data/spec/extensions/insert_returning_select_spec.rb +0 -72
  210. data/spec/extensions/instance_filters_spec.rb +0 -79
  211. data/spec/extensions/instance_hooks_spec.rb +0 -246
  212. data/spec/extensions/integer64_spec.rb +0 -22
  213. data/spec/extensions/inverted_subsets_spec.rb +0 -33
  214. data/spec/extensions/json_serializer_spec.rb +0 -346
  215. data/spec/extensions/lazy_attributes_spec.rb +0 -183
  216. data/spec/extensions/list_spec.rb +0 -291
  217. data/spec/extensions/looser_typecasting_spec.rb +0 -43
  218. data/spec/extensions/many_through_many_spec.rb +0 -2177
  219. data/spec/extensions/migration_spec.rb +0 -864
  220. data/spec/extensions/modification_detection_spec.rb +0 -93
  221. data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -92
  222. data/spec/extensions/named_timezones_spec.rb +0 -218
  223. data/spec/extensions/nested_attributes_spec.rb +0 -815
  224. data/spec/extensions/null_dataset_spec.rb +0 -85
  225. data/spec/extensions/optimistic_locking_spec.rb +0 -127
  226. data/spec/extensions/pagination_spec.rb +0 -116
  227. data/spec/extensions/pg_array_associations_spec.rb +0 -802
  228. data/spec/extensions/pg_array_ops_spec.rb +0 -144
  229. data/spec/extensions/pg_array_spec.rb +0 -398
  230. data/spec/extensions/pg_auto_constraint_validations_spec.rb +0 -209
  231. data/spec/extensions/pg_enum_spec.rb +0 -118
  232. data/spec/extensions/pg_extended_date_support_spec.rb +0 -126
  233. data/spec/extensions/pg_hstore_ops_spec.rb +0 -238
  234. data/spec/extensions/pg_hstore_spec.rb +0 -219
  235. data/spec/extensions/pg_inet_ops_spec.rb +0 -102
  236. data/spec/extensions/pg_inet_spec.rb +0 -72
  237. data/spec/extensions/pg_interval_spec.rb +0 -103
  238. data/spec/extensions/pg_json_ops_spec.rb +0 -356
  239. data/spec/extensions/pg_json_spec.rb +0 -451
  240. data/spec/extensions/pg_loose_count_spec.rb +0 -23
  241. data/spec/extensions/pg_range_ops_spec.rb +0 -60
  242. data/spec/extensions/pg_range_spec.rb +0 -600
  243. data/spec/extensions/pg_row_ops_spec.rb +0 -61
  244. data/spec/extensions/pg_row_plugin_spec.rb +0 -60
  245. data/spec/extensions/pg_row_spec.rb +0 -363
  246. data/spec/extensions/pg_static_cache_updater_spec.rb +0 -93
  247. data/spec/extensions/pg_timestamptz_spec.rb +0 -17
  248. data/spec/extensions/prepared_statements_safe_spec.rb +0 -66
  249. data/spec/extensions/prepared_statements_spec.rb +0 -177
  250. data/spec/extensions/pretty_table_spec.rb +0 -123
  251. data/spec/extensions/query_spec.rb +0 -94
  252. data/spec/extensions/rcte_tree_spec.rb +0 -387
  253. data/spec/extensions/round_timestamps_spec.rb +0 -39
  254. data/spec/extensions/s_spec.rb +0 -60
  255. data/spec/extensions/schema_caching_spec.rb +0 -64
  256. data/spec/extensions/schema_dumper_spec.rb +0 -870
  257. data/spec/extensions/select_remove_spec.rb +0 -38
  258. data/spec/extensions/sequel_4_dataset_methods_spec.rb +0 -121
  259. data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
  260. data/spec/extensions/serialization_spec.rb +0 -365
  261. data/spec/extensions/server_block_spec.rb +0 -135
  262. data/spec/extensions/server_logging_spec.rb +0 -45
  263. data/spec/extensions/sharding_spec.rb +0 -197
  264. data/spec/extensions/shared_caching_spec.rb +0 -151
  265. data/spec/extensions/single_table_inheritance_spec.rb +0 -347
  266. data/spec/extensions/singular_table_names_spec.rb +0 -22
  267. data/spec/extensions/skip_create_refresh_spec.rb +0 -18
  268. data/spec/extensions/spec_helper.rb +0 -70
  269. data/spec/extensions/split_array_nil_spec.rb +0 -24
  270. data/spec/extensions/split_values_spec.rb +0 -57
  271. data/spec/extensions/sql_comments_spec.rb +0 -33
  272. data/spec/extensions/sql_expr_spec.rb +0 -59
  273. data/spec/extensions/static_cache_cache_spec.rb +0 -35
  274. data/spec/extensions/static_cache_spec.rb +0 -471
  275. data/spec/extensions/string_agg_spec.rb +0 -90
  276. data/spec/extensions/string_date_time_spec.rb +0 -95
  277. data/spec/extensions/string_stripper_spec.rb +0 -68
  278. data/spec/extensions/subclasses_spec.rb +0 -79
  279. data/spec/extensions/subset_conditions_spec.rb +0 -38
  280. data/spec/extensions/symbol_aref_refinement_spec.rb +0 -28
  281. data/spec/extensions/symbol_as_refinement_spec.rb +0 -21
  282. data/spec/extensions/synchronize_sql_spec.rb +0 -124
  283. data/spec/extensions/table_select_spec.rb +0 -83
  284. data/spec/extensions/tactical_eager_loading_spec.rb +0 -402
  285. data/spec/extensions/thread_local_timezones_spec.rb +0 -67
  286. data/spec/extensions/throw_failures_spec.rb +0 -74
  287. data/spec/extensions/timestamps_spec.rb +0 -209
  288. data/spec/extensions/to_dot_spec.rb +0 -153
  289. data/spec/extensions/touch_spec.rb +0 -226
  290. data/spec/extensions/tree_spec.rb +0 -334
  291. data/spec/extensions/typecast_on_load_spec.rb +0 -86
  292. data/spec/extensions/unlimited_update_spec.rb +0 -21
  293. data/spec/extensions/update_or_create_spec.rb +0 -83
  294. data/spec/extensions/update_primary_key_spec.rb +0 -105
  295. data/spec/extensions/update_refresh_spec.rb +0 -59
  296. data/spec/extensions/uuid_spec.rb +0 -101
  297. data/spec/extensions/validate_associated_spec.rb +0 -52
  298. data/spec/extensions/validation_class_methods_spec.rb +0 -1040
  299. data/spec/extensions/validation_contexts_spec.rb +0 -31
  300. data/spec/extensions/validation_helpers_spec.rb +0 -525
  301. data/spec/extensions/whitelist_security_spec.rb +0 -157
  302. data/spec/extensions/xml_serializer_spec.rb +0 -213
  303. data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
  304. data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
  305. data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  306. data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  307. data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
  308. data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
  309. data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
  310. data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
  311. data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
  312. data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
  313. data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
  314. data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
  315. data/spec/files/double_migration/001_create_sessions.rb +0 -9
  316. data/spec/files/double_migration/002_create_nodes.rb +0 -19
  317. data/spec/files/double_migration/003_3_create_users.rb +0 -4
  318. data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
  319. data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
  320. data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  321. data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
  322. data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
  323. data/spec/files/empty_migration/001_create_sessions.rb +0 -9
  324. data/spec/files/empty_migration/002_create_nodes.rb +0 -0
  325. data/spec/files/empty_migration/003_3_create_users.rb +0 -4
  326. data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
  327. data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
  328. data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
  329. data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  330. data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
  331. data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  332. data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
  333. data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  334. data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
  335. data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
  336. data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  337. data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  338. data/spec/files/reversible_migrations/001_reversible.rb +0 -5
  339. data/spec/files/reversible_migrations/002_reversible.rb +0 -5
  340. data/spec/files/reversible_migrations/003_reversible.rb +0 -5
  341. data/spec/files/reversible_migrations/004_reversible.rb +0 -5
  342. data/spec/files/reversible_migrations/005_reversible.rb +0 -10
  343. data/spec/files/reversible_migrations/006_reversible.rb +0 -10
  344. data/spec/files/reversible_migrations/007_reversible.rb +0 -10
  345. data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
  346. data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
  347. data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
  348. data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
  349. data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
  350. data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
  351. data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
  352. data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
  353. data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
  354. data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
  355. data/spec/guards_helper.rb +0 -59
  356. data/spec/integration/associations_test.rb +0 -2597
  357. data/spec/integration/database_test.rb +0 -113
  358. data/spec/integration/dataset_test.rb +0 -2037
  359. data/spec/integration/eager_loader_test.rb +0 -687
  360. data/spec/integration/migrator_test.rb +0 -262
  361. data/spec/integration/model_test.rb +0 -203
  362. data/spec/integration/plugin_test.rb +0 -2423
  363. data/spec/integration/prepared_statement_test.rb +0 -405
  364. data/spec/integration/schema_test.rb +0 -903
  365. data/spec/integration/spec_helper.rb +0 -71
  366. data/spec/integration/timezone_test.rb +0 -86
  367. data/spec/integration/transaction_test.rb +0 -603
  368. data/spec/integration/type_test.rb +0 -127
  369. data/spec/model/association_reflection_spec.rb +0 -803
  370. data/spec/model/associations_spec.rb +0 -4738
  371. data/spec/model/base_spec.rb +0 -875
  372. data/spec/model/class_dataset_methods_spec.rb +0 -146
  373. data/spec/model/dataset_methods_spec.rb +0 -198
  374. data/spec/model/eager_loading_spec.rb +0 -2377
  375. data/spec/model/hooks_spec.rb +0 -370
  376. data/spec/model/inflector_spec.rb +0 -26
  377. data/spec/model/model_spec.rb +0 -956
  378. data/spec/model/plugins_spec.rb +0 -429
  379. data/spec/model/record_spec.rb +0 -2118
  380. data/spec/model/spec_helper.rb +0 -46
  381. data/spec/model/validations_spec.rb +0 -220
  382. data/spec/model_no_assoc_spec.rb +0 -1
  383. data/spec/model_spec.rb +0 -1
  384. data/spec/plugin_spec.rb +0 -1
  385. data/spec/sequel_coverage.rb +0 -15
  386. data/spec/sequel_warning.rb +0 -5
  387. data/spec/spec_config.rb +0 -12
@@ -1,24 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "split_array_nil extension" do
4
- before do
5
- @ds = Sequel.mock[:table].extension(:split_array_nil)
6
- end
7
-
8
- it "should split IN with nil in array into separate OR IS NULL clause" do
9
- @ds.filter(:a=>[1, nil]).sql.must_equal "SELECT * FROM table WHERE ((a IN (1)) OR (a IS NULL))"
10
- end
11
-
12
- it "should split NOT IN with nil in array into separate AND IS NOT NULL clause" do
13
- @ds.exclude(:a=>[1, nil]).sql.must_equal "SELECT * FROM table WHERE ((a NOT IN (1)) AND (a IS NOT NULL))"
14
- end
15
-
16
- it "should not affect other IN/NOT in clauses" do
17
- @ds.filter(:a=>[1, 2]).sql.must_equal "SELECT * FROM table WHERE (a IN (1, 2))"
18
- @ds.exclude(:a=>[1, 2]).sql.must_equal "SELECT * FROM table WHERE (a NOT IN (1, 2))"
19
- end
20
-
21
- it "should not affect other types of filters clauses" do
22
- @ds.filter(:a=>1).sql.must_equal "SELECT * FROM table WHERE (a = 1)"
23
- end
24
- end
@@ -1,57 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "Sequel::Plugins::SplitValues" do
4
- before do
5
- @c = Class.new(Sequel::Model(:a))
6
- @c.columns :id, :x
7
- @c.plugin :split_values
8
- end
9
-
10
- it "stores non-columns in a separate hash" do
11
- @c.dataset = @c.dataset.with_fetch(:id=>1, :x=>2, :y=>3)
12
- o = @c.first
13
- @c.db.reset
14
-
15
- o.must_equal @c.load(:id=>1, :x=>2)
16
- o[:id].must_equal 1
17
- o[:x].must_equal 2
18
- o[:y].must_equal 3
19
- {@c.load(:id=>1, :x=>2)=>4}[o].must_equal 4
20
- o.values.must_equal(:id=>1, :x=>2)
21
-
22
- o.save
23
- @c.db.sqls.must_equal ["UPDATE a SET x = 2 WHERE (id = 1)"]
24
- end
25
-
26
- it "handles false values" do
27
- @c.dataset = @c.dataset.with_fetch(:id=>1, :x=>false, :y=>3)
28
- o = @c.first
29
- @c.db.reset
30
-
31
- o.must_equal @c.load(:id=>1, :x=>false)
32
- o[:id].must_equal 1
33
- o[:x].must_equal false
34
- o[:y].must_equal 3
35
- {@c.load(:id=>1, :x=>false)=>4}[o].must_equal 4
36
- o.values.must_equal(:id=>1, :x=>false)
37
-
38
- o.save
39
- @c.db.sqls.must_equal ["UPDATE a SET x = 'f' WHERE (id = 1)"]
40
- end
41
-
42
- it "handles nil values" do
43
- @c.dataset = @c.dataset.with_fetch(:id=>1, :x=>nil, :y=>3)
44
- o = @c.first
45
- @c.db.reset
46
-
47
- o.must_equal @c.load(:id=>1, :x=>nil)
48
- o[:id].must_equal 1
49
- o[:x].must_be_nil
50
- o[:y].must_equal 3
51
- {@c.load(:id=>1, :x=>nil)=>4}[o].must_equal 4
52
- o.values.must_equal(:id=>1, :x=>nil)
53
-
54
- o.save
55
- @c.db.sqls.must_equal ["UPDATE a SET x = NULL WHERE (id = 1)"]
56
- end
57
- end
@@ -1,33 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "sql_comments extension" do
4
- before do
5
- @ds = Sequel.mock[:t].extension(:sql_comments)
6
- end
7
-
8
- it "should not add a comment if one is not set for the dataset" do
9
- @ds.select_sql.must_equal 'SELECT * FROM t'
10
- @ds.insert_sql(:a=>1).must_equal 'INSERT INTO t (a) VALUES (1)'
11
- @ds.delete_sql.must_equal 'DELETE FROM t'
12
- @ds.update_sql(:a=>1).must_equal 'UPDATE t SET a = 1'
13
- end
14
-
15
- it "should add a comment if one is set for the dataset" do
16
- ds = @ds.comment("Some\nComment\r\n Here")
17
- ds.select_sql.must_equal "SELECT * FROM t -- Some Comment Here\n"
18
- ds.insert_sql(:a=>1).must_equal "INSERT INTO t (a) VALUES (1) -- Some Comment Here\n"
19
- ds.delete_sql.must_equal "DELETE FROM t -- Some Comment Here\n"
20
- ds.update_sql(:a=>1).must_equal "UPDATE t SET a = 1 -- Some Comment Here\n"
21
- end
22
-
23
- it "should handle comments used in nested datasets" do
24
- ds = @ds.comment("Some\nComment\r\n Here")
25
- ds.where(:id=>ds).select_sql.must_equal "SELECT * FROM t WHERE (id IN (SELECT * FROM t -- Some Comment Here\n)) -- Some Comment Here\n"
26
- end
27
-
28
- it "should handle frozen SQL strings" do
29
- @ds = Sequel.mock[:t].with_extend{def select_sql; super.freeze; end}.extension(:sql_comments)
30
- ds = @ds.comment("Some\nComment\r\n Here")
31
- ds.select_sql.must_equal "SELECT * FROM t -- Some Comment Here\n"
32
- end
33
- end
@@ -1,59 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- Sequel.extension :sql_expr
4
-
5
- describe "Sequel sql_expr extension" do
6
- before do
7
- @ds = Sequel.mock.dataset
8
- end
9
-
10
- it "Object#sql_expr should wrap the object in a GenericComplexExpression" do
11
- o = Object.new
12
- def o.sql_literal(ds) 'foo' end
13
- s = o.sql_expr
14
- @ds.literal(s).must_equal "foo"
15
- @ds.literal(s+1).must_equal "(foo + 1)"
16
- @ds.literal(s & true).must_equal "(foo AND 't')"
17
- @ds.literal(s < 1).must_equal "(foo < 1)"
18
- @ds.literal(s.sql_subscript(1)).must_equal "(foo)[1]"
19
- @ds.literal(s.like('a')).must_equal "(foo LIKE 'a' ESCAPE '\\')"
20
- @ds.literal(s.as(:a)).must_equal "foo AS a"
21
- @ds.literal(s.cast(Integer)).must_equal "CAST(foo AS integer)"
22
- @ds.literal(s.desc).must_equal "foo DESC"
23
- @ds.literal(s.sql_string + '1').must_equal "(foo || '1')"
24
- end
25
-
26
- it "Numeric#sql_expr should wrap the object in a NumericExpression" do
27
- [1, 2.0, 2^70, BigDecimal('1.0')].each do |o|
28
- @ds.literal(o.sql_expr).must_equal @ds.literal(o)
29
- @ds.literal(o.sql_expr + 1).must_equal "(#{@ds.literal(o)} + 1)"
30
- end
31
- end
32
-
33
- it "String#sql_expr should wrap the object in a StringExpression" do
34
- @ds.literal("".sql_expr).must_equal "''"
35
- @ds.literal("".sql_expr + :a).must_equal "('' || a)"
36
- end
37
-
38
- it "NilClass, TrueClass, and FalseClass#sql_expr should wrap the object in a BooleanExpression" do
39
- [nil, true, false].each do |o|
40
- @ds.literal(o.sql_expr).must_equal @ds.literal(o)
41
- @ds.literal(o.sql_expr & :a).must_equal "(#{@ds.literal(o)} AND a)"
42
- end
43
- end
44
-
45
- it "Proc#sql_expr should should treat the object as a virtual row block" do
46
- @ds.literal(proc{a}.sql_expr).must_equal "a"
47
- @ds.literal(proc{a(b)}.sql_expr).must_equal "a(b)"
48
- end
49
-
50
- it "Proc#sql_expr should should wrap the object in a GenericComplexExpression if the object is not already an expression" do
51
- @ds.literal(proc{1}.sql_expr).must_equal "1"
52
- @ds.literal(proc{1}.sql_expr + 2).must_equal "(1 + 2)"
53
- end
54
-
55
- it "Proc#sql_expr should should convert a hash or array of two element arrays to a BooleanExpression" do
56
- @ds.literal(proc{{a=>b}}.sql_expr).must_equal "(a = b)"
57
- @ds.literal(proc{[[a, b]]}.sql_expr & :a).must_equal "((a = b) AND a)"
58
- end
59
- end
@@ -1,35 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "static_cache_cache plugin" do
4
- before do
5
- @db = Sequel.mock
6
- @db.fetch = [{:id=>1, :name=>'A'}, {:id=>2, :name=>'B'}]
7
- @c = Class.new(Sequel::Model(@db[:t]))
8
- def @c.name; 'Foo' end
9
- @c.columns :id, :name
10
- @file = "spec/files/static_cache_cache-spec-#{$$}.cache"
11
- end
12
- after do
13
- File.delete(@file) if File.file?(@file)
14
- end
15
-
16
- it "should allow dumping and loading static cache rows from a cache file" do
17
- @c.plugin :static_cache_cache, @file
18
- @db.sqls
19
- @c.plugin :static_cache
20
- @db.sqls.must_equal ['SELECT * FROM t']
21
- @c.all.must_equal [@c.load(:id=>1, :name=>'A'), @c.load(:id=>2, :name=>'B')]
22
-
23
- @c.dump_static_cache_cache
24
-
25
- @db.fetch = []
26
- c = Class.new(Sequel::Model(@db[:t]))
27
- def c.name; 'Foo' end
28
- c.columns :id, :name
29
- @c.plugin :static_cache_cache, @file
30
- @db.sqls
31
- @c.plugin :static_cache
32
- @db.sqls.must_be_empty
33
- @c.all.must_equal [@c.load(:id=>1, :name=>'A'), @c.load(:id=>2, :name=>'B')]
34
- end
35
- end
@@ -1,471 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "Sequel::Plugins::StaticCache" do
4
- before do
5
- @db = Sequel.mock
6
- @db.fetch = [{:id=>1}, {:id=>2}]
7
- @db.numrows = 1
8
- @c = Class.new(Sequel::Model(@db[:t]))
9
- @c.columns :id, :name
10
- end
11
-
12
- it "should not attempt to validate objects" do
13
- @c.send(:define_method, :validate){errors.add(:name, 'bad')}
14
- @c.plugin(:static_cache)
15
- @c.map{|o| o.valid?}.must_equal [true, true]
16
- end
17
-
18
- static_cache_specs = shared_description do
19
- it "should use a ruby hash as a cache of all model instances" do
20
- @c.cache.must_equal(1=>@c.load(:id=>1), 2=>@c.load(:id=>2))
21
- @c.cache[1].must_be_same_as(@c1)
22
- @c.cache[2].must_be_same_as(@c2)
23
- end
24
-
25
- it "should make .[] method with primary key use the cache" do
26
- @c[1].must_equal @c1
27
- @c[2].must_equal @c2
28
- @c[3].must_be_nil
29
- @c[[1, 2]].must_be_nil
30
- @c[nil].must_be_nil
31
- @c[].must_be_nil
32
- @db.sqls.must_equal []
33
- end
34
-
35
- it "should have .[] with a hash not use the cache" do
36
- @db.fetch = {:id=>2}
37
- @c[:id=>2].must_equal @c2
38
- @db.sqls.must_equal ['SELECT * FROM t WHERE (id = 2) LIMIT 1']
39
- end
40
-
41
- it "should support cache_get_pk" do
42
- @c.cache_get_pk(1).must_equal @c1
43
- @c.cache_get_pk(2).must_equal @c2
44
- @c.cache_get_pk(3).must_be_nil
45
- @db.sqls.must_equal []
46
- end
47
-
48
- it "should have first just returns instances without sending a query" do
49
- @c.first.must_equal @c1
50
- @c.first(2).must_equal [@c1, @c2]
51
- @c.first(0).must_equal []
52
- @db.sqls.must_equal []
53
- end
54
-
55
- it "should have first just returns instances with sending a query" do
56
- @db.fetch = lambda do |s|
57
- case s
58
- when /id = '?(\d+)'?/
59
- id = $1.to_i
60
- id <= 2 ? { id: id } : nil
61
- when /id >= '?(\d+)'?/
62
- id = $1.to_i
63
- id <= 2 ? (id..2).map { |i| { id: i } } : []
64
- end
65
- end
66
-
67
- @c.first(id: 2).must_equal @c2
68
- @c.first(id: '2').must_equal @c2
69
- @c.first(id: 3).must_be_nil
70
- @c.first { id >= 2 }.must_equal @c2
71
- @c.first(2) { id >= 1 }.must_equal [@c1, @c2]
72
- @c.first(Sequel.lit('id = ?', 2)).must_equal @c2
73
- @db.sqls.must_equal [
74
- "SELECT * FROM t WHERE (id = 2) LIMIT 1",
75
- "SELECT * FROM t WHERE (id = '2') LIMIT 1",
76
- "SELECT * FROM t WHERE (id = 3) LIMIT 1",
77
- "SELECT * FROM t WHERE (id >= 2) LIMIT 1",
78
- "SELECT * FROM t WHERE (id >= 1) LIMIT 2",
79
- "SELECT * FROM t WHERE (id = 2) LIMIT 1"
80
- ]
81
- end
82
-
83
- it "should have each just iterate over the hash's values without sending a query" do
84
- a = []
85
- @c.each{|o| a << o}
86
- a = a.sort_by{|o| o.id}
87
- a.first.must_equal @c1
88
- a.last.must_equal @c2
89
- @db.sqls.must_equal []
90
- end
91
-
92
- it "should have map just iterate over the hash's values without sending a query if no argument is given" do
93
- @c.map{|v| v.id}.sort.must_equal [1, 2]
94
- @db.sqls.must_equal []
95
- end
96
-
97
- it "should have count with no argument or block not issue a query" do
98
- @c.count.must_equal 2
99
- @db.sqls.must_equal []
100
- end
101
-
102
- it "should have count with argument or block not issue a query" do
103
- @db.fetch = [[{:count=>1}], [{:count=>2}]]
104
- @c.count(:a).must_equal 1
105
- @c.count{b}.must_equal 2
106
- @db.sqls.must_equal ["SELECT count(a) AS count FROM t LIMIT 1", "SELECT count(b) AS count FROM t LIMIT 1"]
107
- end
108
-
109
- it "should have map not send a query if given an argument" do
110
- @c.map(:id).sort.must_equal [1, 2]
111
- @db.sqls.must_equal []
112
- @c.map([:id,:id]).sort.must_equal [[1,1], [2,2]]
113
- @db.sqls.must_equal []
114
- end
115
-
116
- it "should have map without a block or argument not raise an exception or issue a query" do
117
- @c.map.to_a.must_equal @c.all
118
- @db.sqls.must_equal []
119
- end
120
-
121
- it "should have map without a block not return a frozen object" do
122
- @c.map.frozen?.must_equal false
123
- end
124
-
125
- it "should have map without a block return an Enumerator" do
126
- @c.map.class.must_equal Enumerator
127
- end
128
-
129
- it "should have map with a block and argument raise" do
130
- proc{@c.map(:id){}}.must_raise(Sequel::Error)
131
- end
132
-
133
- it "should have other enumerable methods work without sending a query" do
134
- a = @c.sort_by{|o| o.id}
135
- a.first.must_equal @c1
136
- a.last.must_equal @c2
137
- @db.sqls.must_equal []
138
- end
139
-
140
- it "should have all return all objects" do
141
- a = @c.all.sort_by{|o| o.id}
142
- a.first.must_equal @c1
143
- a.last.must_equal @c2
144
- @db.sqls.must_equal []
145
- end
146
-
147
- it "should have all not return a frozen object" do
148
- @c.all.frozen?.must_equal false
149
- end
150
-
151
- it "should have all return things in dataset order" do
152
- @c.all.must_equal [@c1, @c2]
153
- end
154
-
155
- it "should have all receiving block" do
156
- a = []
157
- b = @c.all { |o| a << o }
158
- a.must_equal [@c1, @c2]
159
- a.must_equal b
160
- @db.sqls.must_equal []
161
- end
162
-
163
- it "should have as_hash/to_hash without arguments run without a query" do
164
- a = @c.to_hash
165
- a.must_equal(1=>@c1, 2=>@c2)
166
- a[1].must_equal @c1
167
- a[2].must_equal @c2
168
-
169
- a = @c.as_hash
170
- a.must_equal(1=>@c1, 2=>@c2)
171
- a[1].must_equal @c1
172
- a[2].must_equal @c2
173
- @db.sqls.must_equal []
174
- end
175
-
176
- it "should have as_hash handle :hash option" do
177
- h = {}
178
- a = @c.as_hash(nil, nil, :hash=>h)
179
- a.must_be_same_as h
180
- a.must_equal(1=>@c1, 2=>@c2)
181
- a[1].must_equal @c1
182
- a[2].must_equal @c2
183
-
184
- h = {}
185
- a = @c.as_hash(:id, nil, :hash=>h)
186
- a.must_be_same_as h
187
- a.must_equal(1=>@c1, 2=>@c2)
188
- a[1].must_equal @c1
189
- a[2].must_equal @c2
190
-
191
- @db.sqls.must_equal []
192
- end
193
-
194
- it "should have as_hash with arguments return results without a query" do
195
- a = @c.as_hash(:id)
196
- a.must_equal(1=>@c1, 2=>@c2)
197
- a[1].must_equal @c1
198
- a[2].must_equal @c2
199
-
200
- a = @c.as_hash([:id])
201
- a.must_equal([1]=>@c1, [2]=>@c2)
202
- a[[1]].must_equal @c1
203
- a[[2]].must_equal @c2
204
-
205
- @c.as_hash(:id, :id).must_equal(1=>1, 2=>2)
206
- @c.as_hash([:id], :id).must_equal([1]=>1, [2]=>2)
207
- @c.as_hash(:id, [:id]).must_equal(1=>[1], 2=>[2])
208
- @c.as_hash([:id], [:id]).must_equal([1]=>[1], [2]=>[2])
209
-
210
- @db.sqls.must_equal []
211
- end
212
-
213
- it "should have as_hash not return a frozen object" do
214
- @c.as_hash.frozen?.must_equal false
215
- end
216
-
217
- it "should have to_hash_groups without arguments return the cached objects without a query" do
218
- a = @c.to_hash_groups(:id)
219
- a.must_equal(1=>[@c1], 2=>[@c2])
220
- a[1].first.must_equal @c1
221
- a[2].first.must_equal @c2
222
-
223
- a = @c.to_hash_groups([:id])
224
- a.must_equal([1]=>[@c1], [2]=>[@c2])
225
- a[[1]].first.must_equal @c1
226
- a[[2]].first.must_equal @c2
227
-
228
- @c.to_hash_groups(:id, :id).must_equal(1=>[1], 2=>[2])
229
- @c.to_hash_groups([:id], :id).must_equal([1]=>[1], [2]=>[2])
230
- @c.to_hash_groups(:id, [:id]).must_equal(1=>[[1]], 2=>[[2]])
231
- @c.to_hash_groups([:id], [:id]).must_equal([1]=>[[1]], [2]=>[[2]])
232
-
233
- @db.sqls.must_equal []
234
- end
235
-
236
- it "should have to_hash_groups handle :hash option" do
237
- h = {}
238
- a = @c.to_hash_groups(:id, nil, :hash=>h)
239
- a.must_be_same_as h
240
- a.must_equal(1=>[@c1], 2=>[@c2])
241
- a[1].first.must_equal @c1
242
- a[2].first.must_equal @c2
243
- end
244
-
245
- it "should have as_hash_groups without arguments return the cached objects without a query" do
246
- a = @c.to_hash_groups(:id)
247
- a.must_equal(1=>[@c1], 2=>[@c2])
248
- a[1].first.must_equal @c1
249
- a[2].first.must_equal @c2
250
-
251
- a = @c.to_hash_groups([:id])
252
- a.must_equal([1]=>[@c1], [2]=>[@c2])
253
- a[[1]].first.must_equal @c1
254
- a[[2]].first.must_equal @c2
255
-
256
- @c.to_hash_groups(:id, :id).must_equal(1=>[1], 2=>[2])
257
- @c.to_hash_groups([:id], :id).must_equal([1]=>[1], [2]=>[2])
258
- @c.to_hash_groups(:id, [:id]).must_equal(1=>[[1]], 2=>[[2]])
259
- @c.to_hash_groups([:id], [:id]).must_equal([1]=>[[1]], [2]=>[[2]])
260
-
261
- @db.sqls.must_equal []
262
- end
263
-
264
- it "subclasses should work correctly" do
265
- c = Class.new(@c)
266
- c.all.must_equal [c.load(:id=>1), c.load(:id=>2)]
267
- c.as_hash.must_equal(1=>c.load(:id=>1), 2=>c.load(:id=>2))
268
- @db.sqls.must_equal ['SELECT * FROM t']
269
- end
270
-
271
- it "set_dataset should work correctly" do
272
- ds = @c.dataset.from(:t2).columns(:id).with_fetch(:id=>3)
273
- @c.dataset = ds
274
- @c.all.must_equal [@c.load(:id=>3)]
275
- @c.as_hash.must_equal(3=>@c.load(:id=>3))
276
- @c.as_hash[3].must_equal @c.all.first
277
- @db.sqls.must_equal ['SELECT * FROM t2']
278
- end
279
-
280
- it "should have load_cache" do
281
- a = @c.all.sort_by{|o| o.id}
282
- a.first.must_equal @c1
283
- a.last.must_equal @c2
284
- @db.sqls.must_equal []
285
-
286
- @c.load_cache
287
-
288
- a = @c.all.sort_by{|o| o.id}
289
- a.first.must_equal @c1
290
- a.last.must_equal @c2
291
- @db.sqls.must_equal ['SELECT * FROM t']
292
- end
293
- end
294
-
295
- describe "without options" do
296
- before do
297
- @c.plugin :static_cache
298
- @c1 = @c.cache[1]
299
- @c2 = @c.cache[2]
300
- @db.sqls
301
- end
302
-
303
- include static_cache_specs
304
-
305
- it "should work correctly with composite keys" do
306
- @db.fetch = [{:id=>1, :id2=>1}, {:id=>2, :id2=>1}]
307
- @c = Class.new(Sequel::Model(@db[:t]))
308
- @c.columns :id, :id2
309
- @c.set_primary_key([:id, :id2])
310
- @c.plugin :static_cache
311
- @db.sqls
312
- @c1 = @c.cache[[1, 2]]
313
- @c2 = @c.cache[[2, 1]]
314
- @c[[1, 2]].must_be_same_as(@c1)
315
- @c[[2, 1]].must_be_same_as(@c2)
316
- @db.sqls.must_equal []
317
- end
318
-
319
- it "all of the static cache values (model instances) should be frozen" do
320
- @c.all.all?{|o| o.frozen?}.must_equal true
321
- end
322
-
323
- it "should make .[] method with primary key return cached instances" do
324
- @c[1].must_be_same_as(@c1)
325
- @c[2].must_be_same_as(@c2)
326
- end
327
-
328
- it "should have cache_get_pk return cached instances" do
329
- @c.cache_get_pk(1).must_be_same_as(@c1)
330
- @c.cache_get_pk(2).must_be_same_as(@c2)
331
- end
332
-
333
- it "should have each yield cached objects" do
334
- a = []
335
- @c.each{|o| a << o}
336
- a = a.sort_by{|o| o.id}
337
- a.first.must_be_same_as(@c1)
338
- a.last.must_be_same_as(@c2)
339
- end
340
-
341
- it "should have other enumerable methods work yield cached objects" do
342
- a = @c.sort_by{|o| o.id}
343
- a.first.must_be_same_as(@c1)
344
- a.last.must_be_same_as(@c2)
345
- end
346
-
347
- it "should have all return cached instances" do
348
- a = @c.all.sort_by{|o| o.id}
349
- a.first.must_be_same_as(@c1)
350
- a.last.must_be_same_as(@c2)
351
- end
352
-
353
- it "should have as_hash without arguments use cached instances" do
354
- a = @c.as_hash
355
- a[1].must_be_same_as(@c1)
356
- a[2].must_be_same_as(@c2)
357
- end
358
-
359
- it "should have as_hash with arguments return cached instances" do
360
- a = @c.as_hash(:id)
361
- a[1].must_be_same_as(@c1)
362
- a[2].must_be_same_as(@c2)
363
-
364
- a = @c.as_hash([:id])
365
- a[[1]].must_be_same_as(@c1)
366
- a[[2]].must_be_same_as(@c2)
367
- end
368
-
369
- it "should have to_hash_groups without single argument return the cached instances" do
370
- a = @c.to_hash_groups(:id)
371
- a[1].first.must_be_same_as(@c1)
372
- a[2].first.must_be_same_as(@c2)
373
-
374
- a = @c.to_hash_groups([:id])
375
- a[[1]].first.must_be_same_as(@c1)
376
- a[[2]].first.must_be_same_as(@c2)
377
- end
378
-
379
- it "should not allow the saving of new objects" do
380
- proc{@c.create}.must_raise(Sequel::HookFailed)
381
- end
382
-
383
- it "should not allow the saving of existing objects" do
384
- @db.fetch = {:id=>1}
385
- proc{@c.first(:id=>1).save}.must_raise(Sequel::HookFailed)
386
- end
387
-
388
- it "should not allow the destroying of existing objects" do
389
- @db.fetch = {:id=>1}
390
- proc{@c.first(:id=>1).destroy}.must_raise(Sequel::HookFailed)
391
- end
392
- end
393
-
394
- describe "with :frozen=>false option" do
395
- before do
396
- @c.plugin :static_cache, :frozen=>false
397
- @c1 = @c.cache[1]
398
- @c2 = @c.cache[2]
399
- @db.sqls
400
- end
401
-
402
- include static_cache_specs
403
-
404
- it "record retrieved by primary key should not be frozen" do
405
- @c[1].frozen?.must_equal false
406
- @c.cache_get_pk(1).frozen?.must_equal false
407
- end
408
-
409
- it "none of values returned in #all should be frozen" do
410
- @c.all.all?{|o| !o.frozen?}.must_equal true
411
- end
412
-
413
- it "none of values yielded by each should be frozen" do
414
- a = []
415
- @c.each{|o| a << o}
416
- a.all?{|o| !o.frozen?}.must_equal true
417
- end
418
-
419
- it "none of values yielded by Enumerable method should be frozen" do
420
- @c.sort_by{|o| o.id}.all?{|o| !o.frozen?}.must_equal true
421
- end
422
-
423
- it "none of values returned by map without an argument or block should be frozen" do
424
- @c.map{|o| o}.all?{|o| !o.frozen?}.must_equal true
425
- @c.map.all?{|o| !o.frozen?}.must_equal true
426
- end
427
-
428
- it "none of values in the hash returned by as_hash without an argument should be frozen" do
429
- @c.as_hash.values.all?{|o| !o.frozen?}.must_equal true
430
- end
431
-
432
- it "none of values in the hash returned by as_hash with a single argument should be frozen" do
433
- @c.as_hash(:id).values.all?{|o| !o.frozen?}.must_equal true
434
- end
435
-
436
- it "none of values in the hash returned by as_hash with a single array argument should be frozen" do
437
- @c.as_hash([:id, :id]).values.all?{|o| !o.frozen?}.must_equal true
438
- end
439
-
440
- it "none of values in the hash returned by to_hash_groups with a single argument should be frozen" do
441
- @c.to_hash_groups(:id).values.flatten.all?{|o| !o.frozen?}.must_equal true
442
- end
443
-
444
- it "none of values in the hash returned by to_hash_groups with a single array argument should be frozen" do
445
- @c.to_hash_groups([:id, :id]).values.flatten.all?{|o| !o.frozen?}.must_equal true
446
- end
447
-
448
- it "should not automatically update the cache when creating new model objects" do
449
- o = @c.new
450
- o.id = 3
451
- @db.autoid = 3
452
- @db.fetch = [[{:id=>1}, {:id=>2}, {:id=>3}], [{:id=>3}]]
453
- o.save
454
- @c[3].must_be_nil
455
- end
456
-
457
- it "should not automatically update the cache when updating model objects" do
458
- o = @c[2]
459
- @db.fetch = [[{:id=>1}, {:id=>2, :name=>'a'}]]
460
- o.update(:name=>'a')
461
- @c[2].values.must_equal(:id=>2)
462
- end
463
-
464
- it "should not automatically update the cache when updating model objects" do
465
- o = @c[2]
466
- @db.fetch = [[{:id=>1}]]
467
- o.destroy
468
- @c[2].must_equal @c2
469
- end
470
- end
471
- end