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 +4 -4
- data/README.md +19 -17
- data/lib/shrine/storage/url.rb +10 -60
- data/shrine-url.gemspec +6 -3
- metadata +50 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 279d319f5a6e2538dfca270f1b5d897f3f7c476c
|
4
|
+
data.tar.gz: c7457ca67917a378acc4c3312b0096d2c6a379aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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"
|
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
|
47
|
-
permanent storage, `shrine-url` will
|
48
|
-
|
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
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
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
|
data/lib/shrine/storage/url.rb
CHANGED
@@ -4,8 +4,16 @@ require "net/http"
|
|
4
4
|
class Shrine
|
5
5
|
module Storage
|
6
6
|
class Url
|
7
|
-
|
8
|
-
|
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
|
+
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", "
|
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 "
|
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.
|
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-
|
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:
|
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:
|
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:
|
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.
|
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
|