fetch-api 0.3.1 → 0.3.3

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: 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