activestorage 6.1.7 → 7.0.0.alpha1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activestorage might be problematic. Click here for more details.

Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +127 -282
  3. data/MIT-LICENSE +1 -1
  4. data/README.md +25 -11
  5. data/app/assets/javascripts/activestorage.esm.js +844 -0
  6. data/app/assets/javascripts/activestorage.js +257 -376
  7. data/app/controllers/active_storage/base_controller.rb +1 -10
  8. data/app/controllers/active_storage/blobs/proxy_controller.rb +14 -4
  9. data/app/controllers/active_storage/blobs/redirect_controller.rb +6 -4
  10. data/app/controllers/active_storage/representations/base_controller.rb +5 -1
  11. data/app/controllers/active_storage/representations/proxy_controller.rb +6 -4
  12. data/app/controllers/active_storage/representations/redirect_controller.rb +6 -4
  13. data/app/controllers/concerns/active_storage/set_blob.rb +6 -2
  14. data/app/controllers/concerns/active_storage/set_current.rb +3 -3
  15. data/app/controllers/concerns/active_storage/streaming.rb +65 -0
  16. data/app/javascript/activestorage/ujs.js +1 -1
  17. data/app/models/active_storage/attachment.rb +35 -2
  18. data/app/models/active_storage/blob/representable.rb +7 -5
  19. data/app/models/active_storage/blob.rb +26 -27
  20. data/app/models/active_storage/current.rb +12 -2
  21. data/app/models/active_storage/preview.rb +6 -4
  22. data/app/models/active_storage/record.rb +1 -1
  23. data/app/models/active_storage/variant.rb +6 -9
  24. data/app/models/active_storage/variant_record.rb +2 -0
  25. data/app/models/active_storage/variant_with_record.rb +9 -5
  26. data/app/models/active_storage/variation.rb +3 -3
  27. data/config/routes.rb +10 -10
  28. data/db/migrate/20170806125915_create_active_storage_tables.rb +11 -2
  29. data/db/update_migrate/20190112182829_add_service_name_to_active_storage_blobs.rb +0 -4
  30. data/db/update_migrate/20191206030411_create_active_storage_variant_records.rb +1 -3
  31. data/lib/active_storage/analyzer/audio_analyzer.rb +65 -0
  32. data/lib/active_storage/analyzer/image_analyzer/image_magick.rb +39 -0
  33. data/lib/active_storage/analyzer/image_analyzer/vips.rb +49 -0
  34. data/lib/active_storage/analyzer/image_analyzer.rb +2 -30
  35. data/lib/active_storage/analyzer/video_analyzer.rb +26 -11
  36. data/lib/active_storage/analyzer.rb +8 -4
  37. data/lib/active_storage/attached/changes/create_many.rb +7 -3
  38. data/lib/active_storage/attached/changes/create_one.rb +1 -1
  39. data/lib/active_storage/attached/changes/create_one_of_many.rb +1 -1
  40. data/lib/active_storage/attached/changes/delete_many.rb +1 -1
  41. data/lib/active_storage/attached/changes/delete_one.rb +1 -1
  42. data/lib/active_storage/attached/changes/detach_many.rb +18 -0
  43. data/lib/active_storage/attached/changes/detach_one.rb +24 -0
  44. data/lib/active_storage/attached/changes/purge_many.rb +27 -0
  45. data/lib/active_storage/attached/changes/purge_one.rb +27 -0
  46. data/lib/active_storage/attached/changes.rb +7 -1
  47. data/lib/active_storage/attached/many.rb +27 -15
  48. data/lib/active_storage/attached/model.rb +31 -5
  49. data/lib/active_storage/attached/one.rb +32 -27
  50. data/lib/active_storage/downloader.rb +2 -2
  51. data/lib/active_storage/engine.rb +28 -16
  52. data/lib/active_storage/fixture_set.rb +76 -0
  53. data/lib/active_storage/gem_version.rb +4 -4
  54. data/lib/active_storage/previewer/video_previewer.rb +0 -2
  55. data/lib/active_storage/previewer.rb +4 -4
  56. data/lib/active_storage/reflection.rb +12 -2
  57. data/lib/active_storage/service/azure_storage_service.rb +1 -1
  58. data/lib/active_storage/service/configurator.rb +1 -1
  59. data/lib/active_storage/service/disk_service.rb +13 -18
  60. data/lib/active_storage/service/gcs_service.rb +91 -7
  61. data/lib/active_storage/service/mirror_service.rb +1 -1
  62. data/lib/active_storage/service/registry.rb +1 -1
  63. data/lib/active_storage/service/s3_service.rb +4 -4
  64. data/lib/active_storage/service.rb +3 -3
  65. data/lib/active_storage/transformers/image_processing_transformer.rb +1 -66
  66. data/lib/active_storage/transformers/transformer.rb +1 -1
  67. data/lib/active_storage.rb +3 -292
  68. metadata +32 -24
  69. data/app/controllers/concerns/active_storage/set_headers.rb +0 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c4f14b62a36e4ea3aa6a39126b4ca8b9f9e1316864d769d4e69b049be47c0c37
