kar 0.1.0 → 0.1.1

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: 9cb55eed4dafe4bbab2c0538ae1a8db4bfa7c7eec218bbcfd032e6338f6dd73f
4
- data.tar.gz: a8fc42a08018db8aa2ed5a2d7a12f4450d130df764d4cd1462548929e2c8fb37
3
+ metadata.gz: bd14a44367840ddf1ed8e199a4682bd4cfad4f734d06d3220d7aee30e92ea64c
4
+ data.tar.gz: fdd7c35b0aded9a6c25de853e6274cf4cd4a524c4f6113ceee710182d6188ee7
5
5
  SHA512:
6
- metadata.gz: '0913f70bb384324388c9b431e3da5de8859c5ca800b3a516ee28f8e976b00dbda7c9a73c19d09a05e07ecc2c751168f8d8a611cb69ba87fcc62e7aae4377233b'
7
- data.tar.gz: 34ec977869d4ae40f8ca4109a92682ad92ed2265ec22abef08ca896cde6a6c323adbde54ba69b268cbb377a4d8ed554edd4272d58120d3eaf5e6f737c4b52a75
6
+ metadata.gz: 21cbecd6b7218e5d17d081db576e90015688d5957d796b65899138ee6e12a42a1d7a44447e70d16b65992fe2b7b0129eebe6a6a34c8d455a5c596aa1c15bea78
7
+ data.tar.gz: 40c5df4efcce865bb3f03fb9483a0b33313acbf6f6462bb33b89b2481dfae8497d7c664251f51b8b0d43ce84e4cc4e0ee3df28d00ecd85c79e9a20f25a43a9de
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.1.1] - 2025-10-24
4
+
5
+ - URITask, handle redirection
6
+
3
7
  ## [0.1.0] - 2024-01-09
4
8
 
5
9
  - Initial release
data/lib/kar/uritask.rb CHANGED
@@ -9,6 +9,8 @@ module Kar
9
9
  # Instanctiated in {DSL#download}
10
10
  class URITask < Rake::TaskLib
11
11
  module Util
12
+ REDIRECT_LIMIT = 3
13
+
12
14
  module_function
13
15
 
14
16
  # @todo Consider return value type
@@ -18,27 +20,54 @@ module Kar
18
20
  # @param headers [Hash<String, Object?>] HTTP headers
19
21
  # @return [String] File path content saved, same to +to+
20
22
  # @return [nil] if remote file responded with 304 Not Modified
21
- def fetch_http(uri, to, headers = {})
22
- http = Net::HTTP.new(uri.host, uri.port)
23
- http.use_ssl = uri.scheme == "https"
24
- http.start do |http|
25
- File.open to, "wb" do |file|
26
- http.request_get uri, headers do |response|
27
- return if response.kind_of? Net::HTTPNotModified
28
-
29
- response.read_body do |chunk|
30
- file.write chunk
31
- end
32
- begin
33
- File.utime Time.now, Time.httpdate(response["Last-Modified"]), to
34
- rescue => err
35
- warn err
23
+ def fetch_http(uri, to, headers = {}, redirected = 0)
24
+ if redirected > REDIRECT_LIMIT
25
+ raise "Too many HTTP redirects"
26
+ end
27
+ Net::HTTP.start uri.host, uri.port, use_ssl: uri.scheme == "https" do |http|
28
+ request = Net::HTTP::Get.new(uri, headers)
29
+ http.request request do |response|
30
+ case response
31
+ when Net::HTTPNotModified
32
+ # noop
33
+ when Net::HTTPOK
34
+ File.open to, "wb" do |file|
35
+ response.read_body do |chunk|
36
+ file.write chunk
37
+ end
38
+ now = Time.now
39
+ last_modified = response["last-modified"]
40
+ mtime = last_modified ? Time.httpdate(last_modified) : now
41
+ File.utime now, Time.httpdate(response["Last-Modified"]), to
36
42
  end
43
+ when Net::HTTPRedirection
44
+ fetch_http URI(response["location"]), to, headers, redirected + 1
45
+ else
46
+ raise "#{response.code} #{response.message}\n#{response.body}"
37
47
  end
38
48
  end
39
49
  end
50
+
40
51
  to
41
52
  end
53
+
54
+ private
55
+
56
+ def fetch_http_with_redirection_handling(uri, headers = {})
57
+ Net::HTTP.start uri.host, uri.port, use_ssl: uri.scheme == "https" do |http|
58
+ request = Net::HTTP::Get.new(uri, headers)
59
+ http.request request do |response|
60
+ case response
61
+ when Net::HTTPRedirection
62
+ return fetch_http_with_redirection_handling(URI(response["location"]), headers)
63
+ when Net::HTTPOK
64
+ return response
65
+ else
66
+ raise "#{response.code} #{response.message}\n#{response.body}"
67
+ end
68
+ end
69
+ end
70
+ end
42
71
  end
43
72
 
44
73
  include Util
data/lib/kar/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kar
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kitaiti Makoto
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-08-22 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: rake
@@ -92,7 +91,6 @@ metadata:
92
91
  homepage_uri: https://gitlab.com/KitaitiMakoto/kar
93
92
  source_code_uri: https://gitlab.com/KitaitiMakoto/kar
94
93
  changelog_uri: https://gitlab.com/KitaitiMakoto/kar/CHANGELOG.md
95
- post_install_message:
96
94
  rdoc_options: []
97
95
  require_paths:
98
96
  - lib
@@ -107,8 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
105
  - !ruby/object:Gem::Version
108
106
  version: '0'
109
107
  requirements: []
110
- rubygems_version: 3.5.16
111
- signing_key:
108
+ rubygems_version: 3.7.2
112
109
  specification_version: 4
113
110
  summary: Rake utilities
114
111
  test_files: []