# frozen-string-literal: true require_relative 'core' module Sequel # Sequel::Model is an object relational mapper built on top of Sequel core. Each # model class is backed by a dataset instance, and many dataset methods can be # called directly on the class. Model datasets return rows as model instances, # which are wrappers around the underlying hash that allow easily updating or # deleting the individual row. # # Sequel::Model is built completely out of plugins. Plugins can override any class, # instance, or dataset method defined by a previous plugin and call super to get the default # behavior. By default, Sequel::Model loads two plugins, Sequel::Model # (which is itself a plugin) for the base support, and Sequel::Model::Associations # for the associations support. # # You can set the +SEQUEL_NO_ASSOCIATIONS+ constant or environment variable to # make Sequel not load the associations plugin by default. class Model OPTS = Sequel::OPTS # Empty instance methods to create that the user can override. # Just like any other method defined by Sequel, if you override one of these, you should # call +super+ to get the default behavior (while empty by default, they are often overridden # by plugins). See the {"Model Hooks" guide}[rdoc-ref:doc/model_hooks.rdoc] for # more detail on hooks. HOOKS = [ :after_create, :after_destroy, :after_save, :after_update, :after_validation, :before_create, :before_destroy, :before_save, :before_update, :before_validation ].freeze @cache_anonymous_models = true @db = nil @db_schema = nil @dataset = nil @dataset_method_modules = [] @default_set_fields_options = {} @overridable_methods_module = nil @fast_pk_lookup_sql = nil @fast_instance_delete_sql = nil @plugins = [] @primary_key = :id @raise_on_save_failure = true @raise_on_typecast_failure = false @require_modification = nil @require_valid_table = true @restrict_primary_key = true @setter_methods = nil @simple_pk = nil @simple_table = nil @strict_param_setting = true @typecast_empty_string_to_nil = true @typecast_on_assignment = true @use_transactions = true require_relative "model/default_inflections" require_relative "model/inflections" require_relative "model/plugins" require_relative "model/dataset_module" require_relative "model/base" require_relative "model/exceptions" require_relative "model/errors" if !defined?(::SEQUEL_NO_ASSOCIATIONS) && !ENV.has_key?('SEQUEL_NO_ASSOCIATIONS') require_relative 'model/associations' plugin Model::Associations end def_Model(::Sequel) # The setter methods (methods ending with =) that are never allowed # to be called automatically via +set+/+update+/+new+/etc.. RESTRICTED_SETTER_METHODS = instance_methods.map(&:to_s).select{|l| l.end_with?('=')}.freeze end end