activestorage 7.0.8.4 → 7.1.3.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +190 -288
  3. data/MIT-LICENSE +1 -1
  4. data/README.md +6 -6
  5. data/app/assets/javascripts/activestorage.esm.js +11 -7
  6. data/app/assets/javascripts/activestorage.js +12 -6
  7. data/app/controllers/active_storage/disk_controller.rb +4 -2
  8. data/app/controllers/active_storage/representations/proxy_controller.rb +1 -1
  9. data/app/controllers/concerns/active_storage/file_server.rb +4 -1
  10. data/app/javascript/activestorage/blob_record.js +4 -1
  11. data/app/javascript/activestorage/direct_upload.js +3 -2
  12. data/app/javascript/activestorage/index.js +3 -1
  13. data/app/javascript/activestorage/ujs.js +3 -3
  14. data/app/jobs/active_storage/analyze_job.rb +1 -1
  15. data/app/jobs/active_storage/mirror_job.rb +1 -1
  16. data/app/jobs/active_storage/purge_job.rb +1 -1
  17. data/app/jobs/active_storage/transform_job.rb +12 -0
  18. data/app/models/active_storage/attachment.rb +90 -15
  19. data/app/models/active_storage/blob/analyzable.rb +4 -3
  20. data/app/models/active_storage/blob/identifiable.rb +1 -0
  21. data/app/models/active_storage/blob/representable.rb +7 -3
  22. data/app/models/active_storage/blob/servable.rb +22 -0
  23. data/app/models/active_storage/blob.rb +31 -67
  24. data/app/models/active_storage/current.rb +0 -10
  25. data/app/models/active_storage/filename.rb +2 -0
  26. data/app/models/active_storage/named_variant.rb +21 -0
  27. data/app/models/active_storage/preview.rb +11 -4
  28. data/app/models/active_storage/variant.rb +10 -7
  29. data/app/models/active_storage/variant_record.rb +0 -2
  30. data/app/models/active_storage/variant_with_record.rb +21 -7
  31. data/app/models/active_storage/variation.rb +5 -3
  32. data/config/routes.rb +6 -4
  33. data/db/migrate/20170806125915_create_active_storage_tables.rb +1 -1
  34. data/lib/active_storage/analyzer/audio_analyzer.rb +16 -4
  35. data/lib/active_storage/analyzer/image_analyzer.rb +2 -0
  36. data/lib/active_storage/analyzer/video_analyzer.rb +3 -1
  37. data/lib/active_storage/analyzer.rb +2 -0
  38. data/lib/active_storage/attached/changes/create_many.rb +8 -3
  39. data/lib/active_storage/attached/changes/create_one.rb +45 -3
  40. data/lib/active_storage/attached/many.rb +5 -4
  41. data/lib/active_storage/attached/model.rb +72 -43
  42. data/lib/active_storage/attached/one.rb +5 -4
  43. data/lib/active_storage/attached.rb +2 -0
  44. data/lib/active_storage/deprecator.rb +7 -0
  45. data/lib/active_storage/engine.rb +11 -7
  46. data/lib/active_storage/fixture_set.rb +7 -1
  47. data/lib/active_storage/gem_version.rb +3 -3
  48. data/lib/active_storage/log_subscriber.rb +12 -0
  49. data/lib/active_storage/previewer.rb +8 -1
  50. data/lib/active_storage/reflection.rb +3 -3
  51. data/lib/active_storage/service/azure_storage_service.rb +2 -0
  52. data/lib/active_storage/service/disk_service.rb +2 -0
  53. data/lib/active_storage/service/gcs_service.rb +11 -20
  54. data/lib/active_storage/service/mirror_service.rb +10 -5
  55. data/lib/active_storage/service/s3_service.rb +2 -0
  56. data/lib/active_storage/service.rb +4 -2
  57. data/lib/active_storage/transformers/transformer.rb +2 -0
  58. data/lib/active_storage/version.rb +1 -1
  59. data/lib/active_storage.rb +19 -3
  60. metadata +16 -26
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f6b85af188d7d97bd6eca314f880feae2eaa5a601ab9d56913aa682cee59c745
4
- data.tar.gz: fff5aacc0c2ca287ba04a0ac21ac58e497a90fd1a760734decf62de3014ebdb3
3
+ metadata.gz: 10c31beefd192ae50216812e96dd7326c6d301f84f3a9ac4c42cf41369bfbd68
4
+ data.tar.gz: b744929e6b8cab0e2c2d2f834b453d538fad962a42b6b52f62ed74cf67fd000b
5
5
  SHA512:
