shrine-url 0.3.1 → 1.0.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
  SHA1:
3
- metadata.gz: 44b34a1d4fbd4f6cbf9ae2e831e743f523eb0930
4
- data.tar.gz: 8305097455d28e605daddf904c3e9467c7966dfa
3
+ metadata.gz: 279d319f5a6e2538dfca270f1b5d897f3f7c476c
4
+ data.tar.gz: c7457ca67917a378acc4c3312b0096d2c6a379aa
5
5
  SHA512:
6
- metadata.gz: a04868b1733d793007eb4b014c0b0027e5ee7b2a3939731b0bc0cbaadd5b40bca218668dd9db941b5bfdb083ad282d8d5e6cb6e8bc065540cc9cf202e0b26b2e
7
- data.tar.gz: da8901cb7ae05bb35e498d4cf56f94f02392ad469c42129a47e4e9aeae67595419d6cef6b3bc521501bc6bd2dc5133769dea2e9e1c342655d28040799e117881
6
+ metadata.gz: 02c67d530326bd9525741d4c0366b59c3ce6071e9c53803730a599faed2a2bdb7bf3846d3479c08af47401de7f0ca1d2b8d3cdd6765d5ae53185e7b0d7fbdfac
7
+ data.tar.gz: 5b784b1d8c35665d573fcb2b68454e5aa94360359b66d54240fa009876c8c5431d031f3b25ee912ca707e7c32961c2af34aeb8c2b9e46323af061380e7352bbb
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Shrine::Storage::Url
2
2
 
3
- Provides a "storage" which allows you to attach uploaded files defined by a
3
+ Provides a "storage" for [Shrine] for attaching uploaded files defined by a
4
4
  custom URL.
5
5
 
6
6
  ## Installation
@@ -43,27 +43,25 @@ photo.image.exists? # Sends a HEAD request and returns true if it's 2xx
43
43
  photo.image.delete # Sends a DELETE request
44
44
  ```
45
45
 
46
- No HTTP requests are made at this point. When the cached file is uploaded to
47
- permanent storage, `shrine-url` will by default use [Down] to download the file
48
- from the given URL, before uploading it to permanent storage.
49
-
50
- Note that Down doesn't yet support resuming the download in case of network
51
- failures, so if you're expecting large files to be attached, you might want to
52
- tell `Shrine::Storage::Url` to use `wget` instead of Down.
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:
53
50
 
54
51
  ```rb
55
52
  Shrine::Storage::Url.new(downloader: :wget)
53
+ # or
54
+ require "down/http"
55
+ Shrine::Storage::Url.new(downloader: Down::Http)
56
+ # or
57
+ require "down/net_http"
58
+ Shrine::Storage::Url.new(downloader: Down::NetHttp.new("User-Agent" => "MyApp/1.0.0"))
56
59
  ```
57
60
 
58
- Just note that using `wget` won't work well with the `restore_cached_data`
59
- Shrine plugin from the performance standpoint, because `wget` doesn't support
60
- partial downloads, so the file would first be fully downloaded before
61
- extracting metadata.
62
-
63
- If you're using permanent storage that supports uploading from remote URL (like
64
- [shrine-cloudinary] or [shrine-uploadcare]), downloading will be completely
65
- skipped and the permanent storage will use only the custom URL for uploading
66
- the file.
61
+ Note that if you're using permanent storage that supports uploading from a
62
+ remote URL (like [shrine-cloudinary] or [shrine-uploadcare]), downloading will
63
+ be completely skipped as the permanent storage will use only the URL for
64
+ uploading the file.
67
65
 
68
66
  ## Advantages and Use Cases
69
67
 
@@ -87,10 +85,14 @@ promoted to permanent storage.
87
85
  $ rake test
88
86
  ```
89
87
 
88
+ The test suite pulls and runs [kennethreitz/httpbin] as a Docker container, so
89
+ you'll need to have Docker installed and running.
90
+
90
91
  ## License
91
92
 
92
93
  [MIT](/LICENSE.txt)
93
94
 
95
+ [Shrine]: https://github.com/janko-m/shrine
94
96
  [shrine-transloadit]: https://github.com/janko-m/shrine-transloadit
95
97
  [shrine-tus-demo]: https://github.com/janko-m/shrine-tus-demo
