activestorage 7.0.0 → 7.1.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +158 -178
- data/MIT-LICENSE +1 -1
- data/README.md +7 -7
- data/app/assets/javascripts/activestorage.esm.js +10 -18
- data/app/assets/javascripts/activestorage.js +11 -17
- data/app/controllers/active_storage/base_controller.rb +1 -1
- data/app/controllers/active_storage/blobs/proxy_controller.rb +2 -0
- data/app/controllers/active_storage/direct_uploads_controller.rb +1 -7
- data/app/controllers/active_storage/disk_controller.rb +4 -2
- data/app/controllers/active_storage/representations/proxy_controller.rb +3 -0
- data/app/controllers/concerns/active_storage/disable_session.rb +12 -0
- data/app/controllers/concerns/active_storage/file_server.rb +4 -1
- data/app/controllers/concerns/active_storage/streaming.rb +1 -0
- data/app/javascript/activestorage/blob_record.js +6 -10
- data/app/javascript/activestorage/direct_upload.js +3 -4
- data/app/javascript/activestorage/direct_upload_controller.js +1 -9
- data/app/javascript/activestorage/index.js +3 -1
- data/app/jobs/active_storage/analyze_job.rb +1 -1
- data/app/jobs/active_storage/mirror_job.rb +1 -1
- data/app/jobs/active_storage/purge_job.rb +1 -1
- data/app/jobs/active_storage/transform_job.rb +12 -0
- data/app/models/active_storage/attachment.rb +88 -14
- data/app/models/active_storage/blob/analyzable.rb +4 -3
- data/app/models/active_storage/blob/identifiable.rb +1 -0
- data/app/models/active_storage/blob/representable.rb +7 -3
- data/app/models/active_storage/blob.rb +27 -47
- data/app/models/active_storage/current.rb +0 -10
- data/app/models/active_storage/filename.rb +2 -0
- data/app/models/active_storage/named_variant.rb +21 -0
- data/app/models/active_storage/preview.rb +5 -3
- data/app/models/active_storage/variant.rb +11 -10
- data/app/models/active_storage/variant_with_record.rb +20 -8
- data/app/models/active_storage/variation.rb +6 -4
- data/config/routes.rb +6 -4
- data/db/migrate/20170806125915_create_active_storage_tables.rb +1 -1
- data/db/update_migrate/20190112182829_add_service_name_to_active_storage_blobs.rb +4 -0
- data/db/update_migrate/20191206030411_create_active_storage_variant_records.rb +2 -0
- data/db/update_migrate/20211119233751_remove_not_null_on_active_storage_blobs_checksum.rb +2 -0
- data/lib/active_storage/analyzer/audio_analyzer.rb +17 -5
- data/lib/active_storage/analyzer/image_analyzer/image_magick.rb +9 -7
- data/lib/active_storage/analyzer/image_analyzer/vips.rb +9 -7
- data/lib/active_storage/analyzer/image_analyzer.rb +2 -0
- data/lib/active_storage/analyzer/video_analyzer.rb +15 -6
- data/lib/active_storage/analyzer.rb +2 -0
- data/lib/active_storage/attached/changes/create_many.rb +8 -3
- data/lib/active_storage/attached/changes/create_one.rb +45 -3
- data/lib/active_storage/attached/many.rb +5 -4
- data/lib/active_storage/attached/model.rb +66 -43
- data/lib/active_storage/attached/one.rb +5 -4
- data/lib/active_storage/attached.rb +2 -0
- data/lib/active_storage/deprecator.rb +7 -0
- data/lib/active_storage/engine.rb +31 -9
- data/lib/active_storage/errors.rb +0 -3
- data/lib/active_storage/fixture_set.rb +7 -8
- data/lib/active_storage/gem_version.rb +2 -2
- data/lib/active_storage/log_subscriber.rb +12 -0
- data/lib/active_storage/previewer/video_previewer.rb +2 -0
- data/lib/active_storage/previewer.rb +8 -1
- data/lib/active_storage/reflection.rb +3 -3
- data/lib/active_storage/service/azure_storage_service.rb +2 -0
- data/lib/active_storage/service/disk_service.rb +2 -0
- data/lib/active_storage/service/gcs_service.rb +11 -20
- data/lib/active_storage/service/mirror_service.rb +10 -5
- data/lib/active_storage/service/s3_service.rb +2 -0
- data/lib/active_storage/service.rb +4 -2
- data/lib/active_storage/transformers/image_processing_transformer.rb +65 -0
- data/lib/active_storage/transformers/transformer.rb +2 -0
- data/lib/active_storage/version.rb +1 -1
- data/lib/active_storage.rb +310 -4
- metadata +21 -32
- data/lib/active_storage/direct_upload_token.rb +0 -59
@@ -3,6 +3,8 @@
|
|
3
3
|
require "active_support/core_ext/module/delegation"
|
4
4
|
|
5
5
|
module ActiveStorage
|
6
|
+
# = Active Storage Mirror \Service
|
7
|
+
#
|
6
8
|
# Wraps a set of mirror services and provides a single ActiveStorage::Service object that will all
|
7
9
|
# have the files uploaded to them. A +primary+ service is designated to answer calls to:
|
8
10
|
# * +download+
|
@@ -30,13 +32,13 @@ module ActiveStorage
|
|
30
32
|
@primary, @mirrors = primary, mirrors
|
31
33
|
end
|
32
34
|
|
33
|
-
# Upload the +io+ to the +key+ specified to all services.
|
35
|
+
# Upload the +io+ to the +key+ specified to all services. The upload to the primary service is done synchronously
|
36
|
+
# whereas the upload to the mirrors is done asynchronously. If a +checksum+ is provided, all services will
|
34
37
|
# ensure a match when the upload has completed or raise an ActiveStorage::IntegrityError.
|
35
38
|
def upload(key, io, checksum: nil, **options)
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
end
|
39
|
+
io.rewind
|
40
|
+
primary.upload key, io, checksum: checksum, **options
|
41
|
+
mirror_later key, checksum: checksum
|
40
42
|
end
|
41
43
|
|
42
44
|
# Delete the file at the +key+ on all services.
|
@@ -49,6 +51,9 @@ module ActiveStorage
|
|
49
51
|
perform_across_services :delete_prefixed, prefix
|
50
52
|
end
|
51
53
|
|
54
|
+
def mirror_later(key, checksum:) # :nodoc:
|
55
|
+
ActiveStorage::MirrorJob.perform_later key, checksum: checksum
|
56
|
+
end
|
52
57
|
|
53
58
|
# Copy the file at the +key+ from the primary service to each of the mirrors where it doesn't already exist.
|
54
59
|
def mirror(key, checksum:)
|
@@ -6,6 +6,8 @@ require "aws-sdk-s3"
|
|
6
6
|
require "active_support/core_ext/numeric/bytes"
|
7
7
|
|
8
8
|
module ActiveStorage
|
9
|
+
# = Active Storage \S3 \Service
|
10
|
+
#
|
9
11
|
# Wraps the Amazon Simple Storage Service (S3) as an Active Storage service.
|
10
12
|
# See ActiveStorage::Service for the generic API documentation that applies to all services.
|
11
13
|
class Service::S3Service < Service
|
@@ -6,6 +6,8 @@ require "action_dispatch"
|
|
6
6
|
require "action_dispatch/http/content_disposition"
|
7
7
|
|
8
8
|
module ActiveStorage
|
9
|
+
# = Active Storage \Service
|
10
|
+
#
|
9
11
|
# Abstract class serving as an interface for concrete services.
|
10
12
|
#
|
11
13
|
# The available services are:
|
@@ -16,7 +18,7 @@ module ActiveStorage
|
|
16
18
|
# * +AzureStorage+, to manage attachments through Microsoft Azure Storage.
|
17
19
|
# * +Mirror+, to be able to use several services to manage attachments.
|
18
20
|
#
|
19
|
-
# Inside a Rails application, you can set-up your services through the
|
21
|
+
# Inside a \Rails application, you can set-up your services through the
|
20
22
|
# generated <tt>config/storage.yml</tt> file and reference one
|
21
23
|
# of the aforementioned constant under the +service+ key. For example:
|
22
24
|
#
|
@@ -31,7 +33,7 @@ module ActiveStorage
|
|
31
33
|
#
|
32
34
|
# config.active_storage.service = :local
|
33
35
|
#
|
34
|
-
# If you are using Active Storage outside of a Ruby on Rails application, you
|
36
|
+
# If you are using Active Storage outside of a Ruby on \Rails application, you
|
35
37
|
# can configure the service to use like this:
|
36
38
|
#
|
37
39
|
# ActiveStorage::Blob.service = ActiveStorage::Service.configure(
|
@@ -13,6 +13,9 @@ module ActiveStorage
|
|
13
13
|
module Transformers
|
14
14
|
class ImageProcessingTransformer < Transformer
|
15
15
|
private
|
16
|
+
class UnsupportedImageProcessingMethod < StandardError; end
|
17
|
+
class UnsupportedImageProcessingArgument < StandardError; end
|
18
|
+
|
16
19
|
def process(file, format:)
|
17
20
|
processor.
|
18
21
|
source(file).
|
@@ -28,6 +31,10 @@ module ActiveStorage
|
|
28
31
|
|
29
32
|
def operations
|
30
33
|
transformations.each_with_object([]) do |(name, argument), list|
|
34
|
+
if ActiveStorage.variant_processor == :mini_magick
|
35
|
+
validate_transformation(name, argument)
|
36
|
+
end
|
37
|
+
|
31
38
|
if name.to_s == "combine_options"
|
32
39
|
raise ArgumentError, <<~ERROR.squish
|
33
40
|
Active Storage's ImageProcessing transformer doesn't support :combine_options,
|
@@ -40,6 +47,64 @@ module ActiveStorage
|
|
40
47
|
end
|
41
48
|
end
|
42
49
|
end
|
50
|
+
|
51
|
+
def validate_transformation(name, argument)
|
52
|
+
method_name = name.to_s.tr("-", "_")
|
53
|
+
|
54
|
+
unless ActiveStorage.supported_image_processing_methods.any? { |method| method_name == method }
|
55
|
+
raise UnsupportedImageProcessingMethod, <<~ERROR.squish
|
56
|
+
One or more of the provided transformation methods is not supported.
|
57
|
+
ERROR
|
58
|
+
end
|
59
|
+
|
60
|
+
if argument.present?
|
61
|
+
if argument.is_a?(String) || argument.is_a?(Symbol)
|
62
|
+
validate_arg_string(argument)
|
63
|
+
elsif argument.is_a?(Array)
|
64
|
+
validate_arg_array(argument)
|
65
|
+
elsif argument.is_a?(Hash)
|
66
|
+
validate_arg_hash(argument)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def validate_arg_string(argument)
|
72
|
+
unsupported_arguments = ActiveStorage.unsupported_image_processing_arguments.any? do |bad_arg|
|
73
|
+
argument.to_s.downcase.include?(bad_arg)
|
74
|
+
end
|
75
|
+
|
76
|
+
raise UnsupportedImageProcessingArgument if unsupported_arguments
|
77
|
+
end
|
78
|
+
|
79
|
+
def validate_arg_array(argument)
|
80
|
+
argument.each do |arg|
|
81
|
+
if arg.is_a?(Integer) || arg.is_a?(Float)
|
82
|
+
next
|
83
|
+
elsif arg.is_a?(String) || arg.is_a?(Symbol)
|
84
|
+
validate_arg_string(arg)
|
85
|
+
elsif arg.is_a?(Array)
|
86
|
+
validate_arg_array(arg)
|
87
|
+
elsif arg.is_a?(Hash)
|
88
|
+
validate_arg_hash(arg)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def validate_arg_hash(argument)
|
94
|
+
argument.each do |key, value|
|
95
|
+
validate_arg_string(key)
|
96
|
+
|
97
|
+
if value.is_a?(Integer) || value.is_a?(Float)
|
98
|
+
next
|
99
|
+
elsif value.is_a?(String) || value.is_a?(Symbol)
|
100
|
+
validate_arg_string(value)
|
101
|
+
elsif value.is_a?(Array)
|
102
|
+
validate_arg_array(value)
|
103
|
+
elsif value.is_a?(Hash)
|
104
|
+
validate_arg_hash(value)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
43
108
|
end
|
44
109
|
end
|
45
110
|
end
|
data/lib/active_storage.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
#--
|
4
|
-
# Copyright (c)
|
4
|
+
# Copyright (c) David Heinemeier Hansson, 37signals LLC
|
5
5
|
#
|
6
6
|
# Permission is hereby granted, free of charge, to any person obtaining
|
7
7
|
# a copy of this software and associated documentation files (the
|
@@ -29,10 +29,13 @@ require "active_support/rails"
|
|
29
29
|
require "active_support/core_ext/numeric/time"
|
30
30
|
|
31
31
|
require "active_storage/version"
|
32
|
+
require "active_storage/deprecator"
|
32
33
|
require "active_storage/errors"
|
33
34
|
|
34
35
|
require "marcel"
|
35
36
|
|
37
|
+
# :markup: markdown
|
38
|
+
# :include: activestorage/README.md
|
36
39
|
module ActiveStorage
|
37
40
|
extend ActiveSupport::Autoload
|
38
41
|
|
@@ -41,7 +44,6 @@ module ActiveStorage
|
|
41
44
|
autoload :Service
|
42
45
|
autoload :Previewer
|
43
46
|
autoload :Analyzer
|
44
|
-
autoload :DirectUploadToken
|
45
47
|
|
46
48
|
mattr_accessor :logger
|
47
49
|
mattr_accessor :verifier
|
@@ -60,6 +62,297 @@ module ActiveStorage
|
|
60
62
|
mattr_accessor :content_types_to_serve_as_binary, default: []
|
61
63
|
mattr_accessor :content_types_allowed_inline, default: []
|
62
64
|
|
65
|
+
mattr_accessor :supported_image_processing_methods, default: [
|
66
|
+
"adaptive_blur",
|
67
|
+
"adaptive_resize",
|
68
|
+
"adaptive_sharpen",
|
69
|
+
"adjoin",
|
70
|
+
"affine",
|
71
|
+
"alpha",
|
72
|
+
"annotate",
|
73
|
+
"antialias",
|
74
|
+
"append",
|
75
|
+
"apply",
|
76
|
+
"attenuate",
|
77
|
+
"authenticate",
|
78
|
+
"auto_gamma",
|
79
|
+
"auto_level",
|
80
|
+
"auto_orient",
|
81
|
+
"auto_threshold",
|
82
|
+
"backdrop",
|
83
|
+
"background",
|
84
|
+
"bench",
|
85
|
+
"bias",
|
86
|
+
"bilateral_blur",
|
87
|
+
"black_point_compensation",
|
88
|
+
"black_threshold",
|
89
|
+
"blend",
|
90
|
+
"blue_primary",
|
91
|
+
"blue_shift",
|
92
|
+
"blur",
|
93
|
+
"border",
|
94
|
+
"bordercolor",
|
95
|
+
"borderwidth",
|
96
|
+
"brightness_contrast",
|
97
|
+
"cache",
|
98
|
+
"canny",
|
99
|
+
"caption",
|
100
|
+
"channel",
|
101
|
+
"channel_fx",
|
102
|
+
"charcoal",
|
103
|
+
"chop",
|
104
|
+
"clahe",
|
105
|
+
"clamp",
|
106
|
+
"clip",
|
107
|
+
"clip_path",
|
108
|
+
"clone",
|
109
|
+
"clut",
|
110
|
+
"coalesce",
|
111
|
+
"colorize",
|
112
|
+
"colormap",
|
113
|
+
"color_matrix",
|
114
|
+
"colors",
|
115
|
+
"colorspace",
|
116
|
+
"colourspace",
|
117
|
+
"color_threshold",
|
118
|
+
"combine",
|
119
|
+
"combine_options",
|
120
|
+
"comment",
|
121
|
+
"compare",
|
122
|
+
"complex",
|
123
|
+
"compose",
|
124
|
+
"composite",
|
125
|
+
"compress",
|
126
|
+
"connected_components",
|
127
|
+
"contrast",
|
128
|
+
"contrast_stretch",
|
129
|
+
"convert",
|
130
|
+
"convolve",
|
131
|
+
"copy",
|
132
|
+
"crop",
|
133
|
+
"cycle",
|
134
|
+
"deconstruct",
|
135
|
+
"define",
|
136
|
+
"delay",
|
137
|
+
"delete",
|
138
|
+
"density",
|
139
|
+
"depth",
|
140
|
+
"descend",
|
141
|
+
"deskew",
|
142
|
+
"despeckle",
|
143
|
+
"direction",
|
144
|
+
"displace",
|
145
|
+
"dispose",
|
146
|
+
"dissimilarity_threshold",
|
147
|
+
"dissolve",
|
148
|
+
"distort",
|
149
|
+
"dither",
|
150
|
+
"draw",
|
151
|
+
"duplicate",
|
152
|
+
"edge",
|
153
|
+
"emboss",
|
154
|
+
"encoding",
|
155
|
+
"endian",
|
156
|
+
"enhance",
|
157
|
+
"equalize",
|
158
|
+
"evaluate",
|
159
|
+
"evaluate_sequence",
|
160
|
+
"extent",
|
161
|
+
"extract",
|
162
|
+
"family",
|
163
|
+
"features",
|
164
|
+
"fft",
|
165
|
+
"fill",
|
166
|
+
"filter",
|
167
|
+
"flatten",
|
168
|
+
"flip",
|
169
|
+
"floodfill",
|
170
|
+
"flop",
|
171
|
+
"font",
|
172
|
+
"foreground",
|
173
|
+
"format",
|
174
|
+
"frame",
|
175
|
+
"function",
|
176
|
+
"fuzz",
|
177
|
+
"fx",
|
178
|
+
"gamma",
|
179
|
+
"gaussian_blur",
|
180
|
+
"geometry",
|
181
|
+
"gravity",
|
182
|
+
"grayscale",
|
183
|
+
"green_primary",
|
184
|
+
"hald_clut",
|
185
|
+
"highlight_color",
|
186
|
+
"hough_lines",
|
187
|
+
"iconGeometry",
|
188
|
+
"iconic",
|
189
|
+
"identify",
|
190
|
+
"ift",
|
191
|
+
"illuminant",
|
192
|
+
"immutable",
|
193
|
+
"implode",
|
194
|
+
"insert",
|
195
|
+
"intensity",
|
196
|
+
"intent",
|
197
|
+
"interlace",
|
198
|
+
"interline_spacing",
|
199
|
+
"interpolate",
|
200
|
+
"interpolative_resize",
|
201
|
+
"interword_spacing",
|
202
|
+
"kerning",
|
203
|
+
"kmeans",
|
204
|
+
"kuwahara",
|
205
|
+
"label",
|
206
|
+
"lat",
|
207
|
+
"layers",
|
208
|
+
"level",
|
209
|
+
"level_colors",
|
210
|
+
"limit",
|
211
|
+
"limits",
|
212
|
+
"linear_stretch",
|
213
|
+
"linewidth",
|
214
|
+
"liquid_rescale",
|
215
|
+
"list",
|
216
|
+
"loader",
|
217
|
+
"log",
|
218
|
+
"loop",
|
219
|
+
"lowlight_color",
|
220
|
+
"magnify",
|
221
|
+
"map",
|
222
|
+
"mattecolor",
|
223
|
+
"median",
|
224
|
+
"mean_shift",
|
225
|
+
"metric",
|
226
|
+
"mode",
|
227
|
+
"modulate",
|
228
|
+
"moments",
|
229
|
+
"monitor",
|
230
|
+
"monochrome",
|
231
|
+
"morph",
|
232
|
+
"morphology",
|
233
|
+
"mosaic",
|
234
|
+
"motion_blur",
|
235
|
+
"name",
|
236
|
+
"negate",
|
237
|
+
"noise",
|
238
|
+
"normalize",
|
239
|
+
"opaque",
|
240
|
+
"ordered_dither",
|
241
|
+
"orient",
|
242
|
+
"page",
|
243
|
+
"paint",
|
244
|
+
"pause",
|
245
|
+
"perceptible",
|
246
|
+
"ping",
|
247
|
+
"pointsize",
|
248
|
+
"polaroid",
|
249
|
+
"poly",
|
250
|
+
"posterize",
|
251
|
+
"precision",
|
252
|
+
"preview",
|
253
|
+
"process",
|
254
|
+
"quality",
|
255
|
+
"quantize",
|
256
|
+
"quiet",
|
257
|
+
"radial_blur",
|
258
|
+
"raise",
|
259
|
+
"random_threshold",
|
260
|
+
"range_threshold",
|
261
|
+
"red_primary",
|
262
|
+
"regard_warnings",
|
263
|
+
"region",
|
264
|
+
"remote",
|
265
|
+
"render",
|
266
|
+
"repage",
|
267
|
+
"resample",
|
268
|
+
"resize",
|
269
|
+
"resize_to_fill",
|
270
|
+
"resize_to_fit",
|
271
|
+
"resize_to_limit",
|
272
|
+
"resize_and_pad",
|
273
|
+
"respect_parentheses",
|
274
|
+
"reverse",
|
275
|
+
"roll",
|
276
|
+
"rotate",
|
277
|
+
"sample",
|
278
|
+
"sampling_factor",
|
279
|
+
"saver",
|
280
|
+
"scale",
|
281
|
+
"scene",
|
282
|
+
"screen",
|
283
|
+
"seed",
|
284
|
+
"segment",
|
285
|
+
"selective_blur",
|
286
|
+
"separate",
|
287
|
+
"sepia_tone",
|
288
|
+
"shade",
|
289
|
+
"shadow",
|
290
|
+
"shared_memory",
|
291
|
+
"sharpen",
|
292
|
+
"shave",
|
293
|
+
"shear",
|
294
|
+
"sigmoidal_contrast",
|
295
|
+
"silent",
|
296
|
+
"similarity_threshold",
|
297
|
+
"size",
|
298
|
+
"sketch",
|
299
|
+
"smush",
|
300
|
+
"snaps",
|
301
|
+
"solarize",
|
302
|
+
"sort_pixels",
|
303
|
+
"sparse_color",
|
304
|
+
"splice",
|
305
|
+
"spread",
|
306
|
+
"statistic",
|
307
|
+
"stegano",
|
308
|
+
"stereo",
|
309
|
+
"storage_type",
|
310
|
+
"stretch",
|
311
|
+
"strip",
|
312
|
+
"stroke",
|
313
|
+
"strokewidth",
|
314
|
+
"style",
|
315
|
+
"subimage_search",
|
316
|
+
"swap",
|
317
|
+
"swirl",
|
318
|
+
"synchronize",
|
319
|
+
"taint",
|
320
|
+
"text_font",
|
321
|
+
"threshold",
|
322
|
+
"thumbnail",
|
323
|
+
"tile_offset",
|
324
|
+
"tint",
|
325
|
+
"title",
|
326
|
+
"transform",
|
327
|
+
"transparent",
|
328
|
+
"transparent_color",
|
329
|
+
"transpose",
|
330
|
+
"transverse",
|
331
|
+
"treedepth",
|
332
|
+
"trim",
|
333
|
+
"type",
|
334
|
+
"undercolor",
|
335
|
+
"unique_colors",
|
336
|
+
"units",
|
337
|
+
"unsharp",
|
338
|
+
"update",
|
339
|
+
"valid_image",
|
340
|
+
"view",
|
341
|
+
"vignette",
|
342
|
+
"virtual_pixel",
|
343
|
+
"visual",
|
344
|
+
"watermark",
|
345
|
+
"wave",
|
346
|
+
"wavelet_denoise",
|
347
|
+
"weight",
|
348
|
+
"white_balance",
|
349
|
+
"white_point",
|
350
|
+
"white_threshold",
|
351
|
+
"window",
|
352
|
+
"window_group"
|
353
|
+
]
|
354
|
+
mattr_accessor :unsupported_image_processing_arguments
|
355
|
+
|
63
356
|
mattr_accessor :service_urls_expire_in, default: 5.minutes
|
64
357
|
mattr_accessor :urls_expire_in
|
65
358
|
|
@@ -67,12 +360,25 @@ module ActiveStorage
|
|
67
360
|
mattr_accessor :draw_routes, default: true
|
68
361
|
mattr_accessor :resolve_model_to_route, default: :rails_storage_redirect
|
69
362
|
|
70
|
-
mattr_accessor :replace_on_assign_to_many, default: false
|
71
363
|
mattr_accessor :track_variants, default: false
|
72
364
|
|
73
365
|
mattr_accessor :video_preview_arguments, default: "-y -vframes 1 -f image2"
|
74
366
|
|
75
|
-
|
367
|
+
def self.replace_on_assign_to_many
|
368
|
+
ActiveStorage.deprecator.warn("config.active_storage.replace_on_assign_to_many is deprecated and has no effect.")
|
369
|
+
end
|
370
|
+
|
371
|
+
def self.replace_on_assign_to_many=(value)
|
372
|
+
ActiveStorage.deprecator.warn("config.active_storage.replace_on_assign_to_many is deprecated and has no effect.")
|
373
|
+
end
|
374
|
+
|
375
|
+
def self.silence_invalid_content_types_warning
|
376
|
+
ActiveStorage.deprecator.warn("config.active_storage.silence_invalid_content_types_warning is deprecated and has no effect.")
|
377
|
+
end
|
378
|
+
|
379
|
+
def self.silence_invalid_content_types_warning=(value)
|
380
|
+
ActiveStorage.deprecator.warn("config.active_storage.silence_invalid_content_types_warning is deprecated and has no effect.")
|
381
|
+
end
|
76
382
|
|
77
383
|
module Transformers
|
78
384
|
extend ActiveSupport::Autoload
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activestorage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.
|
4
|
+
version: 7.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-10-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -16,56 +16,56 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 7.
|
19
|
+
version: 7.1.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 7.
|
26
|
+
version: 7.1.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: actionpack
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 7.
|
33
|
+
version: 7.1.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 7.
|
40
|
+
version: 7.1.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: activejob
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - '='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 7.
|
47
|
+
version: 7.1.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - '='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 7.
|
54
|
+
version: 7.1.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: activerecord
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - '='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 7.
|
61
|
+
version: 7.1.0
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - '='
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 7.
|
68
|
+
version: 7.1.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: marcel
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,20 +80,6 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '1.0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: mini_mime
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: 1.1.0
|
90
|
-
type: :runtime
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: 1.1.0
|
97
83
|
description: Attach cloud and local files in Rails applications.
|
98
84
|
email: david@loudthinking.com
|
99
85
|
executables: []
|
@@ -113,6 +99,7 @@ files:
|
|
113
99
|
- app/controllers/active_storage/representations/base_controller.rb
|
114
100
|
- app/controllers/active_storage/representations/proxy_controller.rb
|
115
101
|
- app/controllers/active_storage/representations/redirect_controller.rb
|
102
|
+
- app/controllers/concerns/active_storage/disable_session.rb
|
116
103
|
- app/controllers/concerns/active_storage/file_server.rb
|
117
104
|
- app/controllers/concerns/active_storage/set_blob.rb
|
118
105
|
- app/controllers/concerns/active_storage/set_current.rb
|
@@ -130,6 +117,7 @@ files:
|
|
130
117
|
- app/jobs/active_storage/base_job.rb
|
131
118
|
- app/jobs/active_storage/mirror_job.rb
|
132
119
|
- app/jobs/active_storage/purge_job.rb
|
120
|
+
- app/jobs/active_storage/transform_job.rb
|
133
121
|
- app/models/active_storage/attachment.rb
|
134
122
|
- app/models/active_storage/blob.rb
|
135
123
|
- app/models/active_storage/blob/analyzable.rb
|
@@ -137,6 +125,7 @@ files:
|
|
137
125
|
- app/models/active_storage/blob/representable.rb
|
138
126
|
- app/models/active_storage/current.rb
|
139
127
|
- app/models/active_storage/filename.rb
|
128
|
+
- app/models/active_storage/named_variant.rb
|
140
129
|
- app/models/active_storage/preview.rb
|
141
130
|
- app/models/active_storage/record.rb
|
142
131
|
- app/models/active_storage/variant.rb
|
@@ -170,7 +159,7 @@ files:
|
|
170
159
|
- lib/active_storage/attached/many.rb
|
171
160
|
- lib/active_storage/attached/model.rb
|
172
161
|
- lib/active_storage/attached/one.rb
|
173
|
-
- lib/active_storage/
|
162
|
+
- lib/active_storage/deprecator.rb
|
174
163
|
- lib/active_storage/downloader.rb
|
175
164
|
- lib/active_storage/engine.rb
|
176
165
|
- lib/active_storage/errors.rb
|
@@ -199,12 +188,12 @@ licenses:
|
|
199
188
|
- MIT
|
200
189
|
metadata:
|
201
190
|
bug_tracker_uri: https://github.com/rails/rails/issues
|
202
|
-
changelog_uri: https://github.com/rails/rails/blob/v7.
|
203
|
-
documentation_uri: https://api.rubyonrails.org/v7.
|
191
|
+
changelog_uri: https://github.com/rails/rails/blob/v7.1.0/activestorage/CHANGELOG.md
|
192
|
+
documentation_uri: https://api.rubyonrails.org/v7.1.0/
|
204
193
|
mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
|
205
|
-
source_code_uri: https://github.com/rails/rails/tree/v7.
|
194
|
+
source_code_uri: https://github.com/rails/rails/tree/v7.1.0/activestorage
|
206
195
|
rubygems_mfa_required: 'true'
|
207
|
-
post_install_message:
|
196
|
+
post_install_message:
|
208
197
|
rdoc_options: []
|
209
198
|
require_paths:
|
210
199
|
- lib
|
@@ -219,8 +208,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
219
208
|
- !ruby/object:Gem::Version
|
220
209
|
version: '0'
|
221
210
|
requirements: []
|
222
|
-
rubygems_version: 3.
|
223
|
-
signing_key:
|
211
|
+
rubygems_version: 3.4.18
|
212
|
+
signing_key:
|
224
213
|
specification_version: 4
|
225
214
|
summary: Local and cloud file storage framework.
|
226
215
|
test_files: []
|