6
- metadata.gz: dd7ac065a1308592dc65d95ad46ebfe98bd7b1b661ba676906e1290858a7473ea18a971e9250912af59f54a839f5e2728a285b5f83cd87f35df6a8c05a68b659
7
- data.tar.gz: 696e64f857204b0d9010966999335d34062d78f843a6420233f55abb374a4f5517e1184b833d02f0e9738b036d1f67f641f0ab0a31882e362264d0e104d9b647
6
+ metadata.gz: 93dcf40c82c8a7ecb7308c9e90c42a22816876cfe31c42304369a3979b4a6153a6296a8509d60a9e28bccdd0789f299ef3a734cb0b1b46ca1bd1cbd3c5f411ea
7
+ data.tar.gz: 56d0c210295b80a5bd0fa4145901652ddb3d1baede6a22993a294ae4031a378e99c45775e73caefa8890cf6a5bdafb224c215fc12ca33c20491a0cdf1b201b17
data/CHANGELOG.md CHANGED
@@ -1,429 +1,331 @@
1
- ## Rails 7.0.8.4 (June 04, 2024) ##
1
+ ## Rails 7.1.3.4 (June 04, 2024) ##
2
2
 
3
3
  * No changes.
4
4
 
5
5
 
6
- ## Rails 7.0.8.3 (May 17, 2024) ##
6
+ ## Rails 7.1.3.3 (May 16, 2024) ##
7
7
 
8
8
  * No changes.
9
9
 
10
10
 
11
- ## Rails 7.0.8.2 (May 16, 2024) ##
11
+ ## Rails 7.1.3.2 (February 21, 2024) ##
12
12
 
13
13
  * No changes.
14
14
 
15
15
 
16
- ## Rails 7.0.8.1 (February 21, 2024) ##
17
-
18
- * Disables the session in `ActiveStorage::Blobs::ProxyController`
19
- and `ActiveStorage::Representations::ProxyController`
20
- in order to allow caching by default in some CDNs as CloudFlare
21
-
22
- Fixes #44136
23
-
24
- *Bruno Prieto*
25
-
26
- ## Rails 7.0.8 (September 09, 2023) ##
16
+ ## Rails 7.1.3.1 (February 21, 2024) ##
27
17
 
28
18
  * No changes.
29
19
 
30
20
 
31
- ## Rails 7.0.7.2 (August 22, 2023) ##
21
+ ## Rails 7.1.3 (January 16, 2024) ##
32
22
 
33
- * No changes.
23
+ * Fix N+1 query when fetching preview images for non-image assets.
34
24
 
25
+ *Aaron Patterson & Justin Searls*
35
26
 
36
- ## Rails 7.0.7.1 (August 22, 2023) ##
27
+ * Fix all Active Storage database related models to respect
28
+ `ActiveRecord::Base.table_name_prefix` configuration.
37
29
 
38
- * No changes.
30
+ *Chedli Bourguiba*
39
31
 
32
+ * Fix `ActiveStorage::Representations::ProxyController` not returning the proper
33
+ preview image variant for previewable files.
40
34
 
41
- ## Rails 7.0.7 (August 09, 2023) ##
42
-
43
- * No changes.
35
+ *Chedli Bourguiba*
44
36
 
37
+ * Fix `ActiveStorage::Representations::ProxyController` to proxy untracked
38
+ variants.
45
39
 
46
- ## Rails 7.0.6 (June 29, 2023) ##
40
+ *Chedli Bourguiba*
47
41
 
