shrine 2.8.0 → 2.9.0

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

Potentially problematic release.


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

Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +681 -0
  3. data/README.md +73 -21
  4. data/doc/carrierwave.md +75 -20
  5. data/doc/creating_storages.md +15 -26
  6. data/doc/direct_s3.md +113 -31
  7. data/doc/multiple_files.md +4 -8
  8. data/doc/paperclip.md +98 -31
  9. data/doc/refile.md +4 -6
  10. data/doc/testing.md +24 -21
  11. data/lib/shrine.rb +32 -20
  12. data/lib/shrine/plugins/activerecord.rb +2 -0
  13. data/lib/shrine/plugins/add_metadata.rb +2 -0
  14. data/lib/shrine/plugins/background_helpers.rb +2 -0
  15. data/lib/shrine/plugins/backgrounding.rb +11 -4
  16. data/lib/shrine/plugins/backup.rb +2 -0
  17. data/lib/shrine/plugins/cached_attachment_data.rb +2 -0
  18. data/lib/shrine/plugins/copy.rb +2 -0
  19. data/lib/shrine/plugins/data_uri.rb +20 -12
  20. data/lib/shrine/plugins/default_storage.rb +2 -0
  21. data/lib/shrine/plugins/default_url.rb +2 -0
  22. data/lib/shrine/plugins/default_url_options.rb +2 -0
  23. data/lib/shrine/plugins/delete_promoted.rb +2 -0
  24. data/lib/shrine/plugins/delete_raw.rb +2 -0
  25. data/lib/shrine/plugins/determine_mime_type.rb +18 -2
  26. data/lib/shrine/plugins/direct_upload.rb +6 -6
  27. data/lib/shrine/plugins/download_endpoint.rb +2 -0
  28. data/lib/shrine/plugins/dynamic_storage.rb +2 -0
  29. data/lib/shrine/plugins/hooks.rb +2 -0
  30. data/lib/shrine/plugins/included.rb +2 -0
  31. data/lib/shrine/plugins/infer_extension.rb +131 -0
  32. data/lib/shrine/plugins/keep_files.rb +2 -0
  33. data/lib/shrine/plugins/logging.rb +6 -4
  34. data/lib/shrine/plugins/metadata_attributes.rb +2 -0
  35. data/lib/shrine/plugins/migration_helpers.rb +2 -0
  36. data/lib/shrine/plugins/module_include.rb +2 -0
  37. data/lib/shrine/plugins/moving.rb +2 -0
  38. data/lib/shrine/plugins/multi_delete.rb +4 -0
  39. data/lib/shrine/plugins/parallelize.rb +2 -0
  40. data/lib/shrine/plugins/parsed_json.rb +2 -0
  41. data/lib/shrine/plugins/presign_endpoint.rb +7 -7
  42. data/lib/shrine/plugins/pretty_location.rb +2 -0
  43. data/lib/shrine/plugins/processing.rb +2 -0
  44. data/lib/shrine/plugins/rack_file.rb +2 -0
  45. data/lib/shrine/plugins/rack_response.rb +2 -0
  46. data/lib/shrine/plugins/recache.rb +2 -0
  47. data/lib/shrine/plugins/refresh_metadata.rb +2 -0
  48. data/lib/shrine/plugins/remote_url.rb +12 -1
  49. data/lib/shrine/plugins/remove_attachment.rb +2 -0
  50. data/lib/shrine/plugins/remove_invalid.rb +2 -0
  51. data/lib/shrine/plugins/restore_cached_data.rb +2 -0
  52. data/lib/shrine/plugins/sequel.rb +2 -0
  53. data/lib/shrine/plugins/signature.rb +10 -8
  54. data/lib/shrine/plugins/store_dimensions.rb +5 -3
  55. data/lib/shrine/plugins/upload_endpoint.rb +7 -8
  56. data/lib/shrine/plugins/upload_options.rb +2 -0
  57. data/lib/shrine/plugins/validation_helpers.rb +2 -0
  58. data/lib/shrine/plugins/versions.rb +72 -31
  59. data/lib/shrine/storage/file_system.rb +11 -4
  60. data/lib/shrine/storage/linter.rb +5 -13
  61. data/lib/shrine/storage/s3.rb +16 -13
  62. data/lib/shrine/version.rb +3 -1
  63. data/shrine.gemspec +7 -6
  64. metadata +26 -10
