fetch-api 0.3.3 → 0.3.5

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: 1b10573a6b8299637e5e694f582aeca98a5f6a98f034b5995715a1047e1fd52d
4
- data.tar.gz: 704d073756a119bea36d3a65d2528726cb8ee514e94b70172f209577d4bca3b2
3
+ metadata.gz: c2ece1d340c0de1c25cf5ff54b2faa9282e457a398b1e02e8b1254c869643e63
4
+ data.tar.gz: af89501158b402c8b5a2d5ac6961a93546b5a6caa78c8f27492ff1b0fc4b5be4
5
5
  SHA512:
6
- metadata.gz: '08f6657f264bbba58bdddda3f923c886cda73d5f853bfa3dfdea14896e35da915409a8408d2c0e08396db177f9fdc91e3807d91a241267157bbc801c914f0d93'
7
- data.tar.gz: d8909c92cda908f4732280183f6e09317c1f51a899dabfb36aa2b5066c6bf69616ee8b3e6c4222c36936f6333743619274306b6467f7079234648e9b81c57cbb
6
+ metadata.gz: f42136117dc9ff72634fdd12774dd6bc270d3c7f58363a0b78c74e216f12b241d35f60329f3957219d79a3d6b81ffb1b73917a7788647252b42a5271056df5fb
7
+ data.tar.gz: 9902db054b692dc72bd645c7d7030ec7392369d41e70d3d27b64b19f871294749e065eae638604b23ab418133a16c0b13d444bb132aab96274327482c516ecff
data/lib/fetch/client.rb CHANGED
@@ -4,8 +4,9 @@ require_relative 'headers'
4
4
  require_relative 'response'
5
5
  require_relative 'url_search_params'
6
6
 
7
- require 'marcel'
7
+ require 'mini_mime'
8
8
  require 'net/http'
9
+ require 'net/https'
9
10
  require 'singleton'
10
11
  require 'uri'
11
12
 
@@ -18,7 +19,7 @@ module Fetch
18
19
  req = Net::HTTP.const_get(method.capitalize).new(uri)
19
20
 
20
21
  headers.each do |k, v|
21
- req[k] = v
22
+ req[k.to_s] = v.to_s
22
23
  end
23
24
 
24
25
  case body
@@ -27,7 +28,7 @@ module Fetch
27
28
  if v.is_a?(File)
28
29
  [k, v, {
29
30
  filename: File.basename(v.path),
30
- content_type: Marcel::MimeType.for(name: v.path)
31
+ content_type: MiniMime.lookup_by_filename(v.path)&.content_type || 'application/octet-stream'
31
32
  }]
32
33
  else
33
34
  [k, v]
@@ -39,7 +40,7 @@ module Fetch
39
40
  req.body = body
40
41
  end
41
42
 
42
- http = Net::HTTP.new(uri.hostname, uri.port)
43
+ http = Net::HTTP.new(uri.hostname, uri.port) # steep:ignore ArgumentTypeMismatch
43
44
  http.use_ssl = uri.scheme == 'https'
44
45
 
45
46
  res = http.start { _1.request(req) }
@@ -48,7 +49,7 @@ module Fetch
48
49
  when Net::HTTPRedirection
49
50
  case redirect.to_s
50
51
  when 'follow'
51
- fetch(res['Location'], method:, headers:, body:, redirect:, _redirected: true)
52
+ fetch(res['Location'], method:, headers:, body:, redirect:, _redirected: true) # steep:ignore ArgumentTypeMismatch
52
53
  when 'error'
53
54
  raise RedirectError, "redirected to #{res['Location']}"
54
55
  when 'manual'
@@ -65,9 +66,9 @@ module Fetch
65
66
 
66
67
  def to_response(url, res, redirected)
67
68
  Response.new(
68
- url: ,
69
+ url: url.to_str,
69
70
  status: res.code.to_i,
70
- headers: Headers.new(res),
71
+ headers: Headers.new(res.each),
71
72
  body: res.body,
72
73
  redirected:
73
74
  )
@@ -19,7 +19,7 @@ module Fetch
19
19
  attr_reader :entries
20
20
 
21
21
  def append(key, value)
