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
@@ -22,17 +22,13 @@ module Sequel
22
22
  # Sequel::Model.plugin :touch
23
23
  #
24
24
  # # Allow touching of Album instances, with a custom column
25
- # Album.plugin :touch, :column=>:updated_on
25
+ # Album.plugin :touch, column: :updated_on
26
26
  #
27
27
  # # Allow touching of Artist instances, updating the albums and tags
28
28
  # # associations when touching, touching the +updated_on+ column for
29
29
  # # albums and the +updated_at+ column for tags
30
- # Artist.plugin :touch, :associations=>[{:albums=>:updated_on}, :tags]
30
+ # Artist.plugin :touch, associations: [{albums: :updated_on}, :tags]
31
31
  module Touch
32
- # The default column to update when touching
33
- TOUCH_COLUMN_DEFAULT = :updated_at
34
- Sequel::Deprecation.deprecate_constant(self, :TOUCH_COLUMN_DEFAULT)
35
-
36
32
  def self.apply(model, opts=OPTS)
37
33
  model.instance_variable_set(:@touched_associations, {})
38
34
  end
@@ -131,13 +127,13 @@ module Sequel
131
127
  model.touched_associations.each do |assoc, column|
132
128
  r = model.association_reflection(assoc)
133
129
  next unless r.can_have_associated_objects?(self)
134
- ds = send(r.dataset_method)
130
+ ds = public_send(r[:dataset_method])
135
131
 
136
132
  if ds.send(:joined_dataset?)
137
133
  # Can't update all values at once, so update each instance individually.
138
134
  # Instead if doing a simple save, update via the instance's dataset,
139
135
  # to avoid going into an infinite loop in some cases.
140
- send(assoc).each{|x| x.this.update(column=>touch_association_value)}
136
+ public_send(assoc).each{|x| x.this.update(column=>touch_association_value)}
141
137
  else
142
138
  # Update all values at once for performance reasons.
143
139
  ds.update(column=>touch_association_value)
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Sequel
4
4
  module Plugins
5
- # The Tree plugin adds additional associations and methods that allow you to
5
+ # The tree plugin adds additional associations and methods that allow you to
6
6
  # treat a Model as a tree.
7
7
  #
8
8
  # A column for holding the parent key is required and is :parent_id by default.
@@ -21,7 +21,7 @@ module Sequel
21
21
  # end
22
22
  #
23
23
  # class Node < Sequel::Model
24
- # plugin :tree, :key=>:parentid, :order=>:position
24
+ # plugin :tree, key: :parentid, order: :position
25
25
  # end
26
26
  module Tree
27
27
  # Create parent and children associations. Any options
@@ -33,7 +33,7 @@ module Sequel
33
33
  opts = opts.dup
34
34
  opts[:class] = model
35
35
 
36
- model.instance_eval do
36
+ model.instance_exec do
37
37
  @parent_column = (opts[:key] ||= :parent_id)
38
38
  @tree_order = opts[:order]
39
39
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Sequel
4
4
  module Plugins
5
- # The TypecastOnLoad plugin exists because most of Sequel's database adapters don't
5
+ # The typecast_on_load plugin exists because most of Sequel's database adapters don't
6
6
  # have complete control over typecasting, and may return columns that aren't
7
7
  # typecast correctly (with correct being defined as how the model object
8
8
  # would typecast the same column values).
@@ -23,7 +23,7 @@ module Sequel
23
23
  module TypecastOnLoad
24
24
  # Call add_typecast_on_load_columns on the passed column arguments.
25
25
  def self.configure(model, *columns)
26
- model.instance_eval do
26
+ model.instance_exec do
27
27
  @typecast_on_load_columns ||= []
28
28
  add_typecast_on_load_columns(*columns)
29
29
  end
@@ -4,13 +4,7 @@ module Sequel
4
4
  module Plugins
5
5
  # The unlimited_update plugin is designed to work around a
6
6
  # MySQL warning in replicated environments, which occurs if
