shrine 2.15.0 → 2.16.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.

Potentially problematic release.


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

Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +26 -0
  3. data/doc/advantages.md +4 -0
  4. data/doc/plugins/activerecord.md +3 -2
  5. data/doc/plugins/add_metadata.md +4 -2
  6. data/doc/plugins/backgrounding.md +6 -4
  7. data/doc/plugins/backup.md +4 -2
  8. data/doc/plugins/cached_attachment_data.md +5 -3
  9. data/doc/plugins/copy.md +3 -1
  10. data/doc/plugins/data_uri.md +3 -2
  11. data/doc/plugins/default_storage.md +5 -2
  12. data/doc/plugins/default_url.md +4 -2
  13. data/doc/plugins/default_url_options.md +5 -2
  14. data/doc/plugins/delete_promoted.md +6 -4
  15. data/doc/plugins/delete_raw.md +12 -3
  16. data/doc/plugins/derivation_endpoint.md +17 -6
  17. data/doc/plugins/determine_mime_type.md +3 -2
  18. data/doc/plugins/direct_upload.md +4 -2
  19. data/doc/plugins/download_endpoint.md +46 -6
  20. data/doc/plugins/dynamic_storage.md +5 -2
  21. data/doc/plugins/hooks.md +3 -1
  22. data/doc/plugins/included.md +5 -2
  23. data/doc/plugins/infer_extension.md +5 -4
  24. data/doc/plugins/keep_files.md +5 -3
  25. data/doc/plugins/logging.md +4 -1
  26. data/doc/plugins/metadata_attribues.md +6 -3
  27. data/doc/plugins/migration_helpers.md +4 -2
  28. data/doc/plugins/module_include.md +4 -2
  29. data/doc/plugins/moving.md +6 -4
  30. data/doc/plugins/multi_delete.md +4 -2
  31. data/doc/plugins/parallelize.md +4 -2
  32. data/doc/plugins/parsed_json.md +5 -3
  33. data/doc/plugins/presign_endpoint.md +7 -5
  34. data/doc/plugins/pretty_location.md +4 -2
  35. data/doc/plugins/processing.md +3 -2
  36. data/doc/plugins/rack_file.md +4 -2
  37. data/doc/plugins/rack_response.md +26 -10
  38. data/doc/plugins/recache.md +7 -5
  39. data/doc/plugins/refresh_metadata.md +4 -2
  40. data/doc/plugins/remote_url.md +3 -1
  41. data/doc/plugins/remove_attachment.md +4 -2
  42. data/doc/plugins/remove_invalid.md +6 -3
  43. data/doc/plugins/restore_cached_data.md +8 -6
  44. data/doc/plugins/sequel.md +4 -1
  45. data/doc/plugins/signature.md +5 -3
  46. data/doc/plugins/store_dimensions.md +4 -2
  47. data/doc/plugins/tempfile.md +4 -2
  48. data/doc/plugins/upload_endpoint.md +4 -3
  49. data/doc/plugins/upload_options.md +4 -2
  50. data/doc/plugins/validation_helpers.md +4 -2
  51. data/doc/plugins/versions.md +3 -2
  52. data/doc/release_notes/2.15.0.md +2 -2
  53. data/doc/release_notes/2.16.0.md +52 -0
  54. data/doc/storage/s3.md +2 -2
  55. data/lib/shrine/plugins/_urlsafe_serialization.rb +2 -0
  56. data/lib/shrine/plugins/activerecord.rb +3 -0
  57. data/lib/shrine/plugins/add_metadata.rb +3 -0
  58. data/lib/shrine/plugins/backgrounding.rb +3 -0
  59. data/lib/shrine/plugins/backup.rb +3 -0
  60. data/lib/shrine/plugins/cached_attachment_data.rb +3 -0
  61. data/lib/shrine/plugins/copy.rb +3 -0
  62. data/lib/shrine/plugins/data_uri.rb +3 -0
  63. data/lib/shrine/plugins/default_storage.rb +3 -0
  64. data/lib/shrine/plugins/default_url.rb +3 -0
  65. data/lib/shrine/plugins/default_url_options.rb +3 -0
  66. data/lib/shrine/plugins/delete_promoted.rb +3 -0
  67. data/lib/shrine/plugins/delete_raw.rb +4 -1
  68. data/lib/shrine/plugins/derivation_endpoint.rb +144 -47
  69. data/lib/shrine/plugins/determine_mime_type.rb +3 -0
  70. data/lib/shrine/plugins/direct_upload.rb +3 -0
  71. data/lib/shrine/plugins/download_endpoint.rb +29 -29
  72. data/lib/shrine/plugins/dynamic_storage.rb +3 -0
  73. data/lib/shrine/plugins/hooks.rb +3 -0
  74. data/lib/shrine/plugins/included.rb +3 -0
  75. data/lib/shrine/plugins/infer_extension.rb +3 -0
  76. data/lib/shrine/plugins/keep_files.rb +3 -0
  77. data/lib/shrine/plugins/logging.rb +3 -0
  78. data/lib/shrine/plugins/metadata_attributes.rb +3 -0
  79. data/lib/shrine/plugins/migration_helpers.rb +3 -0
  80. data/lib/shrine/plugins/module_include.rb +3 -0
  81. data/lib/shrine/plugins/moving.rb +3 -0
  82. data/lib/shrine/plugins/multi_delete.rb +3 -0
  83. data/lib/shrine/plugins/parallelize.rb +5 -1
  84. data/lib/shrine/plugins/parsed_json.rb +3 -0
  85. data/lib/shrine/plugins/presign_endpoint.rb +3 -0
  86. data/lib/shrine/plugins/pretty_location.rb +3 -0
  87. data/lib/shrine/plugins/processing.rb +3 -0
  88. data/lib/shrine/plugins/rack_file.rb +3 -0
  89. data/lib/shrine/plugins/rack_response.rb +14 -14
  90. data/lib/shrine/plugins/recache.rb +3 -0
  91. data/lib/shrine/plugins/refresh_metadata.rb +3 -0
  92. data/lib/shrine/plugins/remote_url.rb +3 -0
  93. data/lib/shrine/plugins/remove_attachment.rb +3 -0
  94. data/lib/shrine/plugins/remove_invalid.rb +3 -0
  95. data/lib/shrine/plugins/restore_cached_data.rb +3 -0
  96. data/lib/shrine/plugins/sequel.rb +3 -0
  97. data/lib/shrine/plugins/signature.rb +3 -0
  98. data/lib/shrine/plugins/store_dimensions.rb +4 -1
  99. data/lib/shrine/plugins/tempfile.rb +5 -0
  100. data/lib/shrine/plugins/upload_endpoint.rb +3 -0
  101. data/lib/shrine/plugins/upload_options.rb +3 -0
  102. data/lib/shrine/plugins/validation_helpers.rb +3 -0
  103. data/lib/shrine/plugins/versions.rb +3 -0
  104. data/lib/shrine/uploaded_file.rb +15 -7
  105. data/lib/shrine/version.rb +1 -1
  106. metadata +3 -2
