activestorage 7.0.8.1 → 7.1.3.2

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