7
- # you issue an UPDATE with a LIMIT clause. No other
8
- # database Sequel supports will create an UPDATE clause with
9
- # a LIMIT, and in non-replicated MySQL environments, MySQL
10
- # doesn't issue a warning. Note that even in replicated
11
- # environments the MySQL warning is harmless, as Sequel
12
- # restricts an update to rows with a matching primary key,
13
- # which should be unique.
7
+ # you issue an UPDATE with a LIMIT clause.
14
8
  #
15
9
  # Usage:
16
10
  #
@@ -2,21 +2,21 @@
2
2
 
3
3
  module Sequel
4
4
  module Plugins
5
- # The update_or_create plugin adds a couple of methods that make it easier
5
+ # The update_or_create plugin adds methods that make it easier
6
6
  # to deal with objects which may or may not yet exist in the database.
7
7
  # The first method is update_or_create, which updates an object if it
8
8
  # exists in the database, or creates the object if it does not.
9
9
  #
10
10
  # You can call update_or_create with a block:
11
11
  #
12
- # Album.update_or_create(:name=>'Hello') do |album|
12
+ # Album.update_or_create(name: 'Hello') do |album|
13
13
  # album.num_copies_sold = 1000
14
14
  # end
15
15
  #
16
16
  # or provide two hashes, with the second one being the attributes
17
17
  # to set.
18
18
  #
19
- # Album.update_or_create({:name=>'Hello'}, {:num_copies_sold=>1000})
19
+ # Album.update_or_create({name: 'Hello'}, num_copies_sold: 1000)
20
20
  #
21
21
  # In both cases, this will check the database to find the album with
22
22
  # the name "Hello". If such an album exists, it will be updated to set
@@ -30,15 +30,15 @@ module Sequel
30
30
  # dataset supports RETURNING.
31
31
  #
32
32
  # # Only include the artist column in RETURNING
33
- # Album.plugin :update_refresh, :columns => :artist
33
+ # Album.plugin :update_refresh, columns: :artist
34
34
  #
35
35
  # # Only include the artist and title columns in RETURNING
36
- # Album.plugin :update_refresh, :columns => [ :artist, :title ]
36
+ # Album.plugin :update_refresh, columns: [:artist, :title]
37
37
  module UpdateRefresh
38
38
  # Set the specific columns to refresh, if the :columns option
39
39
  # is provided.
40
40
  def self.configure(model, opts=OPTS)
41
- model.instance_eval do
41
+ model.instance_exec do
42
42
  @update_refresh_columns = Array(opts[:columns]) || []
43
43
  end
44
44
  end
@@ -5,10 +5,7 @@ require 'securerandom'
5
5
  module Sequel
6
6
  module Plugins
7
7
  # The uuid plugin creates hooks that automatically create a uuid for every
8
- # instance. Note that this uses SecureRandom.uuid to create UUIDs, and
9
- # that method is not defined on ruby 1.8.7. If you would like to use this
10
- # on ruby 1.8.7, you need to override the Model#create_uuid private method
11
- # to return a valid uuid.
8
+ # instance.
12
9
  #
13
10
  # Usage:
14
11
  #
@@ -17,7 +14,7 @@ module Sequel
17
14
  # Sequel::Model.plugin :uuid
18
15
  #
19
16
  # # Uuid Album instances, with custom column name
20
- # Album.plugin :uuid, :field=>my_uuid
17
+ # Album.plugin :uuid, field: :my_uuid
21
18
  module Uuid
22
19
  # Configure the plugin by setting the available options. Note that
23
20
  # if this method is run more than once, previous settings are ignored,
@@ -25,7 +22,7 @@ module Sequel
25
22
  # :field :: The field to hold the uuid (default: :uuid)
26
23
  # :force :: Whether to overwrite an existing uuid (default: false)
27
24
  def self.configure(model, opts=OPTS)
28
- model.instance_eval do
25
+ model.instance_exec do
29
26
  @uuid_field = opts[:field]||:uuid
30
27
  @uuid_overwrite = opts[:force]||false
31
28
  end
@@ -44,17 +41,16 @@ module Sequel
44
41
  end
45
42
 
46
43
  module InstanceMethods
47
- private
48
-
49
44
  # Set the uuid when creating