96
98
  [shrine-cloudinary]: https://github.com/janko-m/shrine-cloudinary
@@ -4,8 +4,16 @@ require "net/http"
4
4
  class Shrine
5
5
  module Storage
6
6
  class Url
7
- def initialize(downloader: :down)
8
- @downloader = Downloader.new(downloader)
7
+ attr_reader :downloader
8
+
9
+ def initialize(downloader: :net_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
17
  end
10
18
 
11
19
  def upload(io, id, **)
@@ -47,64 +55,6 @@ class Shrine
47
55
 
48
56
  response
49
57
  end
50
-
51
- class Downloader
52
- SUPPORTED_TOOLS = [:down, :wget]
53
-
54
- def initialize(tool)
55
- raise ArgumentError, "unsupported downloading tool: #{tool}" unless SUPPORTED_TOOLS.include?(tool)
56
-
57
- @tool = tool
58
- end
59
-
60
- def download(url)
61
- send(:"download_with_#{@tool}", url)
62
- end
63
-
64
- def open(url)
65
- send(:"open_with_#{@tool}", url)
66
- end
67
-
68
- private
69
-
70
- def download_with_down(url)
71
- require "down"
72
- Down.download(url)
73
- end
74
-
75
- def open_with_down(url)
76
- require "down"
77
- Down.open(url)
78
- end
79
-
80
- def download_with_wget(url)
81
- require "tempfile"
82
- require "open3"
83
-
84
- tempfile = Tempfile.new("shrine-url", binmode: true)
85
- cmd = %W[wget --no-verbose #{url} -O #{tempfile.path}]
86
-
87
- begin
88
- stdout, stderr, status = Open3.capture3(*cmd)
89
-
90
- if !status.success?
91
- tempfile.close!
92
- raise Error, "downloading from #{url} failed: #{stderr}"
93
- end
94
- rescue Errno::ENOENT
95
- raise Error, "wget is not installed"
96
- end
97
-
98
- tempfile.open # refresh file descriptor
99
- tempfile
100
- end
101
-
102
- def open_with_wget(url)
103
- tempfile = download_with_wget(url)
104
- tempfile.instance_eval { def close(unlink_now=true) super end } # delete tempfile when it's closed
105
- tempfile
106
- end
107
- end
108
58
  end
109
59
  end
110
60
  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 = "0.3.1"
3
+ gem.version = "1.0.0"
4
4
 
5
5
  gem.required_ruby_version = ">= 2.1"
6
6
 
@@ -14,9 +14,12 @@ Gem::Specification.new do |gem|
14
14
  gem.require_path = "lib"
15
15
 
16
16
  gem.add_dependency "shrine", ">= 2.0"
17
- gem.add_dependency "down", ">= 2.3.7"
17
+ gem.add_dependency "down", "~> 4.0"
18
18
 
19
19
  gem.add_development_dependency "rake"
20
20
  gem.add_development_dependency "minitest"
21
- gem.add_development_dependency "webmock"
21
+ gem.add_development_dependency "docker-api"
22
+ gem.add_development_dependency "http", "~> 2.2"
23
+ gem.add_development_dependency "posix-spawn" unless RUBY_ENGINE == "jruby"
24
+ gem.add_development_dependency "http_parser.rb"
22
25
  end
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: 0.3.1
4
+ version: 1.0.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-04-09 00:00:00.000000000 Z
11
+ date: 2017-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: shrine
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: down
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 2.3.7
33
+ version: '4.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: 2.3.7
40
+ version: '4.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -67,7 +67,49 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: webmock
70
+ name: docker-api
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: http
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.2'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.2'
97
+ - !ruby/object:Gem::Dependency
98
+ name: posix-spawn
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: http_parser.rb
71
113
  requirement: !ruby/object:Gem::Requirement
72
114
  requirements:
73
115
  - - ">="
@@ -111,7 +153,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
111
153
  version: '0'
112
154
  requirements: []
113
155
  rubyforge_project:
114
- rubygems_version: 2.5.1
156
+ rubygems_version: 2.6.11
115
157
  signing_key:
116
158
  specification_version: 4
117
159
  summary: Provides a fake storage which allows you to create a Shrine attachment defined