Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package rubygem-activerecord-7.0 for 
openSUSE:Factory checked in at 2022-10-12 18:25:00
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-activerecord-7.0 (Old)
 and      /work/SRC/openSUSE:Factory/.rubygem-activerecord-7.0.new.2275 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "rubygem-activerecord-7.0"

Wed Oct 12 18:25:00 2022 rev:6 rq:1010045 version:7.0.4

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/rubygem-activerecord-7.0/rubygem-activerecord-7.0.changes
        2022-08-06 22:07:51.802605146 +0200
+++ 
/work/SRC/openSUSE:Factory/.rubygem-activerecord-7.0.new.2275/rubygem-activerecord-7.0.changes
      2022-10-12 18:26:44.321960245 +0200
@@ -1,0 +2,104 @@
+Mon Oct 10 12:54:17 UTC 2022 - Stephan Kulow <co...@suse.com>
+
+updated to version 7.0.4
+ see installed CHANGELOG.md
+
+  ## Rails 7.0.4 (September 09, 2022) ##
+  
+  *   Symbol is allowed by default for YAML columns
+  
+      *??tienne Barri??*
+  
+  *   Fix `ActiveRecord::Store` to serialize as a regular Hash
+  
+      Previously it would serialize as an 
`ActiveSupport::HashWithIndifferentAccess`
+      which is wasteful and cause problem with YAML safe_load.
+  
+      *Jean Boussier*
+  
+  *   Add `timestamptz` as a time zone aware type for PostgreSQL
+  
+      This is required for correctly parsing `timestamp with time zone` values 
in your database.
+  
+      If you don't want this, you can opt out by adding this initializer:
+  
+      ```ruby
+      ActiveRecord::Base.time_zone_aware_types -= [:timestamptz]
+      ```
+  
+      *Alex Ghiculescu*
+  
+  *   Fix supporting timezone awareness for `tsrange` and `tstzrange` array 
columns.
+  
+      ```ruby
+      # In database migrations
+      add_column :shops, :open_hours, :tsrange, array: true
+      # In app config
+      ActiveRecord::Base.time_zone_aware_types += [:tsrange]
+      # In the code times are properly converted to app time zone
+      Shop.create!(open_hours: [Time.current..8.hour.from_now])
+      ```
+  
+      *Wojciech Wn??trzak*
+  
+  *   Resolve issue where a relation cache_version could be left stale.
+  
+      Previously, when `reset` was called on a relation object it did not 
reset the cache_versions
+      ivar. This led to a confusing situation where despite having the correct 
data the relation
+      still reported a stale cache_version.
+  
+      Usage:
+  
+      ```ruby
+      developers = Developer.all
+      developers.cache_version
+  
+      Developer.update_all(updated_at: Time.now.utc + 1.second)
+  
+      developers.cache_version # Stale cache_version
+      developers.reset
+      developers.cache_version # Returns the current correct cache_version
+      ```
+  
+      Fixes #45341.
+  
+      *Austen Madden*
+  
+  *   Fix `load_async` when called on an association proxy.
+  
+      Calling `load_async` directly an association would schedule
+      a query but never use it.
+  
+      ```ruby
+      comments = post.comments.load_async # schedule a query
+      comments.to_a # perform an entirely new sync query
+      ```
+  
+      Now it does use the async query, however note that it doesn't
+      cause the association to be loaded.
+  
+      *Jean Boussier*
+  
+  *   Fix eager loading for models without primary keys.
+  
+      *Anmol Chopra*, *Matt Lawrence*, and *Jonathan Hefner*
+  
+  *   `rails db:schema:{dump,load}` now checks `ENV["SCHEMA_FORMAT"]` before 
config
+  
+      Since `rails db:structure:{dump,load}` was deprecated there wasn't a 
simple
+      way to dump a schema to both SQL and Ruby formats. You can now do this 
with
+      an environment variable. For example:
+  
+      ```
+      SCHEMA_FORMAT=sql rake db:schema:dump
+      ```
+  
+      *Alex Ghiculescu*
+  
+  *   Fix Hstore deserialize regression.
+  
+      *edsharp*
+  
+  
+
+-------------------------------------------------------------------

Old:
----
  activerecord-7.0.3.1.gem

New:
----
  activerecord-7.0.4.gem

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ rubygem-activerecord-7.0.spec ++++++
--- /var/tmp/diff_new_pack.IaB0Zm/_old  2022-10-12 18:26:44.733961152 +0200
+++ /var/tmp/diff_new_pack.IaB0Zm/_new  2022-10-12 18:26:44.741961169 +0200
@@ -24,7 +24,7 @@
 #
 
 Name:           rubygem-activerecord-7.0
-Version:        7.0.3.1
+Version:        7.0.4
 Release:        0
 %define mod_name activerecord
 %define mod_full_name %{mod_name}-%{version}