48
- * Fix retrieving rotation value from FFmpeg on version 5.0+.
49
-
50
- In FFmpeg version 5.0+ the rotation value has been removed from tags.
51
- Instead the value can be found in side_data_list. Along with
52
- this update it's possible to have values of -90, -270 to denote the video
53
- has been rotated.
42
+ * Fix direct upload forms when submit button contains nested elements.
54
43
 
55
- *Haroon Ahmed*
44
+ *Marc Köhlbrugge*
56
45
 
46
+ * When using the `preprocessed: true` option, avoid enqueuing transform jobs
47
+ for blobs that are not representable.
57
48
 
58
- ## Rails 7.0.5.1 (June 26, 2023) ##
49
+ *Chedli Bourguiba*
59
50
 
60
- * No changes.
51
+ * Process preview image variant when calling `ActiveStorage::Preview#processed`.
52
+ For example, `attached_pdf.preview(:thumb).processed` will now immediately
53
+ generate the full-sized preview image and the `:thumb` variant of it.
54
+ Previously, the `:thumb` variant would not be generated until a further call
55
+ to e.g. `processed.url`.
61
56
 
57
+ *Chedli Bourguiba* and *Jonathan Hefner*
62
58
 
63
- ## Rails 7.0.5 (May 24, 2023) ##
59
+ * Prevent `ActiveRecord::StrictLoadingViolationError` when strict loading is
60
+ enabled and the variant of an Active Storage preview has already been
61
+ processed (for example, by calling `ActiveStorage::Preview#url`).
64
62
 
65
- * No changes.
66
-
67
-
68
- ## Rails 7.0.4.3 (March 13, 2023) ##
69
-
70
- * No changes.
71
-
72
-
73
- ## Rails 7.0.4.2 (January 24, 2023) ##
74
-
75
- * No changes.
76
-
77
-
78
- ## Rails 7.0.4.1 (January 17, 2023) ##
79
-
80
- * No changes.
81
-
82
-
83
- ## Rails 7.0.4 (September 09, 2022) ##
84
-
85
- * Fixes proxy downloads of files over 5MiB
63
+ *Jonathan Hefner*
86
64
 
87
- Previously, trying to view and/or download files larger than 5mb stored in
88
- services like S3 via proxy mode could return corrupted files at around
89
- 5.2mb or cause random halts in the download. Now,
90
- `ActiveStorage::Blobs::ProxyController` correctly handles streaming these
91
- larger files from the service to the client without any issues.
65
+ * Fix `preprocessed: true` option for named variants of previewable files.
92
66
 
93
- Fixes #44679
67
+ *Nico Wenterodt*
94
68
 
95
- *Felipe Raul*
96
69
 
97
- ## Rails 7.0.3.1 (July 12, 2022) ##
70
+ ## Rails 7.1.2 (November 10, 2023) ##
98
71
 
99
72
  * No changes.
100
73
 
101
74
 
102
- ## Rails 7.0.3 (May 09, 2022) ##
103
-
104
- * Don't stream responses in redirect mode
105
-
106
- Previously, both redirect mode and proxy mode streamed their
107
- responses which caused a new thread to be created, and could end
108
- up leaking connections in the connection pool. But since redirect
109
- mode doesn't actually send any data, it doesn't need to be
110
- streamed.
111
-
112
- *Luke Lau*
113
-
114
- ## Rails 7.0.2.4 (April 26, 2022) ##
75
+ ## Rails 7.1.1 (October 11, 2023) ##
115
76
 
116
77
  * No changes.
117
78
 
118
79
 
119
- ## Rails 7.0.2.3 (March 08, 2022) ##
120
-
121
- * Added image transformation validation via configurable allow-list.
122
-
123
- Variant now offers a configurable allow-list for
124
- transformation methods in addition to a configurable deny-list for arguments.
125
-
126
- [CVE-2022-21831]
127
-
128
-
129
- ## Rails 7.0.2.2 (February 11, 2022) ##
80
+ ## Rails 7.1.0 (October 05, 2023) ##
130
81
 