50
- def _before_validation
45
+ def before_validation
51
46
  set_uuid if new?
52
47
  super
53
48
  end
54
49
 
50
+ private
51
+
55
52
  # Create a new UUID. This method can be overridden to use a separate
56
- # method for creating UUIDs. Note that this method does not work on
57
- # ruby 1.8.7, you will have to override it if you are using ruby 1.8.7.
53
+ # method for creating UUIDs.
58
54
  def create_uuid
59
55
  SecureRandom.uuid
60
56
  end
@@ -56,7 +56,7 @@ module Sequel
56
56
  # Initializes a new generator.
57
57
  def initialize(receiver ,&block)
58
58
  @receiver = receiver
59
- instance_eval(&block)
59
+ instance_exec(&block)
60
60
  end
61
61
 
62
62
  # Delegates method calls to the receiver by calling receiver.validates_xxx.
@@ -97,15 +97,16 @@ module Sequel
97
97
  #
98
98
  # class MyClass < Sequel::Model
99
99
  # validates do
100
- # length_of :name, :minimum => 6
101
- # length_of :password, :minimum => 8
100
+ # length_of :name, minimum: 6
101
+ # length_of :password, minimum: 8
102
102
  # end
103
103
  # end
104
104
  #
105
105
  # is equivalent to:
106
+ #
106
107
  # class MyClass < Sequel::Model
107
- # validates_length_of :name, :minimum => 6
108
- # validates_length_of :password, :minimum => 8
108
+ # validates_length_of :name, minimum: 6
109
+ # validates_length_of :password, minimum: 8
109
110
  # end
110
111
  def validates(&block)
111
112
  Generator.new(self, &block)
@@ -187,7 +188,7 @@ module Sequel
187
188
  # Sequel will attempt to insert a NULL value into the database, instead of using the
188
189
  # database's default.
189
190
  # :allow_nil :: Whether to skip the validation if the value is nil.
190
- # :if :: A symbol (indicating an instance_method) or proc (which is instance_evaled)
191
+ # :if :: A symbol (indicating an instance_method) or proc (which is instance_execed)
191
192
  # skipping this validation if it returns nil or false.
192
193
  # :tag :: The tag to use for this validation.
193
194
  def validates_each(*atts, &block)
@@ -273,7 +274,7 @@ module Sequel
273
274
  o.errors.add(a, opts[:message] || opts[:wrong_length]) unless v && v.size == i
274
275
  end
275
276
  if w = opts[:within]
276
- o.errors.add(a, opts[:message] || opts[:wrong_length]) unless v && w.send(w.respond_to?(:cover?) ? :cover? : :include?, v.size)
277
+ o.errors.add(a, opts[:message] || opts[:wrong_length]) unless v && w.public_send(w.respond_to?(:cover?) ? :cover? : :include?, v.size)
277
278
  end
278
279
  end
279
280
  end
@@ -335,7 +336,7 @@ module Sequel
335
336
  reflect_validation(:inclusion, opts, atts)
336
337
  atts << opts
337
338
  validates_each(*atts) do |o, a, v|
338
- o.errors.add(a, opts[:message]) unless n.send(n.respond_to?(:cover?) ? :cover? : :include?, v)
339
+ o.errors.add(a, opts[:message]) unless n.public_send(n.respond_to?(:cover?) ? :cover? : :include?, v)
339
340
  end
340
341
  end
341
342
 
@@ -434,7 +435,7 @@ module Sequel
434
435
  when Symbol
435
436
  o.get_column_value(i)
436
437
  when Proc
437
- o.instance_eval(&i)
438
+ o.instance_exec(&i)
438
439
  else
439
440
  raise(::Sequel::Error, "invalid value for :if validation option")
440
441
  end
@@ -15,11 +15,11 @@ module Sequel
15
15
  # end
16
16
  # end
17
17
  #
18
- # Album.new(:status_id=>1).valid?(:validation_context=>:initial) # => true
19
- # Album.new(:status_id=>2).valid?(:validation_context=>:initial) # => false
18
+ # Album.new(status_id: 1).valid?(validation_context: :initial) # => true
19
+ # Album.new(status_id: 2).valid?(validation_context: :initial) # => false
20
20
  #
