shrine-url 2.1.0 → 2.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1a844c3ca62dcf102d0f08b4dc55f8fff6e14d265d1eeb39a5c7cae17578ca33
4
- data.tar.gz: b5841496454d1e6a88a687140d624a6097e25d1dbaf096d546892e8e48d86919
3
+ metadata.gz: 3d71adf3e0289f46eb8d37e30fbe150d0437a7ab1c7c5792bac97a422ed06527
4
+ data.tar.gz: 3975124486888b299ee14fb31f4d33a7da0af429153a8af63db27619140540c8
5
5
  SHA512:
6
- metadata.gz: 1c7684ea16e98cee1ea5b0a4cf13956285170fbfa4d69192d965ae58d6c34a5825047d5479e0faa9816c0fcc9ac9a11220dcfb69aaea30bd9ed1b77c8863eff4
7
- data.tar.gz: 374b68a8fedb6a2bbd304cef2722ed9640a0ee8c3a05d9994772168b6d323a303bd1844246d15e2eefba1d4c353eeaeeffa3dc5e755847bf957df3f3629a4ef4
6
+ metadata.gz: 405e170fe35aa5e1ae3536872bebe93a1a6cbeb38c6f3d4e63de402a59963d31b87ada22d614345ca4bf6c12e06fcd56a21b72cbf9e43e3e9906b2ff94c17852
7
+ data.tar.gz: 17e3874c33214e2f488d0f8c3527926be6ae49e9125329305dbda9de1b9bb351d917d7e7ca665aa125593f1816c5c4b6a027ef2f5e79c9d367526e1bd49981ef
data/README.md CHANGED
@@ -5,8 +5,8 @@ custom URL.
5
5
 
6
6
  ## Installation
7
7
 
8
- ```ruby
9
- gem "shrine-url"
8
+ ```rb
9
+ gem "shrine-url", "~> 2.0"
10
10
  ```
11
11
 
12
12
  ## Usage
@@ -35,18 +35,24 @@ Now you can assign this data as the cached attachment:
35
35
  ```rb
36
36
  photo = Photo.new(image: data)
37
37
  photo.image #=> #<Shrine::UploadedFile>
38
-
39
38
  photo.image.url #=> "http://example.com/image.jpg"
40
- photo.image.download # Sends a GET request and streams body to Tempfile
41
- photo.image.open { |io| } # Sends a GET request and yields `Down::ChunkedIO` ready for reading
42
- photo.image.exists? # Sends a HEAD request and returns true if it's 2xx
43
- photo.image.delete # Sends a DELETE request
44
39
  ```
45
40
 
46
- No HTTP requests are made at this point. When this "cached file" is about to be
47
- uploaded to a permanent storage, `shrine-url` will download the file from the
48
- given URL using [Down]. By default the `Down::NetHttp` backend will be used for
49
- downloading, but you can tell `shrine-url` to use another Down backend:
41
+ No HTTP requests are made when file is assigned (but you can load the
42
+ `restore_cached_data` Shrine plugin if you want metadata to be extracted on
43
+ assignment). When this "cached file" is about to be uploaded to a permanent
44
+ storage, `shrine-url` will download the file from the given URL using [Down].
45
+
46
+ ```rb
47
+ uploaded_file.download # Sends a GET request and streams body to Tempfile
48
+ uploaded_file.open { |io| } # Sends a GET request and yields `Down::ChunkedIO` ready for reading
49
+ uploaded_file.exists? # Sends a HEAD request and returns true if response status is 2xx
50
+ uploaded_file.delete # Sends a DELETE request if :delete is set to true
51
+ ```
52
+
53
+ By default the `Down::Http` backend will be used for downloading, which is
54
+ implemented using [HTTP.rb]. You can change the Down backend via the
55
+ `:downloader` option:
50
56
 
51
57
  ```rb
52
58
  Shrine::Storage::Url.new(downloader: :wget)
@@ -63,6 +69,16 @@ remote URL (like [shrine-cloudinary] or [shrine-uploadcare]), downloading will
63
69
  be completely skipped as the permanent storage will use only the URL for
64
70
  uploading the file.
65
71
 
72
+ ## Deleting
73
+
74
+ Calling `Shrine::UploadedFile#delete` will call `Shrine::Storage::Url#delete`,
75
+ which for safety doesn't do anything by default. If you want it to make a
76
+ `DELETE` request to the URL, you can set `:delete` to `true` on initialization:
77
+
78
+ ```rb
79
+ Shrine::Storage::Url.new(delete: true)
80
+ ```
81
+
66
82
  ## Advantages and Use Cases
