fetch-api 0.3.4 → 0.3.5

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
  SHA256:
3
- metadata.gz: 872edd7141621bba9ac97f850fd7affb5daf229d3c2db581bf2f5422424fdecf
4
- data.tar.gz: 1bcce61d1a762827070efc219024d3520b5c2959ede385bcfc2b3ba5d6897dc3
3
+ metadata.gz: c2ece1d340c0de1c25cf5ff54b2faa9282e457a398b1e02e8b1254c869643e63
4
+ data.tar.gz: af89501158b402c8b5a2d5ac6961a93546b5a6caa78c8f27492ff1b0fc4b5be4
5
5
  SHA512:
6
- metadata.gz: 4c88efee5d27ab2b0d1765e68d59625fc2b8249f70ced9bcee8467999b7c0f3a59bc43f4289b0e6510b6d31782c16a2e95577dce57294c9281ac6b0c8556cff9
7
- data.tar.gz: deb9958e04948dc8e9c809d44517cda3af48497984297478046c0707f28d3daf9dca5fc665b86240bd92c4e77ca9f34b530111c193d9e0e878dfd28397888bc2
6
+ metadata.gz: f42136117dc9ff72634fdd12774dd6bc270d3c7f58363a0b78c74e216f12b241d35f60329f3957219d79a3d6b81ffb1b73917a7788647252b42a5271056df5fb
7
+ data.tar.gz: 9902db054b692dc72bd645c7d7030ec7392369d41e70d3d27b64b19f871294749e065eae638604b23ab418133a16c0b13d444bb132aab96274327482c516ecff
data/lib/fetch/client.rb CHANGED
@@ -6,6 +6,7 @@ require_relative 'url_search_params'
6
6
 
7
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
@@ -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.4'
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.4
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keita Urashima
@@ -10,6 +10,20 @@ bindir: exe
10
10
  cert_chain: []
11
11
  date: 2024-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
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'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: mini_mime
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -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
  - - ">="