Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package rubygem-activestorage-8.0 for 
openSUSE:Factory checked in at 2025-10-10 17:12:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-activestorage-8.0 (Old)
 and      /work/SRC/openSUSE:Factory/.rubygem-activestorage-8.0.new.5300 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "rubygem-activestorage-8.0"

Fri Oct 10 17:12:18 2025 rev:5 rq:1310576 version:8.0.3

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/rubygem-activestorage-8.0/rubygem-activestorage-8.0.changes
      2025-08-22 17:50:58.107860487 +0200
+++ 
/work/SRC/openSUSE:Factory/.rubygem-activestorage-8.0.new.5300/rubygem-activestorage-8.0.changes
    2025-10-10 17:13:51.732638133 +0200
@@ -1,0 +2,6 @@
+Tue Sep 23 00:16:34 UTC 2025 - Marcus Rueckert <[email protected]>
+
+- Update to version 8.0.3:
+  https://rubyonrails.org/2025/9/22/Rails-Version-8-0-3-has-been-released
+
+-------------------------------------------------------------------

Old:
----
  activestorage-8.0.2.1.gem

New:
----
  activestorage-8.0.3.gem

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

Other differences:
------------------
++++++ rubygem-activestorage-8.0.spec ++++++
--- /var/tmp/diff_new_pack.KFnbQy/_old  2025-10-10 17:13:53.048693530 +0200
+++ /var/tmp/diff_new_pack.KFnbQy/_new  2025-10-10 17:13:53.048693530 +0200
@@ -24,7 +24,7 @@
 #
 
 Name:           rubygem-activestorage-8.0
-Version:        8.0.2.1
+Version:        8.0.3
 Release:        0
 %define mod_name activestorage
 %define mod_full_name %{mod_name}-%{version}

++++++ activestorage-8.0.2.1.gem -> activestorage-8.0.3.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CHANGELOG.md new/CHANGELOG.md
--- old/CHANGELOG.md    1980-01-02 01:00:00.000000000 +0100
+++ new/CHANGELOG.md    1980-01-02 01:00:00.000000000 +0100
@@ -1,15 +1,21 @@
-## Rails 8.0.2.1 (August 13, 2025) ##
+## Rails 8.0.3 (September 22, 2025) ##
 
-    Remove dangerous transformations
+*   Address deprecation of `Aws::S3::Object#upload_stream` in 
`ActiveStorage::Service::S3Service`.
 
-    [CVE-2025-24293]
+    *Joshua Young*
 
-    *Zack Deveau*
+*   Fix `config.active_storage.touch_attachment_records` to work with eager 
loading.
+
+    *fatkodima*
 
-## Rails 8.0.2 (March 12, 2025) ##
 
-*   No changes.
+## Rails 8.0.2.1 (August 13, 2025) ##
+
+*   Remove dangerous transformations
 
+    [CVE-2025-24293]
+
+    *Zack Deveau*
 
 ## Rails 8.0.2 (March 12, 2025) ##
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/README.md new/README.md
--- old/README.md       1980-01-02 01:00:00.000000000 +0100
+++ new/README.md       1980-01-02 01:00:00.000000000 +0100
@@ -203,6 +203,6 @@
 
 * https://github.com/rails/rails/issues
 
-Feature requests should be discussed on the rails-core mailing list here:
+Feature requests should be discussed on the rubyonrails-core forum here:
 
 * https://discuss.rubyonrails.org/c/rubyonrails-core
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/app/controllers/active_storage/disk_controller.rb 
new/app/controllers/active_storage/disk_controller.rb
--- old/app/controllers/active_storage/disk_controller.rb       1980-01-02 
01:00:00.000000000 +0100
+++ new/app/controllers/active_storage/disk_controller.rb       1980-01-02 
01:00:00.000000000 +0100
@@ -25,13 +25,13 @@
         named_disk_service(token[:service_name]).upload token[:key], 
request.body, checksum: token[:checksum]
         head :no_content
       else
-        head :unprocessable_entity
+        head ActionDispatch::Constants::UNPROCESSABLE_CONTENT
       end
     else
       head :not_found
     end
   rescue ActiveStorage::IntegrityError
