fetch-api 0.3.0 → 0.3.2

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