shrine-url 1.0.1 → 1.0.2

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: f4f3a92060828b60ded518a3b4b1413c3682851d
4
- data.tar.gz: 756dcbadd24b79466452c81a3c226b0212505ed5
3
+ metadata.gz: 8884463934019ade14512eb3c9c77de112f794f1
4
+ data.tar.gz: e5168e1c97e08633de01f5fec999a7f30fd37772
5
5
  SHA512:
6
- metadata.gz: 6b80cf29c41b9072e6aae47d3845edf7910b1b6eba8ad71b1182318520eacc4c94c5007587bf056d7fd09cebe07b29bdf8312072315026420470e5ebbc2e5444
7
- data.tar.gz: c06953325cc2c20bd4d4bed5e2641ab1b2d6739d07989fc8a925c0dc9cdbdfc5785ce54488f942a1b6142c6af61333c09f30982e42fc018470fa5f26fe81bb4b
6
+ metadata.gz: 5a2e51d82d4a5bfe0270941ddd7b742328ece218ca87de90c8e0a332a7fec634398bc7ec8b0f0a14be99e20dcdf9b78b798fe35ec8ad029f0ce06df43fa9c48e
7
+ data.tar.gz: 107dda6adb5afe73affed0f441b26a981bfa4782d9b4e4e7c8d9d011c180d938e9d4a34f59b6327f6887c9dac69d75789d2123e10ff0e7eb1cc8fbd48e0e0506
@@ -1,5 +1,6 @@
1
1
  require "shrine"
2
2
  require "net/https"
3
+ require "uri"
3
4
 
4
5
  class Shrine
5
6
  module Storage
@@ -30,7 +31,7 @@ class Shrine
30
31
 
31
32
  def exists?(id)
32
33
  response = request(:head, id)
33
- (200..299).cover?(response.code.to_i)
34
+ (200..399).cover?(response.code.to_i)
34
35
  end
35
36
 
36
37
  def url(id, **options)
@@ -43,15 +44,24 @@ class Shrine
43
44
 
44
45
  private
45
46
 
46
- def request(method, url)
47
+ def request(verb, url, follows_remaining: 2)
47
48
  uri = URI.parse(url)
48
49
  use_ssl = uri.is_a?(URI::HTTPS)
49
50
 
50
- Net::HTTP.start(uri.host, uri.port, use_ssl: use_ssl) do |http|
51
- request = Net::HTTP.const_get(method.to_s.capitalize).new(uri.request_uri)
51
+ response = Net::HTTP.start(uri.host, uri.port, use_ssl: use_ssl) do |http|
52
+ request = Net::HTTP.const_get(verb.capitalize).new(uri.request_uri)
52
53
  yield request if block_given?
53
54
  http.request(request)
54
55
  end
56
+
57
+ if response.is_a?(Net::HTTPRedirection) && follows_remaining > 0
58
+ location = URI.parse(response["Location"])
59
+ location = uri + location if location.relative?
60
+
61
+ response = request(verb, location.to_s, follows_remaining: follows_remaining - 1)
62
+ end
63
+
64
+ response
55
65
  end
56
66
  end
57
67
  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 = "1.0.1"
3
+ gem.version = "1.0.2"
4
4
 
5
5
  gem.required_ruby_version = ">= 2.1"
6
6
 
@@ -19,7 +19,7 @@ Gem::Specification.new do |gem|
19
19
  gem.add_development_dependency "rake"
20
20
  gem.add_development_dependency "minitest"
21
21
  gem.add_development_dependency "docker-api"
22
- gem.add_development_dependency "http", "~> 2.2"
22
+ gem.add_development_dependency "http", "~> 3.0"
23
23
  gem.add_development_dependency "posix-spawn" unless RUBY_ENGINE == "jruby"
24
24
  gem.add_development_dependency "http_parser.rb"
25
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: 1.0.1
4
+ version: 1.0.2
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-10-18 00:00:00.000000000 Z
11
+ date: 2017-12-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: shrine
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '2.2'
89
+ version: '3.0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '2.2'
96
+ version: '3.0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: posix-spawn
99
99
  requirement: !ruby/object:Gem::Requirement