activestorage 6.1.3 → 6.1.4.1

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.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c394453fcb90015316928972c840ad4e55d9d416714a815d8de5a053f71fe2f8
4
- data.tar.gz: 268d6d5ad38257e819ea0da120de16acf90f27eff8ad64c114c106ea88fd498b
3
+ metadata.gz: 0f5c3c775219ef6ab6dc1c7687ad2f4b874c06e5421150170b77d9ad3edebbc5
4
+ data.tar.gz: 97ebaab51740142786274e68bdc9f2ff261991e94cddd995703f897042cc89cc
5
5
  SHA512:
6
- metadata.gz: 900742e2629c95938f358f86c4135ff3a1ba289184da3fc44ca2a9086dd8eedbd58c72c830de616b6b118c4b005b946eba1d3f6d0bc1f1553400cb2ee966e6c4
7
- data.tar.gz: 26c8f0bcf812c970856007898f89f5fb9fed1d512031db3a52620d80a8b7fb217af68c9f7daaeeb8e132617dd75268952ab35220f7a46a58341dd369478711d7
6
+ metadata.gz: f799295cbd9ed6a92516e0cc8519498b77c11492defdc77bc0edfc72c740059d46fa17e6688bcf073073a81a50673b510b693698b14b906f9235ee0e46ec608d
7
+ data.tar.gz: a1a9a8f5eec0a5e6b0ded4c5a554a71b5a0fc14bc5b7fb2f62b2d2ccdee908fe6cdab9eeb733b63f40152d76de46e71fae82f5f360b55a11549b75a1a88340d5
data/CHANGELOG.md CHANGED
@@ -1,3 +1,51 @@
1
+ ## Rails 6.1.4.1 (August 19, 2021) ##
2
+
3
+ * No changes.
4
+
5
+
6
+ ## Rails 6.1.4 (June 24, 2021) ##
7
+
8
+ * The parameters sent to `ffmpeg` for generating a video preview image are now
9
+ configurable under `config.active_storage.video_preview_arguments`.
10
+
11
+ *Brendon Muir*
12
+
13
+ * Fix Active Storage update task when running in an engine.
14
+
15
+ Justin Malčić*
16
+
17
+ * Don't raise an error if the mime type is not recognized.
18
+
19
+ Fixes #41777.
20
+
21
+ *Alex Ghiculescu*
22
+
23
+ * `ActiveStorage::PreviewError` is raised when a previewer is unable to generate a preview image.
24
+
25
+ *Alex Robbin*
26
+
27
+ * respond with 404 given invalid variation key when asking for representations.
28
+
29
+ *George Claghorn*
30
+
31
+ * `Blob` creation shouldn't crash if no service selected.
32
+
33
+ *Alex Ghiculescu*
34
+
35
+
36
+ ## Rails 6.1.3.2 (May 05, 2021) ##
37
+
38
+ * No changes.
39
+
40
+
41
+ ## Rails 6.1.3.1 (March 26, 2021) ##
42
+
43
+ * Marcel is upgraded to version 1.0.0 to avoid a dependency on GPL-licensed
44
+ mime types data.
45
+
46
+ *George Claghorn*
47
+
48
+
1
49
  ## Rails 6.1.3 (February 17, 2021) ##
2
50
 
3
51
  * No changes.
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ActiveStorage::Representations::BaseController < ActiveStorage::BaseController #:nodoc:
4
+ include ActiveStorage::SetBlob
5
+
6
+ before_action :set_representation
7
+
8
+ private
9
+ def set_representation
10
+ @representation = @blob.representation(params[:variation_key]).processed
11
+ rescue ActiveSupport::MessageVerifier::InvalidSignature
12
+ head :not_found
13
+ end
14
+ end
@@ -1,19 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Proxy files through application. This avoids having a redirect and makes files easier to cache.
4
- class ActiveStorage::Representations::ProxyController < ActiveStorage::BaseController
5
- include ActiveStorage::SetBlob
4
+ class ActiveStorage::Representations::ProxyController < ActiveStorage::Representations::BaseController
6
5
  include ActiveStorage::SetHeaders
7
6
 
8
7
  def show
9
8
  http_cache_forever public: true do
10
- set_content_headers_from representation.image
11
- stream representation
9
+ set_content_headers_from @representation.image
10
+ stream @representation
12
11
  end
13
12
  end
14
-
15
- private
16
- def representation
17
- @representation ||= @blob.representation(params[:variation_key]).processed
18
- end
19
13
  end
@@ -4,11 +4,9 @@
4
4
  # Note: These URLs are publicly accessible. If you need to enforce access protection beyond the
5
5
  # security-through-obscurity factor of the signed blob and variation reference, you'll need to implement your own
6
6
  # authenticated redirection controller.
7
- class ActiveStorage::Representations::RedirectController < ActiveStorage::BaseController
8
- include ActiveStorage::SetBlob
9
-
7
+ class ActiveStorage::Representations::RedirectController < ActiveStorage::Representations::BaseController
10
8
  def show
