sequel 4.49.0 → 5.0.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 (477) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +70 -0
  3. data/README.rdoc +195 -136
  4. data/Rakefile +26 -42
  5. data/bin/sequel +3 -5
  6. data/doc/advanced_associations.rdoc +86 -163
  7. data/doc/association_basics.rdoc +197 -274
  8. data/doc/bin_sequel.rdoc +5 -3
  9. data/doc/cheat_sheet.rdoc +66 -43
  10. data/doc/code_order.rdoc +1 -8
  11. data/doc/core_extensions.rdoc +81 -56
  12. data/doc/dataset_basics.rdoc +8 -17
  13. data/doc/dataset_filtering.rdoc +81 -86
  14. data/doc/extensions.rdoc +3 -10
  15. data/doc/mass_assignment.rdoc +73 -30
  16. data/doc/migration.rdoc +19 -36
  17. data/doc/model_dataset_method_design.rdoc +14 -17
  18. data/doc/model_hooks.rdoc +15 -25
  19. data/doc/model_plugins.rdoc +10 -10
  20. data/doc/mssql_stored_procedures.rdoc +3 -3
  21. data/doc/object_model.rdoc +52 -70
  22. data/doc/opening_databases.rdoc +39 -32
  23. data/doc/postgresql.rdoc +48 -38
  24. data/doc/prepared_statements.rdoc +27 -22
  25. data/doc/querying.rdoc +173 -150
  26. data/doc/reflection.rdoc +5 -6
  27. data/doc/release_notes/5.0.0.txt +159 -0
  28. data/doc/schema_modification.rdoc +63 -60
  29. data/doc/security.rdoc +97 -88
  30. data/doc/sharding.rdoc +43 -30
  31. data/doc/sql.rdoc +53 -65
  32. data/doc/testing.rdoc +3 -5
  33. data/doc/thread_safety.rdoc +2 -4
  34. data/doc/transactions.rdoc +18 -17
  35. data/doc/validations.rdoc +48 -45
  36. data/doc/virtual_rows.rdoc +87 -115
  37. data/lib/sequel.rb +1 -1
  38. data/lib/sequel/adapters/ado.rb +9 -25
  39. data/lib/sequel/adapters/ado/access.rb +7 -13
  40. data/lib/sequel/adapters/ado/mssql.rb +2 -9
  41. data/lib/sequel/adapters/amalgalite.rb +3 -18
  42. data/lib/sequel/adapters/ibmdb.rb +9 -45
  43. data/lib/sequel/adapters/jdbc.rb +13 -73
  44. data/lib/sequel/adapters/jdbc/db2.rb +8 -37
  45. data/lib/sequel/adapters/jdbc/derby.rb +4 -50
  46. data/lib/sequel/adapters/jdbc/h2.rb +4 -25
  47. data/lib/sequel/adapters/jdbc/hsqldb.rb +1 -26
  48. data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
  49. data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
  50. data/lib/sequel/adapters/jdbc/mysql.rb +1 -15
  51. data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
  52. data/lib/sequel/adapters/jdbc/postgresql.rb +2 -31
  53. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
  54. data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
  55. data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
  56. data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
  57. data/lib/sequel/adapters/mock.rb +4 -30
  58. data/lib/sequel/adapters/mysql.rb +7 -44
  59. data/lib/sequel/adapters/mysql2.rb +5 -23
  60. data/lib/sequel/adapters/odbc.rb +0 -19
  61. data/lib/sequel/adapters/odbc/db2.rb +1 -1
  62. data/lib/sequel/adapters/odbc/mssql.rb +4 -12
  63. data/lib/sequel/adapters/odbc/oracle.rb +1 -1
  64. data/lib/sequel/adapters/oracle.rb +7 -13
  65. data/lib/sequel/adapters/postgres.rb +13 -57
  66. data/lib/sequel/adapters/postgresql.rb +1 -1
  67. data/lib/sequel/adapters/shared/access.rb +11 -51
  68. data/lib/sequel/adapters/shared/db2.rb +3 -61
  69. data/lib/sequel/adapters/shared/mssql.rb +21 -157
  70. data/lib/sequel/adapters/shared/mysql.rb +23 -224
  71. data/lib/sequel/adapters/shared/oracle.rb +13 -41
  72. data/lib/sequel/adapters/shared/postgres.rb +44 -259
  73. data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
  74. data/lib/sequel/adapters/shared/sqlite.rb +12 -101
  75. data/lib/sequel/adapters/sqlanywhere.rb +4 -23
  76. data/lib/sequel/adapters/sqlite.rb +2 -19
  77. data/lib/sequel/adapters/tinytds.rb +5 -15
  78. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
  79. data/lib/sequel/adapters/utils/mysql_mysql2.rb +2 -4
  80. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
  81. data/lib/sequel/adapters/utils/replace.rb +0 -5
  82. data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
  83. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
  84. data/lib/sequel/ast_transformer.rb +3 -94
  85. data/lib/sequel/connection_pool.rb +26 -28
  86. data/lib/sequel/connection_pool/sharded_single.rb +1 -4
  87. data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
  88. data/lib/sequel/connection_pool/single.rb +0 -2
  89. data/lib/sequel/connection_pool/threaded.rb +94 -110
  90. data/lib/sequel/core.rb +42 -101
  91. data/lib/sequel/database.rb +12 -2
  92. data/lib/sequel/database/connecting.rb +23 -60
  93. data/lib/sequel/database/dataset.rb +6 -9
  94. data/lib/sequel/database/dataset_defaults.rb +4 -48
  95. data/lib/sequel/database/features.rb +5 -4
  96. data/lib/sequel/database/logging.rb +2 -9
  97. data/lib/sequel/database/misc.rb +23 -55
  98. data/lib/sequel/database/query.rb +8 -13
  99. data/lib/sequel/database/schema_generator.rb +89 -64
  100. data/lib/sequel/database/schema_methods.rb +61 -79
  101. data/lib/sequel/database/transactions.rb +4 -24
  102. data/lib/sequel/dataset.rb +18 -10
  103. data/lib/sequel/dataset/actions.rb +53 -107
  104. data/lib/sequel/dataset/dataset_module.rb +3 -15
  105. data/lib/sequel/dataset/features.rb +30 -30
  106. data/lib/sequel/dataset/graph.rb +40 -49
  107. data/lib/sequel/dataset/misc.rb +12 -37
  108. data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
  109. data/lib/sequel/dataset/prepared_statements.rb +23 -51
  110. data/lib/sequel/dataset/query.rb +71 -155
  111. data/lib/sequel/dataset/sql.rb +30 -225
  112. data/lib/sequel/deprecated.rb +18 -27
  113. data/lib/sequel/exceptions.rb +1 -17
  114. data/lib/sequel/extensions/_model_pg_row.rb +0 -7
  115. data/lib/sequel/extensions/_pretty_table.rb +1 -3
  116. data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
  117. data/lib/sequel/extensions/connection_expiration.rb +1 -1
  118. data/lib/sequel/extensions/connection_validator.rb +1 -1
  119. data/lib/sequel/extensions/constraint_validations.rb +11 -11
  120. data/lib/sequel/extensions/core_extensions.rb +39 -49
  121. data/lib/sequel/extensions/core_refinements.rb +39 -45
  122. data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
  123. data/lib/sequel/extensions/date_arithmetic.rb +7 -7
  124. data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
  125. data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
  126. data/lib/sequel/extensions/eval_inspect.rb +4 -11
  127. data/lib/sequel/extensions/freeze_datasets.rb +1 -69
  128. data/lib/sequel/extensions/from_block.rb +1 -35
  129. data/lib/sequel/extensions/graph_each.rb +2 -2
  130. data/lib/sequel/extensions/identifier_mangling.rb +9 -19
  131. data/lib/sequel/extensions/implicit_subquery.rb +2 -2
  132. data/lib/sequel/extensions/inflector.rb +4 -4
  133. data/lib/sequel/extensions/migration.rb +23 -40
  134. data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
  135. data/lib/sequel/extensions/null_dataset.rb +2 -8
  136. data/lib/sequel/extensions/pagination.rb +1 -17
  137. data/lib/sequel/extensions/pg_array.rb +20 -189
  138. data/lib/sequel/extensions/pg_hstore.rb +11 -50
  139. data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
  140. data/lib/sequel/extensions/pg_inet.rb +2 -15
  141. data/lib/sequel/extensions/pg_interval.rb +1 -20
  142. data/lib/sequel/extensions/pg_json.rb +7 -27
  143. data/lib/sequel/extensions/pg_loose_count.rb +1 -1
  144. data/lib/sequel/extensions/pg_range.rb +6 -121
  145. data/lib/sequel/extensions/pg_range_ops.rb +1 -3
  146. data/lib/sequel/extensions/pg_row.rb +5 -77
  147. data/lib/sequel/extensions/pg_row_ops.rb +2 -13
  148. data/lib/sequel/extensions/query.rb +3 -4
  149. data/lib/sequel/extensions/round_timestamps.rb +0 -6
  150. data/lib/sequel/extensions/schema_dumper.rb +13 -13
  151. data/lib/sequel/extensions/select_remove.rb +3 -3
  152. data/lib/sequel/extensions/split_array_nil.rb +2 -2
  153. data/lib/sequel/extensions/sql_comments.rb +2 -2
  154. data/lib/sequel/extensions/string_agg.rb +11 -8
  155. data/lib/sequel/extensions/symbol_aref.rb +6 -20
  156. data/lib/sequel/model.rb +27 -62
  157. data/lib/sequel/model/associations.rb +128 -131
  158. data/lib/sequel/model/base.rb +171 -711
  159. data/lib/sequel/model/default_inflections.rb +1 -1
  160. data/lib/sequel/model/errors.rb +0 -3
  161. data/lib/sequel/model/exceptions.rb +2 -6
  162. data/lib/sequel/model/inflections.rb +1 -26
  163. data/lib/sequel/model/plugins.rb +1 -0
  164. data/lib/sequel/plugins/active_model.rb +2 -5
  165. data/lib/sequel/plugins/association_dependencies.rb +15 -15
  166. data/lib/sequel/plugins/association_pks.rb +14 -28
  167. data/lib/sequel/plugins/association_proxies.rb +6 -7
  168. data/lib/sequel/plugins/auto_validations.rb +4 -4
  169. data/lib/sequel/plugins/before_after_save.rb +0 -43
  170. data/lib/sequel/plugins/blacklist_security.rb +9 -8
  171. data/lib/sequel/plugins/boolean_readers.rb +3 -3
  172. data/lib/sequel/plugins/boolean_subsets.rb +2 -2
  173. data/lib/sequel/plugins/caching.rb +5 -5
  174. data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
  175. data/lib/sequel/plugins/column_conflicts.rb +2 -2
  176. data/lib/sequel/plugins/column_select.rb +2 -2
  177. data/lib/sequel/plugins/composition.rb +15 -24
  178. data/lib/sequel/plugins/constraint_validations.rb +4 -3
  179. data/lib/sequel/plugins/csv_serializer.rb +13 -20
  180. data/lib/sequel/plugins/dataset_associations.rb +2 -2
  181. data/lib/sequel/plugins/def_dataset_method.rb +5 -5
  182. data/lib/sequel/plugins/defaults_setter.rb +1 -1
  183. data/lib/sequel/plugins/delay_add_association.rb +1 -1
  184. data/lib/sequel/plugins/finder.rb +16 -10
  185. data/lib/sequel/plugins/force_encoding.rb +1 -7
  186. data/lib/sequel/plugins/hook_class_methods.rb +4 -106
  187. data/lib/sequel/plugins/input_transformer.rb +10 -11
  188. data/lib/sequel/plugins/insert_returning_select.rb +1 -9
  189. data/lib/sequel/plugins/instance_filters.rb +5 -5
  190. data/lib/sequel/plugins/instance_hooks.rb +7 -52
  191. data/lib/sequel/plugins/inverted_subsets.rb +3 -1
  192. data/lib/sequel/plugins/json_serializer.rb +19 -19
  193. data/lib/sequel/plugins/lazy_attributes.rb +1 -10
  194. data/lib/sequel/plugins/list.rb +6 -6
  195. data/lib/sequel/plugins/many_through_many.rb +11 -8
  196. data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
  197. data/lib/sequel/plugins/nested_attributes.rb +18 -31
  198. data/lib/sequel/plugins/optimistic_locking.rb +3 -3
  199. data/lib/sequel/plugins/pg_array_associations.rb +8 -2
  200. data/lib/sequel/plugins/pg_row.rb +2 -11
  201. data/lib/sequel/plugins/prepared_statements.rb +13 -66
  202. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
  203. data/lib/sequel/plugins/rcte_tree.rb +7 -7
  204. data/lib/sequel/plugins/serialization.rb +15 -33
  205. data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
  206. data/lib/sequel/plugins/sharding.rb +2 -8
  207. data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
  208. data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
  209. data/lib/sequel/plugins/static_cache.rb +8 -9
  210. data/lib/sequel/plugins/string_stripper.rb +3 -3
  211. data/lib/sequel/plugins/subclasses.rb +1 -1
  212. data/lib/sequel/plugins/subset_conditions.rb +2 -2
  213. data/lib/sequel/plugins/table_select.rb +2 -2
  214. data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
  215. data/lib/sequel/plugins/timestamps.rb +6 -7
  216. data/lib/sequel/plugins/touch.rb +4 -8
  217. data/lib/sequel/plugins/tree.rb +3 -3
  218. data/lib/sequel/plugins/typecast_on_load.rb +2 -2
  219. data/lib/sequel/plugins/unlimited_update.rb +1 -7
  220. data/lib/sequel/plugins/update_or_create.rb +3 -3
  221. data/lib/sequel/plugins/update_refresh.rb +3 -3
  222. data/lib/sequel/plugins/uuid.rb +7 -11
  223. data/lib/sequel/plugins/validation_class_methods.rb +10 -9
  224. data/lib/sequel/plugins/validation_contexts.rb +4 -4
  225. data/lib/sequel/plugins/validation_helpers.rb +26 -25
  226. data/lib/sequel/plugins/whitelist_security.rb +13 -9
  227. data/lib/sequel/plugins/xml_serializer.rb +24 -25
  228. data/lib/sequel/sql.rb +145 -276
  229. data/lib/sequel/timezones.rb +8 -22
  230. data/lib/sequel/version.rb +2 -2
  231. data/spec/adapter_spec.rb +1 -1
  232. data/spec/adapters/db2_spec.rb +2 -103
  233. data/spec/adapters/mssql_spec.rb +89 -68
  234. data/spec/adapters/mysql_spec.rb +101 -480
  235. data/spec/adapters/oracle_spec.rb +1 -9
  236. data/spec/adapters/postgres_spec.rb +312 -565
  237. data/spec/adapters/spec_helper.rb +12 -31
  238. data/spec/adapters/sqlanywhere_spec.rb +2 -77
  239. data/spec/adapters/sqlite_spec.rb +8 -146
  240. data/spec/bin_spec.rb +11 -16
  241. data/spec/core/connection_pool_spec.rb +173 -74
  242. data/spec/core/database_spec.rb +64 -244
  243. data/spec/core/dataset_spec.rb +81 -415
  244. data/spec/core/deprecated_spec.rb +3 -3
  245. data/spec/core/expression_filters_spec.rb +37 -144
  246. data/spec/core/mock_adapter_spec.rb +176 -4
  247. data/spec/core/object_graph_spec.rb +11 -60
  248. data/spec/core/placeholder_literalizer_spec.rb +1 -14
  249. data/spec/core/schema_generator_spec.rb +51 -40
  250. data/spec/core/schema_spec.rb +74 -77
  251. data/spec/core/spec_helper.rb +6 -24
  252. data/spec/core/version_spec.rb +1 -1
  253. data/spec/core_extensions_spec.rb +7 -83
  254. data/spec/core_model_spec.rb +2 -2
  255. data/spec/deprecation_helper.rb +2 -14
  256. data/spec/extensions/accessed_columns_spec.rb +1 -1
  257. data/spec/extensions/active_model_spec.rb +3 -3
  258. data/spec/extensions/after_initialize_spec.rb +1 -1
  259. data/spec/extensions/arbitrary_servers_spec.rb +2 -2
  260. data/spec/extensions/association_dependencies_spec.rb +1 -1
  261. data/spec/extensions/association_pks_spec.rb +4 -59
  262. data/spec/extensions/association_proxies_spec.rb +1 -1
  263. data/spec/extensions/auto_literal_strings_spec.rb +1 -12
  264. data/spec/extensions/auto_validations_spec.rb +1 -1
  265. data/spec/extensions/blacklist_security_spec.rb +1 -1
  266. data/spec/extensions/blank_spec.rb +1 -1
  267. data/spec/extensions/boolean_readers_spec.rb +1 -1
  268. data/spec/extensions/boolean_subsets_spec.rb +1 -1
  269. data/spec/extensions/caching_spec.rb +1 -1
  270. data/spec/extensions/class_table_inheritance_spec.rb +35 -1086
  271. data/spec/extensions/column_conflicts_spec.rb +1 -1
  272. data/spec/extensions/column_select_spec.rb +4 -4
  273. data/spec/extensions/columns_introspection_spec.rb +1 -1
  274. data/spec/extensions/columns_updated_spec.rb +1 -1
  275. data/spec/extensions/composition_spec.rb +1 -7
  276. data/spec/extensions/connection_expiration_spec.rb +3 -3
  277. data/spec/extensions/connection_validator_spec.rb +3 -3
  278. data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
  279. data/spec/extensions/constraint_validations_spec.rb +1 -1
  280. data/spec/extensions/core_refinements_spec.rb +1 -3
  281. data/spec/extensions/csv_serializer_spec.rb +4 -9
  282. data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
  283. data/spec/extensions/dataset_associations_spec.rb +2 -1
  284. data/spec/extensions/dataset_source_alias_spec.rb +1 -1
  285. data/spec/extensions/date_arithmetic_spec.rb +3 -3
  286. data/spec/extensions/def_dataset_method_spec.rb +1 -1
  287. data/spec/extensions/defaults_setter_spec.rb +2 -2
  288. data/spec/extensions/delay_add_association_spec.rb +8 -9
  289. data/spec/extensions/dirty_spec.rb +1 -1
  290. data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
  291. data/spec/extensions/eager_each_spec.rb +2 -2
  292. data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
  293. data/spec/extensions/error_splitter_spec.rb +1 -1
  294. data/spec/extensions/error_sql_spec.rb +1 -1
  295. data/spec/extensions/eval_inspect_spec.rb +1 -1
  296. data/spec/extensions/finder_spec.rb +1 -1
  297. data/spec/extensions/force_encoding_spec.rb +2 -5
  298. data/spec/extensions/freeze_datasets_spec.rb +1 -1
  299. data/spec/extensions/graph_each_spec.rb +5 -5
  300. data/spec/extensions/hook_class_methods_spec.rb +1 -194
  301. data/spec/extensions/identifier_mangling_spec.rb +17 -170
  302. data/spec/extensions/implicit_subquery_spec.rb +1 -5
  303. data/spec/extensions/inflector_spec.rb +1 -1
  304. data/spec/extensions/input_transformer_spec.rb +7 -2
  305. data/spec/extensions/insert_returning_select_spec.rb +1 -1
  306. data/spec/extensions/instance_filters_spec.rb +1 -1
  307. data/spec/extensions/instance_hooks_spec.rb +1 -95
  308. data/spec/extensions/inverted_subsets_spec.rb +1 -1
  309. data/spec/extensions/json_serializer_spec.rb +1 -1
  310. data/spec/extensions/lazy_attributes_spec.rb +1 -7
  311. data/spec/extensions/list_spec.rb +1 -1
  312. data/spec/extensions/looser_typecasting_spec.rb +1 -1
  313. data/spec/extensions/many_through_many_spec.rb +1 -1
  314. data/spec/extensions/migration_spec.rb +2 -2
  315. data/spec/extensions/modification_detection_spec.rb +1 -1
  316. data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
  317. data/spec/extensions/named_timezones_spec.rb +3 -3
  318. data/spec/extensions/nested_attributes_spec.rb +1 -29
  319. data/spec/extensions/null_dataset_spec.rb +1 -11
  320. data/spec/extensions/optimistic_locking_spec.rb +1 -1
  321. data/spec/extensions/pagination_spec.rb +1 -1
  322. data/spec/extensions/pg_array_associations_spec.rb +4 -1
  323. data/spec/extensions/pg_array_ops_spec.rb +1 -1
  324. data/spec/extensions/pg_array_spec.rb +3 -48
  325. data/spec/extensions/pg_enum_spec.rb +1 -1
  326. data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
  327. data/spec/extensions/pg_hstore_spec.rb +23 -32
  328. data/spec/extensions/pg_inet_ops_spec.rb +1 -1
  329. data/spec/extensions/pg_inet_spec.rb +1 -14
  330. data/spec/extensions/pg_interval_spec.rb +3 -13
  331. data/spec/extensions/pg_json_ops_spec.rb +1 -1
  332. data/spec/extensions/pg_json_spec.rb +1 -13
  333. data/spec/extensions/pg_loose_count_spec.rb +1 -1
  334. data/spec/extensions/pg_range_ops_spec.rb +1 -1
  335. data/spec/extensions/pg_range_spec.rb +3 -88
  336. data/spec/extensions/pg_row_ops_spec.rb +1 -1
  337. data/spec/extensions/pg_row_plugin_spec.rb +1 -1
  338. data/spec/extensions/pg_row_spec.rb +1 -44
  339. data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
  340. data/spec/extensions/prepared_statements_safe_spec.rb +1 -1
  341. data/spec/extensions/prepared_statements_spec.rb +13 -48
  342. data/spec/extensions/pretty_table_spec.rb +1 -1
  343. data/spec/extensions/query_spec.rb +1 -12
  344. data/spec/extensions/rcte_tree_spec.rb +1 -1
  345. data/spec/extensions/round_timestamps_spec.rb +1 -5
  346. data/spec/extensions/s_spec.rb +1 -1
  347. data/spec/extensions/schema_caching_spec.rb +1 -1
  348. data/spec/extensions/schema_dumper_spec.rb +1 -1
  349. data/spec/extensions/select_remove_spec.rb +1 -1
  350. data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
  351. data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
  352. data/spec/extensions/serialization_spec.rb +2 -14
  353. data/spec/extensions/server_block_spec.rb +1 -1
  354. data/spec/extensions/server_logging_spec.rb +2 -2
  355. data/spec/extensions/sharding_spec.rb +1 -1
  356. data/spec/extensions/shared_caching_spec.rb +1 -28
  357. data/spec/extensions/single_table_inheritance_spec.rb +2 -5
  358. data/spec/extensions/singular_table_names_spec.rb +1 -1
  359. data/spec/extensions/skip_create_refresh_spec.rb +1 -1
  360. data/spec/extensions/spec_helper.rb +5 -27
  361. data/spec/extensions/split_array_nil_spec.rb +1 -1
  362. data/spec/extensions/split_values_spec.rb +1 -1
  363. data/spec/extensions/sql_comments_spec.rb +1 -1
  364. data/spec/extensions/sql_expr_spec.rb +1 -1
  365. data/spec/extensions/static_cache_spec.rb +1 -1
  366. data/spec/extensions/string_agg_spec.rb +2 -2
  367. data/spec/extensions/string_date_time_spec.rb +1 -1
  368. data/spec/extensions/string_stripper_spec.rb +1 -1
  369. data/spec/extensions/subclasses_spec.rb +1 -1
  370. data/spec/extensions/subset_conditions_spec.rb +1 -1
  371. data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
  372. data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
  373. data/spec/extensions/table_select_spec.rb +4 -4
  374. data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
  375. data/spec/extensions/thread_local_timezones_spec.rb +1 -1
  376. data/spec/extensions/timestamps_spec.rb +3 -3
  377. data/spec/extensions/to_dot_spec.rb +1 -1
  378. data/spec/extensions/touch_spec.rb +1 -1
  379. data/spec/extensions/tree_spec.rb +1 -1
  380. data/spec/extensions/typecast_on_load_spec.rb +1 -1
  381. data/spec/extensions/unlimited_update_spec.rb +1 -1
  382. data/spec/extensions/update_or_create_spec.rb +1 -1
  383. data/spec/extensions/update_primary_key_spec.rb +4 -3
  384. data/spec/extensions/update_refresh_spec.rb +1 -1
  385. data/spec/extensions/uuid_spec.rb +10 -12
  386. data/spec/extensions/validate_associated_spec.rb +1 -1
  387. data/spec/extensions/validation_class_methods_spec.rb +3 -3
  388. data/spec/extensions/validation_contexts_spec.rb +1 -1
  389. data/spec/extensions/validation_helpers_spec.rb +10 -44
  390. data/spec/extensions/whitelist_security_spec.rb +5 -5
  391. data/spec/extensions/xml_serializer_spec.rb +3 -3
  392. data/spec/guards_helper.rb +2 -1
  393. data/spec/integration/associations_test.rb +1 -23
  394. data/spec/integration/database_test.rb +7 -7
  395. data/spec/integration/dataset_test.rb +5 -47
  396. data/spec/integration/eager_loader_test.rb +1 -1
  397. data/spec/integration/migrator_test.rb +1 -1
  398. data/spec/integration/model_test.rb +4 -82
  399. data/spec/integration/plugin_test.rb +6 -22
  400. data/spec/integration/prepared_statement_test.rb +8 -88
  401. data/spec/integration/schema_test.rb +6 -6
  402. data/spec/integration/spec_helper.rb +13 -21
  403. data/spec/integration/timezone_test.rb +5 -5
  404. data/spec/integration/transaction_test.rb +3 -55
  405. data/spec/integration/type_test.rb +9 -9
  406. data/spec/model/association_reflection_spec.rb +24 -9
  407. data/spec/model/associations_spec.rb +124 -303
  408. data/spec/model/base_spec.rb +18 -137
  409. data/spec/model/class_dataset_methods_spec.rb +2 -20
  410. data/spec/model/dataset_methods_spec.rb +1 -20
  411. data/spec/model/eager_loading_spec.rb +17 -11
  412. data/spec/model/hooks_spec.rb +5 -300
  413. data/spec/model/inflector_spec.rb +1 -1
  414. data/spec/model/model_spec.rb +15 -320
  415. data/spec/model/plugins_spec.rb +2 -16
  416. data/spec/model/record_spec.rb +29 -121
  417. data/spec/model/spec_helper.rb +5 -15
  418. data/spec/model/validations_spec.rb +1 -1
  419. data/spec/sequel_warning.rb +1 -12
  420. metadata +8 -64
  421. data/doc/active_record.rdoc +0 -927
  422. data/lib/sequel/adapters/cubrid.rb +0 -160
  423. data/lib/sequel/adapters/do.rb +0 -166
  424. data/lib/sequel/adapters/do/mysql.rb +0 -69
  425. data/lib/sequel/adapters/do/postgres.rb +0 -46
  426. data/lib/sequel/adapters/do/sqlite3.rb +0 -41
  427. data/lib/sequel/adapters/jdbc/as400.rb +0 -92
  428. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
  429. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
  430. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
  431. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
  432. data/lib/sequel/adapters/odbc/progress.rb +0 -12
  433. data/lib/sequel/adapters/shared/cubrid.rb +0 -245
  434. data/lib/sequel/adapters/shared/firebird.rb +0 -261
  435. data/lib/sequel/adapters/shared/informix.rb +0 -63
  436. data/lib/sequel/adapters/shared/progress.rb +0 -40
  437. data/lib/sequel/adapters/swift.rb +0 -169
  438. data/lib/sequel/adapters/swift/mysql.rb +0 -50
  439. data/lib/sequel/adapters/swift/postgres.rb +0 -49
  440. data/lib/sequel/adapters/swift/sqlite.rb +0 -48
  441. data/lib/sequel/adapters/utils/pg_types.rb +0 -4
  442. data/lib/sequel/dataset/mutation.rb +0 -98
  443. data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
  444. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
  445. data/lib/sequel/extensions/filter_having.rb +0 -65
  446. data/lib/sequel/extensions/hash_aliases.rb +0 -51
  447. data/lib/sequel/extensions/meta_def.rb +0 -37
  448. data/lib/sequel/extensions/query_literals.rb +0 -86
  449. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
  450. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
  451. data/lib/sequel/extensions/set_overrides.rb +0 -82
  452. data/lib/sequel/no_core_ext.rb +0 -4
  453. data/lib/sequel/plugins/association_autoreloading.rb +0 -11
  454. data/lib/sequel/plugins/identifier_columns.rb +0 -49
  455. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
  456. data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
  457. data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
  458. data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
  459. data/lib/sequel/plugins/schema.rb +0 -84
  460. data/lib/sequel/plugins/scissors.rb +0 -37
  461. data/spec/core/dataset_mutation_spec.rb +0 -253
  462. data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
  463. data/spec/extensions/before_after_save_spec.rb +0 -40
  464. data/spec/extensions/filter_having_spec.rb +0 -42
  465. data/spec/extensions/from_block_spec.rb +0 -21
  466. data/spec/extensions/hash_aliases_spec.rb +0 -26
  467. data/spec/extensions/identifier_columns_spec.rb +0 -19
  468. data/spec/extensions/meta_def_spec.rb +0 -35
  469. data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
  470. data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
  471. data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
  472. data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
  473. data/spec/extensions/query_literals_spec.rb +0 -185
  474. data/spec/extensions/schema_spec.rb +0 -123
  475. data/spec/extensions/scissors_spec.rb +0 -27
  476. data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
  477. data/spec/extensions/set_overrides_spec.rb +0 -75
