activestorage 7.0.8.1 → 7.1.3.2

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 +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