22
- @entries.push [key.to_s, value]
22
+ @entries.push [key.to_s, value.is_a?(File) ? value : value.to_s]
23
23
  end
24
24
 
25
25
  def delete(key)
@@ -51,8 +51,8 @@ module Fetch
51
51
  @entries.map(&:last)
52
52
  end
53
53
 
54
- def each(&block)
55
- @entries.each(&block)
54
+ def each(&)
55
+ @entries.each(&)
56
56
  end
57
57
  end
58
58
  end
data/lib/fetch/headers.rb CHANGED
@@ -11,7 +11,7 @@ module Fetch
11
11
  end
12
12
 
13
13
  def append(key, value)
14
- (@data[key.to_s.downcase] ||= []) << value
14
+ (@data[key.to_s.downcase] ||= []) << value.to_s
15
15
  end
16
16
 
17
17
  def delete(key)
@@ -42,8 +42,8 @@ module Fetch
42
42
  @data.values.map { _1.join(', ') }
43
43
  end
44
44
 
45
- def each(&block)
46
- entries.each(&block)
45
+ def each(&)
46
+ entries.each(&)
47
47
  end
48
48
  end
49
49
  end
@@ -2,7 +2,17 @@ require 'json'
2
2
  require 'rack/utils'
3
3
 
4
4
  module Fetch
5
- Response = Data.define(:url, :status, :headers, :body, :redirected) {
5
+ class Response
6
+ def initialize(url:, status:, headers:, body:, redirected:)
7
+ @url = url
8
+ @status = status
9
+ @headers = headers
10
+ @body = body
11
+ @redirected = redirected
12
+ end
13
+
14
+ attr_reader :url, :status, :headers, :body, :redirected
15
+
6
16
  def ok
7
17
  status.between?(200, 299)
8
18
  end
@@ -12,7 +22,9 @@ module Fetch
12
22
  end
13
23
 
14
24
  def json(...)
25
+ return nil unless body
26
+
15
27
  JSON.parse(body, ...)
16
28
  end
17
- }
29
+ end
18
30
  end
@@ -22,7 +22,7 @@ module Fetch
22
22
  attr_reader :entries
23
23
 
24
24
  def append(key, value)
25
- @entries.push [key.to_s, value]
25
+ @entries.push [key.to_s, value.to_s]
26
26
  end
27
27
 
28
28
  def delete(key)
@@ -62,8 +62,8 @@ module Fetch
62
62
  @entries.map(&:last)
63
63
  end
64
64
 
65
- def each(&block)
66
- @entries.each(&block)
65
+ def each(&)
66
+ @entries.each(&)
67
67
  end
68
68
  end
69
69
  end
data/lib/fetch/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Fetch
2
- VERSION = '0.3.3'
2
+ VERSION = '0.3.5'
3
3
  end
