fetch-api 0.3.1 → 0.3.3

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: 4686aace90255f6eceef759fe22002292101a0cb5cac4db2be0cbdf21cf398fa
4
- data.tar.gz: 6dda2ecd4cde88807c27261f3d4eb866387b6e913e824cc0797e09618383284d
3
+ metadata.gz: 1b10573a6b8299637e5e694f582aeca98a5f6a98f034b5995715a1047e1fd52d
4
+ data.tar.gz: 704d073756a119bea36d3a65d2528726cb8ee514e94b70172f209577d4bca3b2
5
5
  SHA512:
6
- metadata.gz: f5f6ba84be5732b1784ee0f67b4ea3b2e35a7e6b34d04c0b5808587f0d71bfc253f408bd3c7596cad79b2eddb7dbb6b794dfcf5adc34df77491a152c7a15120d
7
- data.tar.gz: 41a3bab80a11cc7f0fc432504cc73d996e1d3b4dfad72b33ccd957bf77acff5bc0bfc00f50145d2dc561366f50b61885ae976650965a1aa408f5e748009aaec2
6
+ metadata.gz: '08f6657f264bbba58bdddda3f923c886cda73d5f853bfa3dfdea14896e35da915409a8408d2c0e08396db177f9fdc91e3807d91a241267157bbc801c914f0d93'
7
+ data.tar.gz: d8909c92cda908f4732280183f6e09317c1f51a899dabfb36aa2b5066c6bf69616ee8b3e6c4222c36936f6333743619274306b6467f7079234648e9b81c57cbb
data/README.md CHANGED
@@ -45,10 +45,10 @@ res = fetch('https://example.com')
45
45
 
46
46
  Options for `fetch` method:
47
47
 
48
- - `method`: HTTP method (default: `'GET'`)
49
- - `headers`: Request headers (default: `{}`)
48
+ - `method`: HTTP method (default: `:get`)
49
+ - `headers`: Request headers (default: `[]`)
50
50
  - `body`: Request body (default: `nil`)
51
- - `redirect`: Follow redirects (one of `follow`, `error`, `manual`, default: `follow`)
51
+ - `redirect`: Follow redirects (one of `:follow`, `:error`, `:manual`, default: `:follow`)
52
52
 
53
53
  Methods of `Fetch::Response` object:
54
54
 
@@ -65,7 +65,7 @@ Methods of `Fetch::Response` object:
65
65
 
66
66
  ``` ruby
67
67
  res = fetch('http://example.com', **{
68
- method: 'POST',
68
+ method: :post,
69
69
 
70
70
  headers: {
71
71
  'Content-Type' => 'application/json'
@@ -81,7 +81,7 @@ res = fetch('http://example.com', **{
81
81
 
82
82
  ``` ruby
