fetch-api 0.3.0 → 0.3.2

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: dc8cbe5804a5286df86b5840189dbbe3c1cfc77e68bfd33b0ba3244be99af5c2
4
- data.tar.gz: f72c409553a6b531803d084d8e862c77329ef785579e9a11b5a461fadd481ca3
3
+ metadata.gz: a5087cd966a296311bc208ed82ba9c4eb33cb7abb1ca1474efc611acdea73982
4
+ data.tar.gz: e58cb6110ac3a0e62945f486593c95d04096c80e495935a90e3a46de13211526
5
5
  SHA512:
6
- metadata.gz: 6051e1551078686b6624604b23966804684f7a764ffb76c467e79cf5bfd09e0025c8dd315803b0e7c8b1fe83874e349984c1a3fa325306fb4c09d1f855524e0c
7
- data.tar.gz: 6340aa6ca403e46a023753fd08144081009512a3b97c12a3b035ac58aa951e49e1218e7d543a52151d9600022ed40773f00c655926eaa5d59b7fc9c3f9fc8ca3
6
+ metadata.gz: 1b64dcee60dbe28b3700c53932ef584d900a5e112c0e2e13b8bb63627d6df3d835f4cba30beb340e15993087d482d7408a0d8dfa5ef62c47beffba08c44d8587
7
+ data.tar.gz: 676d8113e1edbe75d16389b23d24633e55fe5fd599195e989d87da2e22c248279e9d9ae272c36662e5a5dc750a28629c48c2708dd04709e007827ddf4c59d8f9
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'`)
48
+ - `method`: HTTP method (default: `:get`)
49
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,12 +13,10 @@ 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
@@ -50,7 +48,7 @@ module Fetch
50
48
 
51
49
  case res
52
50
  when Net::HTTPRedirection
53
- case redirect
51
+ case redirect.to_s
54
52
  when 'follow'
55
53
  fetch(res['Location'], method:, headers:, body:, redirect:, _redirected: true)
56
54
  when 'error'
@@ -58,7 +56,7 @@ module Fetch
58
56
  when 'manual'
59
57
  to_response(resource, res, _redirected)
60
58
  else
61
- raise ArgumentError, "invalid redirect option: #{redirect}"
59
+ raise ArgumentError, "invalid redirect option: #{redirect.inspect}"
62
60
  end
63
61
  else
64
62
  to_response(resource, res, _redirected)
@@ -68,18 +66,10 @@ module Fetch
68
66
  private
69
67
 
70
68
  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
69
  Response.new(
80
70
  url: ,
81
71
  status: res.code.to_i,
82
- headers: ,
72
+ headers: Headers.new(res),
83
73
  body: res.body,
84
74
  redirected:
85
75
  )
@@ -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
data/lib/fetch/headers.rb CHANGED
@@ -3,48 +3,49 @@ module Fetch
3
3
  include Enumerable
4
4
 
5
5
  def initialize(init = [])
6
- @entries = []
6
+ @data = {}
7
7
 
8
8
  init.each do |k, v|
9
9
  append k, v
10
10
  end
11
11
  end
12
12
 
13
- attr_reader :entries
14
-
15
13
  def append(key, value)
16
- @entries << [key.to_s.downcase, value]
14
+ (@data[key.to_s.downcase] ||= []) << value
17
15
  end
18
16
 
19
17
  def delete(key)
20
- @entries.delete_if {|k,| k == key.to_s.downcase }
18
+ @data.delete key.to_s.downcase
19
+ end
20
+
21
+ def entries
22
+ @data.map {|k, vs| [k, vs.join(', ')] }
21
23
  end
22
24
 
23
25
  def get(key)
24
- @entries.select {|k,| k == key.to_s.downcase }.map(&:last).join(', ')
26
+ @data[key.to_s.downcase]&.join(', ')
25
27
  end
26
28
 
27
29
  def has(key)
28
- @entries.any? {|k,| k == key.to_s.downcase }
30
+ @data.key?(key.to_s.downcase)
29
31
  end
30
32
 
31
33
  def keys
32
- @entries.map(&:first)
34
+ @data.keys
33
35
  end
34
36
 
35
37
  def set(key, value)
36
- delete key
37
- append key, value
38
+ @data[key.to_s.downcase] = [value]
38
39
  end
39
40
 
40
41
  def values
41
- @entries.map(&:last)
42
+ @data.values.map { _1.join(', ') }
42
43
  end
43
44
 
44
45
  def each(&block)
45
46
  return enum_for(:each) unless block_given?
46
47
 
47
- @entries.each(&block)
48
+ entries.each(&block)
48
49
  end
49
50
  end
50
51
  end
data/lib/fetch/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Fetch
2
- VERSION = '0.3.0'
2
+ VERSION = '0.3.2'
3
3
  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.0
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keita Urashima
@@ -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