131
82
  * No changes.
132
83
 
133
- ## Rails 7.0.2.1 (February 11, 2022) ##
134
84
 
135
- * No changes.
136
-
137
-
138
- ## Rails 7.0.2 (February 08, 2022) ##
139
-
140
- * Revert the ability to pass `service_name` param to `DirectUploadsController` which was introduced
141
- in 7.0.0.
142
-
143
- That change caused a lot of problems to upgrade Rails applications so we decided to remove it
144
- while in work in a more backwards compatible implementation.
145
-
146
- *Gannon McGibbon*
147
-
148
- * Allow applications to opt out of precompiling Active Storage JavaScript assets.
149
-
150
- *jlestavel*
151
-
152
-
153
- ## Rails 7.0.1 (January 06, 2022) ##
85
+ ## Rails 7.1.0.rc2 (October 01, 2023) ##
154
86
 
155
87
  * No changes.
156
88
 
157
89
 
158
- ## Rails 7.0.0 (December 15, 2021) ##
90
+ ## Rails 7.1.0.rc1 (September 27, 2023) ##
159
91
 
160
- * Support transforming empty-ish `has_many_attached` value into `[]` (e.g. `[""]`).
92
+ * Add `expires_at` option to `ActiveStorage::Blob#signed_id`.
161
93
 
162
94
  ```ruby
163
- @user.highlights = [""]
164
- @user.highlights # => []
95
+ rails_blob_path(user.avatar, disposition: "attachment", expires_at: 30.minutes.from_now)
96
+ <%= image_tag rails_blob_path(user.avatar.variant(resize: "100x100"), expires_at: 30.minutes.from_now) %>
165
97
  ```
166
98
 
167
- *Sean Doyle*
168
-
169
-
170
- ## Rails 7.0.0.rc3 (December 14, 2021) ##
171
-
172
- * No changes.
173
-
174
-
175
- ## Rails 7.0.0.rc2 (December 14, 2021) ##
176
-
177
- * No changes.
178
-
179
- ## Rails 7.0.0.rc1 (December 06, 2021) ##
180
-
181
- * `Add ActiveStorage::Blob.compose` to concatenate multiple blobs.
182
-
183
- *Gannon McGibbon*
99
+ *Aki*
184
100
 
185
- * Setting custom metadata on blobs are now persisted to remote storage.
101
+ * Allow attaching File and Pathname when assigning attributes, e.g.
186
102
 
187
- *joshuamsager*
188
-
189
- * Support direct uploads to multiple services.
103
+ ```ruby
104
+ User.create!(avatar: File.open("image.jpg"))
105
+ User.create!(avatar: file_fixture("image.jpg"))
106
+ ```
190
107
 
191
- *Dmitry Tsepelev*
108
+ *Dorian Marié*
192
109
 
193
- * Invalid default content types are deprecated
194
110
 
195
- Blobs created with content_type `image/jpg`, `image/pjpeg`, `image/bmp`, `text/javascript` will now produce
196
- a deprecation warning, since these are not valid content types.
111
+ ## Rails 7.1.0.beta1 (September 13, 2023) ##
197
112
 
198
- These content types will be removed from the defaults in Rails 7.1.
113
+ * Disables the session in `ActiveStorage::Blobs::ProxyController`
114
+ and `ActiveStorage::Representations::ProxyController`
115
+ in order to allow caching by default in some CDNs as CloudFlare
199
116
 
200
- You can set `config.active_storage.silence_invalid_content_types_warning = true` to dismiss the warning.
117
+ Fixes #44136
201
118
 
202
- *Alex Ghiculescu*
119
+ *Bruno Prieto*
203
120
 
204
- ## Rails 7.0.0.alpha2 (September 15, 2021) ##
121
+ * Add `tags` to `ActiveStorage::Analyzer::AudioAnalyzer` output
205
122
 
206
- * No changes.
123
+ *Keaton Roux*
207
124
 
125
+ * Add an option to preprocess variants
208
126
 