-    head :unprocessable_entity
+    head ActionDispatch::Constants::UNPROCESSABLE_CONTENT
   end
 
   private
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/app/models/active_storage/blob/representable.rb 
new/app/models/active_storage/blob/representable.rb
--- old/app/models/active_storage/blob/representable.rb 1980-01-02 
01:00:00.000000000 +0100
+++ new/app/models/active_storage/blob/representable.rb 1980-01-02 
01:00:00.000000000 +0100
@@ -25,12 +25,78 @@
   #
   #   <%= image_tag Current.user.avatar.variant(resize_to_limit: [100, 100]) %>
   #
-  # This will create a URL for that specific blob with that specific variant, 
which the ActiveStorage::RepresentationsController
-  # can then produce on-demand.
+  # This will create a URL for that specific blob with that specific variant, 
which the ActiveStorage::Representations::ProxyController
+  # or ActiveStorage::Representations::RedirectController can then produce 
on-demand.
   #
   # Raises ActiveStorage::InvariableError if the variant processor cannot
   # transform the blob. To determine whether a blob is variable, call
   # ActiveStorage::Blob#variable?.
+  #
+  # ==== Options
+  #
+  # Options are defined by the {image_processing 
gem}[https://github.com/janko/image_processing],
+  # and depend on which variant processor you are using:
+  # {Vips}[https://github.com/janko/image_processing/blob/master/doc/vips.md] 
or
+  # 
{MiniMagick}[https://github.com/janko/image_processing/blob/master/doc/minimagick.md].
+  # However, both variant processors support the following options:
+  #
+  # [+:resize_to_limit+]
+  #   Downsizes the image to fit within the specified dimensions while 
retaining
+  #   the original aspect ratio. Will only resize the image if it's larger than
+  #   the specified dimensions.
+  #
+  #       user.avatar.variant(resize_to_limit: [100, 100])
+  #
+  # [+:resize_to_fit+]
+  #   Resizes the image to fit within the specified dimensions while retaining
+  #   the original aspect ratio. Will downsize the image if it's larger than 
the
+  #   specified dimensions or upsize if it's smaller.
+  #
+  #       user.avatar.variant(resize_to_fit: [100, 100])
+  #
+  # [+:resize_to_fill+]
+  #   Resizes the image to fill the specified dimensions while retaining the
+  #   original aspect ratio. If necessary, will crop the image in the larger
+  #   dimension.
+  #
+  #       user.avatar.variant(resize_to_fill: [100, 100])
+  #
+  # [+:resize_and_pad+]
+  #   Resizes the image to fit within the specified dimensions while retaining
+  #   the original aspect ratio. If necessary, will pad the remaining area with
+  #   transparent color if source image has alpha channel, black otherwise.
+  #
+  #       user.avatar.variant(resize_and_pad: [100, 100])
+  #
+  # [+:crop+]
+  #   Extracts an area from an image. The first two arguments are the left and
+  #   top edges of area to extract, while the last two arguments are the width
+  #   and height of the area to extract.
+  #
+  #       user.avatar.variant(crop: [20, 50, 300, 300])
+  #
+  # [+:rotate+]
+  #   Rotates the image by the specified angle.
+  #
+  #       user.avatar.variant(rotate: 90)
+  #
+  # Some options, including those listed above, can accept additional
+  # processor-specific values which can be passed as a trailing hash:
+  #
+  #     <!-- Vips supports configuring `crop` for many of its transformations 
-->
+  #     <%= image_tag user.avatar.variant(resize_to_fill: [100, 100, { crop: 
:centre }]) %>
+  #
+  # If migrating an existing application between MiniMagick and Vips, you will
+  # need to update processor-specific options:
+  #
+  #     <!-- MiniMagick -->
+  #     <%= image_tag user.avatar.variant(resize_to_limit: [100, 100], format: 
:jpeg,
+  #           sampling_factor: "4:2:0", strip: true, interlace: "JPEG", 
colorspace: "sRGB", quality: 80) %>
+  #
+  #     <!-- Vips -->
+  #     <%= image_tag user.avatar.variant(resize_to_limit: [100, 100], format: 
:jpeg,
+  #           saver: { subsample_mode: "on", strip: true, interlace: true, 
quality: 80 }) %>
+  #
   def variant(transformations)
     if variable?
       variant_class.new(self, 
ActiveStorage::Variation.wrap(transformations).default_to(default_variant_transformations))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/app/models/active_storage/variant.rb 
new/app/models/active_storage/variant.rb
--- old/app/models/active_storage/variant.rb    1980-01-02 01:00:00.000000000 
+0100
+++ new/app/models/active_storage/variant.rb    1980-01-02 01:00:00.000000000 
+0100
@@ -22,15 +22,15 @@
 # Note that to create a variant it's necessary to download the entire blob 