++++++ activerecord-7.0.3.1.gem -> activerecord-7.0.4.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CHANGELOG.md new/CHANGELOG.md
--- old/CHANGELOG.md    2022-07-12 19:30:22.000000000 +0200
+++ new/CHANGELOG.md    2022-09-09 20:42:16.000000000 +0200
@@ -1,3 +1,100 @@
+## Rails 7.0.4 (September 09, 2022) ##
+
+*   Symbol is allowed by default for YAML columns
+
+    *??tienne Barri??*
+
+*   Fix `ActiveRecord::Store` to serialize as a regular Hash
+
+    Previously it would serialize as an 
`ActiveSupport::HashWithIndifferentAccess`
+    which is wasteful and cause problem with YAML safe_load.
+
+    *Jean Boussier*
+
+*   Add `timestamptz` as a time zone aware type for PostgreSQL
+
+    This is required for correctly parsing `timestamp with time zone` values 
in your database.
+
+    If you don't want this, you can opt out by adding this initializer:
+
+    ```ruby
+    ActiveRecord::Base.time_zone_aware_types -= [:timestamptz]
+    ```
+
+    *Alex Ghiculescu*
+
+*   Fix supporting timezone awareness for `tsrange` and `tstzrange` array 
columns.
+
+    ```ruby
+    # In database migrations
+    add_column :shops, :open_hours, :tsrange, array: true
+    # In app config
+    ActiveRecord::Base.time_zone_aware_types += [:tsrange]
+    # In the code times are properly converted to app time zone
+    Shop.create!(open_hours: [Time.current..8.hour.from_now])
+    ```
+
+    *Wojciech Wn??trzak*
+
+*   Resolve issue where a relation cache_version could be left stale.
+
+    Previously, when `reset` was called on a relation object it did not reset 
the cache_versions
+    ivar. This led to a confusing situation where despite having the correct 
data the relation
+    still reported a stale cache_version.
+
+    Usage:
+
+    ```ruby
+    developers = Developer.all
+    developers.cache_version
+
+    Developer.update_all(updated_at: Time.now.utc + 1.second)
+
+    developers.cache_version # Stale cache_version
+    developers.reset
+    developers.cache_version # Returns the current correct cache_version
+    ```
+
+    Fixes #45341.
+
+    *Austen Madden*
+
+*   Fix `load_async` when called on an association proxy.
+
+    Calling `load_async` directly an association would schedule
+    a query but never use it.
+
+    ```ruby
+    comments = post.comments.load_async # schedule a query
+    comments.to_a # perform an entirely new sync query
+    ```
+
+    Now it does use the async query, however note that it doesn't
+    cause the association to be loaded.
+
+    *Jean Boussier*
+
+*   Fix eager loading for models without primary keys.
+
+    *Anmol Chopra*, *Matt Lawrence*, and *Jonathan Hefner*
+
+*   `rails db:schema:{dump,load}` now checks `ENV["SCHEMA_FORMAT"]` before 
config
+
+    Since `rails db:structure:{dump,load}` was deprecated there wasn't a simple
+    way to dump a schema to both SQL and Ruby formats. You can now do this with
+    an environment variable. For example:
+
+    ```
+    SCHEMA_FORMAT=sql rake db:schema:dump
+    ```
+
+    *Alex Ghiculescu*
+
+*   Fix Hstore deserialize regression.
+
+    *edsharp*
+
+
 ## Rails 7.0.3.1 (July 12, 2022) ##
 
 *   Change ActiveRecord::Coders::YAMLColumn default to safe_load
Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/associations/collection_association.rb 
new/lib/active_record/associations/collection_association.rb
--- old/lib/active_record/associations/collection_association.rb        
2022-07-12 19:30:22.000000000 +0200
+++ new/lib/active_record/associations/collection_association.rb        
2022-09-09 20:42:16.000000000 +0200
@@ -320,7 +320,6 @@
         #   * Otherwise, attributes should have the value found in the database
         def merge_target_lists(persisted, memory)
           return persisted if memory.empty?
-          return memory    if persisted.empty?
 
           persisted.map! do |record|
             if mem_record = memory.delete(record)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/associations/collection_proxy.rb 
new/lib/active_record/associations/collection_proxy.rb
--- old/lib/active_record/associations/collection_proxy.rb      2022-07-12 
19:30:22.000000000 +0200
+++ new/lib/active_record/associations/collection_proxy.rb      2022-09-09 
20:42:16.000000000 +0200
@@ -1108,7 +1108,7 @@
       ].flat_map { |klass|
         klass.public_instance_methods(false)
       } - self.public_instance_methods(false) - [:select] + [
-        :scoping, :values, :insert, :insert_all, :insert!, :insert_all!, 
:upsert, :upsert_all
+        :scoping, :values, :insert, :insert_all, :insert!, :insert_all!, 
:upsert, :upsert_all, :load_async
       ]
 
       delegate(*delegate_methods, to: :scope)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/associations/has_many_association.rb 
new/lib/active_record/associations/has_many_association.rb
--- old/lib/active_record/associations/has_many_association.rb  2022-07-12 
19:30:22.000000000 +0200
+++ new/lib/active_record/associations/has_many_association.rb  2022-09-09 
20:42:16.000000000 +0200
@@ -79,10 +79,13 @@
             scope.count(:all)
           end
 
-          # If there's nothing in the database and @target has no new records
-          # we are certain the current target is an empty array. This is a
-          # documented side-effect of the method that may avoid an extra 
SELECT.
-          loaded! if count == 0
+          # If there's nothing in the database, @target should only contain new
+          # records or be an empty array. This is a documented side-effect of
+          # the method that may avoid an extra SELECT.
+          if count == 0
+            target.select!(&:new_record?)
+            loaded!
+          end
 
           [association_scope.limit_value, count].compact.min
         end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/associations/join_dependency.rb 
new/lib/active_record/associations/join_dependency.rb
--- old/lib/active_record/associations/join_dependency.rb       2022-07-12 
19:30:22.000000000 +0200
+++ new/lib/active_record/associations/join_dependency.rb       2022-09-09 
20:42:16.000000000 +0200
@@ -252,35 +252,39 @@
               next
             end
 
-            key = aliases.column_alias(node, node.primary_key)
-            id = row[key]
-            if id.nil?
+            if node.primary_key
+              key = aliases.column_alias(node, node.primary_key)
+              id = row[key]
+            else
+              key = aliases.column_alias(node, 
node.reflection.join_primary_key.to_s)
+              id = nil # Avoid id-based model caching.
+            end
+
+            if row[key].nil?
               nil_association = ar_parent.association(node.reflection.name)
               nil_association.loaded!
               next
             end
 