209
- ## Rails 7.0.0.alpha1 (September 15, 2021) ##
127
+ ActiveStorage variants are processed on the fly when they are needed but
128
+ sometimes we're sure that they are accessed and want to processed them
129
+ upfront.
210
130
 
211
- * Emit Active Support instrumentation events from Active Storage analyzers.
131
+ `preprocessed` option is added when declaring variants.
212
132
 
213
- Fixes #42930
133
+ ```
134
+ class User < ApplicationRecord
135
+ has_one_attached :avatar do |attachable|
136
+ attachable.variant :thumb, resize_to_limit: [100, 100], preprocessed: true
137
+ end
138
+ end
139
+ ```
214
140
 
215
141
  *Shouichi Kamiya*
216
142
 
217
- * Add support for byte range requests
218
-
219
- *Tom Prats*
220
-
221
- * Attachments can be deleted after their association is no longer defined.
143
+ * Fix variants not included when eager loading multiple records containing a single attachment
222
144
 
223
- Fixes #42514
145
+ When using the `with_attached_#{name}` scope for a `has_one_attached` relation,
146
+ attachment variants were not eagerly loaded.
224
147
 
225
- *Don Sisco*
148
+ *Russell Porter*
226
149
 
227
- * Make `vips` the default variant processor for new apps.
150
+ * Allow an ActiveStorage attachment to be removed via a form post
228
151
 
229
- See the upgrade guide for instructions on converting from `mini_magick` to `vips`. `mini_magick` is
230
- not deprecated, existing apps can keep using it.
231
-
232
- *Breno Gazzola*
233
-
234
- * Deprecate `ActiveStorage::Current.host` in favor of `ActiveStorage::Current.url_options` which accepts
235
- a host, protocol and port.
152
+ Attachments can already be removed by updating the attachment to be nil such as:
153
+ ```ruby
154
+ User.find(params[:id]).update!(avatar: nil)
155
+ ```
236
156
 
237
- *Santiago Bartesaghi*
157
+ However, a form cannot post a nil param, it can only post an empty string. But, posting an
158
+ empty string would result in an `ActiveSupport::MessageVerifier::InvalidSignature: mismatched digest`
159
+ error being raised, because it's being treated as a signed blob id.
238
160
 
