activestorage 7.0.8.4 → 7.1.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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