request_via 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +21 -4
- data/lib/request_via.rb +17 -17
- data/lib/request_via/func.rb +42 -29
- data/lib/request_via/http_client.rb +19 -2
- data/lib/request_via/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f958dbee6653251da7b8fb72818eea82aa23f72f
|
4
|
+
data.tar.gz: 5389f3b568ff5252afdafc8c23cde8ddf8005190
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd93888e3fbcfa00674033042de2ae7a9c2a6dff4531d4b7c92df651d08d9b3857de47a100e317bc9cebb2b164d938c7269037a29a8f5002c3dabd11b83dd61b
|
7
|
+
data.tar.gz: '039a3b536b0d5ef5ef4d905aa347ceee583e73ef4338b89fc35541ea6c63cab9bfe6bb808ce630ee78355cd572d4c220bf9795a7d798f60f771a2d96a610b096'
|
data/README.md
CHANGED
@@ -18,14 +18,21 @@ response.body
|
|
18
18
|
# --- Make requests over a map iteration
|
19
19
|
|
20
20
|
dogs = [ 'akita', 'chihuahua', 'beagle' ]
|
21
|
-
|
22
|
-
|
21
|
+
dog_images = dogs.map { |breed_name| "https://dog.ceo/api/breed/#{breed_name}/images/random" }
|
22
|
+
dog_images.map(&RequestVia::Get).map(&:body)
|
23
|
+
|
24
|
+
# If do you want to pass common arguments to each request use the GetR function (R = reversed arguments)
|
25
|
+
# Available options: port, params, headers, open_timeout read_timeout, response_and_request, net_http
|
26
|
+
dog_images.map(&RequestVia::GetR.(open_timeout: 10)).map(&:body)
|
23
27
|
|
24
28
|
# --- Make requests over an ASYNC map iteration
|
25
29
|
|
26
30
|
require 'parallel' # https://rubygems.org/gems/parallel
|
27
31
|
|
28
32
|
Parallel.map(dogs_images, &RequestVia::Get).map(&:body)
|
33
|
+
|
34
|
+
# Apply common options to each request
|
35
|
+
Parallel.map(dogs_images, &RequestVia::GetR.(open_timeout: 10)).map(&:body)
|
29
36
|
```
|
30
37
|
|
31
38
|
## Installation
|
@@ -68,8 +75,18 @@ response, request = RequestVia::Get.('example.com/foo', response_and_request: tr
|
|
68
75
|
|
69
76
|
# Request with the reversed arguments order
|
70
77
|
%w[
|
71
|
-
|
78
|
+
example.com/foo example.com/bar
|
72
79
|
].map &RequestVia::GetR.(headers: { 'X-Requested-With': 'RequestVia gem' })
|
80
|
+
|
81
|
+
# Other options
|
82
|
+
RequestVia::Get.('example.io', port: 2000,
|
83
|
+
open_timeout: 10, # Default: 60
|
84
|
+
read_timeout: 120, # Default: 60
|
85
|
+
net_http: -> (host, port) {
|
86
|
+
net_http = Net::HTTP.new(host, port)
|
87
|
+
# Make your customizations
|
88
|
+
net_http
|
89
|
+
})
|
73
90
|
```
|
74
91
|
|
75
92
|
Supported HTTP methods.
|
@@ -79,7 +96,7 @@ RequestVia::Post.() # RequestVia::PostR.()
|
|
79
96
|
|
80
97
|
RequestVia::Put.() # RequestVia::PutR.()
|
81
98
|
|
82
|
-
RequestVia::Delete.() # RequestVia::
|
99
|
+
RequestVia::Delete.() # RequestVia::DeleteR.()
|
83
100
|
|
84
101
|
RequestVia::Options.() # RequestVia::OptionsR.()
|
85
102
|
|
data/lib/request_via.rb
CHANGED
@@ -3,26 +3,26 @@
|
|
3
3
|
require 'net/https'
|
4
4
|
require 'uri'
|
5
5
|
|
6
|
+
require "request_via/func"
|
6
7
|
require "request_via/version"
|
7
8
|
require "request_via/http_client"
|
8
|
-
require "request_via/func"
|
9
9
|
|
10
10
|
module RequestVia
|
11
|
-
Get = Func::FetchStrategyTo.(Net::HTTP::Get)
|
12
|
-
Head = Func::FetchStrategyTo.(Net::HTTP::Head)
|
13
|
-
Post = Func::FetchStrategyTo.(Net::HTTP::Post)
|
14
|
-
Put = Func::FetchStrategyTo.(Net::HTTP::Put)
|
15
|
-
Delete = Func::FetchStrategyTo.(Net::HTTP::Delete)
|
16
|
-
Options = Func::FetchStrategyTo.(Net::HTTP::Options)
|
17
|
-
Trace = Func::FetchStrategyTo.(Net::HTTP::Trace)
|
18
|
-
Patch = Func::FetchStrategyTo.(Net::HTTP::Patch)
|
11
|
+
Get = Func::FetchStrategyTo.(Net::HTTP::Get)
|
12
|
+
Head = Func::FetchStrategyTo.(Net::HTTP::Head)
|
13
|
+
Post = Func::FetchStrategyTo.(Net::HTTP::Post)
|
14
|
+
Put = Func::FetchStrategyTo.(Net::HTTP::Put)
|
15
|
+
Delete = Func::FetchStrategyTo.(Net::HTTP::Delete)
|
16
|
+
Options = Func::FetchStrategyTo.(Net::HTTP::Options)
|
17
|
+
Trace = Func::FetchStrategyTo.(Net::HTTP::Trace)
|
18
|
+
Patch = Func::FetchStrategyTo.(Net::HTTP::Patch)
|
19
19
|
|
20
|
-
GetR = Func::ReverseRequestArgsTo.(Get)
|
21
|
-
HeadR = Func::ReverseRequestArgsTo.(Head)
|
22
|
-
PostR = Func::ReverseRequestArgsTo.(Post)
|
23
|
-
PutR = Func::ReverseRequestArgsTo.(Put)
|
24
|
-
DeleteR = Func::ReverseRequestArgsTo.(Delete)
|
25
|
-
OptionsR = Func::ReverseRequestArgsTo.(Options)
|
26
|
-
TraceR = Func::ReverseRequestArgsTo.(Trace)
|
27
|
-
PatchR = Func::ReverseRequestArgsTo.(Patch)
|
20
|
+
GetR = Func::ReverseRequestArgsTo.(Get)
|
21
|
+
HeadR = Func::ReverseRequestArgsTo.(Head)
|
22
|
+
PostR = Func::ReverseRequestArgsTo.(Post)
|
23
|
+
PutR = Func::ReverseRequestArgsTo.(Put)
|
24
|
+
DeleteR = Func::ReverseRequestArgsTo.(Delete)
|
25
|
+
OptionsR = Func::ReverseRequestArgsTo.(Options)
|
26
|
+
TraceR = Func::ReverseRequestArgsTo.(Trace)
|
27
|
+
PatchR = Func::ReverseRequestArgsTo.(Patch)
|
28
28
|
end
|
data/lib/request_via/func.rb
CHANGED
@@ -1,14 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module RequestVia
|
4
|
+
Freeze = -> object { object.freeze }.freeze
|
5
|
+
|
4
6
|
module Func
|
5
|
-
ReverseRequestArgsTo = -> request {
|
6
|
-
-> (options, url) {
|
7
|
+
ReverseRequestArgsTo = Freeze.(-> request {
|
8
|
+
Freeze.(-> (options, url) {
|
7
9
|
request.(url, **options)
|
8
|
-
}.curry
|
9
|
-
}
|
10
|
+
}.curry)
|
11
|
+
})
|
10
12
|
|
11
|
-
ParseURI = -> url {
|
13
|
+
ParseURI = Freeze.(-> url {
|
12
14
|
if url.start_with?('http://', 'https://')
|
13
15
|
::URI.parse(url)
|
14
16
|
elsif /([^:]+)?:?\/\// !~ url
|
@@ -16,58 +18,69 @@ module RequestVia
|
|
16
18
|
else
|
17
19
|
fail ::URI::InvalidURIError, 'URI scheme must be http:// or https://'
|
18
20
|
end
|
19
|
-
}
|
21
|
+
})
|
20
22
|
|
21
|
-
IsAHash = -> data {
|
23
|
+
IsAHash = Freeze.(-> data {
|
24
|
+
data.is_a?(::Hash)
|
25
|
+
})
|
22
26
|
|
23
|
-
SetRequestHeaders = -> (request, headers) {
|
27
|
+
SetRequestHeaders = Freeze.(-> (request, headers) {
|
24
28
|
return request unless IsAHash.(headers)
|
25
29
|
headers.each { |key, value| request[key] = value }
|
26
30
|
return request
|
27
|
-
}
|
31
|
+
})
|
28
32
|
|
29
|
-
URIWithoutParams = -> (url, _) {
|
33
|
+
URIWithoutParams = Freeze.(-> (url, _) {
|
34
|
+
ParseURI.(url)
|
35
|
+
})
|
30
36
|
|
31
|
-
URIWithParams = -> (url, params) {
|
37
|
+
URIWithParams = Freeze.(-> (url, params) {
|
32
38
|
ParseURI.(url).tap do |uri|
|
33
39
|
uri.query = ::URI.encode_www_form(params) if IsAHash.(params)
|
34
40
|
end
|
35
|
-
}
|
41
|
+
})
|
36
42
|
|
37
|
-
RequestWithoutBody = -> http_method {
|
43
|
+
RequestWithoutBody = Freeze.(-> http_method {
|
38
44
|
-> (uri, _) { http_method.new(uri) }
|
39
|
-
}
|
45
|
+
})
|
40
46
|
|
41
|
-
RequestWithBody = -> http_method {
|
47
|
+
RequestWithBody = Freeze.(-> http_method {
|
42
48
|
-> (uri, params) {
|
43
49
|
req = http_method.new(uri)
|
44
50
|
req.set_form_data(params) if IsAHash.(params)
|
45
51
|
return req
|
46
52
|
}
|
47
|
-
}
|
53
|
+
})
|
48
54
|
|
49
|
-
FetchWith = -> (uri_builder, request_builder) {
|
50
|
-
-> (url,
|
55
|
+
FetchWith = Freeze.(-> (uri_builder, request_builder) {
|
56
|
+
-> (url, port: nil,
|
57
|
+
params: nil,
|
58
|
+
headers: nil,
|
59
|
+
net_http: nil,
|
60
|
+
open_timeout: nil,
|
61
|
+
read_timeout: nil,
|
62
|
+
response_and_request: false) do
|
51
63
|
uri = uri_builder.(url, params)
|
52
64
|
req = SetRequestHeaders.(request_builder.(uri, params), headers)
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
65
|
+
http = HTTPClient.(uri, port, open_timeout, read_timeout, net_http)
|
66
|
+
response = http.request(req)
|
67
|
+
response_and_request ? [response, req] : response
|
68
|
+
end
|
69
|
+
})
|
57
70
|
|
58
|
-
FetchWithBodyVia = -> http_method {
|
71
|
+
FetchWithBodyVia = Freeze.(-> http_method {
|
59
72
|
FetchWith.(URIWithoutParams, RequestWithBody.(http_method))
|
60
|
-
}
|
73
|
+
})
|
61
74
|
|
62
|
-
FetchWithQueryStringVia = -> http_method {
|
75
|
+
FetchWithQueryStringVia = Freeze.(-> http_method {
|
63
76
|
FetchWith.(URIWithParams, RequestWithoutBody.(http_method))
|
64
|
-
}
|
77
|
+
})
|
65
78
|
|
66
|
-
FetchStrategyTo = -> http_method {
|
79
|
+
FetchStrategyTo = Freeze.(-> http_method {
|
67
80
|
strategy_to = \
|
68
81
|
http_method::REQUEST_HAS_BODY ? FetchWithBodyVia : FetchWithQueryStringVia
|
69
82
|
|
70
|
-
strategy_to.(http_method)
|
71
|
-
}
|
83
|
+
Freeze.(strategy_to.(http_method))
|
84
|
+
})
|
72
85
|
end
|
73
86
|
end
|
@@ -4,8 +4,15 @@ module RequestVia
|
|
4
4
|
module HTTPClient
|
5
5
|
extend self
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
Build = Freeze.(-> (host, port) {
|
8
|
+
Net::HTTP.new(host, port)
|
9
|
+
})
|
10
|
+
|
11
|
+
def call(uri, port = nil, open_timeout = nil, read_timeout = nil, net_http = nil)
|
12
|
+
net_http = build!(uri, port, net_http)
|
13
|
+
|
14
|
+
net_http.open_timeout = Integer(open_timeout) unless open_timeout.nil?
|
15
|
+
net_http.read_timeout = Integer(read_timeout) unless read_timeout.nil?
|
9
16
|
|
10
17
|
return net_http unless uri.is_a?(URI::HTTPS)
|
11
18
|
|
@@ -14,6 +21,16 @@ module RequestVia
|
|
14
21
|
|
15
22
|
private
|
16
23
|
|
24
|
+
def build!(uri, port, net_http)
|
25
|
+
strategy = net_http.is_a?(Proc) ? net_http : Build
|
26
|
+
|
27
|
+
http = strategy.(uri.host, (port || uri.port))
|
28
|
+
|
29
|
+
return http if http.instance_of?(Net::HTTP)
|
30
|
+
|
31
|
+
fail TypeError, 'net_http proc must return a Net:HTTP instance'
|
32
|
+
end
|
33
|
+
|
17
34
|
def set_https!(net_http)
|
18
35
|
net_http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
19
36
|
net_http.use_ssl = true
|
data/lib/request_via/version.rb
CHANGED