239
- * Allow using [IAM](https://cloud.google.com/storage/docs/access-control/signed-urls) when signing URLs with GCS.
161
+ Now, nil and an empty string are treated as a delete, which allows attachments to be removed via:
162
+ ```ruby
163
+ User.find(params[:id]).update!(params.require(:user).permit(:avatar))
240
164
 
241
- ```yaml
242
- gcs:
243
- service: GCS
244
- ...
245
- iam: true
246
165
  ```
247
166
 
248
- *RRethy*
249
-
250
- * OpenSSL constants are now used for Digest computations.
167
+ *Nate Matykiewicz*
251
168
 
252
- *Dirkjan Bussink*
169
+ * Remove mini_mime usage in favour of marcel.
253
170
 
254
- * Deprecate `config.active_storage.replace_on_assign_to_many`. Future versions of Rails
255
- will behave the same way as when the config is set to `true`.
171
+ We have two libraries that are have similar usage. This change removes
172
+ dependency on mini_mime and makes use of similar methods from marcel.
256
173
 
257
- *Santiago Bartesaghi*
174
+ *Vipul A M*
258
175
 
259
- * Remove deprecated methods: `build_after_upload`, `create_after_upload!` in favor of `create_and_upload!`,
260
- and `service_url` in favor of `url`.
261
-
262
- *Santiago Bartesaghi*
176
+ * Allow destroying active storage variants
263
177
 
264
- * Add support of `strict_loading_by_default` to `ActiveStorage::Representations` controllers.
178
+ ```ruby
179
+ User.first.avatar.variant(resize_to_limit: [100, 100]).destroy
180
+ ```
265
181
 
266
- *Anton Topchii*, *Andrew White*
182
+ *Shouichi Kamiya*, *Yuichiro NAKAGAWA*, *Ryohei UEDA*
267
183
 
268
- * Allow to detach an attachment when record is not persisted.
184
+ * Add `sample_rate` to `ActiveStorage::Analyzer::AudioAnalyzer` output
269
185
 
270
- *Jacopo Beschi*
186
+ *Matija Čupić*
271
187
 
272
- * Use libvips instead of ImageMagick to analyze images when `active_storage.variant_processor = vips`.
188
+ * Remove deprecated `purge` and `purge_later` methods from the attachments association.
273
189
 
274
- *Breno Gazzola*
190
+ *Rafael Mendonça França*
275
191
 
276
- * Add metadata value for presence of video channel in video blobs.
192
+ * Remove deprecated behavior when assigning to a collection of attachments.
277
193
 
278
- The `metadata` attribute of video blobs has a new boolean key named `video` that is set to
279
- `true` if the file has an video channel and `false` if it doesn't.
194
+ Instead of appending to the collection, the collection is now replaced.
280
195
 
281
- *Breno Gazzola*
196
+ *Rafael Mendonça França*
282
197
 
283
- * Deprecate usage of `purge` and `purge_later` from the association extension.
198
+ * Remove deprecated `ActiveStorage::Current#host` and `ActiveStorage::Current#host=` methods.
284
199
 
285
- *Jacopo Beschi*
200
+ *Rafael Mendonça França*
286
201
 
287
- * Passing extra parameters in `ActiveStorage::Blob#url` to S3 Client.
202
+ * Remove deprecated invalid default content types in Active Storage configurations.
288
203
 
289
- This allows calls of `ActiveStorage::Blob#url` to have more interaction with
290
- the S3 Presigner, enabling, amongst other options, custom S3 domain URL
291
- Generation.
204
+ *Rafael Mendonça França*
292
205
 
293
- ```ruby
294
- blob = ActiveStorage::Blob.last
206
+ * Add missing preview event to `ActiveStorage::LogSubscriber`
295
207
 
296
- blob.url # => https://<bucket-name>.s3.<region>.amazonaws.com/<key>
297
- blob.url(virtual_host: true) # => # => https://<bucket-name>/<key>
298
- ```
208
+ A `preview` event is being instrumented in `ActiveStorage::Previewer`.
209
+ However it was not added inside ActiveStorage's LogSubscriber class.
299
210
 
300
- *josegomezr*
211
+ This will allow to have logs for when a preview happens
212
+ in the same fashion as all other ActiveStorage events such as
213
+ `upload` and `download` inside `Rails.logger`.
301
214
 
302
- * Allow setting a `Cache-Control` on files uploaded to GCS.
215
+ *Chedli Bourguiba*
303
216
 
304
- ```yaml
305
- gcs:
306
- service: GCS
307
- ...
308
- cache_control: "public, max-age=3600"
309
- ```
217
+ * Fix retrieving rotation value from FFmpeg on version 5.0+.
310
218
 
311
- *maleblond*
219
+ In FFmpeg version 5.0+ the rotation value has been removed from tags.
220
+ Instead the value can be found in side_data_list. Along with
221
+ this update it's possible to have values of -90, -270 to denote the video
222
+ has been rotated.
312
223
 
313
- * The parameters sent to `ffmpeg` for generating a video preview image are now
314
- configurable under `config.active_storage.video_preview_arguments`.
224
+ *Haroon Ahmed*
315
225
 
316
- *Brendon Muir*
226
+ * Touch all corresponding model records after ActiveStorage::Blob is analyzed
317
227
 
318
- * The ActiveStorage video previewer will now use scene change detection to generate
319
- better preview images (rather than the previous default of using the first frame
320
- of the video). This change requires FFmpeg v3.4+.
228
+ This fixes a race condition where a record can be requested and have a cache entry built, before
229
+ the initial `analyze_later` completes, which will not be invalidated until something else
230
+ updates the record. This also invalidates cache entries when a blob is re-analyzed, which
231
+ is helpful if a bug is fixed in an analyzer or a new analyzer is added.
321
232
 
322
- *Jonathan Hefner*
233
+ *Nate Matykiewicz*
323
234
 
324
- * Add support for ActiveStorage expiring URLs.
235
+ * Add ability to use pre-defined variants when calling `preview` or
236
+ `representation` on an attachment.
325
237
 
326
238
  ```ruby
327
- rails_blob_path(user.avatar, disposition: "attachment", expires_in: 30.minutes)
239
+ class User < ActiveRecord::Base
240
+ has_one_attached :file do |attachable|
241
+ attachable.variant :thumb, resize_to_limit: [100, 100]
242
+ end
243
+ end
328
244
 
329
- <%= image_tag rails_blob_path(user.avatar.variant(resize: "100x100"), expires_in: 30.minutes) %>
245
+ <%= image_tag user.file.representation(:thumb) %>
330
246
  ```
331
247
 
332
- If you want to set default expiration time for ActiveStorage URLs throughout your application, set `config.active_storage.urls_expire_in`.
248
+ *Richard Böhme*
333
249
 
334
- *aki77*
250
+ * Method `attach` always returns the attachments except when the record
251
+ is persisted, unchanged, and saving it fails, in which case it returns `nil`.
335
252
 
336
- * Allow to purge an attachment when record is not persisted for `has_many_attached`.
337
-
338
- *Jacopo Beschi*
339
-
340
- * Add `with_all_variant_records` method to eager load all variant records on an attachment at once.
341
- `with_attached_image` scope now eager loads variant records if using variant tracking.
342
-
343
- *Alex Ghiculescu*
344
-
345
- * Add metadata value for presence of audio channel in video blobs.
346
-
347
- The `metadata` attribute of video blobs has a new boolean key named `audio` that is set to
348
- `true` if the file has an audio channel and `false` if it doesn't.
349
-
350
- *Breno Gazzola*
351
-
352
- * Adds analyzer for audio files.
353
-
354
- *Breno Gazzola*
355
-
356
- * Respect Active Record's primary_key_type in Active Storage migrations.
357
-
358
- *fatkodima*
253
+ *Santiago Bartesaghi*
359
254
 
360
- * Allow `expires_in` for ActiveStorage signed ids.
255
+ * Fixes multiple `attach` calls within transaction not uploading files correctly.
361
256
 
362
- *aki77*
257
+ In the following example, the code failed to upload all but the last file to the configured service.
258
+ ```ruby
259
+ ActiveRecord::Base.transaction do
260
+ user.attachments.attach({
261
+ content_type: "text/plain",
262
+ filename: "dummy.txt",
263
+ io: ::StringIO.new("dummy"),
264
+ })
265
+ user.attachments.attach({
266
+ content_type: "text/plain",
267
+ filename: "dummy2.txt",
268
+ io: ::StringIO.new("dummy2"),
269
+ })
270
+ end
363
271
 
364
- * Allow to purge an attachment when record is not persisted for `has_one_attached`.
272
+ assert_equal 2, user.attachments.count
273
+ assert user.attachments.first.service.exist?(user.attachments.first.key) # Fails
274
+ ```
365
275
 
366
- *Jacopo Beschi*
276
+ This was addressed by keeping track of the subchanges pending upload, and uploading them
277
+ once the transaction is committed.
367
278
 
368
- * Add a load hook called `active_storage_variant_record` (providing `ActiveStorage::VariantRecord`)
369
- to allow for overriding aspects of the `ActiveStorage::VariantRecord` class. This makes
370
- `ActiveStorage::VariantRecord` consistent with `ActiveStorage::Blob` and `ActiveStorage::Attachment`
371
- that already have load hooks.
279
+ Fixes #41661
372
280
 
373
- *Brendon Muir*
281
+ *Santiago Bartesaghi*, *Bruno Vezoli*, *Juan Roig*, *Abhay Nikam*
374
282
 
375
- * `ActiveStorage::PreviewError` is raised when a previewer is unable to generate a preview image.
283
+ * Raise an exception if `config.active_storage.service` is not set.
376
284
 
377
- *Alex Robbin*
285
+ If Active Storage is configured and `config.active_storage.service` is not
286
+ set in the respective environment's configuration file, then an exception
287
+ is raised with a meaningful message when attempting to use Active Storage.
378
288
 
379
- * Add `ActiveStorage::Streaming` module that can be included in a controller to get access to `#send_blob_stream`,
380
- which wraps the new `ActionController::Base#send_stream` method to stream a blob from cloud storage:
289
+ *Ghouse Mohamed*
381
290
 
382
- ```ruby
383
- class MyPublicBlobsController < ApplicationController
384
- include ActiveStorage::SetBlob, ActiveStorage::Streaming
291
+ * Fixes proxy downloads of files over 5mb
385
292
 
386
- def show
387
- http_cache_forever(public: true) do
388
- send_blob_stream @blob, disposition: params[:disposition]
389
- end
390
- end
391
- end
392
- ```
293
+ Previously, trying to view and/or download files larger than 5mb stored in
294
+ services like S3 via proxy mode could return corrupted files at around
295
+ 5.2mb or cause random halts in the download. Now,
296
+ `ActiveStorage::Blobs::ProxyController` correctly handles streaming these
297
+ larger files from the service to the client without any issues.
393
298
 
394
- *DHH*
299
+ Fixes #44679
395
300
 
396
- * Add ability to use pre-defined variants.
301
+ *Felipe Raul*
397
302
 
398
- ```ruby
399
- class User < ActiveRecord::Base
400
- has_one_attached :avatar do |attachable|
401
- attachable.variant :thumb, resize: "100x100"
402
- attachable.variant :medium, resize: "300x300", monochrome: true
403
- end
404
- end
303
+ * Saving attachment(s) to a record returns the blob/blobs object
405
304
 
406
- class Gallery < ActiveRecord::Base
407
- has_many_attached :photos do |attachable|
408
- attachable.variant :thumb, resize: "100x100"
409
- attachable.variant :medium, resize: "300x300", monochrome: true
410
- end
411
- end
305
+ Previously, saving attachments did not return the blob/blobs that
306
+ were attached. Now, saving attachments to a record with `#attach`
307
+ method returns the blob or array of blobs that were attached to
308
+ the record. If it fails to save the attachment(s), then it returns
309
+ `false`.
412
310
 
413
- <%= image_tag user.avatar.variant(:thumb) %>
414
- ```
311
+ *Ghouse Mohamed*
415
312
 
416
- *fatkodima*
313
+ * Don't stream responses in redirect mode
417
314
 
418
- * After setting `config.active_storage.resolve_model_to_route = :rails_storage_proxy`
419
- `rails_blob_path` and `rails_representation_path` will generate proxy URLs by default.
315
+ Previously, both redirect mode and proxy mode streamed their
316
+ responses which caused a new thread to be created, and could end
317
+ up leaking connections in the connection pool. But since redirect
318
+ mode doesn't actually send any data, it doesn't need to be
319
+ streamed.
420
320
 
421
- *Ali Ismayilov*
321
+ *Luke Lau*
422
322
 
423
- * Declare `ActiveStorage::FixtureSet` and `ActiveStorage::FixtureSet.blob` to
424
- improve fixture integration.
323
+ * Safe for direct upload on Libraries or Frameworks
425
324
 
426
- *Sean Doyle*
325
+ Enable the use of custom headers during direct uploads, which allows for
326
+ the inclusion of Authorization bearer tokens or other forms of authorization
327
+ tokens through headers.
427
328
 
329
+ *Radamés Roriz*
428
330
 
429
- Please check [6-1-stable](https://github.com/rails/rails/blob/6-1-stable/activestorage/CHANGELOG.md) for previous changes.
331
+ Please check [7-0-stable](https://github.com/rails/rails/blob/7-0-stable/activestorage/CHANGELOG.md) for previous changes.
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2017-2022 David Heinemeier Hansson, Basecamp
1
+ Copyright (c) David Heinemeier Hansson, 37signals LLC
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the