@@ -1,7 +1,7 @@
1
1
  # frozen-string-literal: true
2
2
 
3
3
  module Sequel
4
- # Proc that is instance evaled to create the default inflections for both the
4
+ # Proc that is instance_execed to create the default inflections for both the
5
5
  # model inflector and the inflector extension.
6
6
  DEFAULT_INFLECTIONS_PROC = proc do
7
7
  plural(/$/, 's')
@@ -5,9 +5,6 @@ module Sequel
5
5
  # Errors represents validation errors, a simple hash subclass
6
6
  # with a few convenience methods.
7
7
  class Errors < ::Hash
8
- ATTRIBUTE_JOINER = ' and '.freeze
9
- Sequel::Deprecation.deprecate_constant(self, :ATTRIBUTE_JOINER)
10
-
11
8
  # Adds an error for the given attribute.
12
9
  #
13
10
  # errors.add(:name, 'is not valid') if name == 'invalid'
@@ -1,8 +1,8 @@
1
1
  # frozen-string-literal: true
2
2
 
3
3
  module Sequel
4
- # Exception class raised when +raise_on_save_failure+ is set and a before hook returns false
5
- # or an around hook doesn't call super or yield.
4
+ # Exception class raised when +raise_on_save_failure+ is set and an action is canceled in a hook.
5
+ # or an around hook doesn't yield.
6
6
  class HookFailed < Error
