fetch-api 0.5.0 → 0.6.0
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 +4 -4
- data/README.md +12 -0
- data/lib/fetch/config.rb +5 -1
- data/lib/fetch/form_data.rb +7 -42
- data/lib/fetch/headers.rb +4 -6
- data/lib/fetch/multi_map.rb +58 -0
- data/lib/fetch/response.rb +2 -2
- data/lib/fetch/url_search_params.rb +13 -43
- data/lib/fetch/version.rb +1 -1
- data/lib/fetch.rb +1 -0
- data/sig/fetch/config.rbs +1 -0
- data/sig/fetch/form_data.rbs +1 -20
- data/sig/fetch/headers.rbs +0 -2
- data/sig/fetch/multi_map.rbs +23 -0
- data/sig/fetch/response.rbs +1 -1
- data/sig/fetch/url_search_params.rbs +3 -20
- metadata +5 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4c44fa15b798e01607f5c81e771ad55d24c56abea4aaa1829de0046aa2a761a2
|
4
|
+
data.tar.gz: d8f8c324b7685c23d613ea1f00f5621bc23ef6e682aa66c0c181bb57c035d094
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 89fc2a039bac8f9dea78f86a6af9d195dff47f1e47fdfbf86026364a916be5dba60961daccd4d24a56f321f95823e24148c9e32df58b50736b7aba03e9ae24cf
|
7
|
+
data.tar.gz: d60ae6beb1b1736cb4a5e71b5049742771a8905565475121f02e5d23b0691905575cb6f1ab55afcc8f7a97f2ed38fee6d169aa6f1f4220a9513ab01c3b97adc3
|
data/README.md
CHANGED
@@ -129,6 +129,18 @@ Fetch.configure do |config|
|
|
129
129
|
end
|
130
130
|
```
|
131
131
|
|
132
|
+
### Parsing JSON
|
133
|
+
|
134
|
+
By default, `Fetch::Response#json` calls `JSON.parse` without options. Additional options can be specified in `Fetch.config.json_parse_options`.
|
135
|
+
|
136
|
+
``` ruby
|
137
|
+
Fetch.configure do |config|
|
138
|
+
config.json_parse_options = {
|
139
|
+
symbolize_names: true
|
140
|
+
}
|
141
|
+
end
|
142
|
+
```
|
143
|
+
|
132
144
|
## Development
|
133
145
|
|
134
146
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/fetch/config.rb
CHANGED
data/lib/fetch/form_data.rb
CHANGED
@@ -1,13 +1,7 @@
|
|
1
|
-
|
1
|
+
require_relative 'multi_map'
|
2
2
|
|
3
3
|
module Fetch
|
4
|
-
class FormData
|
5
|
-
include Enumerable
|
6
|
-
|
7
|
-
extend Forwardable
|
8
|
-
|
9
|
-
def_delegators :entries, :each
|
10
|
-
|
4
|
+
class FormData < MultiMap
|
11
5
|
def self.build(enumerable)
|
12
6
|
data = FormData.new
|
13
7
|
|
@@ -18,43 +12,14 @@ module Fetch
|
|
18
12
|
data
|
19
13
|
end
|
20
14
|
|
21
|
-
|
22
|
-
@entries = []
|
23
|
-
end
|
24
|
-
|
25
|
-
attr_reader :entries
|
26
|
-
|
27
|
-
def append(key, value)
|
28
|
-
@entries.push [key.to_s, File === value ? value : value.to_s]
|
29
|
-
end
|
30
|
-
|
31
|
-
def delete(key)
|
32
|
-
@entries.reject! {|k,| k == key.to_s }
|
33
|
-
end
|
34
|
-
|
35
|
-
def get(key)
|
36
|
-
@entries.assoc(key.to_s)&.last
|
37
|
-
end
|
38
|
-
|
39
|
-
def get_all(key)
|
40
|
-
@entries.select {|k,| k == key.to_s }.map(&:last)
|
41
|
-
end
|
42
|
-
|
43
|
-
def has(key)
|
44
|
-
@entries.any? {|k,| k == key.to_s }
|
45
|
-
end
|
46
|
-
|
47
|
-
def keys
|
48
|
-
@entries.map(&:first)
|
49
|
-
end
|
15
|
+
private
|
50
16
|
|
51
|
-
def
|
52
|
-
|
53
|
-
append key, value
|
17
|
+
def to_key(key)
|
18
|
+
key.to_s
|
54
19
|
end
|
55
20
|
|
56
|
-
def
|
57
|
-
|
21
|
+
def to_value(value)
|
22
|
+
File === value ? value : value.to_s
|
58
23
|
end
|
59
24
|
end
|
60
25
|
end
|
data/lib/fetch/headers.rb
CHANGED
@@ -1,13 +1,7 @@
|
|
1
|
-
require 'forwardable'
|
2
|
-
|
3
1
|
module Fetch
|
4
2
|
class Headers
|
5
3
|
include Enumerable
|
6
4
|
|
7
|
-
extend Forwardable
|
8
|
-
|
9
|
-
def_delegators :entries, :each
|
10
|
-
|
11
5
|
def initialize(init = [])
|
12
6
|
@data = {}
|
13
7
|
|
@@ -47,5 +41,9 @@ module Fetch
|
|
47
41
|
def values
|
48
42
|
@data.values.map { _1.join(', ') }
|
49
43
|
end
|
44
|
+
|
45
|
+
def each(&block)
|
46
|
+
block ? entries.each(&block) : entries.each
|
47
|
+
end
|
50
48
|
end
|
51
49
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Fetch
|
2
|
+
class MultiMap
|
3
|
+
include Enumerable
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@entries = []
|
7
|
+
end
|
8
|
+
|
9
|
+
attr_reader :entries
|
10
|
+
|
11
|
+
def append(key, value)
|
12
|
+
@entries.push [to_key(key), to_value(value)]
|
13
|
+
end
|
14
|
+
|
15
|
+
def delete(key)
|
16
|
+
@entries.reject! {|k,| k == to_key(key) }
|
17
|
+
end
|
18
|
+
|
19
|
+
def get(key)
|
20
|
+
@entries.assoc(to_key(key))&.last
|
21
|
+
end
|
22
|
+
|
23
|
+
def get_all(key)
|
24
|
+
@entries.select {|k,| k == to_key(key) }.map(&:last)
|
25
|
+
end
|
26
|
+
|
27
|
+
def has(key)
|
28
|
+
@entries.any? {|k,| k == to_key(key) }
|
29
|
+
end
|
30
|
+
|
31
|
+
def keys
|
32
|
+
@entries.map(&:first)
|
33
|
+
end
|
34
|
+
|
35
|
+
def set(key, value)
|
36
|
+
delete key
|
37
|
+
append key, value
|
38
|
+
end
|
39
|
+
|
40
|
+
def values
|
41
|
+
@entries.map(&:last)
|
42
|
+
end
|
43
|
+
|
44
|
+
def each(&)
|
45
|
+
@entries.each(&)
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def to_key(key)
|
51
|
+
raise NotImplementedError
|
52
|
+
end
|
53
|
+
|
54
|
+
def to_value(value)
|
55
|
+
raise NotImplementedError
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/fetch/response.rb
CHANGED
@@ -21,10 +21,10 @@ module Fetch
|
|
21
21
|
Rack::Utils::HTTP_STATUS_CODES[status]
|
22
22
|
end
|
23
23
|
|
24
|
-
def json(
|
24
|
+
def json(**json_parse_options)
|
25
25
|
return nil unless body
|
26
26
|
|
27
|
-
JSON.parse(body,
|
27
|
+
JSON.parse(body, **Fetch.config.json_parse_options, **json_parse_options)
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
@@ -1,16 +1,11 @@
|
|
1
|
-
|
1
|
+
require_relative 'multi_map'
|
2
|
+
|
2
3
|
require 'uri'
|
3
4
|
|
4
5
|
module Fetch
|
5
|
-
class URLSearchParams
|
6
|
-
include Enumerable
|
7
|
-
|
8
|
-
extend Forwardable
|
9
|
-
|
10
|
-
def_delegators :entries, :each
|
11
|
-
|
6
|
+
class URLSearchParams < MultiMap
|
12
7
|
def initialize(options = [])
|
13
|
-
|
8
|
+
super()
|
14
9
|
|
15
10
|
case options
|
16
11
|
when String
|
@@ -24,47 +19,22 @@ module Fetch
|
|
24
19
|
end
|
25
20
|
end
|
26
21
|
|
27
|
-
|
28
|
-
|
29
|
-
def append(key, value)
|
30
|
-
@entries.push [key.to_s, value.to_s]
|
31
|
-
end
|
32
|
-
|
33
|
-
def delete(key)
|
34
|
-
@entries.reject! {|k,| k == key.to_s }
|
35
|
-
end
|
36
|
-
|
37
|
-
def get(key)
|
38
|
-
@entries.assoc(key.to_s)&.last
|
39
|
-
end
|
40
|
-
|
41
|
-
def get_all(key)
|
42
|
-
@entries.select {|k,| k == key.to_s }.map(&:last)
|
43
|
-
end
|
44
|
-
|
45
|
-
def has(key)
|
46
|
-
@entries.any? {|k,| k == key.to_s }
|
47
|
-
end
|
48
|
-
|
49
|
-
def keys
|
50
|
-
@entries.map(&:first)
|
22
|
+
def sort
|
23
|
+
entries.sort_by!(&:first)
|
51
24
|
end
|
52
25
|
|
53
|
-
def
|
54
|
-
|
55
|
-
append key, value
|
26
|
+
def to_s
|
27
|
+
URI.encode_www_form(entries)
|
56
28
|
end
|
57
29
|
|
58
|
-
|
59
|
-
@entries.sort_by!(&:first)
|
60
|
-
end
|
30
|
+
private
|
61
31
|
|
62
|
-
def
|
63
|
-
|
32
|
+
def to_key(key)
|
33
|
+
key.to_s
|
64
34
|
end
|
65
35
|
|
66
|
-
def
|
67
|
-
|
36
|
+
def to_value(value)
|
37
|
+
value.to_s
|
68
38
|
end
|
69
39
|
end
|
70
40
|
end
|
data/lib/fetch/version.rb
CHANGED
data/lib/fetch.rb
CHANGED
data/sig/fetch/config.rbs
CHANGED
data/sig/fetch/form_data.rbs
CHANGED
@@ -1,24 +1,5 @@
|
|
1
1
|
module Fetch
|
2
|
-
class FormData
|
3
|
-
include Enumerable[[String, String | File]]
|
4
|
-
|
5
|
-
extend Forwardable
|
6
|
-
|
7
|
-
attr_reader entries: Array[[String, String | File]]
|
8
|
-
|
2
|
+
class FormData < MultiMap[_ToS, String, _ToS | File, String | File]
|
9
3
|
def self.build: (_Each[[_ToS, _ToS | File]]) -> FormData
|
10
|
-
|
11
|
-
def initialize: () -> void
|
12
|
-
def append: (_ToS, _ToS | File) -> void
|
13
|
-
def delete: (_ToS) -> void
|
14
|
-
def get: (_ToS) -> (String | File)?
|
15
|
-
def get_all: (_ToS) -> Array[String | File]
|
16
|
-
def has: (_ToS) -> bool
|
17
|
-
def keys: -> Array[String]
|
18
|
-
def set: (_ToS, _ToS | File) -> void
|
19
|
-
def values: () -> Array[String | File]
|
20
|
-
|
21
|
-
def each: () { ([String, String | File]) -> void } -> Array[[String, String | File]]
|
22
|
-
| () -> Enumerator[[String, String | File], Array[[String, String | File]]]
|
23
4
|
end
|
24
5
|
end
|
data/sig/fetch/headers.rbs
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
module Fetch
|
2
|
+
class MultiMap[KIN, KOUT, VIN, VOUT]
|
3
|
+
include Enumerable[[KOUT, VOUT]]
|
4
|
+
|
5
|
+
def initialize: () -> void
|
6
|
+
def append: (KIN, VIN) -> void
|
7
|
+
def delete: (KIN) -> void
|
8
|
+
def get: (KIN) -> VOUT?
|
9
|
+
def get_all: (KIN) -> Array[VOUT]
|
10
|
+
def has: (KIN) -> bool
|
11
|
+
def keys: -> Array[KOUT]
|
12
|
+
def set: (KIN, VIN) -> void
|
13
|
+
def values: () -> Array[VOUT]
|
14
|
+
|
15
|
+
def each: () { ([KOUT, VOUT]) -> void } -> Array[[KOUT, VOUT]]
|
16
|
+
| () -> Enumerator[[KOUT, VOUT], Array[[KOUT, VOUT]]]
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def to_key: (KIN) -> KOUT
|
21
|
+
def to_value: (VIN) -> VOUT
|
22
|
+
end
|
23
|
+
end
|
data/sig/fetch/response.rbs
CHANGED
@@ -9,6 +9,6 @@ module Fetch
|
|
9
9
|
def initialize: (url: String, status: Integer, headers: Headers, body: String?, redirected: bool) -> void
|
10
10
|
def ok: () -> bool
|
11
11
|
def status_text: () -> String
|
12
|
-
def json: (json_options) -> untyped
|
12
|
+
def json: (**json_options) -> untyped
|
13
13
|
end
|
14
14
|
end
|
@@ -1,24 +1,7 @@
|
|
1
1
|
module Fetch
|
2
|
-
class URLSearchParams
|
3
|
-
include Enumerable[[String, String]]
|
4
|
-
|
5
|
-
extend Forwardable
|
6
|
-
|
7
|
-
attr_reader entries: Array[[String, String]]
|
8
|
-
|
9
|
-
def self.build: (_Each[[_ToS, _ToS]]) -> FormData
|
10
|
-
|
2
|
+
class URLSearchParams < MultiMap[_ToS, String, _ToS, String]
|
11
3
|
def initialize: (String | _Each[[_ToS, _ToS]]) -> void
|
12
|
-
def
|
13
|
-
def
|
14
|
-
def get: (_ToS) -> String?
|
15
|
-
def get_all: (_ToS) -> Array[String]
|
16
|
-
def has: (_ToS) -> bool
|
17
|
-
def keys: -> Array[String]
|
18
|
-
def set: (_ToS, _ToS) -> void
|
19
|
-
def values: () -> Array[String]
|
20
|
-
|
21
|
-
def each: () { ([String, String]) -> void } -> Array[[String, String]]
|
22
|
-
| () -> Enumerator[[String, String], Array[[String, String]]]
|
4
|
+
def sort: () -> void
|
5
|
+
def to_s: () -> String
|
23
6
|
end
|
24
7
|
end
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fetch-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
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-
|
11
|
+
date: 2024-09-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: forwardable
|
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'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: json
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -126,6 +112,7 @@ files:
|
|
126
112
|
- lib/fetch/errors.rb
|
127
113
|
- lib/fetch/form_data.rb
|
128
114
|
- lib/fetch/headers.rb
|
115
|
+
- lib/fetch/multi_map.rb
|
129
116
|
- lib/fetch/response.rb
|
130
117
|
- lib/fetch/url_search_params.rb
|
131
118
|
- lib/fetch/version.rb
|
@@ -137,6 +124,7 @@ files:
|
|
137
124
|
- sig/fetch/errors.rbs
|
138
125
|
- sig/fetch/form_data.rbs
|
139
126
|
- sig/fetch/headers.rbs
|
127
|
+
- sig/fetch/multi_map.rbs
|
140
128
|
- sig/fetch/response.rbs
|
141
129
|
- sig/fetch/url_search_params.rbs
|
142
130
|
- sig/fetch/version.rbs
|
@@ -161,7 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
161
149
|
- !ruby/object:Gem::Version
|
162
150
|
version: '0'
|
163
151
|
requirements: []
|
164
|
-
rubygems_version: 3.5.
|
152
|
+
rubygems_version: 3.5.16
|
165
153
|
signing_key:
|
166
154
|
specification_version: 4
|
167
155
|
summary: Something like the Fetch API for Ruby
|