file from the service. Because of this process,
 # you also want to be considerate about when the variant is actually 
processed. You shouldn't be processing variants inline
 # in a template, for example. Delay the processing to an on-demand controller, 
like the one provided in
-# ActiveStorage::RepresentationsController.
+# ActiveStorage::Representations::ProxyController and 
ActiveStorage::Representations::RedirectController.
 #
 # To refer to such a delayed on-demand variant, simply link to the variant 
through the resolved route provided
 # by Active Storage like so:
 #
 #   <%= image_tag Current.user.avatar.variant(resize_to_limit: [100, 100]) %>
 #
-# This will create a URL for that specific blob with that specific variant, 
which the ActiveStorage::RepresentationsController
-# can then produce on-demand.
+# This will create a URL for that specific blob with that specific variant, 
which the ActiveStorage::Representations::ProxyController
+# or ActiveStorage::Representations::RedirectController can then produce 
on-demand.
 #
 # When you do want to actually produce the variant needed, call +processed+. 
This will check that the variant
 # has already been processed and uploaded to the service, and, if so, just 
return that. Otherwise it will perform
@@ -74,11 +74,11 @@
     "variants/#{blob.key}/#{OpenSSL::Digest::SHA256.hexdigest(variation.key)}"
   end
 
-  # Returns the URL of the blob variant on the service. See 
{ActiveStorage::Blob#url} for details.
+  # Returns the URL of the blob variant on the service. See 
ActiveStorage::Blob#url for details.
   #
   # Use <tt>url_for(variant)</tt> (or the implied form, like <tt>link_to 
variant</tt> or <tt>redirect_to variant</tt>) to get the stable URL
-  # for a variant that points to the ActiveStorage::RepresentationsController, 
which in turn will use this +service_call+ method
-  # for its redirection.
+  # for a variant that points to the 
ActiveStorage::Representations::ProxyController or 
ActiveStorage::Representations::RedirectController,
+  # which in turn will use this +service_call+ method for its redirection.
   def url(expires_in: ActiveStorage.service_urls_expire_in, disposition: 
:inline)
     service.url key, expires_in: expires_in, disposition: disposition, 
filename: filename, content_type: content_type
   end
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_storage/attached/model.rb 
new/lib/active_storage/attached/model.rb
--- old/lib/active_storage/attached/model.rb    1980-01-02 01:00:00.000000000 
+0100
+++ new/lib/active_storage/attached/model.rb    1980-01-02 01:00:00.000000000 
+0100
@@ -61,8 +61,8 @@
       # There is no column defined on the model side, Active Storage takes
       # care of the mapping between your records and the attachment.
       #
-      # Under the covers, this relationship is implemented as a +has_one+ 
association to a
-      # ActiveStorage::Attachment record and a +has_one-through+ association 
to a
+      # Under the covers, this relationship is implemented as a +has_one+ 
association to an
+      # ActiveStorage::Attachment record and a +has_one-through+ association 
to an
       # ActiveStorage::Blob record. These associations are available as 
+avatar_attachment+
       # and +avatar_blob+. But you shouldn't need to work with these 
associations directly in
       # most circumstances.
@@ -163,8 +163,8 @@
       # There are no columns defined on the model side, Active Storage takes
       # care of the mapping between your records and the attachments.
       #
-      # Under the covers, this relationship is implemented as a +has_many+ 
association to a
-      # ActiveStorage::Attachment record and a +has_many-through+ association 
to a
+      # Under the covers, this relationship is implemented as a +has_many+ 
association to an
+      # ActiveStorage::Attachment record and a +has_many-through+ association 
to an
       # ActiveStorage::Blob record. These associations are available as 