67
83
 
68
84
  The main advantage of using `shrine-url` over the `remote_url` Shrine plugin is
@@ -98,4 +114,5 @@ you'll need to have Docker installed and running.
98
114
  [shrine-cloudinary]: https://github.com/shrinerb/shrine-cloudinary
99
115
  [shrine-uploadcare]: https://github.com/shrinerb/shrine-uploadcare
100
116
  [Down]: https://github.com/janko-m/down
117
+ [HTTP.rb]: https://github.com/httprb/http
101
118
  [kennethreitz/httpbin]: https://github.com/kennethreitz/httpbin
@@ -6,14 +6,9 @@ class Shrine
6
6
  class Url
7
7
  attr_reader :downloader
8
8
 
9
- def initialize(downloader: :http)
10
- if downloader.is_a?(Symbol)
11
- require "down/#{downloader}"
12
- const_name = downloader.to_s.split("_").map(&:capitalize).join
13
- @downloader = Down.const_get(const_name)
14
- else
15
- @downloader = downloader
16
- end
9
+ def initialize(downloader: :http, delete: false)
10
+ @downloader = resolve_downloader(downloader)
11
+ @delete = false
17
12
  end
18
13
 
19
14
  def upload(io, id, **)
@@ -38,17 +33,26 @@ class Shrine
38
33
  end
39
34
 
40
35
  def delete(id)
41
- request(:delete, id)
36
+ request(:delete, id) if @delete
42
37
  end
43
38
 
44
39
  private
45
40
 
46
- def request(verb, url, follow: {}, headers: {}, **options)
47
- options[:follow] = { max_hops: 2 }.merge(follow)
48
- options[:headers] = { user_agent: "shrine-url/1.0.2" }.merge(headers)
41
+ def request(verb, url, follow: {}, **options)
42
+ options[:follow] = { max_hops: 2 }.merge(follow)
49
43
 
50
44
  HTTP.request(verb, url, options)
51
45
  end
46
+
47
+ def resolve_downloader(downloader)
48
+ if downloader.is_a?(Symbol)
49
+ require "down/#{downloader}"
50
+ const_name = downloader.to_s.split("_").map(&:capitalize).join
51
+ Down.const_get(const_name)
52
+ else
53
+ downloader
54
+ end
55
+ end
52
56
  end
53
57
  end
54
58
  end
data/shrine-url.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |gem|
2
2
  gem.name = "shrine-url"
3
- gem.version = "2.1.0"
3
+ gem.version = "2.2.0"
4
4
 
5
5
  gem.required_ruby_version = ">= 2.1"
6
6
 
@@ -15,7 +15,7 @@ Gem::Specification.new do |gem|
15
15
 
16
16
  gem.add_dependency "shrine", ">= 2.0"
17
17
  gem.add_dependency "down", "~> 4.4"
18
- gem.add_dependency "http", "~> 3.2"
18
+ gem.add_dependency "http", ">= 3.2", "< 5"
19
19
 
20
20
  gem.add_development_dependency "rake"
21
21
  gem.add_development_dependency "minitest"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shrine-url
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.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: 2018-05-02 00:00:00.000000000 Z
11
+ date: 2019-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: shrine
@@ -42,16 +42,22 @@ dependencies:
42
42
  name: http
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '3.2'
48
+ - - "<"
49
+ - !ruby/object:Gem::Version
50
+ version: '5'
48
51
  type: :runtime
49
52
  prerelease: false
50
53
  version_requirements: !ruby/object:Gem::Requirement
51
54
  requirements:
52
- - - "~>"
55
+ - - ">="
53
56
  - !ruby/object:Gem::Version
54
57
  version: '3.2'
58
+ - - "<"
59
+ - !ruby/object:Gem::Version
60
+ version: '5'
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: rake
57
63
  requirement: !ruby/object:Gem::Requirement
@@ -138,8 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
144
  - !ruby/object:Gem::Version
139
145
  version: '0'
140
146
  requirements: []
141
- rubyforge_project:
142
- rubygems_version: 2.7.6
147
+ rubygems_version: 3.0.1
143
148
  signing_key:
144
149
  specification_version: 4
145
150
  summary: Provides a fake storage which allows you to create a Shrine attachment defined