83
83
  res = fetch('http://example.com', **{
84
- method: 'POST',
84
+ method: :post,
85
85
 
86
86
  body: Fetch::URLSearchParams.new(
87
87
  name: 'Alice'
@@ -93,7 +93,7 @@ res = fetch('http://example.com', **{
93
93
 
94
94
  ``` ruby
95
95
  res = fetch('http://example.com', **{
96
- method: 'POST',
96
+ method: :post,
97
97
 
98
98
  body: Fetch::FormData.build(
99
99
  name: 'Alice',
data/lib/fetch/client.rb CHANGED
@@ -1,4 +1,4 @@
1
- require_relative '../fetch'
1
+ require_relative 'errors'
2
2
  require_relative 'form_data'
3
3
  require_relative 'headers'
4
4
  require_relative 'response'
@@ -13,32 +13,28 @@ module Fetch
13
13
  class Client
14
14
  include Singleton
15
15
 
16
- def fetch(resource, method: 'GET', headers: [], body: nil, redirect: 'follow', _redirected: false)
16
+ def fetch(resource, method: :get, headers: [], body: nil, redirect: :follow, _redirected: false)
17
17
  uri = URI.parse(resource)
18
18
  req = Net::HTTP.const_get(method.capitalize).new(uri)
19
19
 
20
- headers = Headers.new(headers) unless headers.is_a?(Headers)
21
-
22
20
  headers.each do |k, v|
23
21
  req[k] = v
24
22
  end
25
23
 
26
24
  case body
27
25
  when FormData
28
- req.set_form body.entries.map {|k, v|
26
+ req.set_form body.map {|k, v|
29
27
  if v.is_a?(File)
30
28
  [k, v, {
31
29
  filename: File.basename(v.path),
32
- content_type: Marcel::MimeType.for(v) || 'application/octet-stream'
30
+ content_type: Marcel::MimeType.for(name: v.path)
33
31
  }]
34
32
  else
35
33
  [k, v]
36
34
  end
37
35
  }, 'multipart/form-data'
38
36
  when URLSearchParams
39
- req['Content-Type'] ||= 'application/x-www-form-urlencoded'
40
-
41
- req.body = body.to_s
37
+ req.set_form_data body.entries
42
38
  else
43
39
  req.body = body
44
40
  end
@@ -50,7 +46,7 @@ module Fetch
50
46
 
51
47
  case res
52
48
  when Net::HTTPRedirection
53
- case redirect
49
+ case redirect.to_s
54
50
  when 'follow'
55
51
  fetch(res['Location'], method:, headers:, body:, redirect:, _redirected: true)
56
52
  when 'error'
@@ -58,7 +54,7 @@ module Fetch
58
54
  when 'manual'
59
55
  to_response(resource, res, _redirected)
60
56
  else
61
- raise ArgumentError, "invalid redirect option: #{redirect}"
57
+ raise ArgumentError, "invalid redirect option: #{redirect.inspect}"
62
58
  end
63
59
  else
64
60
  to_response(resource, res, _redirected)
@@ -68,18 +64,10 @@ module Fetch
68
64
  private
69
65
 
70
66
  def to_response(url, res, redirected)
71
- headers = Headers.new
72
-
73
- res.each do |k, vs|
74
- vs.split(', ').each do |v|
75
- headers.append k, v
76
- end
77
- end
78
-
79
67
  Response.new(
80
68
  url: ,
81
69
  status: res.code.to_i,
82
- headers: ,
70
+ headers: Headers.new(res),
83
71
  body: res.body,
84
72
  redirected:
85
73
  )
@@ -1,5 +1,3 @@
1
- require_relative 'fetch/version'
2
-
3
1
  module Fetch
4
2
  class Error < StandardError; end
5
3
  class RedirectError < Error; end
@@ -52,8 +52,6 @@ module Fetch
52
52
  end
53
53
 
54
54
  def each(&block)
55
- return enum_for(:each) unless block_given?
56
-
57
55
  @entries.each(&block)
58
56
  end
59
57
  end
data/lib/fetch/headers.rb CHANGED
@@ -43,8 +43,6 @@ module Fetch
43
43
  end
44
44
 
45
45
  def each(&block)
46
- return enum_for(:each) unless block_given?
47
-
48
46
  entries.each(&block)
49
47
  end
50
48
  end
@@ -11,8 +11,8 @@ module Fetch
11
11
  Rack::Utils::HTTP_STATUS_CODES[status]
12
12
  end
13
13
 
14
- def json(**opts)
15
- JSON.parse(body, **opts)
14
+ def json(...)
15
+ JSON.parse(body, ...)
16
16
  end
17
17
  }
18
18
  end
@@ -63,8 +63,6 @@ module Fetch
63
63
  end
64
64
 
65
65
  def each(&block)
66
- return enum_for(:each) unless block_given?
67
-
68
66
  @entries.each(&block)
69
67
  end
70
68
  end
data/lib/fetch/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Fetch
2
- VERSION = '0.3.1'
2
+ VERSION = '0.3.3'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fetch-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keita Urashima
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-07-06 00:00:00.000000000 Z
11
+ date: 2024-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: marcel
@@ -90,9 +90,9 @@ files:
90
90
  - LICENSE.txt
91
91
  - README.md
92
92
  - lib/fetch-api.rb
93
- - lib/fetch.rb
94
93
  - lib/fetch/api.rb
95
94
  - lib/fetch/client.rb
95
+ - lib/fetch/errors.rb
96
96
  - lib/fetch/form_data.rb
97
97
  - lib/fetch/headers.rb
98
98
  - lib/fetch/response.rb