+photos_attachments+
       # and +photos_blobs+. But you shouldn't need to work with these 
associations directly in
       # most circumstances.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_storage/engine.rb 
new/lib/active_storage/engine.rb
--- old/lib/active_storage/engine.rb    1980-01-02 01:00:00.000000000 +0100
+++ new/lib/active_storage/engine.rb    1980-01-02 01:00:00.000000000 +0100
@@ -84,6 +84,10 @@
     end
 
     initializer "active_storage.configs" do
+      config.before_initialize do |app|
+        ActiveStorage.touch_attachment_records = 
app.config.active_storage.touch_attachment_records != false
+      end
+
       config.after_initialize do |app|
         ActiveStorage.logger            = app.config.active_storage.logger || 
Rails.logger
         ActiveStorage.variant_processor = 
app.config.active_storage.variant_processor || :mini_magick
@@ -112,7 +116,6 @@
         ActiveStorage.variable_content_types = 
app.config.active_storage.variable_content_types || []
         ActiveStorage.web_image_content_types = 
app.config.active_storage.web_image_content_types || []
         ActiveStorage.content_types_to_serve_as_binary = 
app.config.active_storage.content_types_to_serve_as_binary || []
-        ActiveStorage.touch_attachment_records = 
app.config.active_storage.touch_attachment_records != false
         ActiveStorage.service_urls_expire_in = 
app.config.active_storage.service_urls_expire_in || 5.minutes
         ActiveStorage.urls_expire_in = app.config.active_storage.urls_expire_in
         ActiveStorage.content_types_allowed_inline = 
app.config.active_storage.content_types_allowed_inline || []
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_storage/fixture_set.rb 
new/lib/active_storage/fixture_set.rb
--- old/lib/active_storage/fixture_set.rb       1980-01-02 01:00:00.000000000 
+0100
+++ new/lib/active_storage/fixture_set.rb       1980-01-02 01:00:00.000000000 
+0100
@@ -50,7 +50,7 @@
     # by ActiveSupport::Testing::FileFixtures.file_fixture, and upload
     # the file to the Service
     #
-    # === Examples
+    # ==== Examples
     #
     #   # tests/fixtures/active_storage/blobs.yml
     #   second_thumbnail_blob: <%= ActiveStorage::FixtureSet.blob(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_storage/gem_version.rb 
new/lib/active_storage/gem_version.rb
--- old/lib/active_storage/gem_version.rb       1980-01-02 01:00:00.000000000 
+0100
+++ new/lib/active_storage/gem_version.rb       1980-01-02 01:00:00.000000000 
+0100
@@ -9,8 +9,8 @@
   module VERSION
     MAJOR = 8
     MINOR = 0
-    TINY  = 2
-    PRE   = "1"
+    TINY  = 3
+    PRE   = nil
 
     STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
   end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_storage/service/s3_service.rb 
new/lib/active_storage/service/s3_service.rb
--- old/lib/active_storage/service/s3_service.rb        1980-01-02 
01:00:00.000000000 +0100
+++ new/lib/active_storage/service/s3_service.rb        1980-01-02 
01:00:00.000000000 +0100
@@ -16,6 +16,7 @@
 
     def initialize(bucket:, upload: {}, public: false, **options)
       @client = Aws::S3::Resource.new(**options)
+      @transfer_manager = Aws::S3::TransferManager.new(client: @client.client) 
if defined?(Aws::S3::TransferManager)
       @bucket = @client.bucket(bucket)
 
       @multipart_upload_threshold = upload.delete(:multipart_threshold) || 
100.megabytes
@@ -100,7 +101,8 @@
     def compose(source_keys, destination_key, filename: nil, content_type: 
nil, disposition: nil, custom_metadata: {})
       content_disposition = content_disposition_with(type: disposition, 
filename: filename) if disposition && filename
 