4
- data.tar.gz: 0add8a6660b7c94ba0b86845ef1fdf657856cb7c7ec64e684e1ff760c9298c45
3
+ metadata.gz: c267f362a238a90819d7e7cd23917d10970b03acd2956d099ea6aeb26c2ce192
4
+ data.tar.gz: c669f3a56d9b6f3f5a08e89cfb49725d65d1abf0d7e933c50b6a3fc12c7d9a6d
5
5
  SHA512:
6
- metadata.gz: ad61f809370fb457cca4a07e4ffabe97bfd5a1a83901fb11d65da4473b748e4ba34238aca9aa0a40b658856a3e892824de709f57360d78a4c0b34295fc63836d
7
- data.tar.gz: b76216dae6aa1f2844125a5a753b5ab7e008a07c4a027640766f2a03097f423267418b25ca2602027a547a107fc4107bd602ab4bdf2678e59731b4c571e309b8
6
+ metadata.gz: cf96bff832fd497ff5475a475c2b8d5d22b12243d4126bd973ec28c670f9fb57e2e787c073c2ebf4edd89fb3a1d2fbd703a47e0f9a76490389b22e7e9483e2bd
7
+ data.tar.gz: a405ab97196c4b8c60f284b3e7c664ed30756a08abfe2d1f5d50c43630ec5cfd46d71dcd533e545151312f16459aec534a55f533be95aa6ee47021d29ce30466
data/CHANGELOG.md CHANGED
@@ -1,25 +1,14 @@
1
- ## Rails 6.1.7 (September 09, 2022) ##
1
+ ## Rails 7.0.0.alpha1 (September 15, 2021) ##
2
2
 
3
- * Respect Active Record's primary_key_type in Active Storage migrations. Backported from 7.0.
3
+ * Emit Active Support instrumentation events from Active Storage analyzers.
4
4
 
5
- *fatkodima*
6
-
7
- ## Rails 6.1.6.1 (July 12, 2022) ##
8
-
9
- * No changes.
10
-
11
-
12
- ## Rails 6.1.6 (May 09, 2022) ##
13
-
14
- * No changes.
15
-
16
-
17
- ## Rails 6.1.5.1 (April 26, 2022) ##
5
+ Fixes #42930
18
6
 
19
- * No changes.
7
+ *Shouichi Kamiya*
20
8
 
9
+ * Add support for byte range requests
21
10
 
22
- ## Rails 6.1.5 (March 09, 2022) ##
11
+ *Tom Prats*
23
12
 
24
13
  * Attachments can be deleted after their association is no longer defined.
25
14
 
@@ -27,350 +16,206 @@
27
16
 
28
17
  *Don Sisco*
29
18
 
19
+ * Make `vips` the default variant processor for new apps.
30
20
 
31
- ## Rails 6.1.4.7 (March 08, 2022) ##
32
-
33
- * Added image transformation validation via configurable allow-list.
34
-
35
- Variant now offers a configurable allow-list for
36
- transformation methods in addition to a configurable deny-list for arguments.
37
-
38
- [CVE-2022-21831]
39
-
40
-
41
- ## Rails 6.1.4.6 (February 11, 2022) ##
42
-
43
- * No changes.
44
-
45
-
46
- ## Rails 6.1.4.5 (February 11, 2022) ##
47
-
48
- * No changes.
49
-
50
-
51
- ## Rails 6.1.4.4 (December 15, 2021) ##
52
-
53
- * No changes.
54
-
55
-
56
- ## Rails 6.1.4.3 (December 14, 2021) ##
57
-
58
- * No changes.
59
-
60
-
61
- ## Rails 6.1.4.2 (December 14, 2021) ##
62
-
63
- * No changes.
64
-
65
-
66
- ## Rails 6.1.4.1 (August 19, 2021) ##
67
-
68
- * No changes.
69
-
70
-
71
- ## Rails 6.1.4 (June 24, 2021) ##
21
+ See the upgrade guide for instructions on converting from `mini_magick` to `vips`. `mini_magick` is
22
+ not deprecated, existing apps can keep using it.
72
23
 