21
- # Album.new(:status_id=>1).valid?(:validation_context=>:approve) # => false
22
- # Album.new(:status_id=>2).valid?(:validation_context=>:approve) # => true
21
+ # Album.new(status_id: 1).valid?(validation_context: :approve) # => false
22
+ # Album.new(status_id: 2).valid?(validation_context: :approve) # => true
23
23
  #
24
24
  # There is no validation context used by default, so validation_context will be
25
25
  # +nil+ if one is not specified. If you want to differentiate between creating new
@@ -38,17 +38,24 @@ module Sequel
38
38
  # that argument is passed as an argument to the proc.
39
39
  #
40
40
  # The default validation options for all models can be modified by
41
- # changing the values of the Sequel::Plugins::ValidationHelpers::DEFAULT_OPTIONS hash. You
42
- # change change the default options on a per model basis
43
- # by overriding a private instance method default_validation_helpers_options.
44
- #
41
+ # overridding the Model#default_validation_helpers_options private method.
45
42
  # By changing the default options, you can setup internationalization of the
46
43
  # error messages. For example, you would modify the default options:
47
44
  #
48
- # Sequel::Plugins::ValidationHelpers::DEFAULT_OPTIONS.merge!(
49
- # :exact_length=>{:message=>lambda{|exact| I18n.t("errors.exact_length", :exact => exact)}},
50
- # :integer=>{:message=>lambda{I18n.t("errors.integer")}}
51
- # )
45
+ # class Sequel::Model
46
+ # private
47
+ #
48
+ # def default_validation_helpers_options(type)
49
+ # case type
50
+ # when :exact_length
51
+ # {message: lambda{|exact| I18n.t("errors.exact_length", exact: exact)}
52
+ # when :integer
53
+ # {message: lambda{I18n.t("errors.integer")}
54
+ # else
55
+ # super
56
+ # end
57
+ # end
58
+ # end
52
59
  #
53
60
  # and then use something like this in your yaml translation file:
54
61
  #
@@ -61,20 +68,16 @@ module Sequel
61
68
  # you need to override the method. Here's an example:
62
69
  #
63
70
  # class Sequel::Model::Errors
64
- # ATTRIBUTE_JOINER = I18n.t('errors.joiner').freeze
65
71
  # def full_messages
66
72
  # inject([]) do |m, kv|
67
73
  # att, errors = *kv
68
74
  # att.is_a?(Array) ? Array(att).map!{|v| I18n.t("attributes.#{v}")} : att = I18n.t("attributes.#{att}")
69
- # errors.each {|e| m << (e.is_a?(LiteralString) ? e : "#{Array(att).join(ATTRIBUTE_JOINER)} #{e}")}
75
+ # errors.each {|e| m << (e.is_a?(LiteralString) ? e : "#{Array(att).join(I18n.t('errors.joiner'))} #{e}")}
70
76
  # m
71
77
  # end
72
78
  # end
73
79
  # end
74
80
  module ValidationHelpers
75
- # Default validation options used by Sequel. Can be modified to change the error
76
- # messages for all models (e.g. for internationalization), or to set certain
77
- # default options for validations (e.g. :allow_nil=>true for all validates_format).
78
81
  DEFAULT_OPTIONS = {
79
82
  :exact_length=>{:message=>lambda{|exact| "is not #{exact} characters"}},
80
83
  :format=>{:message=>lambda{|with| 'is invalid'}},
@@ -89,9 +92,8 @@ module Sequel
89
92
  :type=>{:message=>lambda{|klass| klass.is_a?(Array) ? "is not a valid #{klass.join(" or ").downcase}" : "is not a valid #{klass.to_s.downcase}"}},
90
93
  :presence=>{:message=>lambda{"is not present"}},
91
94
  :unique=>{:message=>lambda{'is already taken'}}
92
- }
93
- DEFAULT__OPTIONS = DEFAULT_OPTIONS
94
- Sequel::Deprecation.deprecate_constant(self, :DEFAULT_OPTIONS)
95
+ }.freeze
96
+ DEFAULT_OPTIONS.each_value(&:freeze)
95
97
 