7
7
  # The Sequel::Model instance related to this error.
8
8
  attr_reader :model
@@ -13,10 +13,6 @@ module Sequel
13
13
  end
14
14
  end
15
15
 
16
- # Alias for HookFailed, kept for backwards compatibility
17
- BeforeHookFailed = HookFailed
18
- Sequel::Deprecation.deprecate_constant(self, :BeforeHookFailed)
19
-
20
16
  (
21
17
  # Exception class raised when +require_modification+ is set and an UPDATE or DELETE statement to modify the dataset doesn't
22
18
  # modify a single row.
@@ -25,31 +25,6 @@ module Sequel
25
25
  # pluralization and singularization rules that is runs. This guarantees that your rules run before any of the rules that may
26
26
  # already have been loaded.
27
27
  module Inflections
28
- CAMELIZE_CONVERT_REGEXP = /(^|_)(.)/.freeze
29
- Sequel::Deprecation.deprecate_constant(self, :CAMELIZE_CONVERT_REGEXP)
30
- CAMELIZE_MODULE_REGEXP = /\/(.?)/.freeze
31
- Sequel::Deprecation.deprecate_constant(self, :CAMELIZE_MODULE_REGEXP)
32
- DASH = '-'.freeze
33
- Sequel::Deprecation.deprecate_constant(self, :DASH)
34
- DEMODULIZE_CONVERT_REGEXP = /^.*::/.freeze
35
- Sequel::Deprecation.deprecate_constant(self, :DEMODULIZE_CONVERT_REGEXP)
36
- EMPTY_STRING= ''.freeze
37
- Sequel::Deprecation.deprecate_constant(self, :EMPTY_STRING)
38
- SLASH = '/'.freeze
39
- Sequel::Deprecation.deprecate_constant(self, :SLASH)
40
- VALID_CONSTANT_NAME_REGEXP = /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/.freeze
41
- Sequel::Deprecation.deprecate_constant(self, :VALID_CONSTANT_NAME_REGEXP)
42
- UNDERSCORE = '_'.freeze
43
- Sequel::Deprecation.deprecate_constant(self, :UNDERSCORE)
44
- UNDERSCORE_CONVERT_REGEXP1 = /([A-Z]+)([A-Z][a-z])/.freeze
45
- Sequel::Deprecation.deprecate_constant(self, :UNDERSCORE_CONVERT_REGEXP1)
46
- UNDERSCORE_CONVERT_REGEXP2 = /([a-z\d])([A-Z])/.freeze
47
- Sequel::Deprecation.deprecate_constant(self, :UNDERSCORE_CONVERT_REGEXP2)
48
- UNDERSCORE_CONVERT_REPLACE = '\1_\2'.freeze
49
- Sequel::Deprecation.deprecate_constant(self, :UNDERSCORE_CONVERT_REPLACE)
50
- UNDERSCORE_MODULE_REGEXP = /::/.freeze
51
- Sequel::Deprecation.deprecate_constant(self, :UNDERSCORE_MODULE_REGEXP)
52
-
53
28
  @plurals, @singulars, @uncountables = [], [], []
54
29
 
55
30
  class << self
@@ -117,7 +92,7 @@ module Sequel
117
92
  (@uncountables << words).flatten!
118
93
  end
119
94
 
120
- instance_eval(&DEFAULT_INFLECTIONS_PROC)
95
+ instance_exec(&DEFAULT_INFLECTIONS_PROC)
121
96
 
122
97
  private
123
98
 
@@ -46,6 +46,7 @@ module Sequel
46
46
  def self.after_set_dataset(mod, meth)
47
47
  mod.send(:define_method, :set_dataset) do |*a|
48
48
  r = super(*a)
49
+ # Allow calling private class methods as methods this specifies are usually private
49
50
  send(meth)
50
51
  r
51
52
  end
@@ -3,7 +3,7 @@
3
3
  require 'active_model'
4
4
  module Sequel
5
5
  module Plugins
6
- # The ActiveModel plugin makes Sequel::Model objects
6
+ # The active_model plugin makes Sequel::Model objects
7
7
  # pass the ActiveModel::Lint tests, which should
8
8
  # hopefully mean full ActiveModel compliance. This should
9
9
  # allow the full support of Sequel::Model objects in Rails 3+.
@@ -18,9 +18,6 @@ module Sequel
18
18
  # # Make the Album class active_model compliant
19
19
  # Album.plugin :active_model
20
20
  module ActiveModel
21
- DEFAULT_TO_PARAM_JOINER = '-'.freeze
22
- Sequel::Deprecation.deprecate_constant(self, :DEFAULT_TO_PARAM_JOINER)
23
-
24
21
  # ActiveModel compliant error class
25
22
  class Errors < Sequel::Model::Errors
26
23
  # Add autovivification so that #[] always returns an array.
@@ -82,7 +79,7 @@ module Sequel
82
79
  end
83
80
  end
84
81
 
85
- # With the ActiveModel plugin, Sequel model objects are already
82
+ # With the active_model plugin, Sequel model objects are already
86
83
  # compliant, so this returns self.
87
84
  def to_model
88
85
  self
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Sequel
4
4
  module Plugins
5
- # The AssociationDependencies plugin allows you do easily set up before and/or after destroy hooks
5
+ # The association_dependencies plugin allows you do easily set up before and/or after destroy hooks
6
6
  # for destroying, deleting, or nullifying associated model objects. The following
7
7
  # association types support the following dependency actions:
8
8
  #
@@ -18,21 +18,21 @@ module Sequel
18
18
  # and dependency action values. You can provide the hash to the plugin call itself or
19
19
  # to the add_association_dependencies method:
20
20
  #
21
- # Business.plugin :association_dependencies, :address=>:delete
21
+ # Business.plugin :association_dependencies, address: :delete
22
22
  # # or:
23
23
  # Artist.plugin :association_dependencies
24
- # Artist.add_association_dependencies :albums=>:destroy, :reviews=>:delete, :tags=>:nullify
24
+ # Artist.add_association_dependencies albums: :destroy, reviews: :delete, tags: :nullify
25
25
  module AssociationDependencies
26
26
  # Mapping of association types to when the dependency calls should be made (either
27
27
  # :before for in before_destroy or :after for in after_destroy)
28
- ASSOCIATION_MAPPING = {:one_to_many=>:before, :many_to_one=>:after, :many_to_many=>:before, :one_to_one=>:before}
28
+ ASSOCIATION_MAPPING = {:one_to_many=>:before, :many_to_one=>:after, :many_to_many=>:before, :one_to_one=>:before}.freeze
29
29
 
30
30
  # The valid dependence actions
31
- DEPENDENCE_ACTIONS = [:delete, :destroy, :nullify]
31
+ DEPENDENCE_ACTIONS = [:delete, :destroy, :nullify].freeze
32
32
 
33
33
  # Initialize the association_dependencies hash for this model.
34
34
  def self.apply(model, hash=OPTS)
35
- model.instance_eval{@association_dependencies = {:before_delete=>[], :before_destroy=>[], :before_nullify=>[], :after_delete=>[], :after_destroy=>[]}}
35
+ model.instance_exec{@association_dependencies = {:before_delete=>[], :before_destroy=>[], :before_nullify=>[], :after_delete=>[], :after_destroy=>[]}}
36
36
  end
37
37
 
38
38
  # Call add_association_dependencies with any dependencies given in the plugin call.
@@ -50,7 +50,7 @@ module Sequel
50
50
  attr_reader :association_dependencies
51
51
 
52
52
  # Add association dependencies to this model. The hash should have association name
53
- # symbol keys and dependency action symbol values (e.g. :albums=>:destroy).
53
+ # symbol keys and dependency action symbol values (e.g. albums: :destroy).
54
54
  def add_association_dependencies(hash)
55
55
  hash.each do |association, action|
56
56
  raise(Error, "Nonexistent association: #{association}") unless r = association_reflection(association)
@@ -60,15 +60,15 @@ module Sequel
60
60
  association_dependencies[:"#{time}_#{action}"] << if action == :nullify
61
61
  case type
62
62
  when :one_to_many , :many_to_many
63
- proc{send(r.remove_all_method)}
63
+ proc{public_send(r[:remove_all_method])}
64
64
  when :one_to_one
65
- proc{send(r.setter_method, nil)}
65
+ proc{public_send(r[:setter_method], nil)}
66
66
  else
67
67
  raise(Error, "Can't nullify many_to_one associated objects: association: #{association}")
68
68
  end
69
69
  else
70
70
  raise(Error, "Can only nullify many_to_many associations: association: #{association}") if type == :many_to_many
71
- r.dataset_method
71
+ r[:dataset_method]
72
72
  end
73
73
  end
74
74
  end
@@ -88,16 +88,16 @@ module Sequel
88
88
  # many_to_one associations.
89
89
  def after_destroy
90
90
  super
91
- model.association_dependencies[:after_delete].each{|m| send(m).delete}
92
- model.association_dependencies[:after_destroy].each{|m| send(m).destroy}
91
+ model.association_dependencies[:after_delete].each{|m| public_send(m).delete}
92
+ model.association_dependencies[:after_destroy].each{|m| public_send(m).destroy}
93
93
  end
94
94
 
95
95
  # Run the delete, destroy, and nullify association dependency actions for
96
96
  # *_to_many associations.
97
97
  def before_destroy
98
- model.association_dependencies[:before_delete].each{|m| send(m).delete}
99
- model.association_dependencies[:before_destroy].each{|m| send(m).destroy}
100
- model.association_dependencies[:before_nullify].each{|p| instance_eval(&p)}
98
+ model.association_dependencies[:before_delete].each{|m| public_send(m).delete}
99
+ model.association_dependencies[:before_destroy].each{|m| public_send(m).destroy}
100
+ model.association_dependencies[:before_nullify].each{|p| instance_exec(&p)}
101
101
  super
102
102
  end
103
103
  end
@@ -12,6 +12,8 @@ module Sequel
12
12
  # artist.album_pks # [1, 2, 3]
13
13
  # artist.album_pks = [2, 4]
14
14
  # artist.album_pks # [2, 4]
15
+ # artist.save
16
+ # # Persist changes
15
17
  #
16
18
  # Note that it uses the singular form of the association name. Also note
17
19
  # that the setter both associates to new primary keys not in the assocation
@@ -22,18 +24,9 @@ module Sequel
22
24
  # not call any callbacks. If you have any association callbacks,
23
25
  # you probably should not use the setter methods.
24
26
  #
25
- # If an association uses the :delay_pks option, you can set the associated
26
- # pks for new objects, and the setting will not be persisted until after the
27
- # object has been created in the database. Additionally, if an association
28
- # uses the :delay_pks=>:always option, you can set the associated pks for existing
29
- # objects, and the setting will not be persisted until after the object has
30
- # been saved.
31
- #
32
- # SEQUEL5: Starting in Sequel 5, the :delay_pks association option will default
33
- # to :delay_pks=>:always. If you would like to use the Sequel 4 behavior of
34
- # having the setter make modifications immediately, explicitly use the
35
- # :delay_pks=>false option. Additionally, Sequel 5 will not support the current
36
- # :delay_pks=>true behavior, treating it as :delay_pks=>:always.
27
+ # By default, changes to the association will not happen until the object
28
+ # is saved. However, using the delay_pks: false option, you can have the
29
+ # changes made immediately when the association_pks setter method is called.
37
30
  #
38
31
  # By default, if you pass a nil value to the setter, an exception will be raised.
39
32
  # You can change this behavior by using the :association_pks_nil association option.
@@ -95,7 +88,7 @@ module Sequel
95
88
  rpk = opts.associated_class.primary_key
96
89
  opts.associated_dataset.
97
90
  naked.where(cond).
98
- select_map(Sequel.send(rpk.is_a?(Array) ? :deep_qualify : :qualify, opts.associated_class.table_name, rpk))
91
+ select_map(Sequel.public_send(rpk.is_a?(Array) ? :deep_qualify : :qualify, opts.associated_class.table_name, rpk))
99
92
  end
100
93
  elsif clpk
101
94
  lambda do
@@ -111,7 +104,7 @@ module Sequel
111
104
  if !opts[:read_only] && !join_associated_table
112
105
  opts[:pks_setter] = lambda do |pks|
113
106
  if pks.empty?
114
- send(opts.remove_all_method)
107
+ public_send(opts[:remove_all_method])
115
108
  else
116
109
  checked_transaction do
117
110
  if clpk
@@ -146,13 +139,13 @@ module Sequel
146
139
  key = opts[:key]
147
140
 
148
141
  opts[:pks_getter] = lambda do
149
- send(opts.dataset_method).select_map(opts.associated_class.primary_key)
142
+ public_send(opts[:dataset_method]).select_map(opts.associated_class.primary_key)
150
143
  end
151
144
 
152
145
  unless opts[:read_only]
153
146
  opts[:pks_setter] = lambda do |pks|
154
147
  if pks.empty?
155
- send(opts.remove_all_method)
148
+ public_send(opts[:remove_all_method])
156
149
  else
157
150
  primary_key = opts.associated_class.primary_key
158
151
  pkh = {primary_key=>pks}
@@ -170,7 +163,7 @@ module Sequel
170
163
  end
171
164
 
172
165
  checked_transaction do
173
- ds = send(opts.dataset_method)
166
+ ds = public_send(opts.dataset_method)
174
167
  ds.unfiltered.where(pkh).update(h)
175
168
  ds.exclude(pkh).update(nh)
176
169
  end
@@ -207,10 +200,10 @@ module Sequel
207
200
  # If the receiver is a new object, return any saved
208
201
  # pks, or an empty array if no pks have been saved.
209
202
  def _association_pks_getter(opts)
210
- delay = opts[:delay_pks]
203
+ delay = opts.fetch(:delay_pks, true)
211
204
  if new? && delay
212
205
  (@_association_pks ||= {})[opts[:name]] ||= []
213
- elsif delay == :always && @_association_pks && (objs = @_association_pks[opts[:name]])
206
+ elsif delay && @_association_pks && (objs = @_association_pks[opts[:name]])
214
207
  objs
215
208
  else
216
209
  instance_exec(&opts[:pks_getter])
@@ -219,7 +212,7 @@ module Sequel
219
212
 
220
213
  # Update which objects are associated to the receiver.
221
214
  # If the receiver is a new object, save the pks
222
- # so the update can happen after the received has been saved.
215
+ # so the update can happen after the receiver has been saved.
223
216
  def _association_pks_setter(opts, pks)
224
217
  if pks.nil?
225
218
  case opts[:association_pks_nil]
@@ -234,17 +227,10 @@ module Sequel
234
227
 
235
228
  pks = convert_pk_array(opts, pks)
236
229
 
237
- delay = opts.fetch(:delay_pks) do
238
- Sequel::Deprecation.deprecate("association_pks will default to assuming the :delay_pks=>:always association option starting in Sequel 5. Explicitly set :delay_pks=>false option for the association if you want changes to take effect immediately instead of being delayed until the object is saved (association: #{opts.inspect})")
239
- false
240
- end
241
- if (new? && delay) || (delay == :always)
230
+ if opts.fetch(:delay_pks, true)
242
231
  modified!
243
232
  (@_association_pks ||= {})[opts[:name]] = pks
244
233
  else
245
- if !new? && delay && delay != :always
246
- Sequel::Deprecation.deprecate("association_pks with the :delay_pks=>true association option will also delay setting of associated values for existing objects in Sequel 5 (currently it just delays setting of associated values for new objects). Please change to using :delay_pks=>:always to avoid this message. Sequel 5 will not support the existing :delay_pks=>true behavior for only delaying for new objects and not for existing objects")
247
- end
248
234
  instance_exec(pks, &opts[:pks_setter])
249
235
  end
250
236
  end
@@ -37,7 +37,7 @@ module Sequel
37
37
  # :arguments => [2],
38
38
  # :block => {|x| 3},
39
39
  # :instance => artist,
40
- # :reflection => {:name=>:albums} # AssociationReflection instance
40
+ # :reflection => AssociationReflection instance,
41
41
  # :proxy_argument => 1,
42
42
  # :proxy_block => {|ds| ds}
43
43
  # }
@@ -51,7 +51,7 @@ module Sequel
51
51
  # Album.plugin :association_proxies
52
52
  module AssociationProxies
53
53
  def self.configure(model, &block)
54
- model.instance_eval do
54
+ model.instance_exec do
55
55
  @association_proxy_to_dataset = block if block
56
56
  @association_proxy_to_dataset ||= AssociationProxy::DEFAULT_PROXY_TO_DATASET
57
57
  end
@@ -80,11 +80,11 @@ module Sequel
80
80
  # is an array method, otherwise call the method on the association's dataset.
81
81
  def method_missing(meth, *args, &block)
82
82
  v = if @instance.model.association_proxy_to_dataset.call(:method=>meth, :arguments=>args, :block=>block, :instance=>@instance, :reflection=>@reflection, :proxy_argument=>@proxy_argument, :proxy_block=>@proxy_block)
83
- @instance.send(@reflection.dataset_method)
83
+ @instance.public_send(@reflection[:dataset_method])
84
84
  else
85
85
  @instance.send(:load_associated_objects, @reflection, @proxy_argument, &@proxy_block)
86
86
  end
87
- v.send(meth, *args, &block)
87
+ v.public_send(meth, *args, &block)
88
88
  end
89
89
  end
90
90
 
@@ -100,9 +100,8 @@ module Sequel
100
100
  # directly.
101
101
  def def_association_method(opts)
102
102
  if opts.returns_array?
103
- association_module_def(opts.association_method, opts) do |*dynamic_opts, &block|
104
- Sequel::Deprecation.deprecate("Passing multiple arguments to ##{opts.association_method}", "Additional arguments are currently ignored") if dynamic_opts.length > 1
105
- AssociationProxy.new(self, opts, dynamic_opts.length == 0 ? OPTS : dynamic_opts[0], &block)
103
+ association_module_def(opts.association_method, opts) do |dynamic_opts=OPTS, &block|
104
+ AssociationProxy.new(self, opts, dynamic_opts, &block)
106
105
  end
107
106
  else
108
107
  super
@@ -33,7 +33,7 @@ module Sequel
33
33
  # By default, the plugin uses a not_null validation for NOT NULL columns, but that
34
34
  # can be changed to a presence validation using an option:
35
35
  #
36
- # Model.plugin :auto_validations, :not_null=>:presence
36
+ # Model.plugin :auto_validations, not_null: :presence
37
37
  #
38
38
  # This is useful if you want to enforce that NOT NULL string columns do not
39
39
  # allow empty values.
@@ -60,7 +60,7 @@ module Sequel
60
60
  UNIQUE_OPTIONS = NOT_NULL_OPTIONS
61
61
 
62
62
  def self.apply(model, opts=OPTS)
63
- model.instance_eval do
63
+ model.instance_exec do
64
64
  plugin :validation_helpers
65
65
  @auto_validate_presence = false
66
66
  @auto_validate_not_null_columns = []
@@ -81,7 +81,7 @@ module Sequel
81
81
 
82
82
  # Setup auto validations for the model if it has a dataset.
83
83
  def self.configure(model, opts=OPTS)
84
- model.instance_eval do
84
+ model.instance_exec do
85
85
  setup_auto_validations if @dataset
86
86
  if opts[:not_null] == :presence
87
87
  @auto_validate_presence = true
@@ -149,7 +149,7 @@ module Sequel
149
149
  when :types
150
150
  @auto_validate_types = false
151
151
  else
152
- send("auto_validate_#{type}_columns").clear
152
+ public_send("auto_validate_#{type}_columns").clear
153
153
  end
154
154
  end
155
155
 
@@ -2,50 +2,7 @@
2
2
 
3
3
  module Sequel
4
4
  module Plugins
5
- # The before_after_save plugin reorders some internal
6
- # Sequel operations so they happen before after_create,
7
- # after_update, and after_save are called, instead of
8
- # after. These operations are:
9
- #
10
- # * Resetting the explicit modified flag
11
- # * Refreshing the model or clearing changed columns after creation
12
- #
13
- # This behavior will become the default in Sequel 5.
14
- #
15
- # Usage:
16
- #
17
- # # Make all model subclasses perform the operations before after_save
18
- # Sequel::Model.plugin :before_after_save
19
- #
20
- # # Make the Album class perform the operations before after_save
21
- # Album.plugin :before_after_save
22
5
  module BeforeAfterSave
23
- module InstanceMethods
24
- # SEQUEL5: Make module empty as it will be the default behavior
25
- private
26
-
27
- # Refresh and reset modified flag right after INSERT query.
28
- def _after_create(pk)
29
- super
30
- @modified = false
31
- pk ? _save_refresh : changed_columns.clear
32
- end
33
-
34
- # Don't refresh or reset modified flag, as it was already done.
35
- def _after_save(pk)
36
- if @was_new
37
- @was_new = nil
38
- else
39
- @columns_updated = nil
40
- end
41
- end
42
-
43
- # Refresh and reset modified flag right after UPDATE query.
44
- def _after_update
45
- super
46
- @modified = false
47
- end
48
- end
49
6
  end
50
7
  end
51
8
  end
@@ -41,12 +41,12 @@ module Sequel
41
41
  # want not to be used during mass assignment, they need to be listed here as well (without the =).
42
42
  #
43
43
  # It's generally a bad idea to rely on a blacklist approach for security. Using a whitelist
44
- # approach such as set_allowed_columns or the instance level set_only or set_fields methods
44
+ # approach such as the whitelist_security plugin or the set_fields methods
45
45
  # is usually a better choice. So use of this method is generally a bad idea.
46
46
  #
47
47
  # Artist.set_restricted_columns(:records_sold)
48
- # Artist.set(:name=>'Bob', :hometown=>'Sactown') # No Error
49
- # Artist.set(:name=>'Bob', :records_sold=>30000) # Error
48
+ # Artist.set(name: 'Bob', hometown: 'Sactown') # No Error
49
+ # Artist.set(name: 'Bob', records_sold: 30000) # Error
50
50
  def set_restricted_columns(*cols)
51
51
  clear_setter_methods_cache
52
52
  @restricted_columns = cols
@@ -58,7 +58,8 @@ module Sequel
58
58
  # restricted_columns.
59
59
  def get_setter_methods
60
60
  meths = super
61
- if !(respond_to?(:allowed_columns) && allowed_columns) && restricted_columns
61
+ #if !(respond_to?(:allowed_columns) && allowed_columns) && restricted_columns
62
+ if (!defined?(::Sequel::Plugins::WhitelistSecurity) || !plugins.include?(::Sequel::Plugins::WhitelistSecurity) || !allowed_columns) && restricted_columns
62
63
  meths -= restricted_columns.map{|x| "#{x}="}
63
64
  end
64
65
  meths
@@ -67,20 +68,20 @@ module Sequel
67
68
 
68
69
  module InstanceMethods
69
70
  # Set all values using the entries in the hash, except for the keys
70
- # given in except. You should probably use +set_fields+ or +set_only+
71
+ # given in except. You should probably use +set_fields+
71
72
  # instead of this method, as blacklist approaches to security are a bad idea.
72
73
  #
73
- # artist.set_except({:name=>'Jim'}, :hometown)
74
+ # artist.set_except({name: 'Jim'}, :hometown)
74
75
  # artist.name # => 'Jim'
75
76
  def set_except(hash, *except)
76
77
  set_restricted(hash, ExceptionList.new(except.flatten))
77
78
  end
78
79
 
79
80
  # Update all values using the entries in the hash, except for the keys
80
- # given in except. You should probably use +update_fields+ or +update_only+
81
+ # given in except. You should probably use +update_fields+
81
82
  # instead of this method, as blacklist approaches to security are a bad idea.
82
83
  #
83
- # artist.update_except({:name=>'Jim'}, :hometown) # UPDATE artists SET name = 'Jim' WHERE (id = 1)
84
+ # artist.update_except({name: 'Jim'}, :hometown) # UPDATE artists SET name = 'Jim' WHERE (id = 1)
84
85
  def update_except(hash, *except)
85
86
  update_restricted(hash, ExceptionList.new(except.flatten))
86
87
  end