73
- * The parameters sent to `ffmpeg` for generating a video preview image are now
74
- configurable under `config.active_storage.video_preview_arguments`.
75
-
76
- *Brendon Muir*
24
+ *Breno Gazzola*
77
25
 
78
- * Fix Active Storage update task when running in an engine.
26
+ * Deprecate `ActiveStorage::Current.host` in favor of `ActiveStorage::Current.url_options` which accepts
27
+ a host, protocol and port.
79
28
 
80
- *Justin Malčić*
29
+ *Santiago Bartesaghi*
81
30
 
82
- * Don't raise an error if the mime type is not recognized.
31
+ * Allow using [IAM](https://cloud.google.com/storage/docs/access-control/signed-urls) when signing URLs with GCS.
83
32
 
84
- Fixes #41777.
85
-
86
- *Alex Ghiculescu*
87
-
88
- * `ActiveStorage::PreviewError` is raised when a previewer is unable to generate a preview image.
89
-
90
- *Alex Robbin*
91
-
92
- * respond with 404 given invalid variation key when asking for representations.
93
-
94
- *George Claghorn*
95
-
96
- * `Blob` creation shouldn't crash if no service selected.
97
-
98
- *Alex Ghiculescu*
99
-
100
-
101
- ## Rails 6.1.3.2 (May 05, 2021) ##
102
-
103
- * No changes.
104
-
105
-
106
- ## Rails 6.1.3.1 (March 26, 2021) ##
107
-
108
- * Marcel is upgraded to version 1.0.0 to avoid a dependency on GPL-licensed
109
- mime types data.
110
-
111
- *George Claghorn*
112
-
113
-
114
- ## Rails 6.1.3 (February 17, 2021) ##
115
-
116
- * No changes.
117
-
118
-
119
- ## Rails 6.1.2.1 (February 10, 2021) ##
33
+ ```yaml
34
+ gcs:
35
+ service: GCS
36
+ ...
37
+ iam: true
38
+ ```
120
39
 
121
- * No changes.
40
+ *RRethy*
122
41
 
42
+ * OpenSSL constants are now used for Digest computations.
123
43
 
124
- ## Rails 6.1.2 (February 09, 2021) ##
44
+ *Dirkjan Bussink*
125
45
 
126
- * No changes.
46
+ * Deprecate `config.active_storage.replace_on_assign_to_many`. Future versions of Rails
47
+ will behave the same way as when the config is set to `true`.
127
48
 
49
+ *Santiago Bartesaghi*
128
50
 
129
- ## Rails 6.1.1 (January 07, 2021) ##
51
+ * Remove deprecated methods: `build_after_upload`, `create_after_upload!` in favor of `create_and_upload!`,
52
+ and `service_url` in favor of `url`.
130
53
 
131
- * Fix S3 multipart uploads when threshold is larger than file.
54
+ *Santiago Bartesaghi*
132
55
 
133
- *Matt Muller*
56
+ * Add support of `strict_loading_by_default` to `ActiveStorage::Representations` controllers.
134
57
 
58
+ *Anton Topchii*, *Andrew White*
135
59
 
136
- ## Rails 6.1.0 (December 09, 2020) ##
60
+ * Allow to detach an attachment when record is not persisted.
137
61
 
138
- * Change default queue name of the analysis (`:active_storage_analysis`) and
139
- purge (`:active_storage_purge`) jobs to be the job adapter's default (`:default`).
62
+ *Jacopo Beschi*
140
63
 
141
- *Rafael Mendonça França*
64
+ * Use libvips instead of ImageMagick to analyze images when `active_storage.variant_processor = vips`.
142
65
 
143
- * Implement `strict_loading` on ActiveStorage associations.
66
+ *Breno Gazzola*
144
67
 
145
- *David Angulo*
68
+ * Add metadata value for presence of video channel in video blobs.
146
69
 
147
- * Remove deprecated support to pass `:combine_options` operations to `ActiveStorage::Transformers::ImageProcessing`.
70
+ The `metadata` attribute of video blobs has a new boolean key named `video` that is set to
71
+ `true` if the file has an video channel and `false` if it doesn't.
148
72
 
149
- *Rafael Mendonça França*
73
+ *Breno Gazzola*
150
74
 
151
- * Remove deprecated `ActiveStorage::Transformers::MiniMagickTransformer`.
75
+ * Deprecate usage of `purge` and `purge_later` from the association extension.
152
76
 
153
- *Rafael Mendonça França*
77
+ *Jacopo Beschi*
154
78
 
155
- * Remove deprecated `config.active_storage.queue`.
79
+ * Passing extra parameters in `ActiveStorage::Blob#url` to S3 Client.
156
80
 
157
- *Rafael Mendonça França*
81
+ This allows calls of `ActiveStorage::Blob#url` to have more interaction with
82
+ the S3 Presigner, enabling, amongst other options, custom S3 domain URL
83
+ Generation.
158
84
 
159
- * Remove deprecated `ActiveStorage::Downloading`.
85
+ ```ruby
86
+ blob = ActiveStorage::Blob.last
160
87
 
161
- *Rafael Mendonça França*
88
+ blob.url # => https://<bucket-name>.s3.<region>.amazonaws.com/<key>
89
+ blob.url(virtual_host: true) # => # => https://<bucket-name>/<key>
90
+ ```
162
91
 
163
- * Add per-environment configuration support
92
+ *josegomezr*
164
93
 
165
- *Pietro Moro*
94
+ * Allow setting a `Cache-Control` on files uploaded to GCS.
166
95
 
167
- * The Poppler PDF previewer renders a preview image using the original
168
- document's crop box rather than its media box, hiding print margins. This
169
- matches the behavior of the MuPDF previewer.
96
+ ```yaml
97
+ gcs:
98
+ service: GCS
99
+ ...
100
+ cache_control: "public, max-age=3600"
101
+ ```
170
102
 
171
- *Vincent Robert*
103
+ *maleblond*
172
104
 
173
- * Touch parent model when an attachment is purged.
105
+ * The parameters sent to `ffmpeg` for generating a video preview image are now
106
+ configurable under `config.active_storage.video_preview_arguments`.
174
107
 
175
- *Víctor Pérez Rodríguez*
108
+ *Brendon Muir*
176
109
 
177
- * Files can now be served by proxying them from the underlying storage service
178
- instead of redirecting to a signed service URL. Use the
179
- `rails_storage_proxy_path` and `_url` helpers to proxy an attached file:
110
+ * The ActiveStorage video previewer will now use scene change detection to generate
111
+ better preview images (rather than the previous default of using the first frame
112
+ of the video). This change requires FFmpeg v3.4+.
180
113
 
181
- ```erb
182
- <%= image_tag rails_storage_proxy_path(@user.avatar) %>
183
- ```
114
+ *Jonathan Hefner*
184
115
 
185
- To proxy by default, set `config.active_storage.resolve_model_to_route`:
116
+ * Add support for ActiveStorage expiring URLs.
186
117
 
187
118
  ```ruby
188
- # Proxy attached files instead.
189
- config.active_storage.resolve_model_to_route = :rails_storage_proxy
190
- ```
191
-
192
- ```erb
193
- <%= image_tag @user.avatar %>
194
- ```
195
-
196
- To redirect to a signed service URL when the default file serving strategy
197
- is set to proxying, use the `rails_storage_redirect_path` and `_url` helpers:
119
+ rails_blob_path(user.avatar, disposition: "attachment", expires_in: 30.minutes)
198
120
 
199
- ```erb
200
- <%= image_tag rails_storage_redirect_path(@user.avatar) %>
121
+ <%= image_tag rails_blob_path(user.avatar.variant(resize: "100x100"), expires_in: 30.minutes) %>
201
122
  ```
202
123
 
203
- *Jonathan Fleckenstein*
204
-
205
- * Add `config.active_storage.web_image_content_types` to allow applications
206
- to add content types (like `image/webp`) in which variants can be processed,
207
- instead of letting those images be converted to the fallback PNG format.
208
-
209
- *Jeroen van Haperen*
210
-
211
- * Add support for creating variants of `WebP` images out of the box.
124
+ If you want to set default expiration time for ActiveStorage URLs throughout your application, set `config.active_storage.urls_expire_in`.
212
125
 
213
- *Dino Maric*
126
+ *aki77*
214
127
 
215
- * Only enqueue analysis jobs for blobs with non-null analyzer classes.
128
+ * Allow to purge an attachment when record is not persisted for `has_many_attached`.
216
129
 
217
- *Gannon McGibbon*
130
+ *Jacopo Beschi*
218
131
 
219
- * Previews are created on the same service as the original blob.
132
+ * Add `with_all_variant_records` method to eager load all variant records on an attachment at once.
133
+ `with_attached_image` scope now eager loads variant records if using variant tracking.
220
134
 
221
- *Peter Zhu*
135
+ *Alex Ghiculescu*
222
136
 
223
- * Remove unused `disposition` and `content_type` query parameters for `DiskService`.
137
+ * Add metadata value for presence of audio channel in video blobs.
224
138
 
225
- *Peter Zhu*
139
+ The `metadata` attribute of video blobs has a new boolean key named `audio` that is set to
140
+ `true` if the file has an audio channel and `false` if it doesn't.
226
141
 
227
- * Use `DiskController` for both public and private files.
142
+ *Breno Gazzola*
228
143
 
229
- `DiskController` is able to handle multiple services by adding a
230
- `service_name` field in the generated URL in `DiskService`.
144
+ * Adds analyzer for audio files.
231
145
 
232
- *Peter Zhu*
146
+ *Breno Gazzola*
233
147
 
234
- * Variants are tracked in the database to avoid existence checks in the storage service.
148
+ * Respect Active Record's primary_key_type in Active Storage migrations.
235
149
 
236
- *George Claghorn*
150
+ *fatkodima*
237
151
 
238
- * Deprecate `service_url` methods in favour of `url`.
152
+ * Allow `expires_in` for ActiveStorage signed ids.
239
153
 
240
- Deprecate `Variant#service_url` and `Preview#service_url` to instead use
241
- `#url` method to be consistent with `Blob`.
154
+ *aki77*
242
155
 
243
- *Peter Zhu*
156
+ * Allow to purge an attachment when record is not persisted for `has_one_attached`.
244
157
 
245
- * Permanent URLs for public storage blobs.
158
+ *Jacopo Beschi*
246
159
 
247
- Services can be configured in `config/storage.yml` with a new key
248
- `public: true | false` to indicate whether a service holds public
249
- blobs or private blobs. Public services will always return a permanent URL.
160
+ * Add a load hook called `active_storage_variant_record` (providing `ActiveStorage::VariantRecord`)
161
+ to allow for overriding aspects of the `ActiveStorage::VariantRecord` class. This makes
162
+ `ActiveStorage::VariantRecord` consistent with `ActiveStorage::Blob` and `ActiveStorage::Attachment`
163
+ that already have load hooks.
250
164
 
251
- Deprecates `Blob#service_url` in favor of `Blob#url`.
165
+ *Brendon Muir*
252
166
 
253
- *Peter Zhu*
167
+ * `ActiveStorage::PreviewError` is raised when a previewer is unable to generate a preview image.
254
168
 
255
- * Make services aware of configuration names.
169
+ *Alex Robbin*
256
170
 
257
- *Gannon McGibbon*
171
+ * Add `ActiveStorage::Streaming` module that can be included in a controller to get access to `#send_blob_stream`,
172
+ which wraps the new `ActionController::Base#send_stream` method to stream a blob from cloud storage:
258
173
 
259
- * The `Content-Type` header is set on image variants when they're uploaded to third-party storage services.
174
+ ```ruby
175
+ class MyPublicBlobsController < ApplicationController
176
+ include ActiveStorage::SetBlob, ActiveStorage::Streaming
177
+
178
+ def show
179
+ http_cache_forever(public: true) do
180
+ send_blob_stream @blob, disposition: params[:disposition]
181
+ end
182
+ end
183
+ end
184
+ ```
260
185
 
261
- *Kyle Ribordy*
186
+ *DHH*
262
187
 
263
- * Allow storage services to be configured per attachment.
188
+ * Add ability to use pre-defined variants.
264
189
 
265
190
  ```ruby
266
191
  class User < ActiveRecord::Base
267
- has_one_attached :avatar, service: :s3
192
+ has_one_attached :avatar do |attachable|
193
+ attachable.variant :thumb, resize: "100x100"
194
+ attachable.variant :medium, resize: "300x300", monochrome: true
195
+ end
268
196
  end
269
197
 
270
198
  class Gallery < ActiveRecord::Base
271
- has_many_attached :photos, service: :s3
199
+ has_many_attached :photos do |attachable|
200
+ attachable.variant :thumb, resize: "100x100"
201
+ attachable.variant :medium, resize: "300x300", monochrome: true
202
+ end
272
203
  end
273
- ```
274
-
275
- *Dmitry Tsepelev*
276
-
277
- * You can optionally provide a custom blob key when attaching a new file:
278
-
279
- ```ruby
280
- user.avatar.attach key: "avatars/#{user.id}.jpg",
281
- io: io, content_type: "image/jpeg", filename: "avatar.jpg"
282
- ```
283
204
 
284
- Active Storage will store the blob's data on the configured service at the provided key.
285
-
286
- *George Claghorn*
287
-
288
- * Replace `Blob.create_after_upload!` with `Blob.create_and_upload!` and deprecate the former.
289
-
290
- `create_after_upload!` has been removed since it could lead to data
291
- corruption by uploading to a key on the storage service which happened to
292
- be already taken. Creating the record would then correctly raise a
293
- database uniqueness exception but the stored object would already have
294
- overwritten another. `create_and_upload!` swaps the order of operations
295
- so that the key gets reserved up-front or the uniqueness error gets raised,
296
- before the upload to a key takes place.
297
-
298
- *Julik Tarkhanov*
299
-
300
- * Set content disposition in direct upload using `filename` and `disposition` parameters to `ActiveStorage::Service#headers_for_direct_upload`.
301
-
302
- *Peter Zhu*
303
-
304
- * Allow record to be optionally passed to blob finders to make sharding
305
- easier.
306
-
307
- *Gannon McGibbon*
308
-
309
- * Switch from `azure-storage` gem to `azure-storage-blob` gem for Azure service.
310
-
311
- *Peter Zhu*
312
-
313
- * Add `config.active_storage.draw_routes` to disable Active Storage routes.
314
-
315
- *Gannon McGibbon*
316
-
317
- * Image analysis is skipped if ImageMagick returns an error.
318
-
319
- `ActiveStorage::Analyzer::ImageAnalyzer#metadata` would previously raise a
320
- `MiniMagick::Error`, which caused persistent `ActiveStorage::AnalyzeJob`
321
- failures. It now logs the error and returns `{}`, resulting in no metadata
322
- being added to the offending image blob.
323
-
324
- *George Claghorn*
325
-
326
- * Method calls on singular attachments return `nil` when no file is attached.
327
-
328
- Previously, assuming the following User model, `user.avatar.filename` would
329
- raise a `Module::DelegationError` if no avatar was attached:
330
-
331
- ```ruby
332
- class User < ApplicationRecord
333
- has_one_attached :avatar
334
- end
205
+ <%= image_tag user.avatar.variant(:thumb) %>
335
206
  ```
336
207
 
337
- They now return `nil`.
338
-
339
- *Matthew Tanous*
340
-
341
- * The mirror service supports direct uploads.
342
-
343
- New files are directly uploaded to the primary service. When a
344
- directly-uploaded file is attached to a record, a background job is enqueued
345
- to copy it to each secondary service.
346
-
347
- Configure the queue used to process mirroring jobs by setting
348
- `config.active_storage.queues.mirror`. The default is `:active_storage_mirror`.
349
-
350
- *George Claghorn*
351
-
352
- * The S3 service now permits uploading files larger than 5 gigabytes.
208
+ *fatkodima*
353
209
 
354
- When uploading a file greater than 100 megabytes in size, the service
355
- transparently switches to [multipart uploads](https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html)
356
- using a part size computed from the file's total size and S3's part count limit.
210
+ * After setting `config.active_storage.resolve_model_to_route = :rails_storage_proxy`
211
+ `rails_blob_path` and `rails_representation_path` will generate proxy URLs by default.
357
212
 
358
- No application changes are necessary to take advantage of this feature. You
359
- can customize the default 100 MB multipart upload threshold in your S3
360
- service's configuration:
213
+ *Ali Ismayilov*
361
214
 
362
- ```yaml
363
- production:
364
- service: s3
365
- access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
366
- secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
367
- region: us-east-1
368
- bucket: my-bucket
369
- upload:
370
- multipart_threshold: <%= 250.megabytes %>
371
- ```
215
+ * Declare `ActiveStorage::FixtureSet` and `ActiveStorage::FixtureSet.blob` to
216
+ improve fixture integration.
372
217
 
373
- *George Claghorn*
218
+ *Sean Doyle*
374
219
 
375
220
 
376
- Please check [6-0-stable](https://github.com/rails/rails/blob/6-0-stable/activestorage/CHANGELOG.md) for previous changes.
221
+ Please check [6-1-stable](https://github.com/rails/rails/blob/6-1-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) 2017-2021 David Heinemeier Hansson, Basecamp
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
data/README.md CHANGED
@@ -32,7 +32,7 @@ class User < ApplicationRecord
32
32
  end
33
33
 
34
34
  # Attach an avatar to the user.
35
- user.avatar.attach(io: File.open("/path/to/face.jpg"), filename: "face.jpg", content_type: "image/jpg")
35
+ user.avatar.attach(io: File.open("/path/to/face.jpg"), filename: "face.jpg", content_type: "image/jpeg")
36
36
 
37
37
  # Does the user have an avatar?
38
38
  user.avatar.attached? # => true
@@ -88,8 +88,7 @@ class MessagesController < ApplicationController
88
88
  end
89
89
 
90
90
  def create
91
- message = Message.create! params.require(:message).permit(:title, :content)
92
- message.images.attach(params[:message][:images])
91
+ message = Message.create! params.require(:message).permit(:title, :content, images: [])
93
92
  redirect_to message
94
93
  end
95
94
 
@@ -124,27 +123,42 @@ When the application is configured to proxy files by default, use the `rails_sto
124
123
 
125
124
  Optionally, files can be proxied instead. This means that your application servers will download file data from the storage service in response to requests. This can be useful for serving files from a CDN.
126
125
 
127
- Explicitly proxy attachments using the `rails_storage_proxy_path` and `_url` route helpers:
128
-
129
- ```erb
130
- <%= image_tag rails_storage_proxy_path(@user.avatar) %>
131
- ```
132
-
133
- Or configure Active Storage to use proxying by default:
126
+ You can configure Active Storage to use proxying by default:
134
127
 
135
128
  ```ruby
136
129
  # config/initializers/active_storage.rb
137
130
  Rails.application.config.active_storage.resolve_model_to_route = :rails_storage_proxy
138
131
  ```
139
132
 
133
+ Or if you want to explicitly proxy specific attachments there are URL helpers you can use in the form of `rails_storage_proxy_path` and `rails_storage_proxy_url`.
134
+
135
+ ```erb
136
+ <%= image_tag rails_storage_proxy_path(@user.avatar) %>
137
+ ```
138
+
140
139
  ## Direct uploads
141
140
 
142
141
  Active Storage, with its included JavaScript library, supports uploading directly from the client to the cloud.
143
142
 
144
143
  ### Direct upload installation
145
144
 
146
- 1. Include `activestorage.js` in your application's JavaScript bundle.
145
+ 1. Include the Active Storage JavaScript in your application's JavaScript bundle or reference it directly.
147
146
 
147
+ Requiring directly without bundling through the asset pipeline in the application html with autostart:
148
+ ```html
149
+ <%= javascript_include_tag "activestorage" %>
150
+ ```
151
+ Requiring via importmap-rails without bundling through the asset pipeline in the application html without autostart as ESM:
152
+ ```ruby
153
+ # config/importmap.rb
154
+ pin "@rails/activestorage", to: "activestorage.esm.js"
155
+ ```
156
+ ```html
157
+ <script type="module-shim">
158
+ import * as ActiveStorage from "@rails/activestorage"
159
+ ActiveStorage.start()
160
+ </script>
161
+ ```
148
162
  Using the asset pipeline:
149
163
  ```js
150
164
  //= require activestorage