96
98
  module InstanceMethods
97
99
  # Check that the attribute values are the given exact length.
@@ -106,7 +108,7 @@ module Sequel
106
108
 
107
109
  # Check attribute value(s) is included in the given set.
108
110
  def validates_includes(set, atts, opts=OPTS)
109
- validatable_attributes_for_type(:includes, atts, opts){|a,v,m| validation_error_message(m, set) unless set.send(set.respond_to?(:cover?) ? :cover? : :include?, v)}
111
+ validatable_attributes_for_type(:includes, atts, opts){|a,v,m| validation_error_message(m, set) unless set.public_send(set.respond_to?(:cover?) ? :cover? : :include?, v)}
110
112
  end
111
113
 
112
114
  # Check attribute value(s) string representation is a valid integer.
@@ -123,7 +125,7 @@ module Sequel
123
125
 
124
126
  # Check that the attribute values length is in the specified range.
125
127
  def validates_length_range(range, atts, opts=OPTS)
126
- validatable_attributes_for_type(:length_range, atts, opts){|a,v,m| validation_error_message(m, range) if v.nil? || !range.send(range.respond_to?(:cover?) ? :cover? : :include?, v.length)}
128
+ validatable_attributes_for_type(:length_range, atts, opts){|a,v,m| validation_error_message(m, range) if v.nil? || !range.cover?(v.length)}
127
129
  end
128
130
 
129
131
  # Check that the attribute values are not longer than the given max length.
@@ -165,7 +167,7 @@ module Sequel
165
167
  # Check attribute value(s) against a specified value and operation, e.g.
166
168
  # validates_operator(:>, 3, :value) validates that value > 3.
167
169
  def validates_operator(operator, rhs, atts, opts=OPTS)
168
- validatable_attributes_for_type(:operator, atts, opts){|a,v,m| validation_error_message(m, operator, rhs) if v.nil? || !v.send(operator, rhs)}
170
+ validatable_attributes_for_type(:operator, atts, opts){|a,v,m| validation_error_message(m, operator, rhs) if v.nil? || !v.public_send(operator, rhs)}
169
171
  end
170
172
 
171
173
  # Validates for all of the model columns (or just the given columns)
@@ -223,7 +225,7 @@ module Sequel
223
225
  # model's dataset.
224
226
  # :message :: The message to use (default: 'is already taken')
225
227
  # :only_if_modified :: Only check the uniqueness if the object is new or
226
- # one of the columns has been modified.
228
+ # one of the columns has been modified, true by default.
227
229
  # :where :: A callable object where call takes three arguments, a dataset,
228
230
  # the current object, and an array of columns, and should return
229
231
  # a modified dataset that is filtered to include only rows with
@@ -232,9 +234,9 @@ module Sequel
232
234
  # If you want to do a case insensitive uniqueness validation on a database that
233
235
  # is case sensitive by default, you can use:
234
236
  #
235
- # validates_unique :column, :where=>(proc do |ds, obj, cols|
237
+ # validates_unique :column, where:(lambda do |ds, obj, cols|
236
238
  # ds.where(cols.map do |c|
237
- # v = obj.send(c)
239
+ # v = obj.public_send(c)
238
240
  # v = v.downcase if v
239
241
  # [Sequel.function(:lower, c), v]
240
242
  # end)
@@ -250,8 +252,7 @@ module Sequel
250
252
  atts.each do |a|
251
253
  arr = Array(a)
252
254
  next if arr.any?{|x| errors.on(x)}
253
- # SEQUEL5: Default only_if_modified to true
254
- next if opts[:only_if_modified] && !new? && !arr.any?{|x| changed_columns.include?(x)}
255
+ next if opts.fetch(:only_if_modified, true) && !new? && !arr.any?{|x| changed_columns.include?(x)}
255
256
  ds = opts[:dataset] || model.dataset
256
257
  ds = if where
257
258
  where.call(ds, self, arr)
