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
@@ -7,14 +7,14 @@ module Sequel
7
7
  #
8
8
  # Album.plugin :input_transformer
9
9
  # Album.add_input_transformer(:reverser){|v| v.is_a?(String) ? v.reverse : v}
10
- # album = Album.new(:name=>'foo')
10
+ # album = Album.new(name: 'foo')
11
11
  # album.name # => 'oof'
12
12
  #
13
13
  # You can specifically set some columns to skip some input
14
14
  # input transformers:
15
15
  #
16
16
  # Album.skip_input_transformer(:reverser, :foo)
17
- # Album.new(:foo=>'bar').foo # => 'bar'
17
+ # Album.new(foo: 'bar').foo # => 'bar'
18
18
  #
19
19
  # Usage:
20
20
  #
@@ -25,9 +25,8 @@ module Sequel
25
25
  # Album.plugin :input_transformer
26
26
  module InputTransformer
27
27
  def self.apply(model, *)
28
- model.instance_eval do
28
+ model.instance_exec do
29
29
  @input_transformers = {}
30
- @input_transformer_order = []
31
30
  @skip_input_transformer_columns = {}
32
31
  end
33
32
  end
@@ -42,23 +41,23 @@ module Sequel
42
41
  # Hash of input transformer name symbols to transformer callables.
43
42
  attr_reader :input_transformers
44
43
 
45
- # The order in which to call the input transformers.
46
- attr_reader :input_transformer_order
44
+ # The order in which to call the input transformers. For backwards compatibility only.
45
+ def input_transformer_order
46
+ input_transformers.keys.reverse
47
+ end
47
48
 
48
- Plugins.inherited_instance_variables(self, :@skip_input_transformer_columns=>:hash_dup, :@input_transformers=>:dup, :@input_transformer_order=>:dup)
49
+ Plugins.inherited_instance_variables(self, :@skip_input_transformer_columns=>:hash_dup, :@input_transformers=>:dup)
49
50
 
50
51
  # Add an input transformer to this model.
51
52
  def add_input_transformer(transformer_name, &block)
52
53
  raise(Error, 'must provide both transformer name and block when adding input transformer') unless transformer_name && block
53
54
  @input_transformers[transformer_name] = block
54
- @input_transformer_order.unshift(transformer_name)
55
55
  @skip_input_transformer_columns[transformer_name] = []
56
56
  end
57
57
 
58
58
  # Freeze input transformers when freezing model class
59
59
  def freeze
60
60
  @input_transformers.freeze
61
- @input_transformer_order.freeze
62
61
  @skip_input_transformer_columns.freeze.each_value(&:freeze)
63
62
 
64
63
  super
@@ -79,8 +78,8 @@ module Sequel
79
78
  # Transform the input using all of the transformers, except those explicitly
80
79
  # skipped, before setting the value in the model object.
81
80
  def []=(k, v)
82
- model.input_transformer_order.each do |transformer_name|
83
- v = model.input_transformers[transformer_name].call(v) unless model.skip_input_transformer?(transformer_name, k)
81
+ model.input_transformers.reverse_each do |name, transformer|
82
+ v = transformer.call(v) unless model.skip_input_transformer?(name, k)
84
83
  end
85
84
  super
86
85
  end
@@ -21,7 +21,7 @@ module Sequel
21
21
  # Modify the current model's dataset selection, if the model
22
22
  # has a dataset.
23
23
  def self.configure(model)
24
- model.instance_eval do
24
+ model.instance_exec do
25
25
  self.dataset = dataset if @dataset && @dataset.opts[:select]
26
26
  end
27
27
  end
@@ -30,14 +30,6 @@ module Sequel
30
30
  # The dataset to use to insert new rows. For internal use only.
31
31
  attr_reader :instance_insert_dataset
32
32
 
33
- # Freeze instance insert dataset when freezing model class.
34
- def freeze
35
- super
36
-
37
- @instance_insert_dataset.freeze if @instance_insert_dataset
38
- self
39
- end
40
-
41
33
  private
42
34
 
43
35
  # When reseting the instance dataset, also reset the instance_insert_dataset.
@@ -17,12 +17,12 @@ module Sequel
17
17
  #
18
18
  # # These are two separate objects that represent the same
19
19
  # # database row.