data/sig/fetch/api.rbs ADDED
@@ -0,0 +1,11 @@
1
+ module Fetch
2
+ class API
3
+ def self?.fetch: (
4
+ _StringLike,
5
+ ?method: String | Symbol,
6
+ ?headers: Enumerable[[Object, Object]],
7
+ ?body: (String | FormData | URLSearchParams)?,
8
+ ?redirect: 'follow' | 'error' | 'manual' | :follow | :error | :manual,
9
+ ) -> Response
10
+ end
11
+ end
@@ -0,0 +1,18 @@
1
+ module Fetch
2
+ class Client
3
+ include Singleton
4
+
5
+ def fetch: (
6
+ _StringLike,
7
+ ?method: String | Symbol,
8
+ ?headers: Enumerable[[Object, Object]],
9
+ ?body: (String | FormData | URLSearchParams)?,
10
+ ?redirect: 'follow' | 'error' | 'manual' | :follow | :error | :manual,
11
+ ?_redirected: bool
12
+ ) -> Response
13
+
14
+ private
15
+
16
+ def to_response: (_StringLike, Net::HTTPResponse, bool) -> Response
17
+ end
18
+ end
@@ -0,0 +1,7 @@
1
+ module Fetch
2
+ class Error < StandardError
3
+ end
4
+
5
+ class RedirectError < Error
6
+ end
7
+ end
@@ -0,0 +1,22 @@
1
+ module Fetch
2
+ class FormData
3
+ type value = String | File
4
+
5
+ include Enumerable[[String, value]]
6
+
7
+ attr_reader entries: Array[[String, value]]
8
+
9
+ def self.build: (Enumerable[[Object, Object]]) -> FormData
10
+
11
+ def initialize: () -> void
12
+ def append: (Object, Object) -> void
13
+ def delete: (Object) -> void
14
+ def get: (Object) -> value?
15
+ def get_all: (Object) -> Array[value]
16
+ def has: (Object) -> bool
17
+ def keys: -> Array[String]
18
+ def set: (Object, Object) -> void
19
+ def values: () -> Array[value]
20
+ def each: () { ([String, value]) -> void } -> Array[[String, value]]
21
+ end
22
+ end
@@ -0,0 +1,16 @@
1
+ module Fetch
2
+ class Headers
3
+ include Enumerable[[String, String]]
4
+
5
+ def initialize: (Enumerable[[Object, Object]]) -> void
6
+ def append: (Object, Object) -> void
7
+ def delete: (Object) -> void
8
+ def entries: () -> Array[[String, String]]
9
+ def get: (Object) -> String?
10
+ def has: (Object) -> bool
11
+ def keys: -> Array[String]
12
+ def set: (Object, Object) -> void
13
+ def values: () -> Array[String]
14
+ def each: () { ([String, String]) -> void } -> Array[[String, String]]
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module Fetch
2
+ class Response
3
+ include Data::_DataClass
4
+
5
+ attr_reader url: String
6
+ attr_reader status: Integer
7
+ attr_reader headers: Headers
8
+ attr_reader body: String?
9
+ attr_reader redirected: bool
10
+
11
+ def initialize: (url: String, status: Integer, headers: Headers, body: String?, redirected: bool) -> void
12
+ def ok: () -> bool
13
+ def status_text: () -> String
14
+ def json: (json_options) -> Object?
15
+ end
16
+ end
@@ -0,0 +1,20 @@
1
+ module Fetch
2
+ class URLSearchParams
3
+ include Enumerable[[String, String]]
4
+
5
+ attr_reader entries: Array[[String, String]]
6
+
7
+ def self.build: (Enumerable[[Object, Object]]) -> FormData
8
+
9
+ def initialize: (String | Enumerable[[Object, Object]]) -> void
10
+ def append: (Object, Object) -> void
11
+ def delete: (Object) -> void
12
+ def get: (Object) -> String?
13
+ def get_all: (Object) -> Array[String]
14
+ def has: (Object) -> bool
15
+ def keys: -> Array[String]
16
+ def set: (Object, Object) -> void
17
+ def values: () -> Array[String]
18
+ def each: () { ([String, String]) -> void } -> Array[[String, String]]
19
+ end
20
+ end
data/sig/fetch.rbs CHANGED
@@ -1,4 +1,7 @@
1
1
  module Fetch
2
+ interface _StringLike
3
+ def to_str: () -> String
4
+ end
5
+
2
6
  VERSION: String
3
- # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fetch-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keita Urashima
@@ -11,7 +11,21 @@ cert_chain: []
11
11
  date: 2024-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: marcel
14
+ name: json
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: mini_mime
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
31
  - - ">="
@@ -99,6 +113,13 @@ files:
99
113
  - lib/fetch/url_search_params.rb
100
114
  - lib/fetch/version.rb
101
115
  - sig/fetch.rbs
116
+ - sig/fetch/api.rbs
117
+ - sig/fetch/client.rbs
118
+ - sig/fetch/errors.rbs
119
+ - sig/fetch/form_data.rbs
120
+ - sig/fetch/headers.rbs
121
+ - sig/fetch/response.rbs
122
+ - sig/fetch/url_search_params.rbs
102
123
  homepage: https://github.com/ursm/fetch-api
103
124
  licenses:
104
125
  - MIT
@@ -113,7 +134,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
113
134
  requirements:
114
135
  - - ">="
115
136
  - !ruby/object:Gem::Version
116
- version: 3.2.0
137
+ version: 3.1.0
117
138
  required_rubygems_version: !ruby/object:Gem::Requirement
118
139
  requirements:
119
140
  - - ">="