-      object_for(destination_key).upload_stream(
+      upload_stream(
+        key: destination_key,
         content_type: content_type,
         content_disposition: content_disposition,
         part_size: MINIMUM_UPLOAD_PART_SIZE,
@@ -116,6 +118,14 @@
     end
 
     private
+      def upload_stream(key:, **options, &block)
+        if @transfer_manager
+          @transfer_manager.upload_stream(key: key, bucket: bucket.name, 
**options, &block)
+        else
+          object_for(key).upload_stream(**options, &block)
+        end
+      end
+
       def private_url(key, expires_in:, filename:, disposition:, 
content_type:, **client_opts)
         object_for(key).presigned_url :get, expires_in: expires_in.to_i,
           response_content_disposition: content_disposition_with(type: 
disposition, filename: filename),
@@ -126,7 +136,6 @@
         object_for(key).public_url(**client_opts)
       end
 
-
       MAXIMUM_UPLOAD_PARTS_COUNT = 10000
       MINIMUM_UPLOAD_PART_SIZE   = 5.megabytes
 
@@ -139,12 +148,18 @@
       def upload_with_multipart(key, io, content_type: nil, 
content_disposition: nil, custom_metadata: {})
         part_size = [ io.size.fdiv(MAXIMUM_UPLOAD_PARTS_COUNT).ceil, 
MINIMUM_UPLOAD_PART_SIZE ].max
 
-        object_for(key).upload_stream(content_type: content_type, 
content_disposition: content_disposition, part_size: part_size, metadata: 
custom_metadata, **upload_options) do |out|
+        upload_stream(
+          key: key,
+          content_type: content_type,
+          content_disposition: content_disposition,
+          part_size: part_size,
+          metadata: custom_metadata,
+          **upload_options
+        ) do |out|
           IO.copy_stream(io, out)
         end
       end
 
-
       def object_for(key)
         bucket.object(key)
       end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata        1980-01-02 01:00:00.000000000 +0100
+++ new/metadata        1980-01-02 01:00:00.000000000 +0100
@@ -1,7 +1,7 @@
 --- !ruby/object:Gem::Specification
 name: activestorage
 version: !ruby/object:Gem::Version
-  version: 8.0.2.1
+  version: 8.0.3
 platform: ruby
 authors:
 - David Heinemeier Hansson
@@ -15,56 +15,56 @@
     requirements:
     - - '='
       - !ruby/object:Gem::Version
-        version: 8.0.2.1
+        version: 8.0.3
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - '='
       - !ruby/object:Gem::Version
-        version: 8.0.2.1
+        version: 8.0.3
 - !ruby/object:Gem::Dependency
   name: actionpack
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - '='
       - !ruby/object:Gem::Version
-        version: 8.0.2.1
+        version: 8.0.3
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - '='
       - !ruby/object:Gem::Version
-        version: 8.0.2.1
+        version: 8.0.3
 - !ruby/object:Gem::Dependency
   name: activejob
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - '='
       - !ruby/object:Gem::Version
-        version: 8.0.2.1
+        version: 8.0.3
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - '='
       - !ruby/object:Gem::Version
-        version: 8.0.2.1
+        version: 8.0.3
 - !ruby/object:Gem::Dependency
   name: activerecord
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - '='
       - !ruby/object:Gem::Version
-        version: 8.0.2.1
+        version: 8.0.3
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - '='
       - !ruby/object:Gem::Version
-        version: 8.0.2.1
+        version: 8.0.3
 - !ruby/object:Gem::Dependency
   name: marcel
   requirement: !ruby/object:Gem::Requirement
@@ -189,10 +189,10 @@
 - MIT
 metadata:
   bug_tracker_uri: https://github.com/rails/rails/issues
-  changelog_uri: 
https://github.com/rails/rails/blob/v8.0.2.1/activestorage/CHANGELOG.md
-  documentation_uri: https://api.rubyonrails.org/v8.0.2.1/
+  changelog_uri: 
https://github.com/rails/rails/blob/v8.0.3/activestorage/CHANGELOG.md
+  documentation_uri: https://api.rubyonrails.org/v8.0.3/
   mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
-  source_code_uri: https://github.com/rails/rails/tree/v8.0.2.1/activestorage
+  source_code_uri: https://github.com/rails/rails/tree/v8.0.3/activestorage
   rubygems_mfa_required: 'true'
 rdoc_options: []
 require_paths:

Reply via email to