-            model = seen[ar_parent][node][id]
-
-            if model
-              construct(model, node, row, seen, model_cache, 
strict_loading_value)
-            else
+            unless model = seen[ar_parent][node][id]
               model = construct_model(ar_parent, node, row, model_cache, id, 
strict_loading_value)
-
-              seen[ar_parent][node][id] = model
-              construct(model, node, row, seen, model_cache, 
strict_loading_value)
+              seen[ar_parent][node][id] = model if id
             end
+
+            construct(model, node, row, seen, model_cache, 
strict_loading_value)
           end
         end
 
         def construct_model(record, node, row, model_cache, id, 
strict_loading_value)
           other = record.association(node.reflection.name)
 
-          model = model_cache[node][id] ||=
-            node.instantiate(row, aliases.column_aliases(node)) do |m|
+          unless model = model_cache[node][id]
+            model = node.instantiate(row, aliases.column_aliases(node)) do |m|
               m.strict_loading! if strict_loading_value
               other.set_inverse_instance(m)
             end
+            model_cache[node][id] = model if id
+          end
 
           if node.reflection.collection?
             other.target.push(model)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/associations.rb 
new/lib/active_record/associations.rb
--- old/lib/active_record/associations.rb       2022-07-12 19:30:22.000000000 
+0200
+++ new/lib/active_record/associations.rb       2022-09-09 20:42:16.000000000 
+0200
@@ -628,15 +628,15 @@
       #
       # Note: To trigger remove callbacks, you must use +destroy+ / 
+destroy_all+ methods. For example:
       #
-      #   * <tt>firm.clients.destroy(client)</tt>
-      #   * <tt>firm.clients.destroy(*clients)</tt>
-      #   * <tt>firm.clients.destroy_all</tt>
+      # * <tt>firm.clients.destroy(client)</tt>
+      # * <tt>firm.clients.destroy(*clients)</tt>
+      # * <tt>firm.clients.destroy_all</tt>
       #
       # +delete+ / +delete_all+ methods like the following do *not* trigger 
remove callbacks:
       #
-      #   * <tt>firm.clients.delete(client)</tt>
-      #   * <tt>firm.clients.delete(*clients)</tt>
-      #   * <tt>firm.clients.delete_all</tt>
+      # * <tt>firm.clients.delete(client)</tt>
+      # * <tt>firm.clients.delete(*clients)</tt>
+      # * <tt>firm.clients.delete_all</tt>
       #
       # == Association extensions
       #
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/attribute_methods/time_zone_conversion.rb 
new/lib/active_record/attribute_methods/time_zone_conversion.rb
--- old/lib/active_record/attribute_methods/time_zone_conversion.rb     
2022-07-12 19:30:22.000000000 +0200
+++ new/lib/active_record/attribute_methods/time_zone_conversion.rb     
2022-09-09 20:42:16.000000000 +0200
@@ -19,6 +19,8 @@
 
           if value.is_a?(Hash)
             set_time_zone_without_conversion(super)
+          elsif value.is_a?(Range)
+            Range.new(user_input_in_time_zone(value.begin), 
user_input_in_time_zone(value.end), value.exclude_end?)
           elsif value.respond_to?(:in_time_zone)
             begin
               super(user_input_in_time_zone(value)) || super
@@ -40,6 +42,8 @@
               value.in_time_zone
             elsif value.respond_to?(:infinite?) && value.infinite?
               value
+            elsif value.is_a?(Range)
+              Range.new(convert_time_to_time_zone(value.begin), 
convert_time_to_time_zone(value.end), value.exclude_end?)
             else
               map_avoiding_infinite_recursion(value) { |v| 
convert_time_to_time_zone(v) }
             end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/coders/yaml_column.rb 
new/lib/active_record/coders/yaml_column.rb
--- old/lib/active_record/coders/yaml_column.rb 2022-07-12 19:30:22.000000000 
+0200
+++ new/lib/active_record/coders/yaml_column.rb 2022-09-09 20:42:16.000000000 
+0200
@@ -45,14 +45,20 @@
           raise ArgumentError, "Cannot serialize #{object_class}. Classes 
passed to `serialize` must have a 0 argument constructor."
         end
 
-        def yaml_load(payload)
-          if !ActiveRecord.use_yaml_unsafe_load
-            YAML.safe_load(payload, permitted_classes: 
ActiveRecord.yaml_column_permitted_classes, aliases: true)
-          else
-            if YAML.respond_to?(:unsafe_load)
+        if YAML.respond_to?(:unsafe_load)
+          def yaml_load(payload)
+            if ActiveRecord.use_yaml_unsafe_load
               YAML.unsafe_load(payload)
             else
+              YAML.safe_load(payload, permitted_classes: 
ActiveRecord.yaml_column_permitted_classes, aliases: true)
+            end
+          end
+        else
+          def yaml_load(payload)
+            if ActiveRecord.use_yaml_unsafe_load
               YAML.load(payload)
+            else
+              YAML.safe_load(payload, permitted_classes: 
ActiveRecord.yaml_column_permitted_classes, aliases: true)
             end
           end
         end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/connection_adapters/abstract_mysql_adapter.rb 
new/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
--- old/lib/active_record/connection_adapters/abstract_mysql_adapter.rb 
2022-07-12 19:30:22.000000000 +0200
+++ new/lib/active_record/connection_adapters/abstract_mysql_adapter.rb 
2022-09-09 20:42:16.000000000 +0200
@@ -139,7 +139,7 @@
       end
 
       def field_ordered_value(column, values) # :nodoc:
-        field = Arel::Nodes::NamedFunction.new("FIELD", [column, 
values.reverse])
+        field = Arel::Nodes::NamedFunction.new("FIELD", [column, 
values.reverse.map { |value| Arel::Nodes.build_quoted(value) }])
         Arel::Nodes::Descending.new(field)
       end
 
@@ -711,6 +711,10 @@
             options[:comment] = column.comment
           end
 
