shrine-url 0.3.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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