@@ -1,13 +1,19 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "shrine"
2
4
  begin
3
5
  require "aws-sdk-s3"
4
6
  if Gem::Version.new(Aws::S3::GEM_VERSION) < Gem::Version.new("1.2.0")
5
7
  raise "Shrine::Storage::S3 requires aws-sdk-s3 version 1.2.0 or above"
6
8
  end
7
- rescue LoadError
8
- Shrine.deprecation("Using aws-sdk 2.x is deprecated and support for it will be removed in Shrine 3, use the new aws-sdk-s3 gem instead.")
9
- require "aws-sdk"
10
- Aws.eager_autoload!(services: ["S3"])
9
+ rescue LoadError => exception
10
+ begin
11
+ require "aws-sdk"
12
+ Shrine.deprecation("Using aws-sdk 2.x is deprecated and support for it will be removed in Shrine 3, use the new aws-sdk-s3 gem instead.")
13
+ Aws.eager_autoload!(services: ["S3"])
14
+ rescue LoadError
15
+ raise exception
16
+ end
11
17
  end
12
18
  require "down/chunked_io"
13
19
  require "uri"
@@ -256,6 +262,9 @@ class Shrine
256
262
  tempfile.singleton_class.instance_eval { attr_accessor :content_type }
257
263
  tempfile.content_type = object.content_type
258
264
  tempfile.tap(&:open)
265
+ rescue
266
+ tempfile.close! if tempfile
267
+ raise
259
268
  end
260
269
 
261
270
  # Returns a `Down::ChunkedIO` object representing the S3 object. Any
@@ -332,12 +341,6 @@ class Shrine
332
341
  object(id).delete
333
342
  end
334
343
 
335
- # Deletes multiple files at once from the storage.
336
- def multi_delete(ids)
337
- objects_to_delete = ids.map { |id| object(id) }
338
- delete_objects(objects_to_delete)
339
- end
340
-
341
344
  # If block is given, deletes all objects from the storage for which the
342
345
  # block evaluates to true. Otherwise deletes all objects from the storage.
343
346
  #
@@ -377,7 +380,7 @@ class Shrine
377
380
  # large files.
378
381
  def copy(io, id, **options)
379
382
  # pass :content_length on multipart copy to avoid an additional HEAD request
380
- options = {multipart_copy: true, content_length: io.size}.update(options) if io.size && io.size >= @multipart_threshold[:copy]
383
+ options = { multipart_copy: true, content_length: io.size }.merge!(options) if io.size && io.size >= @multipart_threshold[:copy]
381
384
  object(id).copy_from(io.storage.object(io.id), **options)
382
385
  end
383
386
 
@@ -391,7 +394,7 @@ class Shrine
391
394
 
392
395
  if path
393
396
  # use `upload_file` for files because it can do multipart upload
394
- options = {multipart_threshold: @multipart_threshold[:upload]}.update(options)
397
+ options = { multipart_threshold: @multipart_threshold[:upload] }.merge!(options)
395
398
  object(id).upload_file(path, **options)
396
399
  else
397
400
  object(id).put(body: io, **options)
@@ -419,7 +422,7 @@ class Shrine
419
422
  # should automatically URI-decode filenames when downloading.
420
423
  def encode_content_disposition(content_disposition)
421
424
  content_disposition.sub(/(?<=filename=").+(?=")/) do |filename|
422
- CGI.escape(filename).sub("+", " ")
425
+ CGI.escape(filename).gsub("+", " ")
423
426
  end
424
427
  end
425
428
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Shrine
2
4
  def self.version
3
5
  Gem::Version.new VERSION::STRING
@@ -5,7 +7,7 @@ class Shrine
5
7
 
6
8
  module VERSION
7
9
  MAJOR = 2
8
- MINOR = 8
10
+ MINOR = 9
9
11
  TINY = 0
10
12
  PRE = nil
11
13
 
@@ -23,23 +23,24 @@ direct uploads for fully asynchronous user experience.
23
23
  gem.email = ["janko.marohnic@gmail.com"]
24
24
  gem.license = "MIT"
25
25
 
