Bump sequel from 5.104.0 to 5.105.0#995
Open
dependabot[bot] wants to merge 1 commit into
Open
Conversation
Bumps [sequel](https://github.com/jeremyevans/sequel) from 5.104.0 to 5.105.0. - [Changelog](https://github.com/jeremyevans/sequel/blob/master/CHANGELOG) - [Commits](jeremyevans/sequel@5.104.0...5.105.0) --- updated-dependencies: - dependency-name: sequel dependency-version: 5.105.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Contributor
4 similar comments
Contributor
Contributor
Contributor
Contributor
Contributor
gem compare sequel 5.104.0 5.105.0Compared versions: ["5.104.0", "5.105.0"]
DIFFERENT rubygems_version:
5.104.0: 4.0.3
5.105.0: 4.0.10
DIFFERENT version:
5.104.0: 5.104.0
5.105.0: 5.105.0
DIFFERENT files:
5.104.0->5.105.0:
* Changed:
lib/sequel/extensions/connection_expiration.rb +43/-4
lib/sequel/model.rb +1/-0
lib/sequel/model/associations.rb +1/-0
lib/sequel/model/base.rb +95/-8
lib/sequel/model/plugins.rb +12/-1
lib/sequel/plugins/accessed_columns.rb +4/-0
lib/sequel/plugins/active_model.rb +5/-6
lib/sequel/plugins/association_pks.rb +2/-0
lib/sequel/plugins/auto_validations.rb +2/-0
lib/sequel/plugins/columns_updated.rb +4/-0
lib/sequel/plugins/composition.rb +2/-0
lib/sequel/plugins/dirty.rb +4/-0
lib/sequel/plugins/forbid_lazy_load.rb +1/-0
lib/sequel/plugins/insert_conflict.rb +4/-0
lib/sequel/plugins/instance_filters.rb +4/-0
lib/sequel/plugins/instance_hooks.rb +4/-0
lib/sequel/plugins/json_serializer.rb +2/-0
lib/sequel/plugins/modification_detection.rb +2/-0
lib/sequel/plugins/serialization.rb +2/-0
lib/sequel/plugins/serialization_modification_detection.rb +4/-0
lib/sequel/plugins/split_values.rb +2/-0
lib/sequel/plugins/tactical_eager_loading.rb +4/-0
lib/sequel/plugins/update_primary_key.rb +4/-0
lib/sequel/plugins/validation_contexts.rb +4/-0
lib/sequel/version.rb +1/-1 |
3 similar comments
Contributor
gem compare sequel 5.104.0 5.105.0Compared versions: ["5.104.0", "5.105.0"]
DIFFERENT rubygems_version:
5.104.0: 4.0.3
5.105.0: 4.0.10
DIFFERENT version:
5.104.0: 5.104.0
5.105.0: 5.105.0
DIFFERENT files:
5.104.0->5.105.0:
* Changed:
lib/sequel/extensions/connection_expiration.rb +43/-4
lib/sequel/model.rb +1/-0
lib/sequel/model/associations.rb +1/-0
lib/sequel/model/base.rb +95/-8
lib/sequel/model/plugins.rb +12/-1
lib/sequel/plugins/accessed_columns.rb +4/-0
lib/sequel/plugins/active_model.rb +5/-6
lib/sequel/plugins/association_pks.rb +2/-0
lib/sequel/plugins/auto_validations.rb +2/-0
lib/sequel/plugins/columns_updated.rb +4/-0
lib/sequel/plugins/composition.rb +2/-0
lib/sequel/plugins/dirty.rb +4/-0
lib/sequel/plugins/forbid_lazy_load.rb +1/-0
lib/sequel/plugins/insert_conflict.rb +4/-0
lib/sequel/plugins/instance_filters.rb +4/-0
lib/sequel/plugins/instance_hooks.rb +4/-0
lib/sequel/plugins/json_serializer.rb +2/-0
lib/sequel/plugins/modification_detection.rb +2/-0
lib/sequel/plugins/serialization.rb +2/-0
lib/sequel/plugins/serialization_modification_detection.rb +4/-0
lib/sequel/plugins/split_values.rb +2/-0
lib/sequel/plugins/tactical_eager_loading.rb +4/-0
lib/sequel/plugins/update_primary_key.rb +4/-0
lib/sequel/plugins/validation_contexts.rb +4/-0
lib/sequel/version.rb +1/-1 |
Contributor
gem compare sequel 5.104.0 5.105.0Compared versions: ["5.104.0", "5.105.0"]
DIFFERENT rubygems_version:
5.104.0: 4.0.3
5.105.0: 4.0.10
DIFFERENT version:
5.104.0: 5.104.0
5.105.0: 5.105.0
DIFFERENT files:
5.104.0->5.105.0:
* Changed:
lib/sequel/extensions/connection_expiration.rb +43/-4
lib/sequel/model.rb +1/-0
lib/sequel/model/associations.rb +1/-0
lib/sequel/model/base.rb +95/-8
lib/sequel/model/plugins.rb +12/-1
lib/sequel/plugins/accessed_columns.rb +4/-0
lib/sequel/plugins/active_model.rb +5/-6
lib/sequel/plugins/association_pks.rb +2/-0
lib/sequel/plugins/auto_validations.rb +2/-0
lib/sequel/plugins/columns_updated.rb +4/-0
lib/sequel/plugins/composition.rb +2/-0
lib/sequel/plugins/dirty.rb +4/-0
lib/sequel/plugins/forbid_lazy_load.rb +1/-0
lib/sequel/plugins/insert_conflict.rb +4/-0
lib/sequel/plugins/instance_filters.rb +4/-0
lib/sequel/plugins/instance_hooks.rb +4/-0
lib/sequel/plugins/json_serializer.rb +2/-0
lib/sequel/plugins/modification_detection.rb +2/-0
lib/sequel/plugins/serialization.rb +2/-0
lib/sequel/plugins/serialization_modification_detection.rb +4/-0
lib/sequel/plugins/split_values.rb +2/-0
lib/sequel/plugins/tactical_eager_loading.rb +4/-0
lib/sequel/plugins/update_primary_key.rb +4/-0
lib/sequel/plugins/validation_contexts.rb +4/-0
lib/sequel/version.rb +1/-1 |
Contributor
gem compare sequel 5.104.0 5.105.0Compared versions: ["5.104.0", "5.105.0"]
DIFFERENT rubygems_version:
5.104.0: 4.0.3
5.105.0: 4.0.10
DIFFERENT version:
5.104.0: 5.104.0
5.105.0: 5.105.0
DIFFERENT files:
5.104.0->5.105.0:
* Changed:
lib/sequel/extensions/connection_expiration.rb +43/-4
lib/sequel/model.rb +1/-0
lib/sequel/model/associations.rb +1/-0
lib/sequel/model/base.rb +95/-8
lib/sequel/model/plugins.rb +12/-1
lib/sequel/plugins/accessed_columns.rb +4/-0
lib/sequel/plugins/active_model.rb +5/-6
lib/sequel/plugins/association_pks.rb +2/-0
lib/sequel/plugins/auto_validations.rb +2/-0
lib/sequel/plugins/columns_updated.rb +4/-0
lib/sequel/plugins/composition.rb +2/-0
lib/sequel/plugins/dirty.rb +4/-0
lib/sequel/plugins/forbid_lazy_load.rb +1/-0
lib/sequel/plugins/insert_conflict.rb +4/-0
lib/sequel/plugins/instance_filters.rb +4/-0
lib/sequel/plugins/instance_hooks.rb +4/-0
lib/sequel/plugins/json_serializer.rb +2/-0
lib/sequel/plugins/modification_detection.rb +2/-0
lib/sequel/plugins/serialization.rb +2/-0
lib/sequel/plugins/serialization_modification_detection.rb +4/-0
lib/sequel/plugins/split_values.rb +2/-0
lib/sequel/plugins/tactical_eager_loading.rb +4/-0
lib/sequel/plugins/update_primary_key.rb +4/-0
lib/sequel/plugins/validation_contexts.rb +4/-0
lib/sequel/version.rb +1/-1 |
Contributor
gem compare --diff sequel 5.104.0 5.105.0Compared versions: ["5.104.0", "5.105.0"]
DIFFERENT files:
5.104.0->5.105.0:
* Changed:
lib/sequel/extensions/connection_expiration.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/extensions/connection_expiration.rb 2026-06-03 20:45:24.894419509 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/extensions/connection_expiration.rb 2026-06-03 20:45:24.941419904 +0000
@@ -49,2 +49,4 @@
- when :single, :sharded_single
- raise Error, "cannot load connection_expiration extension if using single or sharded_single connection pool"
+ when :threaded, :sharded_threaded, :timed_queue, :sharded_timed_queue
+ nil
+ else
+ raise Error, "cannot load connection_expiration extension if using single or sharded_single connection pool (or other unsupported connection pool)"
@@ -57,0 +60,33 @@
+
+ # Record an expiration timestamp for any connections that already
+ # exist in the pool, so that a connection opened before the extension
+ # was loaded (e.g. via Sequel.connect) will eventually be expired.
+ register = method(:register_connection_expiration_time)
+
+ case pool_type
+ when :timed_queue, :sharded_timed_queue
+ register_queued_connections = lambda do |queue|
+ conns = []
+ while conn = queue.pop(timeout: 0)
+ conns << conn
+ end
+ conns.each do |conn|
+ queue.push(register_connection_expiration_time(conn))
+ end
+ end
+ end
+
+ case pool_type
+ when :threaded
+ @available_connections.each(®ister)
+ @allocated.each_value(®ister)
+ when :sharded_threaded
+ @available_connections.each_value{|conns| conns.each(®ister)}
+ @allocated.each_value{|threads| threads.each_value(®ister)}
+ when :timed_queue
+ register_queued_connections.call(@queue)
+ @allocated.each_value(®ister)
+ else # when :sharded_timed_queue
+ @queues.each_value(®ister_queued_connections)
+ @allocated.each_value{|threads| threads.each_value(®ister)}
+ end
@@ -72,2 +107,6 @@
- conn = super
- @connection_expiration_timestamps[conn] = [Sequel.start_timer, @connection_expiration_timeout + (rand * @connection_expiration_random_delay)].freeze
+ register_connection_expiration_time(super)
+ end
+
+ # Record an expiration entry for a connection, returns the connection.
+ def register_connection_expiration_time(conn)
+ @connection_expiration_timestamps[conn] ||= [Sequel.start_timer, @connection_expiration_timeout + (rand * @connection_expiration_random_delay)].freeze
lib/sequel/model.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/model.rb 2026-06-03 20:45:24.907419618 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/model.rb 2026-06-03 20:45:24.953420005 +0000
@@ -57,0 +58 @@
+ @shape_friendly = false
lib/sequel/model/associations.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/model/associations.rb 2026-06-03 20:45:24.908419627 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/model/associations.rb 2026-06-03 20:45:24.954420013 +0000
@@ -2176,0 +2177 @@
+ Plugins.model_instance_variables(self, :@associations, :@set_associated_object_if_same)
lib/sequel/model/base.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/model/base.rb 2026-06-03 20:45:24.909419635 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/model/base.rb 2026-06-03 20:45:24.955420021 +0000
@@ -86,0 +87,4 @@
+ # Whether the model uses a shape friendly design (initializing all potentially
+ # used instance variables to nil).
+ attr_reader :shape_friendly
+
@@ -224,3 +228 @@
- o = allocate
- o.instance_variable_set(:@values, values)
- o
+ allocate.initialize_from_db(values)
@@ -504 +506,7 @@
- extend(m::ClassMethods) if m.const_defined?(:ClassMethods, false)
+ if m.const_defined?(:ClassMethods, false)
+ class_methods = m::ClassMethods
+ extend(class_methods)
+ if class_methods.private_method_defined?(:each_model_instance_variable)
+ def_initialize_nil_instance_variables
+ end
+ end
@@ -633,0 +642,7 @@
+ # Set instance variables used by instances of this model class.
+ # Only has an effect if shape_friendly is true.
+ def set_model_instance_variables(*ivs)
+ Plugins.model_instance_variables(singleton_class, *ivs)
+ def_initialize_nil_instance_variables
+ end
+
@@ -667,0 +683,6 @@
+ # Set whether the model should be shape friendly.
+ def shape_friendly=(v)
+ @shape_friendly = v
+ def_initialize_nil_instance_variables
+ end
+
@@ -816,0 +838,54 @@
+ # Defines the private _initialize_nil_instance_variables method.
+ # If shape_friendly is true, defines a method that initials the
+ # model's instance variables to nil. If shape_friendly is not
+ # true, does nothing.
+ def def_initialize_nil_instance_variables
+ if @shape_friendly
+ ivs = []
+ each_model_instance_variable do |iv|
+ unless iv.match(/\A@[a-z_][a-z0-9_]*\z/)
+ raise Error, "invalid model instance variable used"
+ end
+
+ ivs << iv
+ end
+ ivs.uniq!
+ ivs = ivs.reverse.join(" = ")
+ new_method_content = "#{ivs} = nil"
+ new_from_db_method_content = "#{ivs} = @new = @modified = nil"
+ end
+
+ class_eval(<<-RUBY, __FILE__, __LINE__+1)
+ def _initialize_nil_instance_variables
+ #{new_method_content}
+ end
+ def _initialize_from_db_nil_instance_variables
+ #{new_from_db_method_content}
+ end
+ RUBY
+ private :_initialize_nil_instance_variables, :_initialize_from_db_nil_instance_variables
+ alias_method :_initialize_nil_instance_variables, :_initialize_nil_instance_variables
+ alias_method :_initialize_from_db_nil_instance_variables, :_initialize_from_db_nil_instance_variables
+ nil
+ end
+
+ # Yield the default model instance variables. Designed only for
+ # use by def_initialize_nil_instance_variables.
+ def each_model_instance_variable
+ [
+ :@changed_columns,
+ :@errors,
+ :@raise_on_save_failure,
+ :@raise_on_typecast_failure,
+ :@require_modification,
+ :@server,
+ :@singleton_setter_added,
+ :@skip_validation_on_next_save,
+ :@strict_param_setting,
+ :@this,
+ :@typecast_empty_string_to_nil,
+ :@typecast_on_assignment,
+ :@use_transactions,
+ ].each{|iv| yield iv}
+ end
+
@@ -939,0 +1015 @@
+ :@shape_friendly=>nil,
@@ -1097 +1173 @@
- class_eval("def #{meth}; !defined?(@#{meth}) ? (frozen? ? self.class.#{meth} : (@#{meth} = self.class.#{meth})) : @#{meth} end", __FILE__, __LINE__)
+ class_eval("def #{meth}; @#{meth}.nil? ? (frozen? ? self.class.#{meth} : (@#{meth} = self.class.#{meth})) : @#{meth} end", __FILE__, __LINE__)
@@ -1138,2 +1214,3 @@
- @new = true
- @modified = true
+ @new = @modified = true
+ _initialize_nil_instance_variables
+
@@ -1144,0 +1222,9 @@
+ # Initialize a new record using values retrieved from a database.
+ # This should not be called directly, only via Model.call.
+ def initialize_from_db(values) # :nodoc:
+ @values = values
+ _initialize_from_db_nil_instance_variables
+
+ self
+ end
+
@@ -1448 +1534 @@
- defined?(@new) ? @new : (@new = false)
+ @new || false
@@ -2339,0 +2426 @@
+ def_initialize_nil_instance_variables
lib/sequel/model/plugins.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/model/plugins.rb 2026-06-03 20:45:24.910419643 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/model/plugins.rb 2026-06-03 20:45:24.955420021 +0000
@@ -41 +41,2 @@
- # values in this hash.
+ # values in this hash. These affects how class instance variables will be treated
+ # during subclassing.
@@ -46,0 +48,10 @@
+ end
+
+ # Sets the model instance variables used by the plugin. These instance variables
+ # will be initialized to nil for created model objects.
+ def self.model_instance_variables(mod, *ivs)
+ mod.send(:define_method, :each_model_instance_variable) do |&block|
+ super(&block)
+ ivs.each(&block)
+ end
+ mod.send(:private, :each_model_instance_variable)
lib/sequel/plugins/accessed_columns.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/plugins/accessed_columns.rb 2026-06-03 20:45:24.910419643 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/plugins/accessed_columns.rb 2026-06-03 20:45:24.956420030 +0000
@@ -28,0 +29,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@accessed_columns)
+ end
+
lib/sequel/plugins/active_model.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/plugins/active_model.rb 2026-06-03 20:45:24.910419643 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/plugins/active_model.rb 2026-06-03 20:45:24.956420030 +0000
@@ -31,0 +32,2 @@
+ Plugins.model_instance_variables(self, :@destroyed, :@rollback_checker)
+
@@ -61,2 +63 @@
- return false if new?
- return false if defined?(@destroyed)
+ return false if new? || @destroyed
@@ -64,4 +65,2 @@
- if defined?(@rollback_checker)
- if @rollback_checker.call
- return false
- end
+ if @rollback_checker && @rollback_checker.call
+ return false
lib/sequel/plugins/association_pks.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/plugins/association_pks.rb 2026-06-03 20:45:24.911419652 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/plugins/association_pks.rb 2026-06-03 20:45:24.956420030 +0000
@@ -69,0 +70,2 @@
+ Plugins.model_instance_variables(self, :@_association_pks)
+
lib/sequel/plugins/auto_validations.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/plugins/auto_validations.rb 2026-06-03 20:45:24.911419652 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/plugins/auto_validations.rb 2026-06-03 20:45:24.957420038 +0000
@@ -133,0 +134,2 @@
+ Plugins.model_instance_variables(self, :@_skip_auto_validations)
+
lib/sequel/plugins/columns_updated.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/plugins/columns_updated.rb 2026-06-03 20:45:24.913419668 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/plugins/columns_updated.rb 2026-06-03 20:45:24.959420055 +0000
@@ -17,0 +18,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@columns_updated)
+ end
+
lib/sequel/plugins/composition.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/plugins/composition.rb 2026-06-03 20:45:24.913419668 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/plugins/composition.rb 2026-06-03 20:45:24.959420055 +0000
@@ -68,0 +69,2 @@
+ Plugins.model_instance_variables(self, :@compositions)
+
lib/sequel/plugins/dirty.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/plugins/dirty.rb 2026-06-03 20:45:24.915419685 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/plugins/dirty.rb 2026-06-03 20:45:24.960420064 +0000
@@ -65,0 +66,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@previous_changes, :@initial_values, :@missing_initial_values)
+ end
+
lib/sequel/plugins/forbid_lazy_load.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/plugins/forbid_lazy_load.rb 2026-06-03 20:45:24.916419694 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/plugins/forbid_lazy_load.rb 2026-06-03 20:45:24.961420072 +0000
@@ -120,0 +121 @@
+ Plugins.model_instance_variables(self, :@forbid_lazy_load)
lib/sequel/plugins/insert_conflict.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/plugins/insert_conflict.rb 2026-06-03 20:45:24.916419694 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/plugins/insert_conflict.rb 2026-06-03 20:45:24.961420072 +0000
@@ -44,0 +45,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@insert_conflict_opts)
+ end
+
lib/sequel/plugins/instance_filters.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/plugins/instance_filters.rb 2026-06-03 20:45:24.916419694 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/plugins/instance_filters.rb 2026-06-03 20:45:24.962420080 +0000
@@ -52,0 +53,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@instance_filters)
+ end
+
lib/sequel/plugins/instance_hooks.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/plugins/instance_hooks.rb 2026-06-03 20:45:24.917419702 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/plugins/instance_hooks.rb 2026-06-03 20:45:24.962420080 +0000
@@ -30,0 +31,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@instance_hooks)
+ end
+
lib/sequel/plugins/json_serializer.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/plugins/json_serializer.rb 2026-06-03 20:45:24.917419702 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/plugins/json_serializer.rb 2026-06-03 20:45:24.962420080 +0000
@@ -164,0 +165,2 @@
+ Plugins.model_instance_variables(self, :@json_serializer_opts)
+
lib/sequel/plugins/modification_detection.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/plugins/modification_detection.rb 2026-06-03 20:45:24.917419702 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/plugins/modification_detection.rb 2026-06-03 20:45:24.963420089 +0000
@@ -36,0 +37,2 @@
+ Plugins.model_instance_variables(self, :@values_hashes)
+
lib/sequel/plugins/serialization.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/plugins/serialization.rb 2026-06-03 20:45:24.920419727 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/plugins/serialization.rb 2026-06-03 20:45:24.965420105 +0000
@@ -115,0 +116,2 @@
+ Plugins.model_instance_variables(self, :@deserialized_values)
+
lib/sequel/plugins/serialization_modification_detection.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/plugins/serialization_modification_detection.rb 2026-06-03 20:45:24.920419727 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/plugins/serialization_modification_detection.rb 2026-06-03 20:45:24.965420105 +0000
@@ -32,0 +33,4 @@
+
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@original_deserialized_values)
+ end
lib/sequel/plugins/split_values.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/plugins/split_values.rb 2026-06-03 20:45:24.921419736 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/plugins/split_values.rb 2026-06-03 20:45:24.966420114 +0000
@@ -38,0 +39,2 @@
+ Plugins.model_instance_variables(self, :@noncolumn_values)
+
lib/sequel/plugins/tactical_eager_loading.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/plugins/tactical_eager_loading.rb 2026-06-03 20:45:24.922419744 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/plugins/tactical_eager_loading.rb 2026-06-03 20:45:24.967420122 +0000
@@ -126,0 +127,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@retrieved_by, :@retrieved_with)
+ end
+
lib/sequel/plugins/update_primary_key.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/plugins/update_primary_key.rb 2026-06-03 20:45:24.923419752 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/plugins/update_primary_key.rb 2026-06-03 20:45:24.968420131 +0000
@@ -24,0 +25,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@pk_hash)
+ end
+
lib/sequel/plugins/validation_contexts.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/plugins/validation_contexts.rb 2026-06-03 20:45:24.923419752 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/plugins/validation_contexts.rb 2026-06-03 20:45:24.969420139 +0000
@@ -31,0 +32,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@validation_context)
+ end
+
lib/sequel/version.rb
--- /tmp/d20260603-1575-2ivqmx/sequel-5.104.0/lib/sequel/version.rb 2026-06-03 20:45:24.925419769 +0000
+++ /tmp/d20260603-1575-2ivqmx/sequel-5.105.0/lib/sequel/version.rb 2026-06-03 20:45:24.970420148 +0000
@@ -9 +9 @@
- MINOR = 104
+ MINOR = 105
|
Contributor
gem compare --diff sequel 5.104.0 5.105.0Compared versions: ["5.104.0", "5.105.0"]
DIFFERENT files:
5.104.0->5.105.0:
* Changed:
lib/sequel/extensions/connection_expiration.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/extensions/connection_expiration.rb 2026-06-03 20:45:30.464578939 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/extensions/connection_expiration.rb 2026-06-03 20:45:30.530579138 +0000
@@ -49,2 +49,4 @@
- when :single, :sharded_single
- raise Error, "cannot load connection_expiration extension if using single or sharded_single connection pool"
+ when :threaded, :sharded_threaded, :timed_queue, :sharded_timed_queue
+ nil
+ else
+ raise Error, "cannot load connection_expiration extension if using single or sharded_single connection pool (or other unsupported connection pool)"
@@ -57,0 +60,33 @@
+
+ # Record an expiration timestamp for any connections that already
+ # exist in the pool, so that a connection opened before the extension
+ # was loaded (e.g. via Sequel.connect) will eventually be expired.
+ register = method(:register_connection_expiration_time)
+
+ case pool_type
+ when :timed_queue, :sharded_timed_queue
+ register_queued_connections = lambda do |queue|
+ conns = []
+ while conn = queue.pop(timeout: 0)
+ conns << conn
+ end
+ conns.each do |conn|
+ queue.push(register_connection_expiration_time(conn))
+ end
+ end
+ end
+
+ case pool_type
+ when :threaded
+ @available_connections.each(®ister)
+ @allocated.each_value(®ister)
+ when :sharded_threaded
+ @available_connections.each_value{|conns| conns.each(®ister)}
+ @allocated.each_value{|threads| threads.each_value(®ister)}
+ when :timed_queue
+ register_queued_connections.call(@queue)
+ @allocated.each_value(®ister)
+ else # when :sharded_timed_queue
+ @queues.each_value(®ister_queued_connections)
+ @allocated.each_value{|threads| threads.each_value(®ister)}
+ end
@@ -72,2 +107,6 @@
- conn = super
- @connection_expiration_timestamps[conn] = [Sequel.start_timer, @connection_expiration_timeout + (rand * @connection_expiration_random_delay)].freeze
+ register_connection_expiration_time(super)
+ end
+
+ # Record an expiration entry for a connection, returns the connection.
+ def register_connection_expiration_time(conn)
+ @connection_expiration_timestamps[conn] ||= [Sequel.start_timer, @connection_expiration_timeout + (rand * @connection_expiration_random_delay)].freeze
lib/sequel/model.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/model.rb 2026-06-03 20:45:30.481578990 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/model.rb 2026-06-03 20:45:30.548579192 +0000
@@ -57,0 +58 @@
+ @shape_friendly = false
lib/sequel/model/associations.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/model/associations.rb 2026-06-03 20:45:30.482578993 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/model/associations.rb 2026-06-03 20:45:30.550579198 +0000
@@ -2176,0 +2177 @@
+ Plugins.model_instance_variables(self, :@associations, :@set_associated_object_if_same)
lib/sequel/model/base.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/model/base.rb 2026-06-03 20:45:30.483578997 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/model/base.rb 2026-06-03 20:45:30.552579204 +0000
@@ -86,0 +87,4 @@
+ # Whether the model uses a shape friendly design (initializing all potentially
+ # used instance variables to nil).
+ attr_reader :shape_friendly
+
@@ -224,3 +228 @@
- o = allocate
- o.instance_variable_set(:@values, values)
- o
+ allocate.initialize_from_db(values)
@@ -504 +506,7 @@
- extend(m::ClassMethods) if m.const_defined?(:ClassMethods, false)
+ if m.const_defined?(:ClassMethods, false)
+ class_methods = m::ClassMethods
+ extend(class_methods)
+ if class_methods.private_method_defined?(:each_model_instance_variable)
+ def_initialize_nil_instance_variables
+ end
+ end
@@ -633,0 +642,7 @@
+ # Set instance variables used by instances of this model class.
+ # Only has an effect if shape_friendly is true.
+ def set_model_instance_variables(*ivs)
+ Plugins.model_instance_variables(singleton_class, *ivs)
+ def_initialize_nil_instance_variables
+ end
+
@@ -667,0 +683,6 @@
+ # Set whether the model should be shape friendly.
+ def shape_friendly=(v)
+ @shape_friendly = v
+ def_initialize_nil_instance_variables
+ end
+
@@ -816,0 +838,54 @@
+ # Defines the private _initialize_nil_instance_variables method.
+ # If shape_friendly is true, defines a method that initials the
+ # model's instance variables to nil. If shape_friendly is not
+ # true, does nothing.
+ def def_initialize_nil_instance_variables
+ if @shape_friendly
+ ivs = []
+ each_model_instance_variable do |iv|
+ unless iv.match(/\A@[a-z_][a-z0-9_]*\z/)
+ raise Error, "invalid model instance variable used"
+ end
+
+ ivs << iv
+ end
+ ivs.uniq!
+ ivs = ivs.reverse.join(" = ")
+ new_method_content = "#{ivs} = nil"
+ new_from_db_method_content = "#{ivs} = @new = @modified = nil"
+ end
+
+ class_eval(<<-RUBY, __FILE__, __LINE__+1)
+ def _initialize_nil_instance_variables
+ #{new_method_content}
+ end
+ def _initialize_from_db_nil_instance_variables
+ #{new_from_db_method_content}
+ end
+ RUBY
+ private :_initialize_nil_instance_variables, :_initialize_from_db_nil_instance_variables
+ alias_method :_initialize_nil_instance_variables, :_initialize_nil_instance_variables
+ alias_method :_initialize_from_db_nil_instance_variables, :_initialize_from_db_nil_instance_variables
+ nil
+ end
+
+ # Yield the default model instance variables. Designed only for
+ # use by def_initialize_nil_instance_variables.
+ def each_model_instance_variable
+ [
+ :@changed_columns,
+ :@errors,
+ :@raise_on_save_failure,
+ :@raise_on_typecast_failure,
+ :@require_modification,
+ :@server,
+ :@singleton_setter_added,
+ :@skip_validation_on_next_save,
+ :@strict_param_setting,
+ :@this,
+ :@typecast_empty_string_to_nil,
+ :@typecast_on_assignment,
+ :@use_transactions,
+ ].each{|iv| yield iv}
+ end
+
@@ -939,0 +1015 @@
+ :@shape_friendly=>nil,
@@ -1097 +1173 @@
- class_eval("def #{meth}; !defined?(@#{meth}) ? (frozen? ? self.class.#{meth} : (@#{meth} = self.class.#{meth})) : @#{meth} end", __FILE__, __LINE__)
+ class_eval("def #{meth}; @#{meth}.nil? ? (frozen? ? self.class.#{meth} : (@#{meth} = self.class.#{meth})) : @#{meth} end", __FILE__, __LINE__)
@@ -1138,2 +1214,3 @@
- @new = true
- @modified = true
+ @new = @modified = true
+ _initialize_nil_instance_variables
+
@@ -1144,0 +1222,9 @@
+ # Initialize a new record using values retrieved from a database.
+ # This should not be called directly, only via Model.call.
+ def initialize_from_db(values) # :nodoc:
+ @values = values
+ _initialize_from_db_nil_instance_variables
+
+ self
+ end
+
@@ -1448 +1534 @@
- defined?(@new) ? @new : (@new = false)
+ @new || false
@@ -2339,0 +2426 @@
+ def_initialize_nil_instance_variables
lib/sequel/model/plugins.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/model/plugins.rb 2026-06-03 20:45:30.484579000 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/model/plugins.rb 2026-06-03 20:45:30.553579207 +0000
@@ -41 +41,2 @@
- # values in this hash.
+ # values in this hash. These affects how class instance variables will be treated
+ # during subclassing.
@@ -46,0 +48,10 @@
+ end
+
+ # Sets the model instance variables used by the plugin. These instance variables
+ # will be initialized to nil for created model objects.
+ def self.model_instance_variables(mod, *ivs)
+ mod.send(:define_method, :each_model_instance_variable) do |&block|
+ super(&block)
+ ivs.each(&block)
+ end
+ mod.send(:private, :each_model_instance_variable)
lib/sequel/plugins/accessed_columns.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/plugins/accessed_columns.rb 2026-06-03 20:45:30.484579000 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/plugins/accessed_columns.rb 2026-06-03 20:45:30.553579207 +0000
@@ -28,0 +29,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@accessed_columns)
+ end
+
lib/sequel/plugins/active_model.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/plugins/active_model.rb 2026-06-03 20:45:30.484579000 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/plugins/active_model.rb 2026-06-03 20:45:30.553579207 +0000
@@ -31,0 +32,2 @@
+ Plugins.model_instance_variables(self, :@destroyed, :@rollback_checker)
+
@@ -61,2 +63 @@
- return false if new?
- return false if defined?(@destroyed)
+ return false if new? || @destroyed
@@ -64,4 +65,2 @@
- if defined?(@rollback_checker)
- if @rollback_checker.call
- return false
- end
+ if @rollback_checker && @rollback_checker.call
+ return false
lib/sequel/plugins/association_pks.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/plugins/association_pks.rb 2026-06-03 20:45:30.485579002 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/plugins/association_pks.rb 2026-06-03 20:45:30.555579213 +0000
@@ -69,0 +70,2 @@
+ Plugins.model_instance_variables(self, :@_association_pks)
+
lib/sequel/plugins/auto_validations.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/plugins/auto_validations.rb 2026-06-03 20:45:30.486579006 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/plugins/auto_validations.rb 2026-06-03 20:45:30.555579213 +0000
@@ -133,0 +134,2 @@
+ Plugins.model_instance_variables(self, :@_skip_auto_validations)
+
lib/sequel/plugins/columns_updated.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/plugins/columns_updated.rb 2026-06-03 20:45:30.488579012 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/plugins/columns_updated.rb 2026-06-03 20:45:30.558579222 +0000
@@ -17,0 +18,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@columns_updated)
+ end
+
lib/sequel/plugins/composition.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/plugins/composition.rb 2026-06-03 20:45:30.488579012 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/plugins/composition.rb 2026-06-03 20:45:30.558579222 +0000
@@ -68,0 +69,2 @@
+ Plugins.model_instance_variables(self, :@compositions)
+
lib/sequel/plugins/dirty.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/plugins/dirty.rb 2026-06-03 20:45:30.490579018 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/plugins/dirty.rb 2026-06-03 20:45:30.561579232 +0000
@@ -65,0 +66,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@previous_changes, :@initial_values, :@missing_initial_values)
+ end
+
lib/sequel/plugins/forbid_lazy_load.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/plugins/forbid_lazy_load.rb 2026-06-03 20:45:30.491579021 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/plugins/forbid_lazy_load.rb 2026-06-03 20:45:30.562579234 +0000
@@ -120,0 +121 @@
+ Plugins.model_instance_variables(self, :@forbid_lazy_load)
lib/sequel/plugins/insert_conflict.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/plugins/insert_conflict.rb 2026-06-03 20:45:30.492579024 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/plugins/insert_conflict.rb 2026-06-03 20:45:30.563579237 +0000
@@ -44,0 +45,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@insert_conflict_opts)
+ end
+
lib/sequel/plugins/instance_filters.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/plugins/instance_filters.rb 2026-06-03 20:45:30.492579024 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/plugins/instance_filters.rb 2026-06-03 20:45:30.563579237 +0000
@@ -52,0 +53,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@instance_filters)
+ end
+
lib/sequel/plugins/instance_hooks.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/plugins/instance_hooks.rb 2026-06-03 20:45:30.492579024 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/plugins/instance_hooks.rb 2026-06-03 20:45:30.564579240 +0000
@@ -30,0 +31,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@instance_hooks)
+ end
+
lib/sequel/plugins/json_serializer.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/plugins/json_serializer.rb 2026-06-03 20:45:30.493579027 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/plugins/json_serializer.rb 2026-06-03 20:45:30.564579240 +0000
@@ -164,0 +165,2 @@
+ Plugins.model_instance_variables(self, :@json_serializer_opts)
+
lib/sequel/plugins/modification_detection.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/plugins/modification_detection.rb 2026-06-03 20:45:30.494579030 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/plugins/modification_detection.rb 2026-06-03 20:45:30.565579244 +0000
@@ -36,0 +37,2 @@
+ Plugins.model_instance_variables(self, :@values_hashes)
+
lib/sequel/plugins/serialization.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/plugins/serialization.rb 2026-06-03 20:45:30.497579039 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/plugins/serialization.rb 2026-06-03 20:45:30.570579258 +0000
@@ -115,0 +116,2 @@
+ Plugins.model_instance_variables(self, :@deserialized_values)
+
lib/sequel/plugins/serialization_modification_detection.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/plugins/serialization_modification_detection.rb 2026-06-03 20:45:30.497579039 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/plugins/serialization_modification_detection.rb 2026-06-03 20:45:30.570579258 +0000
@@ -32,0 +33,4 @@
+
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@original_deserialized_values)
+ end
lib/sequel/plugins/split_values.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/plugins/split_values.rb 2026-06-03 20:45:30.498579042 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/plugins/split_values.rb 2026-06-03 20:45:30.572579265 +0000
@@ -38,0 +39,2 @@
+ Plugins.model_instance_variables(self, :@noncolumn_values)
+
lib/sequel/plugins/tactical_eager_loading.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/plugins/tactical_eager_loading.rb 2026-06-03 20:45:30.500579048 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/plugins/tactical_eager_loading.rb 2026-06-03 20:45:30.574579270 +0000
@@ -126,0 +127,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@retrieved_by, :@retrieved_with)
+ end
+
lib/sequel/plugins/update_primary_key.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/plugins/update_primary_key.rb 2026-06-03 20:45:30.501579051 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/plugins/update_primary_key.rb 2026-06-03 20:45:30.576579277 +0000
@@ -24,0 +25,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@pk_hash)
+ end
+
lib/sequel/plugins/validation_contexts.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/plugins/validation_contexts.rb 2026-06-03 20:45:30.502579054 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/plugins/validation_contexts.rb 2026-06-03 20:45:30.577579279 +0000
@@ -31,0 +32,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@validation_context)
+ end
+
lib/sequel/version.rb
--- /tmp/d20260603-1535-vajkwh/sequel-5.104.0/lib/sequel/version.rb 2026-06-03 20:45:30.504579060 +0000
+++ /tmp/d20260603-1535-vajkwh/sequel-5.105.0/lib/sequel/version.rb 2026-06-03 20:45:30.579579286 +0000
@@ -9 +9 @@
- MINOR = 104
+ MINOR = 105
|
Contributor
gem compare --diff sequel 5.104.0 5.105.0Compared versions: ["5.104.0", "5.105.0"]
DIFFERENT files:
5.104.0->5.105.0:
* Changed:
lib/sequel/extensions/connection_expiration.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/extensions/connection_expiration.rb 2026-06-03 20:45:31.024055966 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/extensions/connection_expiration.rb 2026-06-03 20:45:31.102056150 +0000
@@ -49,2 +49,4 @@
- when :single, :sharded_single
- raise Error, "cannot load connection_expiration extension if using single or sharded_single connection pool"
+ when :threaded, :sharded_threaded, :timed_queue, :sharded_timed_queue
+ nil
+ else
+ raise Error, "cannot load connection_expiration extension if using single or sharded_single connection pool (or other unsupported connection pool)"
@@ -57,0 +60,33 @@
+
+ # Record an expiration timestamp for any connections that already
+ # exist in the pool, so that a connection opened before the extension
+ # was loaded (e.g. via Sequel.connect) will eventually be expired.
+ register = method(:register_connection_expiration_time)
+
+ case pool_type
+ when :timed_queue, :sharded_timed_queue
+ register_queued_connections = lambda do |queue|
+ conns = []
+ while conn = queue.pop(timeout: 0)
+ conns << conn
+ end
+ conns.each do |conn|
+ queue.push(register_connection_expiration_time(conn))
+ end
+ end
+ end
+
+ case pool_type
+ when :threaded
+ @available_connections.each(®ister)
+ @allocated.each_value(®ister)
+ when :sharded_threaded
+ @available_connections.each_value{|conns| conns.each(®ister)}
+ @allocated.each_value{|threads| threads.each_value(®ister)}
+ when :timed_queue
+ register_queued_connections.call(@queue)
+ @allocated.each_value(®ister)
+ else # when :sharded_timed_queue
+ @queues.each_value(®ister_queued_connections)
+ @allocated.each_value{|threads| threads.each_value(®ister)}
+ end
@@ -72,2 +107,6 @@
- conn = super
- @connection_expiration_timestamps[conn] = [Sequel.start_timer, @connection_expiration_timeout + (rand * @connection_expiration_random_delay)].freeze
+ register_connection_expiration_time(super)
+ end
+
+ # Record an expiration entry for a connection, returns the connection.
+ def register_connection_expiration_time(conn)
+ @connection_expiration_timestamps[conn] ||= [Sequel.start_timer, @connection_expiration_timeout + (rand * @connection_expiration_random_delay)].freeze
lib/sequel/model.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/model.rb 2026-06-03 20:45:31.036055994 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/model.rb 2026-06-03 20:45:31.136056230 +0000
@@ -57,0 +58 @@
+ @shape_friendly = false
lib/sequel/model/associations.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/model/associations.rb 2026-06-03 20:45:31.037055997 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/model/associations.rb 2026-06-03 20:45:31.137056232 +0000
@@ -2176,0 +2177 @@
+ Plugins.model_instance_variables(self, :@associations, :@set_associated_object_if_same)
lib/sequel/model/base.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/model/base.rb 2026-06-03 20:45:31.038055999 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/model/base.rb 2026-06-03 20:45:31.138056235 +0000
@@ -86,0 +87,4 @@
+ # Whether the model uses a shape friendly design (initializing all potentially
+ # used instance variables to nil).
+ attr_reader :shape_friendly
+
@@ -224,3 +228 @@
- o = allocate
- o.instance_variable_set(:@values, values)
- o
+ allocate.initialize_from_db(values)
@@ -504 +506,7 @@
- extend(m::ClassMethods) if m.const_defined?(:ClassMethods, false)
+ if m.const_defined?(:ClassMethods, false)
+ class_methods = m::ClassMethods
+ extend(class_methods)
+ if class_methods.private_method_defined?(:each_model_instance_variable)
+ def_initialize_nil_instance_variables
+ end
+ end
@@ -633,0 +642,7 @@
+ # Set instance variables used by instances of this model class.
+ # Only has an effect if shape_friendly is true.
+ def set_model_instance_variables(*ivs)
+ Plugins.model_instance_variables(singleton_class, *ivs)
+ def_initialize_nil_instance_variables
+ end
+
@@ -667,0 +683,6 @@
+ # Set whether the model should be shape friendly.
+ def shape_friendly=(v)
+ @shape_friendly = v
+ def_initialize_nil_instance_variables
+ end
+
@@ -816,0 +838,54 @@
+ # Defines the private _initialize_nil_instance_variables method.
+ # If shape_friendly is true, defines a method that initials the
+ # model's instance variables to nil. If shape_friendly is not
+ # true, does nothing.
+ def def_initialize_nil_instance_variables
+ if @shape_friendly
+ ivs = []
+ each_model_instance_variable do |iv|
+ unless iv.match(/\A@[a-z_][a-z0-9_]*\z/)
+ raise Error, "invalid model instance variable used"
+ end
+
+ ivs << iv
+ end
+ ivs.uniq!
+ ivs = ivs.reverse.join(" = ")
+ new_method_content = "#{ivs} = nil"
+ new_from_db_method_content = "#{ivs} = @new = @modified = nil"
+ end
+
+ class_eval(<<-RUBY, __FILE__, __LINE__+1)
+ def _initialize_nil_instance_variables
+ #{new_method_content}
+ end
+ def _initialize_from_db_nil_instance_variables
+ #{new_from_db_method_content}
+ end
+ RUBY
+ private :_initialize_nil_instance_variables, :_initialize_from_db_nil_instance_variables
+ alias_method :_initialize_nil_instance_variables, :_initialize_nil_instance_variables
+ alias_method :_initialize_from_db_nil_instance_variables, :_initialize_from_db_nil_instance_variables
+ nil
+ end
+
+ # Yield the default model instance variables. Designed only for
+ # use by def_initialize_nil_instance_variables.
+ def each_model_instance_variable
+ [
+ :@changed_columns,
+ :@errors,
+ :@raise_on_save_failure,
+ :@raise_on_typecast_failure,
+ :@require_modification,
+ :@server,
+ :@singleton_setter_added,
+ :@skip_validation_on_next_save,
+ :@strict_param_setting,
+ :@this,
+ :@typecast_empty_string_to_nil,
+ :@typecast_on_assignment,
+ :@use_transactions,
+ ].each{|iv| yield iv}
+ end
+
@@ -939,0 +1015 @@
+ :@shape_friendly=>nil,
@@ -1097 +1173 @@
- class_eval("def #{meth}; !defined?(@#{meth}) ? (frozen? ? self.class.#{meth} : (@#{meth} = self.class.#{meth})) : @#{meth} end", __FILE__, __LINE__)
+ class_eval("def #{meth}; @#{meth}.nil? ? (frozen? ? self.class.#{meth} : (@#{meth} = self.class.#{meth})) : @#{meth} end", __FILE__, __LINE__)
@@ -1138,2 +1214,3 @@
- @new = true
- @modified = true
+ @new = @modified = true
+ _initialize_nil_instance_variables
+
@@ -1144,0 +1222,9 @@
+ # Initialize a new record using values retrieved from a database.
+ # This should not be called directly, only via Model.call.
+ def initialize_from_db(values) # :nodoc:
+ @values = values
+ _initialize_from_db_nil_instance_variables
+
+ self
+ end
+
@@ -1448 +1534 @@
- defined?(@new) ? @new : (@new = false)
+ @new || false
@@ -2339,0 +2426 @@
+ def_initialize_nil_instance_variables
lib/sequel/model/plugins.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/model/plugins.rb 2026-06-03 20:45:31.038055999 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/model/plugins.rb 2026-06-03 20:45:31.138056235 +0000
@@ -41 +41,2 @@
- # values in this hash.
+ # values in this hash. These affects how class instance variables will be treated
+ # during subclassing.
@@ -46,0 +48,10 @@
+ end
+
+ # Sets the model instance variables used by the plugin. These instance variables
+ # will be initialized to nil for created model objects.
+ def self.model_instance_variables(mod, *ivs)
+ mod.send(:define_method, :each_model_instance_variable) do |&block|
+ super(&block)
+ ivs.each(&block)
+ end
+ mod.send(:private, :each_model_instance_variable)
lib/sequel/plugins/accessed_columns.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/plugins/accessed_columns.rb 2026-06-03 20:45:31.039056001 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/plugins/accessed_columns.rb 2026-06-03 20:45:31.139056237 +0000
@@ -28,0 +29,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@accessed_columns)
+ end
+
lib/sequel/plugins/active_model.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/plugins/active_model.rb 2026-06-03 20:45:31.039056001 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/plugins/active_model.rb 2026-06-03 20:45:31.139056237 +0000
@@ -31,0 +32,2 @@
+ Plugins.model_instance_variables(self, :@destroyed, :@rollback_checker)
+
@@ -61,2 +63 @@
- return false if new?
- return false if defined?(@destroyed)
+ return false if new? || @destroyed
@@ -64,4 +65,2 @@
- if defined?(@rollback_checker)
- if @rollback_checker.call
- return false
- end
+ if @rollback_checker && @rollback_checker.call
+ return false
lib/sequel/plugins/association_pks.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/plugins/association_pks.rb 2026-06-03 20:45:31.039056001 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/plugins/association_pks.rb 2026-06-03 20:45:31.139056237 +0000
@@ -69,0 +70,2 @@
+ Plugins.model_instance_variables(self, :@_association_pks)
+
lib/sequel/plugins/auto_validations.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/plugins/auto_validations.rb 2026-06-03 20:45:31.040056004 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/plugins/auto_validations.rb 2026-06-03 20:45:31.140056240 +0000
@@ -133,0 +134,2 @@
+ Plugins.model_instance_variables(self, :@_skip_auto_validations)
+
lib/sequel/plugins/columns_updated.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/plugins/columns_updated.rb 2026-06-03 20:45:31.042056009 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/plugins/columns_updated.rb 2026-06-03 20:45:31.141056242 +0000
@@ -17,0 +18,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@columns_updated)
+ end
+
lib/sequel/plugins/composition.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/plugins/composition.rb 2026-06-03 20:45:31.042056009 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/plugins/composition.rb 2026-06-03 20:45:31.141056242 +0000
@@ -68,0 +69,2 @@
+ Plugins.model_instance_variables(self, :@compositions)
+
lib/sequel/plugins/dirty.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/plugins/dirty.rb 2026-06-03 20:45:31.045056016 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/plugins/dirty.rb 2026-06-03 20:45:31.143056247 +0000
@@ -65,0 +66,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@previous_changes, :@initial_values, :@missing_initial_values)
+ end
+
lib/sequel/plugins/forbid_lazy_load.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/plugins/forbid_lazy_load.rb 2026-06-03 20:45:31.047056020 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/plugins/forbid_lazy_load.rb 2026-06-03 20:45:31.144056249 +0000
@@ -120,0 +121 @@
+ Plugins.model_instance_variables(self, :@forbid_lazy_load)
lib/sequel/plugins/insert_conflict.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/plugins/insert_conflict.rb 2026-06-03 20:45:31.048056023 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/plugins/insert_conflict.rb 2026-06-03 20:45:31.144056249 +0000
@@ -44,0 +45,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@insert_conflict_opts)
+ end
+
lib/sequel/plugins/instance_filters.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/plugins/instance_filters.rb 2026-06-03 20:45:31.049056025 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/plugins/instance_filters.rb 2026-06-03 20:45:31.144056249 +0000
@@ -52,0 +53,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@instance_filters)
+ end
+
lib/sequel/plugins/instance_hooks.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/plugins/instance_hooks.rb 2026-06-03 20:45:31.049056025 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/plugins/instance_hooks.rb 2026-06-03 20:45:31.144056249 +0000
@@ -30,0 +31,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@instance_hooks)
+ end
+
lib/sequel/plugins/json_serializer.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/plugins/json_serializer.rb 2026-06-03 20:45:31.050056027 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/plugins/json_serializer.rb 2026-06-03 20:45:31.145056251 +0000
@@ -164,0 +165,2 @@
+ Plugins.model_instance_variables(self, :@json_serializer_opts)
+
lib/sequel/plugins/modification_detection.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/plugins/modification_detection.rb 2026-06-03 20:45:31.051056030 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/plugins/modification_detection.rb 2026-06-03 20:45:31.145056251 +0000
@@ -36,0 +37,2 @@
+ Plugins.model_instance_variables(self, :@values_hashes)
+
lib/sequel/plugins/serialization.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/plugins/serialization.rb 2026-06-03 20:45:31.056056042 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/plugins/serialization.rb 2026-06-03 20:45:31.148056258 +0000
@@ -115,0 +116,2 @@
+ Plugins.model_instance_variables(self, :@deserialized_values)
+
lib/sequel/plugins/serialization_modification_detection.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/plugins/serialization_modification_detection.rb 2026-06-03 20:45:31.056056042 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/plugins/serialization_modification_detection.rb 2026-06-03 20:45:31.148056258 +0000
@@ -32,0 +33,4 @@
+
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@original_deserialized_values)
+ end
lib/sequel/plugins/split_values.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/plugins/split_values.rb 2026-06-03 20:45:31.058056046 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/plugins/split_values.rb 2026-06-03 20:45:31.148056258 +0000
@@ -38,0 +39,2 @@
+ Plugins.model_instance_variables(self, :@noncolumn_values)
+
lib/sequel/plugins/tactical_eager_loading.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/plugins/tactical_eager_loading.rb 2026-06-03 20:45:31.060056051 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/plugins/tactical_eager_loading.rb 2026-06-03 20:45:31.150056263 +0000
@@ -126,0 +127,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@retrieved_by, :@retrieved_with)
+ end
+
lib/sequel/plugins/update_primary_key.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/plugins/update_primary_key.rb 2026-06-03 20:45:31.063056058 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/plugins/update_primary_key.rb 2026-06-03 20:45:31.151056266 +0000
@@ -24,0 +25,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@pk_hash)
+ end
+
lib/sequel/plugins/validation_contexts.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/plugins/validation_contexts.rb 2026-06-03 20:45:31.064056060 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/plugins/validation_contexts.rb 2026-06-03 20:45:31.152056268 +0000
@@ -31,0 +32,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@validation_context)
+ end
+
lib/sequel/version.rb
--- /tmp/d20260603-1590-h7pevt/sequel-5.104.0/lib/sequel/version.rb 2026-06-03 20:45:31.067056068 +0000
+++ /tmp/d20260603-1590-h7pevt/sequel-5.105.0/lib/sequel/version.rb 2026-06-03 20:45:31.153056270 +0000
@@ -9 +9 @@
- MINOR = 104
+ MINOR = 105
|
Contributor
gem compare sequel 5.104.0 5.105.0Compared versions: ["5.104.0", "5.105.0"]
DIFFERENT rubygems_version:
5.104.0: 4.0.3
5.105.0: 4.0.10
DIFFERENT version:
5.104.0: 5.104.0
5.105.0: 5.105.0
DIFFERENT files:
5.104.0->5.105.0:
* Changed:
lib/sequel/extensions/connection_expiration.rb +43/-4
lib/sequel/model.rb +1/-0
lib/sequel/model/associations.rb +1/-0
lib/sequel/model/base.rb +95/-8
lib/sequel/model/plugins.rb +12/-1
lib/sequel/plugins/accessed_columns.rb +4/-0
lib/sequel/plugins/active_model.rb +5/-6
lib/sequel/plugins/association_pks.rb +2/-0
lib/sequel/plugins/auto_validations.rb +2/-0
lib/sequel/plugins/columns_updated.rb +4/-0
lib/sequel/plugins/composition.rb +2/-0
lib/sequel/plugins/dirty.rb +4/-0
lib/sequel/plugins/forbid_lazy_load.rb +1/-0
lib/sequel/plugins/insert_conflict.rb +4/-0
lib/sequel/plugins/instance_filters.rb +4/-0
lib/sequel/plugins/instance_hooks.rb +4/-0
lib/sequel/plugins/json_serializer.rb +2/-0
lib/sequel/plugins/modification_detection.rb +2/-0
lib/sequel/plugins/serialization.rb +2/-0
lib/sequel/plugins/serialization_modification_detection.rb +4/-0
lib/sequel/plugins/split_values.rb +2/-0
lib/sequel/plugins/tactical_eager_loading.rb +4/-0
lib/sequel/plugins/update_primary_key.rb +4/-0
lib/sequel/plugins/validation_contexts.rb +4/-0
lib/sequel/version.rb +1/-1 |
Contributor
gem compare --diff sequel 5.104.0 5.105.0Compared versions: ["5.104.0", "5.105.0"]
DIFFERENT files:
5.104.0->5.105.0:
* Changed:
lib/sequel/extensions/connection_expiration.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/extensions/connection_expiration.rb 2026-06-03 20:45:46.027226188 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/extensions/connection_expiration.rb 2026-06-03 20:45:46.114225982 +0000
@@ -49,2 +49,4 @@
- when :single, :sharded_single
- raise Error, "cannot load connection_expiration extension if using single or sharded_single connection pool"
+ when :threaded, :sharded_threaded, :timed_queue, :sharded_timed_queue
+ nil
+ else
+ raise Error, "cannot load connection_expiration extension if using single or sharded_single connection pool (or other unsupported connection pool)"
@@ -57,0 +60,33 @@
+
+ # Record an expiration timestamp for any connections that already
+ # exist in the pool, so that a connection opened before the extension
+ # was loaded (e.g. via Sequel.connect) will eventually be expired.
+ register = method(:register_connection_expiration_time)
+
+ case pool_type
+ when :timed_queue, :sharded_timed_queue
+ register_queued_connections = lambda do |queue|
+ conns = []
+ while conn = queue.pop(timeout: 0)
+ conns << conn
+ end
+ conns.each do |conn|
+ queue.push(register_connection_expiration_time(conn))
+ end
+ end
+ end
+
+ case pool_type
+ when :threaded
+ @available_connections.each(®ister)
+ @allocated.each_value(®ister)
+ when :sharded_threaded
+ @available_connections.each_value{|conns| conns.each(®ister)}
+ @allocated.each_value{|threads| threads.each_value(®ister)}
+ when :timed_queue
+ register_queued_connections.call(@queue)
+ @allocated.each_value(®ister)
+ else # when :sharded_timed_queue
+ @queues.each_value(®ister_queued_connections)
+ @allocated.each_value{|threads| threads.each_value(®ister)}
+ end
@@ -72,2 +107,6 @@
- conn = super
- @connection_expiration_timestamps[conn] = [Sequel.start_timer, @connection_expiration_timeout + (rand * @connection_expiration_random_delay)].freeze
+ register_connection_expiration_time(super)
+ end
+
+ # Record an expiration entry for a connection, returns the connection.
+ def register_connection_expiration_time(conn)
+ @connection_expiration_timestamps[conn] ||= [Sequel.start_timer, @connection_expiration_timeout + (rand * @connection_expiration_random_delay)].freeze
lib/sequel/model.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/model.rb 2026-06-03 20:45:46.052226129 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/model.rb 2026-06-03 20:45:46.142225916 +0000
@@ -57,0 +58 @@
+ @shape_friendly = false
lib/sequel/model/associations.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/model/associations.rb 2026-06-03 20:45:46.053226127 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/model/associations.rb 2026-06-03 20:45:46.144225912 +0000
@@ -2176,0 +2177 @@
+ Plugins.model_instance_variables(self, :@associations, :@set_associated_object_if_same)
lib/sequel/model/base.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/model/base.rb 2026-06-03 20:45:46.054226124 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/model/base.rb 2026-06-03 20:45:46.145225909 +0000
@@ -86,0 +87,4 @@
+ # Whether the model uses a shape friendly design (initializing all potentially
+ # used instance variables to nil).
+ attr_reader :shape_friendly
+
@@ -224,3 +228 @@
- o = allocate
- o.instance_variable_set(:@values, values)
- o
+ allocate.initialize_from_db(values)
@@ -504 +506,7 @@
- extend(m::ClassMethods) if m.const_defined?(:ClassMethods, false)
+ if m.const_defined?(:ClassMethods, false)
+ class_methods = m::ClassMethods
+ extend(class_methods)
+ if class_methods.private_method_defined?(:each_model_instance_variable)
+ def_initialize_nil_instance_variables
+ end
+ end
@@ -633,0 +642,7 @@
+ # Set instance variables used by instances of this model class.
+ # Only has an effect if shape_friendly is true.
+ def set_model_instance_variables(*ivs)
+ Plugins.model_instance_variables(singleton_class, *ivs)
+ def_initialize_nil_instance_variables
+ end
+
@@ -667,0 +683,6 @@
+ # Set whether the model should be shape friendly.
+ def shape_friendly=(v)
+ @shape_friendly = v
+ def_initialize_nil_instance_variables
+ end
+
@@ -816,0 +838,54 @@
+ # Defines the private _initialize_nil_instance_variables method.
+ # If shape_friendly is true, defines a method that initials the
+ # model's instance variables to nil. If shape_friendly is not
+ # true, does nothing.
+ def def_initialize_nil_instance_variables
+ if @shape_friendly
+ ivs = []
+ each_model_instance_variable do |iv|
+ unless iv.match(/\A@[a-z_][a-z0-9_]*\z/)
+ raise Error, "invalid model instance variable used"
+ end
+
+ ivs << iv
+ end
+ ivs.uniq!
+ ivs = ivs.reverse.join(" = ")
+ new_method_content = "#{ivs} = nil"
+ new_from_db_method_content = "#{ivs} = @new = @modified = nil"
+ end
+
+ class_eval(<<-RUBY, __FILE__, __LINE__+1)
+ def _initialize_nil_instance_variables
+ #{new_method_content}
+ end
+ def _initialize_from_db_nil_instance_variables
+ #{new_from_db_method_content}
+ end
+ RUBY
+ private :_initialize_nil_instance_variables, :_initialize_from_db_nil_instance_variables
+ alias_method :_initialize_nil_instance_variables, :_initialize_nil_instance_variables
+ alias_method :_initialize_from_db_nil_instance_variables, :_initialize_from_db_nil_instance_variables
+ nil
+ end
+
+ # Yield the default model instance variables. Designed only for
+ # use by def_initialize_nil_instance_variables.
+ def each_model_instance_variable
+ [
+ :@changed_columns,
+ :@errors,
+ :@raise_on_save_failure,
+ :@raise_on_typecast_failure,
+ :@require_modification,
+ :@server,
+ :@singleton_setter_added,
+ :@skip_validation_on_next_save,
+ :@strict_param_setting,
+ :@this,
+ :@typecast_empty_string_to_nil,
+ :@typecast_on_assignment,
+ :@use_transactions,
+ ].each{|iv| yield iv}
+ end
+
@@ -939,0 +1015 @@
+ :@shape_friendly=>nil,
@@ -1097 +1173 @@
- class_eval("def #{meth}; !defined?(@#{meth}) ? (frozen? ? self.class.#{meth} : (@#{meth} = self.class.#{meth})) : @#{meth} end", __FILE__, __LINE__)
+ class_eval("def #{meth}; @#{meth}.nil? ? (frozen? ? self.class.#{meth} : (@#{meth} = self.class.#{meth})) : @#{meth} end", __FILE__, __LINE__)
@@ -1138,2 +1214,3 @@
- @new = true
- @modified = true
+ @new = @modified = true
+ _initialize_nil_instance_variables
+
@@ -1144,0 +1222,9 @@
+ # Initialize a new record using values retrieved from a database.
+ # This should not be called directly, only via Model.call.
+ def initialize_from_db(values) # :nodoc:
+ @values = values
+ _initialize_from_db_nil_instance_variables
+
+ self
+ end
+
@@ -1448 +1534 @@
- defined?(@new) ? @new : (@new = false)
+ @new || false
@@ -2339,0 +2426 @@
+ def_initialize_nil_instance_variables
lib/sequel/model/plugins.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/model/plugins.rb 2026-06-03 20:45:46.055226122 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/model/plugins.rb 2026-06-03 20:45:46.148225902 +0000
@@ -41 +41,2 @@
- # values in this hash.
+ # values in this hash. These affects how class instance variables will be treated
+ # during subclassing.
@@ -46,0 +48,10 @@
+ end
+
+ # Sets the model instance variables used by the plugin. These instance variables
+ # will be initialized to nil for created model objects.
+ def self.model_instance_variables(mod, *ivs)
+ mod.send(:define_method, :each_model_instance_variable) do |&block|
+ super(&block)
+ ivs.each(&block)
+ end
+ mod.send(:private, :each_model_instance_variable)
lib/sequel/plugins/accessed_columns.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/plugins/accessed_columns.rb 2026-06-03 20:45:46.055226122 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/plugins/accessed_columns.rb 2026-06-03 20:45:46.149225900 +0000
@@ -28,0 +29,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@accessed_columns)
+ end
+
lib/sequel/plugins/active_model.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/plugins/active_model.rb 2026-06-03 20:45:46.055226122 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/plugins/active_model.rb 2026-06-03 20:45:46.149225900 +0000
@@ -31,0 +32,2 @@
+ Plugins.model_instance_variables(self, :@destroyed, :@rollback_checker)
+
@@ -61,2 +63 @@
- return false if new?
- return false if defined?(@destroyed)
+ return false if new? || @destroyed
@@ -64,4 +65,2 @@
- if defined?(@rollback_checker)
- if @rollback_checker.call
- return false
- end
+ if @rollback_checker && @rollback_checker.call
+ return false
lib/sequel/plugins/association_pks.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/plugins/association_pks.rb 2026-06-03 20:45:46.057226117 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/plugins/association_pks.rb 2026-06-03 20:45:46.151225895 +0000
@@ -69,0 +70,2 @@
+ Plugins.model_instance_variables(self, :@_association_pks)
+
lib/sequel/plugins/auto_validations.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/plugins/auto_validations.rb 2026-06-03 20:45:46.057226117 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/plugins/auto_validations.rb 2026-06-03 20:45:46.152225893 +0000
@@ -133,0 +134,2 @@
+ Plugins.model_instance_variables(self, :@_skip_auto_validations)
+
lib/sequel/plugins/columns_updated.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/plugins/columns_updated.rb 2026-06-03 20:45:46.061226108 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/plugins/columns_updated.rb 2026-06-03 20:45:46.154225888 +0000
@@ -17,0 +18,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@columns_updated)
+ end
+
lib/sequel/plugins/composition.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/plugins/composition.rb 2026-06-03 20:45:46.061226108 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/plugins/composition.rb 2026-06-03 20:45:46.155225886 +0000
@@ -68,0 +69,2 @@
+ Plugins.model_instance_variables(self, :@compositions)
+
lib/sequel/plugins/dirty.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/plugins/dirty.rb 2026-06-03 20:45:46.063226103 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/plugins/dirty.rb 2026-06-03 20:45:46.158225878 +0000
@@ -65,0 +66,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@previous_changes, :@initial_values, :@missing_initial_values)
+ end
+
lib/sequel/plugins/forbid_lazy_load.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/plugins/forbid_lazy_load.rb 2026-06-03 20:45:46.067226093 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/plugins/forbid_lazy_load.rb 2026-06-03 20:45:46.161225871 +0000
@@ -120,0 +121 @@
+ Plugins.model_instance_variables(self, :@forbid_lazy_load)
lib/sequel/plugins/insert_conflict.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/plugins/insert_conflict.rb 2026-06-03 20:45:46.068226091 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/plugins/insert_conflict.rb 2026-06-03 20:45:46.162225869 +0000
@@ -44,0 +45,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@insert_conflict_opts)
+ end
+
lib/sequel/plugins/instance_filters.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/plugins/instance_filters.rb 2026-06-03 20:45:46.068226091 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/plugins/instance_filters.rb 2026-06-03 20:45:46.163225867 +0000
@@ -52,0 +53,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@instance_filters)
+ end
+
lib/sequel/plugins/instance_hooks.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/plugins/instance_hooks.rb 2026-06-03 20:45:46.068226091 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/plugins/instance_hooks.rb 2026-06-03 20:45:46.163225867 +0000
@@ -30,0 +31,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@instance_hooks)
+ end
+
lib/sequel/plugins/json_serializer.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/plugins/json_serializer.rb 2026-06-03 20:45:46.069226089 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/plugins/json_serializer.rb 2026-06-03 20:45:46.164225864 +0000
@@ -164,0 +165,2 @@
+ Plugins.model_instance_variables(self, :@json_serializer_opts)
+
lib/sequel/plugins/modification_detection.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/plugins/modification_detection.rb 2026-06-03 20:45:46.070226086 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/plugins/modification_detection.rb 2026-06-03 20:45:46.165225862 +0000
@@ -36,0 +37,2 @@
+ Plugins.model_instance_variables(self, :@values_hashes)
+
lib/sequel/plugins/serialization.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/plugins/serialization.rb 2026-06-03 20:45:46.074226077 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/plugins/serialization.rb 2026-06-03 20:45:46.172225845 +0000
@@ -115,0 +116,2 @@
+ Plugins.model_instance_variables(self, :@deserialized_values)
+
lib/sequel/plugins/serialization_modification_detection.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/plugins/serialization_modification_detection.rb 2026-06-03 20:45:46.074226077 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/plugins/serialization_modification_detection.rb 2026-06-03 20:45:46.172225845 +0000
@@ -32,0 +33,4 @@
+
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@original_deserialized_values)
+ end
lib/sequel/plugins/split_values.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/plugins/split_values.rb 2026-06-03 20:45:46.076226072 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/plugins/split_values.rb 2026-06-03 20:45:46.174225841 +0000
@@ -38,0 +39,2 @@
+ Plugins.model_instance_variables(self, :@noncolumn_values)
+
lib/sequel/plugins/tactical_eager_loading.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/plugins/tactical_eager_loading.rb 2026-06-03 20:45:46.078226067 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/plugins/tactical_eager_loading.rb 2026-06-03 20:45:46.176225836 +0000
@@ -126,0 +127,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@retrieved_by, :@retrieved_with)
+ end
+
lib/sequel/plugins/update_primary_key.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/plugins/update_primary_key.rb 2026-06-03 20:45:46.080226063 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/plugins/update_primary_key.rb 2026-06-03 20:45:46.179225829 +0000
@@ -24,0 +25,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@pk_hash)
+ end
+
lib/sequel/plugins/validation_contexts.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/plugins/validation_contexts.rb 2026-06-03 20:45:46.082226058 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/plugins/validation_contexts.rb 2026-06-03 20:45:46.181225824 +0000
@@ -31,0 +32,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@validation_context)
+ end
+
lib/sequel/version.rb
--- /tmp/d20260603-1536-iloz9v/sequel-5.104.0/lib/sequel/version.rb 2026-06-03 20:45:46.084226053 +0000
+++ /tmp/d20260603-1536-iloz9v/sequel-5.105.0/lib/sequel/version.rb 2026-06-03 20:45:46.183225819 +0000
@@ -9 +9 @@
- MINOR = 104
+ MINOR = 105
|
Contributor
gem compare --diff sequel 5.104.0 5.105.0Compared versions: ["5.104.0", "5.105.0"]
DIFFERENT files:
5.104.0->5.105.0:
* Changed:
lib/sequel/extensions/connection_expiration.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/extensions/connection_expiration.rb 2026-06-03 20:45:49.676914483 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/extensions/connection_expiration.rb 2026-06-03 20:45:49.736915247 +0000
@@ -49,2 +49,4 @@
- when :single, :sharded_single
- raise Error, "cannot load connection_expiration extension if using single or sharded_single connection pool"
+ when :threaded, :sharded_threaded, :timed_queue, :sharded_timed_queue
+ nil
+ else
+ raise Error, "cannot load connection_expiration extension if using single or sharded_single connection pool (or other unsupported connection pool)"
@@ -57,0 +60,33 @@
+
+ # Record an expiration timestamp for any connections that already
+ # exist in the pool, so that a connection opened before the extension
+ # was loaded (e.g. via Sequel.connect) will eventually be expired.
+ register = method(:register_connection_expiration_time)
+
+ case pool_type
+ when :timed_queue, :sharded_timed_queue
+ register_queued_connections = lambda do |queue|
+ conns = []
+ while conn = queue.pop(timeout: 0)
+ conns << conn
+ end
+ conns.each do |conn|
+ queue.push(register_connection_expiration_time(conn))
+ end
+ end
+ end
+
+ case pool_type
+ when :threaded
+ @available_connections.each(®ister)
+ @allocated.each_value(®ister)
+ when :sharded_threaded
+ @available_connections.each_value{|conns| conns.each(®ister)}
+ @allocated.each_value{|threads| threads.each_value(®ister)}
+ when :timed_queue
+ register_queued_connections.call(@queue)
+ @allocated.each_value(®ister)
+ else # when :sharded_timed_queue
+ @queues.each_value(®ister_queued_connections)
+ @allocated.each_value{|threads| threads.each_value(®ister)}
+ end
@@ -72,2 +107,6 @@
- conn = super
- @connection_expiration_timestamps[conn] = [Sequel.start_timer, @connection_expiration_timeout + (rand * @connection_expiration_random_delay)].freeze
+ register_connection_expiration_time(super)
+ end
+
+ # Record an expiration entry for a connection, returns the connection.
+ def register_connection_expiration_time(conn)
+ @connection_expiration_timestamps[conn] ||= [Sequel.start_timer, @connection_expiration_timeout + (rand * @connection_expiration_random_delay)].freeze
lib/sequel/model.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/model.rb 2026-06-03 20:45:49.694914712 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/model.rb 2026-06-03 20:45:49.766915629 +0000
@@ -57,0 +58 @@
+ @shape_friendly = false
lib/sequel/model/associations.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/model/associations.rb 2026-06-03 20:45:49.695914725 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/model/associations.rb 2026-06-03 20:45:49.767915641 +0000
@@ -2176,0 +2177 @@
+ Plugins.model_instance_variables(self, :@associations, :@set_associated_object_if_same)
lib/sequel/model/base.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/model/base.rb 2026-06-03 20:45:49.696914738 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/model/base.rb 2026-06-03 20:45:49.768915654 +0000
@@ -86,0 +87,4 @@
+ # Whether the model uses a shape friendly design (initializing all potentially
+ # used instance variables to nil).
+ attr_reader :shape_friendly
+
@@ -224,3 +228 @@
- o = allocate
- o.instance_variable_set(:@values, values)
- o
+ allocate.initialize_from_db(values)
@@ -504 +506,7 @@
- extend(m::ClassMethods) if m.const_defined?(:ClassMethods, false)
+ if m.const_defined?(:ClassMethods, false)
+ class_methods = m::ClassMethods
+ extend(class_methods)
+ if class_methods.private_method_defined?(:each_model_instance_variable)
+ def_initialize_nil_instance_variables
+ end
+ end
@@ -633,0 +642,7 @@
+ # Set instance variables used by instances of this model class.
+ # Only has an effect if shape_friendly is true.
+ def set_model_instance_variables(*ivs)
+ Plugins.model_instance_variables(singleton_class, *ivs)
+ def_initialize_nil_instance_variables
+ end
+
@@ -667,0 +683,6 @@
+ # Set whether the model should be shape friendly.
+ def shape_friendly=(v)
+ @shape_friendly = v
+ def_initialize_nil_instance_variables
+ end
+
@@ -816,0 +838,54 @@
+ # Defines the private _initialize_nil_instance_variables method.
+ # If shape_friendly is true, defines a method that initials the
+ # model's instance variables to nil. If shape_friendly is not
+ # true, does nothing.
+ def def_initialize_nil_instance_variables
+ if @shape_friendly
+ ivs = []
+ each_model_instance_variable do |iv|
+ unless iv.match(/\A@[a-z_][a-z0-9_]*\z/)
+ raise Error, "invalid model instance variable used"
+ end
+
+ ivs << iv
+ end
+ ivs.uniq!
+ ivs = ivs.reverse.join(" = ")
+ new_method_content = "#{ivs} = nil"
+ new_from_db_method_content = "#{ivs} = @new = @modified = nil"
+ end
+
+ class_eval(<<-RUBY, __FILE__, __LINE__+1)
+ def _initialize_nil_instance_variables
+ #{new_method_content}
+ end
+ def _initialize_from_db_nil_instance_variables
+ #{new_from_db_method_content}
+ end
+ RUBY
+ private :_initialize_nil_instance_variables, :_initialize_from_db_nil_instance_variables
+ alias_method :_initialize_nil_instance_variables, :_initialize_nil_instance_variables
+ alias_method :_initialize_from_db_nil_instance_variables, :_initialize_from_db_nil_instance_variables
+ nil
+ end
+
+ # Yield the default model instance variables. Designed only for
+ # use by def_initialize_nil_instance_variables.
+ def each_model_instance_variable
+ [
+ :@changed_columns,
+ :@errors,
+ :@raise_on_save_failure,
+ :@raise_on_typecast_failure,
+ :@require_modification,
+ :@server,
+ :@singleton_setter_added,
+ :@skip_validation_on_next_save,
+ :@strict_param_setting,
+ :@this,
+ :@typecast_empty_string_to_nil,
+ :@typecast_on_assignment,
+ :@use_transactions,
+ ].each{|iv| yield iv}
+ end
+
@@ -939,0 +1015 @@
+ :@shape_friendly=>nil,
@@ -1097 +1173 @@
- class_eval("def #{meth}; !defined?(@#{meth}) ? (frozen? ? self.class.#{meth} : (@#{meth} = self.class.#{meth})) : @#{meth} end", __FILE__, __LINE__)
+ class_eval("def #{meth}; @#{meth}.nil? ? (frozen? ? self.class.#{meth} : (@#{meth} = self.class.#{meth})) : @#{meth} end", __FILE__, __LINE__)
@@ -1138,2 +1214,3 @@
- @new = true
- @modified = true
+ @new = @modified = true
+ _initialize_nil_instance_variables
+
@@ -1144,0 +1222,9 @@
+ # Initialize a new record using values retrieved from a database.
+ # This should not be called directly, only via Model.call.
+ def initialize_from_db(values) # :nodoc:
+ @values = values
+ _initialize_from_db_nil_instance_variables
+
+ self
+ end
+
@@ -1448 +1534 @@
- defined?(@new) ? @new : (@new = false)
+ @new || false
@@ -2339,0 +2426 @@
+ def_initialize_nil_instance_variables
lib/sequel/model/plugins.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/model/plugins.rb 2026-06-03 20:45:49.697914750 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/model/plugins.rb 2026-06-03 20:45:49.773915718 +0000
@@ -41 +41,2 @@
- # values in this hash.
+ # values in this hash. These affects how class instance variables will be treated
+ # during subclassing.
@@ -46,0 +48,10 @@
+ end
+
+ # Sets the model instance variables used by the plugin. These instance variables
+ # will be initialized to nil for created model objects.
+ def self.model_instance_variables(mod, *ivs)
+ mod.send(:define_method, :each_model_instance_variable) do |&block|
+ super(&block)
+ ivs.each(&block)
+ end
+ mod.send(:private, :each_model_instance_variable)
lib/sequel/plugins/accessed_columns.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/plugins/accessed_columns.rb 2026-06-03 20:45:49.697914750 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/plugins/accessed_columns.rb 2026-06-03 20:45:49.774915731 +0000
@@ -28,0 +29,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@accessed_columns)
+ end
+
lib/sequel/plugins/active_model.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/plugins/active_model.rb 2026-06-03 20:45:49.697914750 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/plugins/active_model.rb 2026-06-03 20:45:49.774915731 +0000
@@ -31,0 +32,2 @@
+ Plugins.model_instance_variables(self, :@destroyed, :@rollback_checker)
+
@@ -61,2 +63 @@
- return false if new?
- return false if defined?(@destroyed)
+ return false if new? || @destroyed
@@ -64,4 +65,2 @@
- if defined?(@rollback_checker)
- if @rollback_checker.call
- return false
- end
+ if @rollback_checker && @rollback_checker.call
+ return false
lib/sequel/plugins/association_pks.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/plugins/association_pks.rb 2026-06-03 20:45:49.698914763 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/plugins/association_pks.rb 2026-06-03 20:45:49.775915743 +0000
@@ -69,0 +70,2 @@
+ Plugins.model_instance_variables(self, :@_association_pks)
+
lib/sequel/plugins/auto_validations.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/plugins/auto_validations.rb 2026-06-03 20:45:49.699914776 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/plugins/auto_validations.rb 2026-06-03 20:45:49.777915769 +0000
@@ -133,0 +134,2 @@
+ Plugins.model_instance_variables(self, :@_skip_auto_validations)
+
lib/sequel/plugins/columns_updated.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/plugins/columns_updated.rb 2026-06-03 20:45:49.701914801 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/plugins/columns_updated.rb 2026-06-03 20:45:49.779915794 +0000
@@ -17,0 +18,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@columns_updated)
+ end
+
lib/sequel/plugins/composition.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/plugins/composition.rb 2026-06-03 20:45:49.701914801 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/plugins/composition.rb 2026-06-03 20:45:49.779915794 +0000
@@ -68,0 +69,2 @@
+ Plugins.model_instance_variables(self, :@compositions)
+
lib/sequel/plugins/dirty.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/plugins/dirty.rb 2026-06-03 20:45:49.703914827 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/plugins/dirty.rb 2026-06-03 20:45:49.782915832 +0000
@@ -65,0 +66,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@previous_changes, :@initial_values, :@missing_initial_values)
+ end
+
lib/sequel/plugins/forbid_lazy_load.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/plugins/forbid_lazy_load.rb 2026-06-03 20:45:49.704914839 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/plugins/forbid_lazy_load.rb 2026-06-03 20:45:49.785915871 +0000
@@ -120,0 +121 @@
+ Plugins.model_instance_variables(self, :@forbid_lazy_load)
lib/sequel/plugins/insert_conflict.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/plugins/insert_conflict.rb 2026-06-03 20:45:49.704914839 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/plugins/insert_conflict.rb 2026-06-03 20:45:49.785915871 +0000
@@ -44,0 +45,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@insert_conflict_opts)
+ end
+
lib/sequel/plugins/instance_filters.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/plugins/instance_filters.rb 2026-06-03 20:45:49.705914852 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/plugins/instance_filters.rb 2026-06-03 20:45:49.785915871 +0000
@@ -52,0 +53,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@instance_filters)
+ end
+
lib/sequel/plugins/instance_hooks.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/plugins/instance_hooks.rb 2026-06-03 20:45:49.705914852 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/plugins/instance_hooks.rb 2026-06-03 20:45:49.785915871 +0000
@@ -30,0 +31,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@instance_hooks)
+ end
+
lib/sequel/plugins/json_serializer.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/plugins/json_serializer.rb 2026-06-03 20:45:49.705914852 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/plugins/json_serializer.rb 2026-06-03 20:45:49.786915883 +0000
@@ -164,0 +165,2 @@
+ Plugins.model_instance_variables(self, :@json_serializer_opts)
+
lib/sequel/plugins/modification_detection.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/plugins/modification_detection.rb 2026-06-03 20:45:49.706914865 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/plugins/modification_detection.rb 2026-06-03 20:45:49.787915896 +0000
@@ -36,0 +37,2 @@
+ Plugins.model_instance_variables(self, :@values_hashes)
+
lib/sequel/plugins/serialization.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/plugins/serialization.rb 2026-06-03 20:45:49.709914903 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/plugins/serialization.rb 2026-06-03 20:45:49.791915947 +0000
@@ -115,0 +116,2 @@
+ Plugins.model_instance_variables(self, :@deserialized_values)
+
lib/sequel/plugins/serialization_modification_detection.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/plugins/serialization_modification_detection.rb 2026-06-03 20:45:49.709914903 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/plugins/serialization_modification_detection.rb 2026-06-03 20:45:49.792915960 +0000
@@ -32,0 +33,4 @@
+
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@original_deserialized_values)
+ end
lib/sequel/plugins/split_values.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/plugins/split_values.rb 2026-06-03 20:45:49.710914916 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/plugins/split_values.rb 2026-06-03 20:45:49.793915972 +0000
@@ -38,0 +39,2 @@
+ Plugins.model_instance_variables(self, :@noncolumn_values)
+
lib/sequel/plugins/tactical_eager_loading.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/plugins/tactical_eager_loading.rb 2026-06-03 20:45:49.711914929 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/plugins/tactical_eager_loading.rb 2026-06-03 20:45:49.794915985 +0000
@@ -126,0 +127,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@retrieved_by, :@retrieved_with)
+ end
+
lib/sequel/plugins/update_primary_key.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/plugins/update_primary_key.rb 2026-06-03 20:45:49.713914954 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/plugins/update_primary_key.rb 2026-06-03 20:45:49.795915998 +0000
@@ -24,0 +25,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@pk_hash)
+ end
+
lib/sequel/plugins/validation_contexts.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/plugins/validation_contexts.rb 2026-06-03 20:45:49.713914954 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/plugins/validation_contexts.rb 2026-06-03 20:45:49.797916023 +0000
@@ -31,0 +32,4 @@
+ module ClassMethods
+ Plugins.model_instance_variables(self, :@validation_context)
+ end
+
lib/sequel/version.rb
--- /tmp/d20260603-1553-ymp7sj/sequel-5.104.0/lib/sequel/version.rb 2026-06-03 20:45:49.716914992 +0000
+++ /tmp/d20260603-1553-ymp7sj/sequel-5.105.0/lib/sequel/version.rb 2026-06-03 20:45:49.799916049 +0000
@@ -9 +9 @@
- MINOR = 104
+ MINOR = 105
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bumps sequel from 5.104.0 to 5.105.0.
Changelog
Sourced from sequel's changelog.
Commits
ed26b86Bump version to 5.105.03708affFix typo in CHANGELOG [ci skip]4fda8efSupport shape-friendly Model instances via Model.shape_friendly = true2e33accAdd specs for Sequel::Database::AsyncThreadPool::JobProcessor.run_finalizerb184a7dSwitch conditionals in connection_expiration plugin694ea77Minor changes to connection_expiration handling of initial connectionsc52de64Adds expiration for existing connections when added to a db6a84e80Avoid rdoc-ref resolution errors when building plugin/extension rdocDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)