@@ -2,6 +2,9 @@
2
2
 
3
3
  class Shrine
4
4
  module Plugins
5
+ # Documentation lives in [doc/plugins/remove_invalid.md] on GitHub.
6
+ #
7
+ # [doc/plugins/remove_invalid.md]: https://github.com/shrinerb/shrine/blob/master/doc/plugins/remove_invalid.md
5
8
  module RemoveInvalid
6
9
  module AttacherMethods
7
10
  def validate
@@ -2,6 +2,9 @@
2
2
 
3
3
  class Shrine
4
4
  module Plugins
5
+ # Documentation lives in [doc/plugins/restore_cached_data.md] on GitHub.
6
+ #
7
+ # [doc/plugins/restore_cached_data.md]: https://github.com/shrinerb/shrine/blob/master/doc/plugins/restore_cached_data.md
5
8
  module RestoreCachedData
6
9
  def self.load_dependencies(uploader, *)
7
10
  uploader.plugin :refresh_metadata
@@ -4,6 +4,9 @@ require "sequel"
4
4
 
5
5
  class Shrine
6
6
  module Plugins
7
+ # Documentation lives in [doc/plugins/sequel.md] on GitHub.
8
+ #
9
+ # [doc/plugins/sequel.md]: https://github.com/shrinerb/shrine/blob/master/doc/plugins/sequel.md
7
10
  module Sequel
8
11
  def self.configure(uploader, opts = {})
9
12
  uploader.opts[:sequel_callbacks] = opts.fetch(:callbacks, uploader.opts.fetch(:sequel_callbacks, true))
@@ -2,6 +2,9 @@
2
2
 
3
3
  class Shrine
4
4
  module Plugins
5
+ # Documentation lives in [doc/plugins/signature.md] on GitHub.
6
+ #
7
+ # [doc/plugins/signature.md]: https://github.com/shrinerb/shrine/blob/master/doc/plugins/signature.md
5
8
  module Signature
6
9
  module ClassMethods
7
10
  # Calculates `algorithm` hash of the contents of the IO object, and
@@ -2,6 +2,9 @@
2
2
 
3
3
  class Shrine
4
4
  module Plugins
5
+ # Documentation lives in [doc/plugins/store_dimensions.md] on GitHub.
6
+ #
7
+ # [doc/plugins/store_dimensions.md]: https://github.com/shrinerb/shrine/blob/master/doc/plugins/store_dimensions.md
5
8
  module StoreDimensions
6
9
  def self.configure(uploader, opts = {})
7
10
  uploader.opts[:dimensions_analyzer] = opts.fetch(:analyzer, uploader.opts.fetch(:dimensions_analyzer, :fastimage))
@@ -38,7 +41,7 @@ class Shrine
38
41
 
39
42
  module InstanceMethods
40
43
  # We update the metadata with "width" and "height".
41
- def extract_metadata(io, context)
44
+ def extract_metadata(io, context = {})
42
45
  width, height = extract_dimensions(io)
43
46
 
44
47
  super.merge!("width" => width, "height" => height)
@@ -1,5 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Shrine
2
4
  module Plugins