11
9
  expires_in ActiveStorage.service_urls_expire_in
12
- redirect_to @blob.representation(params[:variation_key]).processed.url(disposition: params[:disposition])
10
+ redirect_to @representation.url(disposition: params[:disposition])
13
11
  end
14
12
  end
@@ -49,7 +49,7 @@ class ActiveStorage::Blob < ActiveStorage::Record
49
49
  scope :unattached, -> { where.missing(:attachments) }
50
50
 
51
51
  after_initialize do
52
- self.service_name ||= self.class.service.name
52
+ self.service_name ||= self.class.service&.name
53
53
  end
54
54
 
55
55
  after_update_commit :update_service_metadata, if: :content_type_previously_changed?
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "mimemagic"
3
+ require "mini_mime"
4
4
 
5
5
  module ActiveStorage::Blob::Representable
6
6
  extend ActiveSupport::Concern
@@ -110,10 +110,10 @@ module ActiveStorage::Blob::Representable
110
110
  end
111
111
 
112
112
  def format
113
- if filename.extension.present? && MimeMagic.by_extension(filename.extension)&.to_s == content_type
113
+ if filename.extension.present? && MiniMime.lookup_by_extension(filename.extension)&.content_type == content_type
114
114
  filename.extension
115
115
  else
116
- MimeMagic.new(content_type).extensions.first
116
+ MiniMime.lookup_by_content_type(content_type)&.extension
117
117
  end
118
118
  end
119
119
 
@@ -89,7 +89,7 @@ class ActiveStorage::Variant
89
89
  end
90
90
 
91
91
  def filename
92
- ActiveStorage::Filename.new "#{blob.filename.base}.#{variation.format}"
92
+ ActiveStorage::Filename.new "#{blob.filename.base}.#{variation.format.downcase}"
93
93
  end
94
94
 
95
95
  alias_method :content_type_for_serving, :content_type
@@ -33,7 +33,7 @@ class ActiveStorage::VariantWithRecord
33
33
  def transform_blob
34
34
  blob.open do |input|
35
35
  variation.transform(input) do |output|
36
- yield io: output, filename: "#{blob.filename.base}.#{variation.format}",
36
+ yield io: output, filename: "#{blob.filename.base}.#{variation.format.downcase}",
37
37
  content_type: variation.content_type, service_name: blob.service.name
38
38
  end
39
39
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "mimemagic"
3
+ require "mini_mime"
4
4
 
5
5
  # A set of transformations that can be applied to a blob to create a variant. This class is exposed via
6
6
  # the ActiveStorage::Blob#variant method and should rarely be used directly.
@@ -59,14 +59,14 @@ class ActiveStorage::Variation
59
59
 
60
60
  def format
61
61
  transformations.fetch(:format, :png).tap do |format|
62
- if MimeMagic.by_extension(format).nil?
62
+ if MiniMime.lookup_by_extension(format.to_s).nil?
63
63
  raise ArgumentError, "Invalid variant format (#{format.inspect})"
64
64
  end
65
65
  end
66
66
  end
67
67
 
68
68
  def content_type
69
- MimeMagic.by_extension(format).to_s
69
+ MiniMime.lookup_by_extension(format.to_s).content_type
70
70
  end
71
71
 
72
72
  # Returns a signed key for all the +transformations+ that this variation was instantiated with.
@@ -67,6 +67,8 @@ module ActiveStorage
67
67
  mattr_accessor :replace_on_assign_to_many, default: false
68
68
  mattr_accessor :track_variants, default: false
69
69
 
70
+ mattr_accessor :video_preview_arguments, default: "-y -vframes 1 -f image2"
71
+
70
72
  module Transformers
71
73
  extend ActiveSupport::Autoload
72
74
 
@@ -92,6 +92,7 @@ module ActiveStorage
92
92
  ActiveStorage.service_urls_expire_in = app.config.active_storage.service_urls_expire_in || 5.minutes
93
93
  ActiveStorage.content_types_allowed_inline = app.config.active_storage.content_types_allowed_inline || []
94
94
  ActiveStorage.binary_content_type = app.config.active_storage.binary_content_type || "application/octet-stream"
95
+ ActiveStorage.video_preview_arguments = app.config.active_storage.video_preview_arguments || "-y -vframes 1 -f image2"
95
96
 
96
97
  ActiveStorage.replace_on_assign_to_many = app.config.active_storage.replace_on_assign_to_many || false
97
98
  ActiveStorage.track_variants = app.config.active_storage.track_variants || false
@@ -23,4 +23,7 @@ module ActiveStorage
23
23
  # Raised when ActiveStorage::Blob#download is called on a blob where the
24
24
  # backing file is no longer present in its service.
25
25
  class FileNotFoundError < Error; end
26
+
27
+ # Raised when a Previewer is unable to generate a preview image.
28
+ class PreviewError < Error; end
26
29
  end