26
- gem.files = Dir["README.md", "LICENSE.txt", "lib/**/*.rb", "shrine.gemspec", "doc/*.md"]
26
+ gem.files = Dir["README.md", "LICENSE.txt", "CHANGELOG.md", "lib/**/*.rb", "shrine.gemspec", "doc/*.md"]
27
27
  gem.require_path = "lib"
28
28
 
29
29
  gem.add_dependency "down", "~> 4.1"
30
30
 
31
- gem.add_development_dependency "rake", "~> 11.1"
31
+ gem.add_development_dependency "rake", ">= 11.1"
32
32
  gem.add_development_dependency "minitest", "~> 5.8"
33
- gem.add_development_dependency "minitest-hooks", "~> 1.3.0"
33
+ gem.add_development_dependency "minitest-hooks", "~> 1.3"
34
34
  gem.add_development_dependency "mocha"
35
35
  gem.add_development_dependency "rack-test_app"
36
36
  gem.add_development_dependency "shrine-memory", ">= 0.2.2"
37
37
 
38
38
  gem.add_development_dependency "roda"
39
39
  gem.add_development_dependency "rack"
40
- gem.add_development_dependency "mimemagic"
40
+ gem.add_development_dependency "mimemagic", ">= 0.3.2"
41
+ gem.add_development_dependency "marcel" if RUBY_VERSION >= "2.2.0"
41
42
  gem.add_development_dependency "mime-types"
42
- gem.add_development_dependency "mini_mime"
43
+ gem.add_development_dependency "mini_mime", "~> 1.0"
43
44
  gem.add_development_dependency "fastimage"
44
45
  gem.add_development_dependency "aws-sdk-s3", "~> 1.2"
45
46
 
@@ -51,7 +52,7 @@ direct uploads for fully asynchronous user experience.
51
52
  gem.add_development_dependency "activerecord", "~> 4.2"
52
53
 
53
54
  if RUBY_ENGINE == "jruby"
54
- gem.add_development_dependency "activerecord-jdbcsqlite3-adapter"
55
+ gem.add_development_dependency "activerecord-jdbcsqlite3-adapter", "1.3.24"
55
56
  else
56
57
  gem.add_development_dependency "sqlite3"
57
58
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shrine
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.0
4
+ version: 2.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Janko Marohnić
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-11 00:00:00.000000000 Z
11
+ date: 2018-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: down
@@ -28,14 +28,14 @@ dependencies:
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '11.1'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '11.1'
41
41
  - !ruby/object:Gem::Dependency
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.3.0
61
+ version: '1.3'
62
62
  type: :development
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: 1.3.0
68
+ version: '1.3'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: mocha
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -142,16 +142,16 @@ dependencies:
142
142
  requirements:
143
143
  - - ">="
144
144
  - !ruby/object:Gem::Version
145
- version: '0'
145
+ version: 0.3.2
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
- version: '0'
152
+ version: 0.3.2
153
153
  - !ruby/object:Gem::Dependency
154
- name: mime-types
154
+ name: marcel
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - ">="
@@ -165,7 +165,7 @@ dependencies:
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
167
  - !ruby/object:Gem::Dependency
168
- name: mini_mime
168
+ name: mime-types
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
171
  - - ">="
@@ -178,6 +178,20 @@ dependencies:
178
178
  - - ">="
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: mini_mime
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '1.0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '1.0'
181
195
  - !ruby/object:Gem::Dependency
182
196
  name: fastimage
183
197
  requirement: !ruby/object:Gem::Requirement
@@ -277,6 +291,7 @@ executables: []
277
291
  extensions: []
278
292
  extra_rdoc_files: []
279
293
  files:
294
+ - CHANGELOG.md
280
295
  - LICENSE.txt
281
296
  - README.md
282
297
  - doc/attacher.md
@@ -313,6 +328,7 @@ files:
313
328
  - lib/shrine/plugins/dynamic_storage.rb
314
329
  - lib/shrine/plugins/hooks.rb
315
330
  - lib/shrine/plugins/included.rb
331
+ - lib/shrine/plugins/infer_extension.rb
316
332
  - lib/shrine/plugins/keep_files.rb
317
333
  - lib/shrine/plugins/logging.rb
318
334
  - lib/shrine/plugins/metadata_attributes.rb