+          unless options.key?(:collation)
+            options[:collation] = column.collation
+          end
+
           unless options.key?(:auto_increment)
             options[:auto_increment] = column.auto_increment?
           end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/connection_adapters/mysql/schema_statements.rb 
new/lib/active_record/connection_adapters/mysql/schema_statements.rb
--- old/lib/active_record/connection_adapters/mysql/schema_statements.rb        
2022-07-12 19:30:22.000000000 +0200
+++ new/lib/active_record/connection_adapters/mysql/schema_statements.rb        
2022-09-09 20:42:16.000000000 +0200
@@ -159,7 +159,7 @@
           end
 
           def default_type(table_name, field_name)
-            match = create_table_info(table_name).match(/`#{field_name}` (.+) 
DEFAULT ('|\d+|[A-z]+)/)
+            match = create_table_info(table_name)&.match(/`#{field_name}` (.+) 
DEFAULT ('|\d+|[A-z]+)/)
             default_pre = match[2] if match
 
             if default_pre == "'"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/connection_adapters/postgresql/oid/hstore.rb 
new/lib/active_record/connection_adapters/postgresql/oid/hstore.rb
--- old/lib/active_record/connection_adapters/postgresql/oid/hstore.rb  
2022-07-12 19:30:22.000000000 +0200
+++ new/lib/active_record/connection_adapters/postgresql/oid/hstore.rb  
2022-09-09 20:42:16.000000000 +0200
@@ -26,7 +26,7 @@
                 raise(ArgumentError, ERROR % scanner.string.inspect)
               end
 
-              unless key = scanner.scan_until(/(?<!\\)(?=")/)
+              unless key = scanner.scan(/^(\\[\\"]|[^\\"])*?(?=")/)
                 raise(ArgumentError, ERROR % scanner.string.inspect)
               end
 
@@ -41,7 +41,7 @@
                   raise(ArgumentError, ERROR % scanner.string.inspect)
                 end
 
-                unless value = scanner.scan_until(/(?<!\\)(?=")/)
+                unless value = scanner.scan(/^(\\[\\"]|[^\\"])*?(?=")/)
                   raise(ArgumentError, ERROR % scanner.string.inspect)
                 end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/connection_adapters/postgresql/referential_integrity.rb 
new/lib/active_record/connection_adapters/postgresql/referential_integrity.rb
--- 
old/lib/active_record/connection_adapters/postgresql/referential_integrity.rb   
    2022-07-12 19:30:22.000000000 +0200
+++ 
new/lib/active_record/connection_adapters/postgresql/referential_integrity.rb   
    2022-09-09 20:42:16.000000000 +0200
@@ -45,8 +45,10 @@
             BEGIN
             FOR r IN (
               SELECT FORMAT(
-                'UPDATE pg_constraint SET convalidated=false WHERE conname = 
''%I''; ALTER TABLE %I VALIDATE CONSTRAINT %I;',
+                'UPDATE pg_constraint SET convalidated=false WHERE conname = 
''%I'' AND connamespace::regnamespace = ''%I''::regnamespace; ALTER TABLE %I.%I 
VALIDATE CONSTRAINT %I;',
                 constraint_name,
+                table_schema,
+                table_schema,
                 table_name,
                 constraint_name
               ) AS constraint_check
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/connection_adapters/postgresql_adapter.rb 
new/lib/active_record/connection_adapters/postgresql_adapter.rb
--- old/lib/active_record/connection_adapters/postgresql_adapter.rb     
2022-07-12 19:30:22.000000000 +0200
+++ new/lib/active_record/connection_adapters/postgresql_adapter.rb     
2022-09-09 20:42:16.000000000 +0200
@@ -1063,5 +1063,6 @@
         ActiveRecord::Type.register(:vector, OID::Vector, adapter: :postgresql)
         ActiveRecord::Type.register(:xml, OID::Xml, adapter: :postgresql)
     end
+    ActiveSupport.run_load_hooks(:active_record_postgresqladapter, 
PostgreSQLAdapter)
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/connection_adapters/sqlite3/schema_statements.rb 
new/lib/active_record/connection_adapters/sqlite3/schema_statements.rb
--- old/lib/active_record/connection_adapters/sqlite3/schema_statements.rb      
2022-07-12 19:30:22.000000000 +0200
+++ new/lib/active_record/connection_adapters/sqlite3/schema_statements.rb      
2022-09-09 20:42:16.000000000 +0200
@@ -21,7 +21,7 @@
               WHERE name = #{quote(row['name'])} AND type = 'index'
             SQL
 
-            
/\bON\b\s*"?(\w+?)"?\s*\((?<expressions>.+?)\)(?:\s*WHERE\b\s*(?<where>.+))?\z/i
 =~ index_sql
+            
/\bON\b\s*"?(\w+?)"?\s*\((?<expressions>.+?)\)(?:\s*WHERE\b\s*(?<where>.+))?(?:\s*\/\*.*\*\/)?\z/i
 =~ index_sql
 
             columns = exec_query("PRAGMA index_info(#{quote(row['name'])})", 
"SCHEMA").map do |col|
               col["name"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/connection_adapters/sqlite3_adapter.rb 
new/lib/active_record/connection_adapters/sqlite3_adapter.rb
--- old/lib/active_record/connection_adapters/sqlite3_adapter.rb        
2022-07-12 19:30:22.000000000 +0200
+++ new/lib/active_record/connection_adapters/sqlite3_adapter.rb        
2022-09-09 20:42:16.000000000 +0200
@@ -341,7 +341,7 @@
       end
 
       def get_database_version # :nodoc:
-        SQLite3Adapter::Version.new(query_value("SELECT sqlite_version(*)"))
+        SQLite3Adapter::Version.new(query_value("SELECT sqlite_version(*)", 
"SCHEMA"))
       end
 
       def check_version # :nodoc:
@@ -477,8 +477,13 @@
                  options[:rename][column.name.to_sym] ||
                  column.name) : column.name
 
+              if column.has_default?
+                type = lookup_cast_type_from_column(column)
+                default = type.deserialize(column.default)
+              end
+
               @definition.column(column_name, column.type,
-                limit: column.limit, default: column.default,
+                limit: column.limit, default: default,
                 precision: column.precision, scale: column.scale,
                 null: column.null, collation: column.collation,
                 primary_key: column_name == from_primary_key
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/delegated_type.rb 
new/lib/active_record/delegated_type.rb
--- old/lib/active_record/delegated_type.rb     2022-07-12 19:30:22.000000000 
+0200
+++ new/lib/active_record/delegated_type.rb     2022-09-09 20:42:16.000000000 
+0200
@@ -136,7 +136,7 @@
   #     end
   #   end
   #
-  # Now you can list a bunch of entries, call +Entry#title+, and polymorphism 
will provide you with the answer.
+  # Now you can list a bunch of entries, call <tt>Entry#title</tt>, and 
polymorphism will provide you with the answer.
   #
   # == Nested Attributes
   #
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/encryption/message.rb 
new/lib/active_record/encryption/message.rb
--- old/lib/active_record/encryption/message.rb 2022-07-12 19:30:22.000000000 
+0200
+++ new/lib/active_record/encryption/message.rb 2022-09-09 20:42:16.000000000 
+0200
@@ -7,7 +7,7 @@
     # * An encrypted payload
     # * A list of unencrypted headers
     #
-    # See +Encryptor#encrypt+
+    # See Encryptor#encrypt
     class Message
       attr_accessor :payload, :headers
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/encryption/properties.rb 
new/lib/active_record/encryption/properties.rb
--- old/lib/active_record/encryption/properties.rb      2022-07-12 
19:30:22.000000000 +0200
+++ new/lib/active_record/encryption/properties.rb      2022-09-09 
20:42:16.000000000 +0200
@@ -12,7 +12,7 @@
     #
     #   message.headers.encrypted_data_key # instead of message.headers[:k]
     #
-    # See +Properties#DEFAULT_PROPERTIES+, +Key+, +Message+
+    # See +Properties::DEFAULT_PROPERTIES+, Key, Message
     class Properties
       ALLOWED_VALUE_CLASSES = [String, ActiveRecord::Encryption::Message, 
Numeric, TrueClass, FalseClass, Symbol, NilClass]
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/gem_version.rb 
new/lib/active_record/gem_version.rb
--- old/lib/active_record/gem_version.rb        2022-07-12 19:30:22.000000000 
+0200
+++ new/lib/active_record/gem_version.rb        2022-09-09 20:42:16.000000000 
+0200
@@ -9,8 +9,8 @@
   module VERSION
     MAJOR = 7
     MINOR = 0
-    TINY  = 3
-    PRE   = "1"
+    TINY  = 4
+    PRE   = nil
 
     STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
   end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/middleware/database_selector.rb 
new/lib/active_record/middleware/database_selector.rb
--- old/lib/active_record/middleware/database_selector.rb       2022-07-12 
19:30:22.000000000 +0200
+++ new/lib/active_record/middleware/database_selector.rb       2022-09-09 
20:42:16.000000000 +0200
@@ -44,7 +44,7 @@
     #   config.active_record.database_resolver_context = MyResolver::MySession
     #
     # Note: If you are using `rails new my_app --minimal` you will need to call
-    # `require "active_support/core_ext/integer/time"` to load the libaries
+    # `require "active_support/core_ext/integer/time"` to load the libraries
     # for +Time+.
     class DatabaseSelector
       def initialize(app, resolver_klass = nil, context_klass = nil, options = 
{})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/model_schema.rb 
new/lib/active_record/model_schema.rb
--- old/lib/active_record/model_schema.rb       2022-07-12 19:30:22.000000000 
+0200
+++ new/lib/active_record/model_schema.rb       2022-09-09 20:42:16.000000000 
+0200
@@ -126,6 +126,27 @@
     # +:immutable_string+. This setting does not affect the behavior of
     # <tt>attribute :foo, :string</tt>. Defaults to false.
 
+    ##
+    # :singleton-method: inheritance_column
+    # :call-seq: inheritance_column
+    #
+    # The name of the table column which stores the class name on single-table
+    # inheritance situations.
+    #
+    # The default inheritance column name is +type+, which means it's a
+    # reserved word inside Active Record. To be able to use single-table
+    # inheritance with another column name, or to use the column +type+ in
+    # your own model for something else, you can set +inheritance_column+:
+    #
+    #     self.inheritance_column = 'zoink'
+
+    ##
+    # :singleton-method: inheritance_column=
+    # :call-seq: inheritance_column=(column)
+    #
+    # Defines the name of the table column which will store the class name on 
single-table
+    # inheritance situations.
+
     included do
       class_attribute :primary_key_prefix_type, instance_writer: false
       class_attribute :table_name_prefix, instance_writer: false, default: ""
@@ -136,15 +157,6 @@
       class_attribute :implicit_order_column, instance_accessor: false
       class_attribute :immutable_strings_by_default, instance_accessor: false
 
-      # Defines the name of the table column which will store the class name 
on single-table
-      # inheritance situations.
-      #
-      # The default inheritance column name is +type+, which means it's a
-      # reserved word inside Active Record. To be able to use single-table
-      # inheritance with another column name, or to use the column +type+ in
-      # your own model for something else, you can set +inheritance_column+:
-      #
-      #     self.inheritance_column = 'zoink'
       class_attribute :inheritance_column, instance_accessor: false, default: 
"type"
       singleton_class.class_eval do
         alias_method :_inheritance_column=, :inheritance_column=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/railtie.rb 
new/lib/active_record/railtie.rb
--- old/lib/active_record/railtie.rb    2022-07-12 19:30:22.000000000 +0200
+++ new/lib/active_record/railtie.rb    2022-09-09 20:42:16.000000000 +0200
@@ -78,6 +78,12 @@
       end
     end
 
+    initializer "active_record.postgresql_time_zone_aware_types" do
+      ActiveSupport.on_load(:active_record_postgresqladapter) do
+        ActiveRecord::Base.time_zone_aware_types << :timestamptz
+      end
+    end
+
     initializer "active_record.logger" do
       ActiveSupport.on_load(:active_record) { self.logger ||= ::Rails.logger }
     end
@@ -94,22 +100,6 @@
       end
     end
 
-    initializer "active_record.database_selector" do
-      if options = config.active_record.database_selector
-        resolver = config.active_record.database_resolver
-        operations = config.active_record.database_resolver_context
-        config.app_middleware.use ActiveRecord::Middleware::DatabaseSelector, 
resolver, operations, options
-      end
-    end
-
-    initializer "active_record.shard_selector" do
-      if resolver = config.active_record.shard_resolver
-        options = config.active_record.shard_selector || {}
-
-        config.app_middleware.use ActiveRecord::Middleware::ShardSelector, 
resolver, options
-      end
-    end
-
     initializer "Check for cache versioning support" do
       config.after_initialize do |app|
         ActiveSupport.on_load(:active_record) do
@@ -403,23 +393,5 @@
         end
       end
     end
-
-    initializer "active_record.use_yaml_unsafe_load" do |app|
-      config.after_initialize do
-        unless app.config.active_record.use_yaml_unsafe_load.nil?
-          ActiveRecord.use_yaml_unsafe_load =
-            app.config.active_record.use_yaml_unsafe_load
-        end
-      end
-    end
-
-    initializer "active_record.yaml_column_permitted_classes" do |app|
-      config.after_initialize do
-        unless app.config.active_record.yaml_column_permitted_classes.nil?
-          ActiveRecord.yaml_column_permitted_classes =
-            app.config.active_record.yaml_column_permitted_classes
-        end
-      end
-    end
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/railties/databases.rake 
new/lib/active_record/railties/databases.rake
--- old/lib/active_record/railties/databases.rake       2022-07-12 
19:30:22.000000000 +0200
+++ new/lib/active_record/railties/databases.rake       2022-09-09 
20:42:16.000000000 +0200
@@ -452,30 +452,32 @@
   end
 
   namespace :schema do
-    desc "Creates a database schema file (either db/schema.rb or 
db/structure.sql, depending on `config.active_record.schema_format`)"
+    desc "Creates a database schema file (either db/schema.rb or 
db/structure.sql, depending on `ENV['SCHEMA_FORMAT']` or 
`config.active_record.schema_format`)"
     task dump: :load_config do
       ActiveRecord::Base.configurations.configs_for(env_name: 
ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
         if db_config.schema_dump
           ActiveRecord::Base.establish_connection(db_config)
-          ActiveRecord::Tasks::DatabaseTasks.dump_schema(db_config)
+          schema_format = ENV.fetch("SCHEMA_FORMAT", 
ActiveRecord.schema_format).to_sym
+          ActiveRecord::Tasks::DatabaseTasks.dump_schema(db_config, 
schema_format)
         end
       end
 
       db_namespace["schema:dump"].reenable
     end
 
-    desc "Loads a database schema file (either db/schema.rb or 
db/structure.sql, depending on `config.active_record.schema_format`) into the 
database"
+    desc "Loads a database schema file (either db/schema.rb or 
db/structure.sql, depending on `ENV['SCHEMA_FORMAT']` or 
`config.active_record.schema_format`) into the database"
     task load: [:load_config, :check_protected_environments] do
       
ActiveRecord::Tasks::DatabaseTasks.load_schema_current(ActiveRecord.schema_format,
 ENV["SCHEMA"])
     end
 
     namespace :dump do
       ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
-        desc "Creates a database schema file (either db/schema.rb or 
db/structure.sql, depending on `config.active_record.schema_format`) for 
#{name} database"
+        desc "Creates a database schema file (either db/schema.rb or 
db/structure.sql, depending on `ENV['SCHEMA_FORMAT']` or 
`config.active_record.schema_format`) for #{name} database"
         task name => :load_config do
           db_config = ActiveRecord::Base.configurations.configs_for(env_name: 
ActiveRecord::Tasks::DatabaseTasks.env, name: name)
           ActiveRecord::Base.establish_connection(db_config)
-          ActiveRecord::Tasks::DatabaseTasks.dump_schema(db_config)
+          schema_format = ENV.fetch("SCHEMA_FORMAT", 
ActiveRecord.schema_format).to_sym
+          ActiveRecord::Tasks::DatabaseTasks.dump_schema(db_config, 
schema_format)
           db_namespace["schema:dump:#{name}"].reenable
         end
       end
@@ -483,11 +485,12 @@
 
     namespace :load do
       ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
-        desc "Loads a database schema file (either db/schema.rb or 
db/structure.sql, depending on `config.active_record.schema_format`) into the 
#{name} database"
+        desc "Loads a database schema file (either db/schema.rb or 
db/structure.sql, depending on `ENV['SCHEMA_FORMAT']` or 
`config.active_record.schema_format`) into the #{name} database"
         task name => [:load_config, :check_protected_environments] do
           original_db_config = ActiveRecord::Base.connection_db_config
           db_config = ActiveRecord::Base.configurations.configs_for(env_name: 
ActiveRecord::Tasks::DatabaseTasks.env, name: name)
-          ActiveRecord::Tasks::DatabaseTasks.load_schema(db_config)
+          schema_format = ENV.fetch("SCHEMA_FORMAT", 
ActiveRecord.schema_format).to_sym
+          ActiveRecord::Tasks::DatabaseTasks.load_schema(db_config, 
schema_format)
         ensure
           ActiveRecord::Base.establish_connection(original_db_config) if 
original_db_config
         end
@@ -545,12 +548,13 @@
       db_namespace["test:load_schema"].invoke
     end
 
-    # desc "Recreate the test database from an existent schema file (schema.rb 
or structure.sql, depending on `config.active_record.schema_format`)"
+    # desc "Recreate the test database from an existent schema file (schema.rb 
or structure.sql, depending on `ENV['SCHEMA_FORMAT']` or 
`config.active_record.schema_format`)"
     task load_schema: %w(db:test:purge) do
       should_reconnect = ActiveRecord::Base.connection_pool.active_connection?
       ActiveRecord::Schema.verbose = false
       ActiveRecord::Base.configurations.configs_for(env_name: "test").each do 
|db_config|
-        ActiveRecord::Tasks::DatabaseTasks.load_schema(db_config)
+        schema_format = ENV.fetch("SCHEMA_FORMAT", 
ActiveRecord.schema_format).to_sym
+        ActiveRecord::Tasks::DatabaseTasks.load_schema(db_config, 
schema_format)
       end
     ensure
       if should_reconnect
@@ -586,7 +590,8 @@
           should_reconnect = 
ActiveRecord::Base.connection_pool.active_connection?
           ActiveRecord::Schema.verbose = false
           db_config = ActiveRecord::Base.configurations.configs_for(env_name: 
"test", name: name)
-          ActiveRecord::Tasks::DatabaseTasks.load_schema(db_config)
+          schema_format = ENV.fetch("SCHEMA_FORMAT", 
ActiveRecord.schema_format).to_sym
+          ActiveRecord::Tasks::DatabaseTasks.load_schema(db_config, 
schema_format)
         ensure
           if should_reconnect
             
ActiveRecord::Base.establish_connection(ActiveRecord::Tasks::DatabaseTasks.env.to_sym)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/relation/query_methods.rb 
new/lib/active_record/relation/query_methods.rb
--- old/lib/active_record/relation/query_methods.rb     2022-07-12 
19:30:22.000000000 +0200
+++ new/lib/active_record/relation/query_methods.rb     2022-09-09 
20:42:16.000000000 +0200
@@ -10,10 +10,10 @@
   module QueryMethods
     include ActiveModel::ForbiddenAttributesProtection
 
-    # WhereChain objects act as placeholder for queries in which #where does 
not have any parameter.
-    # In this case, #where must be chained with #not to return a new relation.
+    # WhereChain objects act as placeholder for queries in which +where+ does 
not have any parameter.
+    # In this case, +where+ can be chained to return a new relation.
     class WhereChain
-      def initialize(scope)
+      def initialize(scope) # :nodoc:
         @scope = scope
       end
 
@@ -717,12 +717,26 @@
     # === no argument
     #
     # If no argument is passed, #where returns a new instance of WhereChain, 
that
-    # can be chained with #not to return a new relation that negates the where 
clause.
+    # can be chained with WhereChain#not, WhereChain#missing, or 
WhereChain#associated.
+    #
+    # Chaining with WhereChain#not:
     #
     #    User.where.not(name: "Jon")
     #    # SELECT * FROM users WHERE name != 'Jon'
     #
-    # See WhereChain for more details on #not.
+    # Chaining with WhereChain#associated:
+    #
+    #    Post.where.associated(:author)
+    #    # SELECT "posts".* FROM "posts"
+    #    # INNER JOIN "authors" ON "authors"."id" = "posts"."author_id"
+    #    # WHERE "authors"."id" IS NOT NULL
+    #
+    # Chaining with WhereChain#missing:
+    #
+    #    Post.where.missing(:author)
+    #    # SELECT "posts".* FROM "posts"
+    #    # LEFT OUTER JOIN "authors" ON "authors"."id" = "posts"."author_id"
+    #    # WHERE "authors"."id" IS NULL
     #
     # === blank condition
     #
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/relation.rb 
new/lib/active_record/relation.rb
--- old/lib/active_record/relation.rb   2022-07-12 19:30:22.000000000 +0200
+++ new/lib/active_record/relation.rb   2022-09-09 20:42:16.000000000 +0200
@@ -712,6 +712,7 @@
       @to_sql = @arel = @loaded = @should_eager_load = nil
       @offsets = @take = nil
       @cache_keys = nil
+      @cache_versions = nil
       @records = nil
       self
     end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/scoping/default.rb 
new/lib/active_record/scoping/default.rb
--- old/lib/active_record/scoping/default.rb    2022-07-12 19:30:22.000000000 
+0200
+++ new/lib/active_record/scoping/default.rb    2022-09-09 20:42:16.000000000 
+0200
@@ -146,11 +146,13 @@
               end
             elsif default_scopes.any?
               evaluate_default_scope do
-                default_scopes.inject(relation) do |default_scope, scope_obj|
+                default_scopes.inject(relation) do |combined_scope, scope_obj|
                   if execute_scope?(all_queries, scope_obj)
                     scope = scope_obj.scope.respond_to?(:to_proc) ? 
scope_obj.scope : scope_obj.scope.method(:call)
 
-                    default_scope.instance_exec(&scope) || default_scope
+                    combined_scope.instance_exec(&scope) || combined_scope
+                  else
+                    combined_scope
                   end
                 end
               end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/signed_id.rb 
new/lib/active_record/signed_id.rb
--- old/lib/active_record/signed_id.rb  2022-07-12 19:30:22.000000000 +0200
+++ new/lib/active_record/signed_id.rb  2022-09-09 20:42:16.000000000 +0200
@@ -97,7 +97,7 @@
 
     # Returns a signed id that's generated using a preconfigured 
+ActiveSupport::MessageVerifier+ instance.
     # This signed id is tamper proof, so it's safe to send in an email or 
otherwise share with the outside world.
-    # It can further more be set to expire (the default is not to expire), and 
scoped down with a specific purpose.
+    # It can furthermore be set to expire (the default is not to expire), and 
scoped down with a specific purpose.
     # If the expiration date has been exceeded before +find_signed+ is called, 
the id won't find the designated
     # record. If a purpose is set, this too must match.
     #
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/store.rb 
new/lib/active_record/store.rb
--- old/lib/active_record/store.rb      2022-07-12 19:30:22.000000000 +0200
+++ new/lib/active_record/store.rb      2022-09-09 20:42:16.000000000 +0200
@@ -59,7 +59,7 @@
   #   u.color = 'green'
   #   u.color_changed? # => true
   #   u.color_was # => 'black'
-  #   u.color_change # => ['black', 'red']
+  #   u.color_change # => ['black', 'green']
   #
   #   # Add additional accessors to an existing store through store_accessor
   #   class SuperUser < User
@@ -268,7 +268,7 @@
         end
 
         def dump(obj)
-          @coder.dump self.class.as_indifferent_hash(obj)
+          @coder.dump as_regular_hash(obj)
         end
 
         def load(yaml)
@@ -285,6 +285,11 @@
             ActiveSupport::HashWithIndifferentAccess.new
           end
         end
+
+        private
+          def as_regular_hash(obj)
+            obj.respond_to?(:to_hash) ? obj.to_hash : {}
+          end
       end
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/test_fixtures.rb 
new/lib/active_record/test_fixtures.rb
--- old/lib/active_record/test_fixtures.rb      2022-07-12 19:30:22.000000000 
+0200
+++ new/lib/active_record/test_fixtures.rb      2022-09-09 20:42:16.000000000 
+0200
@@ -137,7 +137,7 @@
         @connection_subscriber = 
ActiveSupport::Notifications.subscribe("!connection.active_record") do |_, _, 
_, _, payload|
           spec_name = payload[:spec_name] if payload.key?(:spec_name)
           shard = payload[:shard] if payload.key?(:shard)
-          setup_shared_connection_pool
+          setup_shared_connection_pool if 
ActiveRecord.legacy_connection_handling
 
           if spec_name
             begin
@@ -146,10 +146,14 @@
               connection = nil
             end
 
-            if connection && !@fixture_connections.include?(connection)
-              connection.begin_transaction joinable: false, _lazy: false
-              connection.pool.lock_thread = true if lock_threads
-              @fixture_connections << connection
+            if connection
+              setup_shared_connection_pool unless 
ActiveRecord.legacy_connection_handling
+
+              if !@fixture_connections.include?(connection)
+                connection.begin_transaction joinable: false, _lazy: false
+                connection.pool.lock_thread = true if lock_threads
+                @fixture_connections << connection
+              end
             end
           end
         end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record.rb new/lib/active_record.rb
--- old/lib/active_record.rb    2022-07-12 19:30:22.000000000 +0200
+++ new/lib/active_record.rb    2022-09-09 20:42:16.000000000 +0200
@@ -352,7 +352,7 @@
   # Application configurable array that provides additional permitted classes
   # to Psych safe_load in the YAML Coder
   singleton_class.attr_accessor :yaml_column_permitted_classes
-  self.yaml_column_permitted_classes = []
+  self.yaml_column_permitted_classes = [Symbol]
 
   def self.eager_load!
     super
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata        2022-07-12 19:30:22.000000000 +0200
+++ new/metadata        2022-09-09 20:42:16.000000000 +0200
@@ -1,14 +1,14 @@
 --- !ruby/object:Gem::Specification
 name: activerecord
 version: !ruby/object:Gem::Version
-  version: 7.0.3.1
+  version: 7.0.4
 platform: ruby
 authors:
 - David Heinemeier Hansson
 autorequire:
 bindir: bin
 cert_chain: []
-date: 2022-07-12 00:00:00.000000000 Z
+date: 2022-09-09 00:00:00.000000000 Z
 dependencies:
 - !ruby/object:Gem::Dependency
   name: activesupport
@@ -16,28 +16,28 @@
     requirements:
     - - '='
       - !ruby/object:Gem::Version
-        version: 7.0.3.1
+        version: 7.0.4
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - '='
       - !ruby/object:Gem::Version
-        version: 7.0.3.1
+        version: 7.0.4
 - !ruby/object:Gem::Dependency
   name: activemodel
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - '='
       - !ruby/object:Gem::Version
-        version: 7.0.3.1
+        version: 7.0.4
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - '='
       - !ruby/object:Gem::Version
-        version: 7.0.3.1
+        version: 7.0.4
 description: Databases on Rails. Build a persistent domain model by mapping 
database
   tables to Ruby classes. Strong conventions for associations, validations, 
aggregations,
   migrations, and testing come baked-in.
@@ -434,10 +434,10 @@
 - MIT
 metadata:
   bug_tracker_uri: https://github.com/rails/rails/issues
-  changelog_uri: 
https://github.com/rails/rails/blob/v7.0.3.1/activerecord/CHANGELOG.md
-  documentation_uri: https://api.rubyonrails.org/v7.0.3.1/
+  changelog_uri: 
https://github.com/rails/rails/blob/v7.0.4/activerecord/CHANGELOG.md
+  documentation_uri: https://api.rubyonrails.org/v7.0.4/
   mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
-  source_code_uri: https://github.com/rails/rails/tree/v7.0.3.1/activerecord
+  source_code_uri: https://github.com/rails/rails/tree/v7.0.4/activerecord
   rubygems_mfa_required: 'true'
 post_install_message:
 rdoc_options:

Reply via email to