@@ -9,8 +9,8 @@ module ActiveStorage
9
9
  module VERSION
10
10
  MAJOR = 6
11
11
  MINOR = 1
12
- TINY = 3
13
- PRE = nil
12
+ TINY = 4
13
+ PRE = "1"
14
14
 
15
15
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
16
16
  end
@@ -70,7 +70,16 @@ module ActiveStorage
70
70
 
71
71
  def capture(*argv, to:)
72
72
  to.binmode
73
- IO.popen(argv, err: File::NULL) { |out| IO.copy_stream(out, to) }
73
+
74
+ open_tempfile do |err|
75
+ IO.popen(argv, err: err) { |out| IO.copy_stream(out, to) }
76
+ err.rewind
77
+
78
+ unless $?.success?
79
+ raise PreviewError, "#{argv.first} failed (status #{$?.exitstatus}): #{err.read.to_s.chomp}"
80
+ end
81
+ end
82
+
74
83
  to.rewind
75
84
  end
76
85
 
@@ -28,7 +28,7 @@ module ActiveStorage
28
28
 
29
29
  private
30
30
  def draw_relevant_frame_from(file, &block)
31
- draw self.class.ffmpeg_path, "-i", file.path, "-y", "-vframes", "1", "-f", "image2", "-", &block
31
+ draw self.class.ffmpeg_path, "-i", file.path, *Shellwords.split(ActiveStorage.video_preview_arguments), "-", &block
32
32
  end
33
33
  end
34
34
  end
@@ -17,6 +17,10 @@ namespace :active_storage do
17
17
  task update: :environment do
18
18
  ENV["MIGRATIONS_PATH"] = "db/update_migrate"
19
19
 
20
- Rake::Task["active_storage:install"].invoke
20
+ if Rake::Task.task_defined?("active_storage:install")
21
+ Rake::Task["active_storage:install"].invoke
22
+ else
23
+ Rake::Task["app:active_storage:install"].invoke
24
+ end
21
25
  end
22
26
  end
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: 6.1.3
4
+ version: 6.1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-17 00:00:00.000000000 Z
11
+ date: 2021-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,84 +16,84 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 6.1.3
19
+ version: 6.1.4.1
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: 6.1.3
26
+ version: 6.1.4.1
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: 6.1.3
33
+ version: 6.1.4.1
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: 6.1.3
40
+ version: 6.1.4.1
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: 6.1.3
47
+ version: 6.1.4.1
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: 6.1.3
54
+ version: 6.1.4.1
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: 6.1.3
61
+ version: 6.1.4.1
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: 6.1.3
68
+ version: 6.1.4.1
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: marcel
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.3.1
75
+ version: 1.0.0
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 0.3.1
82
+ version: 1.0.0
83
83
  - !ruby/object:Gem::Dependency
84
- name: mimemagic
84
+ name: mini_mime
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: 0.3.2
89
+ version: 1.1.0
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - "~>"
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: 0.3.2
96
+ version: 1.1.0
97
97
  description: Attach cloud and local files in Rails applications.
98
98
  email: david@loudthinking.com
99
99
  executables: []
@@ -109,6 +109,7 @@ files:
109
109
  - app/controllers/active_storage/blobs/redirect_controller.rb
110
110
  - app/controllers/active_storage/direct_uploads_controller.rb
111
111
  - app/controllers/active_storage/disk_controller.rb
112
+ - app/controllers/active_storage/representations/base_controller.rb
112
113
  - app/controllers/active_storage/representations/proxy_controller.rb
113
114
  - app/controllers/active_storage/representations/redirect_controller.rb
114
115
  - app/controllers/concerns/active_storage/file_server.rb
@@ -187,10 +188,10 @@ licenses:
187
188
  - MIT
188
189
  metadata:
189
190
  bug_tracker_uri: https://github.com/rails/rails/issues
190
- changelog_uri: https://github.com/rails/rails/blob/v6.1.3/activestorage/CHANGELOG.md
191
- documentation_uri: https://api.rubyonrails.org/v6.1.3/
191
+ changelog_uri: https://github.com/rails/rails/blob/v6.1.4.1/activestorage/CHANGELOG.md
192
+ documentation_uri: https://api.rubyonrails.org/v6.1.4.1/
192
193
  mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
193
- source_code_uri: https://github.com/rails/rails/tree/v6.1.3/activestorage
194
+ source_code_uri: https://github.com/rails/rails/tree/v6.1.4.1/activestorage
194
195
  post_install_message:
195
196
  rdoc_options: []
196
197
  require_paths:
@@ -206,7 +207,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
206
207
  - !ruby/object:Gem::Version
207
208
  version: '0'
208
209
  requirements: []
209
- rubygems_version: 3.2.3
210
+ rubygems_version: 3.2.15
210
211
  signing_key:
211
212
  specification_version: 4
212
213
  summary: Local and cloud file storage framework.