5
+ # Documentation lives in [doc/plugins/tempfile.md] on GitHub.
6
+ #
7
+ # [doc/plugins/tempfile.md]: https://github.com/shrinerb/shrine/blob/master/doc/plugins/tempfile.md
3
8
  module Tempfile
4
9
  module ClassMethods
5
10
  def with_file(io)
@@ -7,6 +7,9 @@ require "digest"
7
7
 
8
8
  class Shrine
9
9
  module Plugins
10
+ # Documentation lives in [doc/plugins/upload_endpoint.md] on GitHub.
11
+ #
12
+ # [doc/plugins/upload_endpoint.md]: https://github.com/shrinerb/shrine/blob/master/doc/plugins/upload_endpoint.md
10
13
  module UploadEndpoint
11
14
  def self.load_dependencies(uploader, opts = {})
12
15
  uploader.plugin :rack_file
@@ -2,6 +2,9 @@
2
2
 
3
3
  class Shrine
4
4
  module Plugins
5
+ # Documentation lives in [doc/plugins/upload_options.md] on GitHub.
6
+ #
7
+ # [doc/plugins/upload_options.md]: https://github.com/shrinerb/shrine/blob/master/doc/plugins/upload_options.md
5
8
  module UploadOptions
6
9
  def self.configure(uploader, options = {})
7
10
  uploader.opts[:upload_options] ||= {}
@@ -2,6 +2,9 @@
2
2
 
3
3
  class Shrine
4
4
  module Plugins
5
+ # Documentation lives in [doc/plugins/validation_helpers.md] on GitHub.
6
+ #
7
+ # [doc/plugins/validation_helpers.md]: https://github.com/shrinerb/shrine/blob/master/doc/plugins/validation_helpers.md
5
8
  module ValidationHelpers
6
9
  def self.configure(uploader, opts = {})
7
10
  uploader.opts[:validation_default_messages] ||= {}
@@ -2,6 +2,9 @@
2
2
 
3
3
  class Shrine
4
4
  module Plugins
5
+ # Documentation lives in [doc/plugins/versions.md] on GitHub.
6
+ #
7
+ # [doc/plugins/versions.md]: https://github.com/shrinerb/shrine/blob/master/doc/plugins/versions.md
5
8
  module Versions
6
9
  def self.load_dependencies(uploader, *)
7
10
  uploader.plugin :default_url
@@ -91,9 +91,9 @@ class Shrine
91
91
  # # or
92
92
  #
93
93
  # uploaded_file.open { |io| io.read } # the IO is automatically closed
94
- def open(*args)
94
+ def open(**options)
95
95
  @io.close if @io
96
- @io = storage.open(id, *args)
96
+ @io = _open(**options)
97
97
 
98
98
  return @io unless block_given?
99
99
 
@@ -120,9 +120,9 @@ class Shrine
120
120
  # # or
121
121
  #
122
122
  # uploaded_file.download { |tempfile| tempfile.read } # tempfile is deleted
123
- def download(*args)
123
+ def download(**options)
124
124
  tempfile = Tempfile.new(["shrine", ".#{extension}"], binmode: true)
125
- stream(tempfile, *args)
125
+ stream(tempfile, **options)
126
126
  tempfile.open
127
127
 
128
128
  block_given? ? yield(tempfile) : tempfile
@@ -141,12 +141,12 @@ class Shrine
141
141
  # uploaded_file.stream(StringIO.new)
142
142
  # # or
143
143
  # uploaded_file.stream("/path/to/destination")
144
- def stream(destination, *args)
144
+ def stream(destination, **options)
145
145
  if opened?
146
146
  IO.copy_stream(io, destination)
147
147
  io.rewind
148
148
  else
149
- open(*args) { |io| IO.copy_stream(io, destination) }
149
+ open(**options) { |io| IO.copy_stream(io, destination) }
150
150
  end
151
151
  end
152
152
 
@@ -251,7 +251,15 @@ class Shrine
251
251
  # Returns an opened IO object for the uploaded file by calling `#open`
252
252
  # on the storage.
253
253
  def io
254
- @io || open
254
+ @io ||= _open
255
+ end
256
+
257
+ def _open(**options)
258
+ if options.any?
259
+ storage.open(id, **options)
260
+ else
261
+ storage.open(id) # some storage implementations might not accept additional arguments
262
+ end
255
263
  end
256
264
  end
257
265
  end
@@ -7,7 +7,7 @@ class Shrine
7
7
 
8
8
  module VERSION
9
9
  MAJOR = 2
10
- MINOR = 15
10
+ MINOR = 16
11
11
  TINY = 0
12
12
  PRE = nil
13
13
 
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.15.0
4
+ version: 2.16.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: 2019-02-08 00:00:00.000000000 Z
11
+ date: 2019-02-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: down
@@ -445,6 +445,7 @@ files:
445
445
  - doc/release_notes/2.13.0.md
446
446
  - doc/release_notes/2.14.0.md
447
447
  - doc/release_notes/2.15.0.md
448
+ - doc/release_notes/2.16.0.md
448
449
  - doc/release_notes/2.2.0.md
449
450
  - doc/release_notes/2.3.0.md
450
451
  - doc/release_notes/2.3.1.md