20
- # i1 = Item.first(:id=>1, :delete_allowed=>false)
21
- # i2 = Item.first(:id=>1, :delete_allowed=>false)
20
+ # i1 = Item.first(id: 1, delete_allowed: false)
21
+ # i2 = Item.first(id: 1, delete_allowed: false)
22
22
  #
23
23
  # # Add an instance filter to the object. This filter is in effect
24
24
  # # until the object is successfully updated or deleted.
25
- # i1.instance_filter(:delete_allowed=>true)
25
+ # i1.instance_filter(delete_allowed: true)
26
26
  #
27
27
  # # Attempting to delete the object where the filter doesn't
28
28
  # # match any rows raises an error.
@@ -30,7 +30,7 @@ module Sequel
30
30
  #
31
31
  # # The other object that represents the same row has no
32
32
  # # instance filters, and can be updated normally.
33
- # i2.update(:delete_allowed=>true)
33
+ # i2.update(delete_allowed: true)
34
34
  #
35
35
  # # Even though the filter is now still in effect, since the
36
36
  # # database row has been updated to allow deleting,
@@ -123,7 +123,7 @@ module Sequel
123
123
  # Only use prepared statements for update and delete queries
124
124
  # if there are no instance filters.
125
125
  def use_prepared_statements_for?(type)
126
- if (type == :update || type == :delete) && !instance_filters.empty?
126
+ if type == :update && !instance_filters.empty?
127
127
  false
128
128
  else
129
129
  super if defined?(super)
@@ -28,31 +28,16 @@ module Sequel
28
28
  # # Add the instance hook methods just to Album instances
29
29
  # Album.plugin :instance_hooks
30
30
  module InstanceHooks
31
- BEFORE_HOOKS, AFTER_HOOKS = Sequel::Model::HOOKS.partition{|l| l.to_s.start_with?('before')}
32
- Sequel::Deprecation.deprecate_constant(self, :BEFORE_HOOKS)
33
- Sequel::Deprecation.deprecate_constant(self, :AFTER_HOOKS)
34
- HOOKS = Sequel::Model::HOOKS
35
- Sequel::Deprecation.deprecate_constant(self, :HOOKS)
36
-
37
- # SEQUEL5: Remove
38
- DEPRECATION_REPLACEMENTS = {
39
- :after_commit=>"Use obj.after_save_hook{obj.db.after_commit{}} instead",
40
- :after_destroy_commit=>"Use obj.after_destroy_hook{obj.db.after_commit{}} instead",
41
- :after_destroy_rollback=>"Use obj.before_destroy_hook{obj.db.after_rollback{}} instead",
42
- :after_rollback=>"Use obj.before_save_hook{obj.db.after_rollback{}} instead"
43
- }.freeze
44
-
45
31
  module InstanceMethods
46
32
  Sequel::Model::HOOKS.each{|h| class_eval(<<-END , __FILE__, __LINE__+1)}
47
33
  def #{h}_hook(&block)
48
- #{"Sequel::Deprecation.deprecate('Sequel::Model##{h}_hook in the instance_hooks plugin', #{DEPRECATION_REPLACEMENTS[h].inspect})" if DEPRECATION_REPLACEMENTS[h]}
49
34
  raise Sequel::Error, "can't add hooks to frozen object" if frozen?