@@ -276,7 +277,7 @@ module Sequel
276
277
  # The hash return must include a :message option that is either a
277
278
  # proc or string.
278
279
  def default_validation_helpers_options(type)
279
- DEFAULT__OPTIONS[type]
280
+ DEFAULT_OPTIONS[type]
280
281
  end
281
282
 
282
283
  # Skip validating any attribute that matches one of the allow_* options.
@@ -34,12 +34,12 @@ module Sequel
34
34
  # setter methods (methods that end in =) that you want to be used during
35
35
  # mass assignment, they need to be listed here as well (without the =).
36
36
  #
37
- # It may be better to use a method such as +set_only+ or +set_fields+ that lets you specify
37
+ # It may be better to use +set_fields+ which lets you specify
38
38
  # the allowed fields per call.
39
39
  #
40
40
  # Artist.set_allowed_columns(:name, :hometown)
41
- # Artist.set(:name=>'Bob', :hometown=>'Sactown') # No Error
42
- # Artist.set(:name=>'Bob', :records_sold=>30000) # Error
41
+ # Artist.set(name: 'Bob', hometown: 'Sactown') # No Error
42
+ # Artist.set(name: 'Bob', records_sold: 30000) # Error
43
43
  def set_allowed_columns(*cols)
44
44
  clear_setter_methods_cache
45
45
  @allowed_columns = cols
@@ -62,7 +62,7 @@ module Sequel
62
62
  # allowed_columns in the model.
63
63
  #
64
64
  # Artist.set_allowed_columns(:num_albums)
65
- # artist.set_all(:name=>'Jim')
65
+ # artist.set_all(name: 'Jim')
66
66
  # artist.name # => 'Jim'
67
67
  def set_all(hash)
68
68
  set_restricted(hash, :all)
@@ -72,10 +72,10 @@ module Sequel
72
72
  # is included in only. It may be a better idea to use +set_fields+
73
73
  # instead of this method.
74
74
  #
75
- # artist.set_only({:name=>'Jim'}, :name)
75
+ # artist.set_only({name: 'Jim'}, :name)
76
76
  # artist.name # => 'Jim'
77
77
  #
78
- # artist.set_only({:hometown=>'LA'}, :name) # Raise Error
78
+ # artist.set_only({hometown: 'LA'}, :name) # Raise Error
79
79
  def set_only(hash, *only)
80
80
  set_restricted(hash, only.flatten)
81
81
  end
@@ -84,7 +84,7 @@ module Sequel
84
84
  # +allowed_columns+ in the model.
85
85
  #
86
86
  # Artist.set_allowed_columns(:num_albums)
87
- # artist.update_all(:name=>'Jim') # UPDATE artists SET name = 'Jim' WHERE (id = 1)
87
+ # artist.update_all(name: 'Jim') # UPDATE artists SET name = 'Jim' WHERE (id = 1)
88
88
  def update_all(hash)
89
89
  update_restricted(hash, :all)
90
90
  end
@@ -93,10 +93,10 @@ module Sequel
93
93
  # is included in only. It may be a better idea to use +update_fields+
94
94
  # instead of this method.
95
95
  #
96
- # artist.update_only({:name=>'Jim'}, :name)
96
+ # artist.update_only({name: 'Jim'}, :name)
97
97
  # # UPDATE artists SET name = 'Jim' WHERE (id = 1)
98
98
  #
99
- # artist.update_only({:hometown=>'LA'}, :name) # Raise Error
99
+ # artist.update_only({hometown: 'LA'}, :name) # Raise Error
100
100
  def update_only(hash, *only)
101
101
  update_restricted(hash, only.flatten)
102
102
  end
@@ -107,6 +107,10 @@ module Sequel
107
107
  def setter_methods(type)
108
108
  if type == :default && model.allowed_columns
109
109
  model.setter_methods
110
+ elsif type.is_a?(Array)
111
+ type.map{|x| "#{x}="}
112
+ elsif type == :all && primary_key && model.restrict_primary_key?
113
+ super + Array(primary_key).map{|x| "#{x}="}
110
114
  else
111
115
  super
112
116
  end