50
35
  add_instance_hook(:#{h}, &block)
51
36
  self
52
37
  end
53
38
  END
54
39
 
55
- [:before_create, :before_update, :before_validation].each{|h| class_eval("def #{h}; (@instance_hooks && run_before_instance_hooks(:#{h}) == false) ? false : super end", __FILE__, __LINE__)}
40
+ [:before_create, :before_update, :before_validation].each{|h| class_eval("def #{h}; run_before_instance_hooks(:#{h}) if @instance_hooks; super end", __FILE__, __LINE__)}
56
41
  [:after_create, :after_update].each{|h| class_eval(<<-END, __FILE__, __LINE__ + 1)}
57
42
  def #{h}
58
43
  super
@@ -67,15 +52,9 @@ module Sequel
67
52
  def after_destroy
68
53
  super
69
54
  return unless @instance_hooks
70
- # SEQUEL5: Remove commit/rollback
71
- if ad = @instance_hooks[:after_destroy_commit]
72
- db.after_commit{ad.each(&:call)}
73
- end
74
55
  run_after_instance_hooks(:after_destroy)
75
56
  @instance_hooks.delete(:after_destroy)
76
57
  @instance_hooks.delete(:before_destroy)
77
- @instance_hooks.delete(:after_destroy_commit)
78
- @instance_hooks.delete(:after_destroy_rollback)
79
58
  end
80
59
 
81
60
  # Run after validation instance hooks.
@@ -89,39 +68,25 @@ module Sequel
89
68
  def after_save
90
69
  super
91
70
  return unless @instance_hooks
92
- # SEQUEL5: Remove commit/rollback
93
- if (ac = @instance_hooks[:after_commit])
94
- db.after_commit{ac.each(&:call)}
95
- end
96
71
  run_after_instance_hooks(:after_save)
97
72
  @instance_hooks.delete(:after_save)
98
73
  @instance_hooks.delete(:before_save)
99
74
  @instance_hooks.delete(:after_validation)
100
75
  @instance_hooks.delete(:before_validation)
101
- @instance_hooks.delete(:after_commit)
102
- @instance_hooks.delete(:after_rollback)
103
76
  end
104
77
 
105
78
  # Run before_destroy instance hooks.
106
79
  def before_destroy
107
80
  return super unless @instance_hooks
108
- # SEQUEL5: Remove commit/rollback
109
- if adr = @instance_hooks[:after_destroy_rollback]
110
- db.after_rollback{adr.each(&:call)}
111
- end
112
- # SEQUEL5: No false checking
113
- run_before_instance_hooks(:before_destroy) == false ? false : super
81
+ run_before_instance_hooks(:before_destroy)
82
+ super
114
83
  end
115
84
 
116
85
  # Run before_save instance hooks.
117
86
  def before_save
118
87
  return super unless @instance_hooks
119
- # SEQUEL5: Remove commit/rollback
120
- if ar = @instance_hooks[:after_rollback]
121
- db.after_rollback{ar.each(&:call)}
122
- end
123
- # SEQUEL5: No false checking
124
- run_before_instance_hooks(:before_save) == false ? false : super
88
+ run_before_instance_hooks(:before_save)
89
+ super
125
90
  end
126
91
 
127
92
  private
@@ -130,7 +95,7 @@ module Sequel
130
95
  # the beginning of the instance hook's array. For after hooks, add it
131
96
  # to the end.
132
97
  def add_instance_hook(hook, &block)
133
- instance_hooks(hook).send(hook.to_s.start_with?('before') ? :unshift : :push, block)
98
+ instance_hooks(hook).public_send(hook.to_s.start_with?('before') ? :unshift : :push, block)
134
99
  end
135
100
 
136
101
  # An array of instance level hook blocks for the given hook type.
@@ -143,17 +108,7 @@ module Sequel
143
108
  def run_after_instance_hooks(hook)
144
109
  instance_hooks(hook).each(&:call)
145
110
  end
146
-
147
- # Run all hook blocks of the given hook type. If a hook block returns false,
148
- # immediately return false without running the remaining blocks.
149
- def run_before_instance_hooks(hook)
150
- instance_hooks(hook).each do |b|
151
- if b.call == false
152
- Sequel::Deprecation.deprecate("Having #{hook} instance hook block return false to stop evaluation of further #{hook} instance hook blocks", "Instead, call cancel_action inside #{hook} instance hook block")
153
- return false
154
- end
155
- end
156
- end
111
+ alias run_before_instance_hooks run_after_instance_hooks
157
112
  end
158
113
  end
159
114
  end
@@ -18,7 +18,9 @@ module Sequel
18
18
  # Album.plugin :inverted_subsets
19
19
  #
20
20
  # # This will now create two methods, published and not_published
21
- # Album.subset :published, :published => true
21
+ # Album.dataset_module do
22
+ # where :published, published: true
23
+ # end
22
24
  #
23
25
  # Album.published.sql
24
26
  # # SELECT * FROM albums WHERE (published IS TRUE)
@@ -17,37 +17,37 @@ module Sequel
17
17
  #
18
18
  # In addition, you can provide options to control the JSON output:
19
19
  #
20
- # album.to_json(:only=>:name)
21
- # album.to_json(:except=>[:id, :artist_id])
20
+ # album.to_json(only: :name)
21
+ # album.to_json(except: [:id, :artist_id])
22
22
  # # => '{"json_class"="Album","name"=>"RF"}'
23
23
  #
24
- # album.to_json(:include=>:artist)
24
+ # album.to_json(include: :artist)
25
25
  # # => '{"id":1,"name":"RF","artist_id":2,
26
26
  # # "artist":{"id":2,"name":"YJM"}}'
27
27
  #
28
28
  # You can use a hash value with <tt>:include</tt> to pass options
29
29
  # to associations:
30
30
  #
31
- # album.to_json(:include=>{:artist=>{:only=>:name}})
31
+ # album.to_json(include: {artist: {only: :name}})
32
32
  # # => '{"id":1,"name":"RF","artist_id":2,
33
33
  # # "artist":{"name":"YJM"}}'
34
34
  #
35
- # You can specify a name for a given association by passing <tt>:name</tt>
36
- # to the <tt>:include</tt> hash
35
+ # You can specify a name for a given association by using an aliased
36
+ # expression as the key in the <tt>:include</tt> hash
37
37
  #
38
- # album.to_json(:include=>{Sequel.as(:artist, :singer)=>{:only=>:name}})
38
+ # album.to_json(include: {Sequel.as(:artist, :singer)=>{only: :name}})
39
39
  # # => '{"id":1,"name":"RF","artist_id":2,
40
40
  # # "singer":{"name":"YJM"}}'
41
41
  #
42
42
  # You can specify the <tt>:root</tt> option to nest the JSON under the
43
43
  # name of the model:
44
44
  #
45
- # album.to_json(:root => true)
45
+ # album.to_json(root: true)
46
46
  # # => '{"album":{"id":1,"name":"RF","artist_id":2}}'
47
47
  #
48
48
  # You can specify JSON serialization options to use later:
49
49
  #
50
- # album.json_serializer_opts(:root => true)
50
+ # album.json_serializer_opts(root: true)
51
51
  # [album].to_json
52
52
  # # => '[{"album":{"id":1,"name":"RF","artist_id":2}}]'
53
53
  #
@@ -55,12 +55,12 @@ module Sequel
55
55
  # of which return all objects in the dataset:
56
56
  #
57
57
  # Album.to_json
58
- # Album.where(:artist_id=>1).to_json(:include=>:tags)
58
+ # Album.where(artist_id: 1).to_json(include: :tags)
59
59
  #
60
60
  # If you have an existing array of model instances you want to convert to
61
61
  # JSON, you can call the class to_json method with the :array option:
62
62
  #
63
- # Album.to_json(:array=>[Album[1], Album[2]])
63
+ # Album.to_json(array: [Album[1], Album[2]])
64
64
  #
65
65
  # All to_json methods take blocks, and if a block is given, it will yield
66
66
  # the array or hash before serialization, and will serialize the value
@@ -77,7 +77,7 @@ module Sequel
77
77
  # The array_from_json class method exists to parse arrays of model instances
78
78
  # from json:
79
79
  #
80
- # json = Album.where(:artist_id=>1).to_json
80
+ # json = Album.where(artist_id: 1).to_json
81
81
  # albums = Album.array_from_json(json)
82
82
  #
83
83
  # These does not necessarily round trip, since doing so would let users
@@ -86,7 +86,7 @@ module Sequel
86
86
  # fields, you can use the :fields option, which will call set_fields with
87
87
  # the given fields:
88
88
  #
89
- # Album.from_json(album.to_json, :fields=>%w'id name')
89
+ # Album.from_json(album.to_json, fields: %w'id name')
90
90
  #
91
91
  # If you want to update an existing instance, you can use the from_json
92
92
  # instance method:
@@ -96,11 +96,11 @@ module Sequel
96
96
  # Both of these allow creation of cached associated objects, if you provide
97
97
  # the :associations option:
98
98
  #
99
- # album.from_json(json, :associations=>:artist)
99
+ # album.from_json(json, associations: :artist)
100
100
  #
101
101
  # You can even provide options when setting up the associated objects:
102
102
  #
103
- # album.from_json(json, :associations=>{:artist=>{:fields=>%w'id name', :associations=>:tags}})
103
+ # album.from_json(json, associations: {artist: {fields: %w'id name', associations: :tags}})
104
104
  #
105
105
  # Note that active_support/json makes incompatible changes to the to_json API,
106
106
  # and breaks some aspects of the json_serializer plugin. You can undo the damage
@@ -132,7 +132,7 @@ module Sequel
132
132
  # Set up the column readers to do deserialization and the column writers
133
133
  # to save the value in deserialized_values.
134
134
  def self.configure(model, opts=OPTS)
135
- model.instance_eval do
135
+ model.instance_exec do
136
136
  @json_serializer_opts = (@json_serializer_opts || OPTS).merge(opts)
137
137
  end
138
138
  end
@@ -276,7 +276,7 @@ module Sequel
276
276
  #
277
277
  # Example:
278
278
  #
279
- # obj.json_serializer_opts(:only=>:name)
279
+ # obj.json_serializer_opts(only: :name)
280
280
  # [obj].to_json # => '[{"name":"..."}]'
281
281
  def json_serializer_opts(opts=OPTS)
282
282
  @json_serializer_opts = Hash[@json_serializer_opts||OPTS].merge!(opts)
@@ -329,7 +329,7 @@ module Sequel
329
329
 
330
330
  v = v.empty? ? [] : [v]
331
331
 
332
- objs = send(k)
332
+ objs = public_send(k)
333
333
 
334
334
  is_array = if r = model.association_reflection(k)
335
335
  r.returns_array?
@@ -351,7 +351,7 @@ module Sequel
351
351
  else
352
352
  key_name = c.to_s
353
353
  end
354
- h[key_name] = send(c)
354
+ h[key_name] = public_send(c)
355
355
  end
356
356
  end
357
357
  end
@@ -13,7 +13,7 @@ module Sequel
13
13
  # get the reviews for all of those albums:
14
14
  #
15
15
  # Album.plugin :lazy_attributes, :review
16
- # Album.where{id<100}.all do |a|
16
+ # Album.where{id < 100}.all do |a|
17
17
  # a.review
18
18
  # end
19
19
  #
@@ -38,15 +38,6 @@ module Sequel
38
38
  end
39
39
 
40
40
  module ClassMethods
41
- def lazy_attributes_module
42
- Sequel::Deprecation.deprecate('Sequel::Model.lazy_attributes_module', 'There is no replacement')
43
- @lazy_attributes_module
44
- end
45
- def lazy_attributes_module=(v)
46
- Sequel::Deprecation.deprecate('Sequel::Model.lazy_attributes_module=', 'There is no replacement')
47
- @lazy_attributes_module= v
48
- end
49
-
50
41
  # Freeze lazy attributes module when freezing model class.
51
42
  def freeze
52
43
  @lazy_attributes_module.freeze if @lazy_attributes_module
@@ -11,7 +11,7 @@ module Sequel
11
11
  #
12
12
  # class Item < Sequel::Model(:items)
13
13
  # plugin :list # will use :position field for position
14
- # plugin :list, :field=>:pos # will use :pos field for position
14
+ # plugin :list, field: :pos # will use :pos field for position
15
15
  # end
16
16
  #
17
17
  # item = Item[1]
@@ -38,7 +38,7 @@ module Sequel
38
38
  # For example, if each item has a +user_id+ field, and you want every user
39
39
  # to have their own list:
40
40
  #
41
- # Item.plugin :list, :scope=>:user_id
41
+ # Item.plugin :list, scope: :user_id
42
42
  #
43
43
  # Note that using this plugin modifies the order of the model's dataset to
44
44
  # sort by the position and scope fields. Also note that this plugin is subject to
@@ -62,7 +62,7 @@ module Sequel
62
62
  model.scope_proc = case scope = opts[:scope]
63
63
  when Symbol
64
64
  model.dataset = model.dataset.order_prepend(scope)
65
- proc{|obj| obj.model.where(scope=>obj.send(scope))}
65
+ proc{|obj| obj.model.where(scope=>obj.public_send(scope))}
66
66
  when Array
67
67
  model.dataset = model.dataset.order_prepend(*scope)
68
68
  proc{|obj| obj.model.where(scope.map{|s| [s, obj.get_column_value(s)]})}
@@ -170,17 +170,17 @@ module Sequel
170
170
  self.next(n * -1)
171
171
  end
172
172
 
173
- private
174
-
175
173
  # Set the value of the position_field to the maximum value plus 1 unless the
176
174
  # position field already has a value.
177
- def _before_validation
175
+ def before_validation
178
176
  unless get_column_value(position_field)
179
177
  set_column_value("#{position_field}=", list_dataset.max(position_field).to_i+1)
180
178
  end
181
179
  super
182
180
  end
183
181
 
182
+ private
183
+
184
184
  # The model's position field, an instance method for ease of use.
185
185
  def position_field
186
186
  model.position_field