rb-net_http-client 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/client/client.rb +10 -14
- data/lib/client/ext.rb +39 -31
- data/lib/client/schema.rb +21 -8
- data/lib/core/core.rb +16 -5
- data/lib/core/utilities.rb +57 -37
- data/lib/request/request.rb +51 -24
- data/lib/request/schema.rb +7 -0
- data/lib/response/response.rb +48 -30
- data/lib/version.rb +1 -1
- data/spec/unit/client/client_spec.rb +47 -0
- data/spec/unit/client/ext_spec.rb +90 -0
- data/spec/unit/core/core_spec.rb +47 -0
- data/spec/unit/core/utilities_spec.rb +230 -0
- data/spec/unit/request/request_spec.rb +275 -0
- data/spec/unit/response/response_spec.rb +39 -0
- data/spec/{integration/net_http → unit}/version_spec.rb +1 -1
- metadata +9 -17
- data/lib/response/schema.rb +0 -11
- data/spec/integration/net_http/client/client_ext_spec.rb +0 -7
- data/spec/integration/net_http/client/client_spec.rb +0 -7
- data/spec/integration/net_http/net_http_core_spec.rb +0 -18
- data/spec/integration/net_http/request/request_ext_spec.rb +0 -342
- data/spec/integration/net_http/response/response_ext_spec.rb +0 -7
- data/spec/unit/net_http/client/client_ext_spec.rb +0 -7
- data/spec/unit/net_http/client/client_schema_spec.rb +0 -8
- data/spec/unit/net_http/client/client_spec.rb +0 -232
- data/spec/unit/net_http/net_http_core_spec.rb +0 -433
- data/spec/unit/net_http/request/request_ext_spec.rb +0 -603
- data/spec/unit/net_http/request/request_schema_spec.rb +0 -8
- data/spec/unit/net_http/response/response_ext_spec.rb +0 -97
- data/spec/unit/net_http/version_spec.rb +0 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d6b584195ee54303f03e597cedf0863b804496d00fe7dc23e1c95a72685d27e
|
4
|
+
data.tar.gz: bd2031391105c97823c38fe5422b497617e50bcbe77d0fe82138b191a6a8dd6f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a1d80d3519cdd9b8ba725906ae951c70f70ed67a5f992650e66b0b3d31707eecc1608a03a241cb6c15aaf683e2ca7be4dcf814bdc7284aec53d16d2097b3617
|
7
|
+
data.tar.gz: 1519c8ecfaa3075ffa1db0ede1467c0b465c851464c721c118d25516656ff2abc63c67f3448fbdc5a23f3d668efe04d1ef660cf078cb4ab6546fa33fcc8c7b50
|
data/lib/client/client.rb
CHANGED
@@ -12,19 +12,18 @@ module NetHTTP
|
|
12
12
|
attr_reader :ca_file,
|
13
13
|
:cert,
|
14
14
|
:client,
|
15
|
-
:host,
|
16
15
|
:key,
|
17
16
|
:logger,
|
18
|
-
:
|
17
|
+
:open_timeout,
|
19
18
|
:pkcs12,
|
20
|
-
:port,
|
21
19
|
:proxy_uri,
|
22
|
-
:
|
20
|
+
:proxy_url,
|
21
|
+
:query,
|
23
22
|
:read_timeout,
|
24
23
|
:response,
|
25
|
-
:scheme,
|
26
24
|
:ssl_path,
|
27
25
|
:uri,
|
26
|
+
:url,
|
28
27
|
:use_proxy,
|
29
28
|
:use_ssl,
|
30
29
|
:verify_mode
|
@@ -32,19 +31,14 @@ module NetHTTP
|
|
32
31
|
def initialize(opts = {})
|
33
32
|
send('logger=', opts[:logger])
|
34
33
|
Core.schema_validation(opts, NetHTTP::Client::Schema, logger) unless opts[:enforce_schema_validation] == false
|
35
|
-
send('uri=',
|
34
|
+
send('uri=', opts)
|
36
35
|
send('client=', opts)
|
37
36
|
end
|
38
37
|
|
39
38
|
def client=(opts = {})
|
40
39
|
@client = Net::HTTP.new(uri.host, uri.port)
|
41
40
|
|
42
|
-
send('
|
43
|
-
send('host=', uri.host)
|
44
|
-
send('port=', uri.port)
|
45
|
-
send('path=', uri.path)
|
46
|
-
send('proxy_uri=', (opts[:proxy_uri] ||= opts[:proxy_url]))
|
47
|
-
send('use_proxy=')
|
41
|
+
send('proxy_uri=', opts)
|
48
42
|
send('open_timeout=', (opts[:open_timeout] ||= 60))
|
49
43
|
send('read_timeout=', (opts[:read_timeout] ||= 60))
|
50
44
|
send('use_ssl=', opts[:use_ssl], uri.scheme)
|
@@ -68,12 +62,14 @@ module NetHTTP
|
|
68
62
|
end
|
69
63
|
end
|
70
64
|
|
71
|
-
private :
|
72
|
-
:response
|
65
|
+
private :response
|
73
66
|
|
74
67
|
def logger=(logger = nil)
|
75
68
|
@logger = Core.get_logger(logger)
|
76
69
|
end
|
70
|
+
|
71
|
+
alias proxy_url proxy_uri
|
72
|
+
alias url uri
|
77
73
|
end
|
78
74
|
|
79
75
|
module_function
|
data/lib/client/ext.rb
CHANGED
@@ -2,40 +2,48 @@
|
|
2
2
|
|
3
3
|
module NetHTTP
|
4
4
|
class Client
|
5
|
-
def
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
@use_proxy = true
|
5
|
+
def proxy_uri=(opts = {})
|
6
|
+
proxy_uri = opts[:proxy_uri] ||= opts[:proxy_url] ||= ENV['http_proxy'] ||= ENV['HTTP_PROXY'] ||= ENV['https_proxy'] ||= ENV['HTTPS_PROXY']
|
7
|
+
|
8
|
+
begin
|
9
|
+
if proxy_uri.to_s.empty? == false
|
10
|
+
@proxy_uri = Core::Utilities.parse_uri(proxy_uri)
|
11
|
+
else
|
12
|
+
@proxy_uri = Core::Utilities.parse_uri(
|
13
|
+
Core::Utilities.construct_uri(
|
14
|
+
scheme: opts[:proxy_uri_scheme],
|
15
|
+
host: opts[:proxy_uri_host],
|
16
|
+
port: opts[:proxy_uri_port],
|
17
|
+
path: opts[:proxy_uri_path],
|
18
|
+
query: opts[:proxy_uri_query]
|
19
|
+
)
|
20
|
+
)
|
21
|
+
end
|
22
|
+
rescue RuntimeError => error
|
23
|
+
logger.debug(error)
|
24
|
+
@proxy_uri = nil
|
26
25
|
end
|
27
26
|
end
|
28
27
|
|
29
|
-
def
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
28
|
+
def uri=(opts = {})
|
29
|
+
uri = opts[:uri] ||= opts[:url]
|
30
|
+
begin
|
31
|
+
if uri.to_s.empty? == false
|
32
|
+
@uri = Core::Utilities.parse_uri(uri)
|
33
|
+
else
|
34
|
+
@uri = Core::Utilities.parse_uri(
|
35
|
+
Core::Utilities.construct_uri(
|
36
|
+
scheme: opts[:scheme],
|
37
|
+
host: opts[:host],
|
38
|
+
port: opts[:port],
|
39
|
+
path: opts[:path],
|
40
|
+
query: opts[:query]
|
41
|
+
)
|
42
|
+
)
|
43
|
+
end
|
44
|
+
rescue RuntimeError => error
|
45
|
+
logger.debug(error)
|
46
|
+
@uri = nil
|
39
47
|
end
|
40
48
|
end
|
41
49
|
|
data/lib/client/schema.rb
CHANGED
@@ -6,24 +6,37 @@ module NetHTTP
|
|
6
6
|
class Client
|
7
7
|
Schema = Dry::Validation.Schema do
|
8
8
|
configure do
|
9
|
+
def name
|
10
|
+
'NetHTTP::Client::Schema'
|
11
|
+
end
|
12
|
+
|
9
13
|
def true_or_false
|
10
14
|
[true, false]
|
11
15
|
end
|
12
16
|
end
|
13
17
|
|
14
|
-
optional(:
|
15
|
-
optional(:uri).maybe(type?: String)
|
16
|
-
optional(:url).maybe(type?: String)
|
17
|
-
optional(:scheme).maybe(type?: String)
|
18
|
+
optional(:ca_file).filled(type?: String)
|
18
19
|
optional(:host).maybe(type?: String)
|
19
|
-
optional(:
|
20
|
+
optional(:logger).filled
|
21
|
+
optional(:open_timeout).filled(type?: Integer)
|
20
22
|
optional(:path).maybe(type?: String)
|
23
|
+
optional(:port).maybe(type?: Integer)
|
24
|
+
optional(:pkcs12_file).filled(type?: String)
|
25
|
+
optional(:pkcs12_passphrase).filled(type?: String)
|
26
|
+
optional(:proxy_uri_host).maybe(type?: String)
|
27
|
+
optional(:proxy_uri_path).maybe(type?: String)
|
28
|
+
optional(:proxy_uri_port).maybe(type?: Integer)
|
29
|
+
optional(:proxy_uri_scheme).maybe(type?: String)
|
21
30
|
optional(:proxy_uri).filled(type?: String)
|
22
31
|
optional(:proxy_url).filled(type?: String)
|
23
|
-
optional(:
|
24
|
-
optional(:use_ssl).filled(included_in?: true_or_false)
|
25
|
-
optional(:open_timeout).filled(type?: Integer)
|
32
|
+
optional(:query).filled(type?: String)
|
26
33
|
optional(:read_timeout).filled(type?: Integer)
|
34
|
+
optional(:scheme).maybe(type?: String)
|
35
|
+
optional(:ssl_path).filled(type?: String)
|
36
|
+
optional(:uri).maybe(type?: String)
|
37
|
+
optional(:url).maybe(type?: String)
|
38
|
+
optional(:use_ssl).filled(included_in?: true_or_false)
|
39
|
+
optional(:verify_mode).filled
|
27
40
|
|
28
41
|
rule(if_url_and_uri_are_nil_must_provide_host: [:uri, :url, :host]) do |uri, url, host|
|
29
42
|
uri.empty?.then(url.empty?.then(host.filled?))
|
data/lib/core/core.rb
CHANGED
@@ -16,11 +16,22 @@ module NetHTTP
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def self.schema_validation(opts, schema, logger)
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
19
|
+
begin
|
20
|
+
results = schema.call(opts)
|
21
|
+
return if results.success?
|
22
|
+
begin
|
23
|
+
schema_name = schema.name
|
24
|
+
logger.debug("NetHTTP::Core::SchemaValidationError - #{schema_name} input validation failed due to => #{results.messages}")
|
25
|
+
raise("NetHTTP::Core::SchemaValidationError - #{schema_name} input validation failed due to => #{results.messages}")
|
26
|
+
rescue RuntimeError => error
|
27
|
+
logger.debug("NetHTTP::Core::SchemaValidationError - Dry::Validation::Schema input validation failed due to => #{results.messages}")
|
28
|
+
raise("NetHTTP::Core::SchemaValidationError - Dry::Validation::Schema input validation failed due to => #{results.messages}")
|
29
|
+
end
|
30
|
+
rescue RuntimeError => error
|
31
|
+
logger.debug(error)
|
32
|
+
logger.debug("NetHTTP::Core::SchemaValidationError - Dry::Validation::Schema input validation failed.")
|
33
|
+
raise error
|
34
|
+
end
|
24
35
|
end
|
25
36
|
end
|
26
37
|
end
|
data/lib/core/utilities.rb
CHANGED
@@ -9,38 +9,55 @@ module NetHTTP
|
|
9
9
|
class Core
|
10
10
|
class Utilities
|
11
11
|
def self.construct_uri(uri = {})
|
12
|
-
return nil if uri
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
12
|
+
return nil if uri.empty?
|
13
|
+
return nil if uri[:host].to_s.empty?
|
14
|
+
return nil if uri[:scheme].to_s.empty? && uri[:port].to_s.empty?
|
15
|
+
|
16
|
+
scheme = uri[:scheme]
|
17
|
+
if scheme.to_s.empty?
|
18
|
+
case uri[:port]
|
19
|
+
when 80, '80'
|
20
|
+
scheme = 'http'
|
21
|
+
else
|
22
|
+
scheme = 'https'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
port = uri[:port]
|
27
|
+
if port.to_s.empty?
|
28
|
+
case uri[:scheme]
|
29
|
+
when 'https'
|
30
|
+
port = 443
|
31
|
+
when 'http'
|
32
|
+
port = 80
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
scheme = "#{scheme}://"
|
37
|
+
host = uri[:host]
|
38
|
+
port = ":#{port}"
|
39
|
+
path = uri[:path]
|
40
|
+
query = "?#{uri[:query]}"
|
41
|
+
|
42
|
+
scheme = nil if scheme.to_s.empty?
|
43
|
+
port = nil if port.to_s.empty?
|
44
|
+
path = nil if uri[:path].to_s.empty?
|
45
|
+
query = nil if uri[:query].to_s.empty?
|
46
|
+
|
47
|
+
URI("#{scheme}#{host}#{port}#{path}#{query}").to_s
|
24
48
|
end
|
25
49
|
|
26
50
|
def self.parse_uri(uri)
|
27
51
|
return if uri.nil?
|
28
52
|
return if uri.to_s.empty?
|
29
53
|
|
30
|
-
|
31
|
-
|
32
|
-
scheme
|
33
|
-
port = parsed_uri.to_s.scan(%r{:(\d+)\/}).flatten[0] ||= parsed_uri.port
|
54
|
+
scheme = uri.to_s.scan(%r{([a-z][a-z0-9+\-.]*)://}).flatten[0].to_s
|
55
|
+
return URI(uri) if scheme.downcase == 'http'
|
56
|
+
return URI(uri) if scheme.downcase == 'https'
|
34
57
|
|
35
|
-
|
36
|
-
return URI(
|
37
|
-
|
38
|
-
case port
|
39
|
-
when 80, '80'
|
40
|
-
URI("http://#{parsed_uri.to_s.gsub("#{scheme}://", '')}")
|
41
|
-
else
|
42
|
-
URI("https://#{parsed_uri.to_s.gsub("#{scheme}://", '')}")
|
43
|
-
end
|
58
|
+
port = uri.to_s.scan(%r{:([0-9]+)}).flatten[0].to_s
|
59
|
+
return URI("http://#{uri.to_s.gsub("#{scheme}://", '')}") if port == '80'
|
60
|
+
URI("https://#{uri.to_s.gsub("#{scheme}://", '')}")
|
44
61
|
end
|
45
62
|
|
46
63
|
# CamelCase to snake_case
|
@@ -128,8 +145,8 @@ module NetHTTP
|
|
128
145
|
format: 'snake',
|
129
146
|
type: type.downcase
|
130
147
|
)
|
131
|
-
rescue RuntimeError =>
|
132
|
-
raise
|
148
|
+
rescue RuntimeError => error
|
149
|
+
raise error
|
133
150
|
end
|
134
151
|
end
|
135
152
|
|
@@ -152,8 +169,8 @@ module NetHTTP
|
|
152
169
|
format: 'snake',
|
153
170
|
type: type.downcase
|
154
171
|
)
|
155
|
-
rescue RuntimeError =>
|
156
|
-
raise
|
172
|
+
rescue RuntimeError => error
|
173
|
+
raise error
|
157
174
|
end
|
158
175
|
end
|
159
176
|
|
@@ -196,8 +213,8 @@ module NetHTTP
|
|
196
213
|
format: 'snake',
|
197
214
|
type: type.downcase
|
198
215
|
)
|
199
|
-
rescue RuntimeError =>
|
200
|
-
raise
|
216
|
+
rescue RuntimeError => error
|
217
|
+
raise error
|
201
218
|
end
|
202
219
|
end
|
203
220
|
|
@@ -207,13 +224,13 @@ module NetHTTP
|
|
207
224
|
return false if json_doc.empty?
|
208
225
|
|
209
226
|
JSON.parse(json_doc)
|
210
|
-
rescue JSON::ParserError =>
|
227
|
+
rescue JSON::ParserError => error
|
211
228
|
if logger.nil? || logger.to_s.empty?
|
212
229
|
puts 'WARNING - JSON syntax / parsing errors detected:'
|
213
|
-
puts
|
230
|
+
puts error
|
214
231
|
else
|
215
232
|
logger.debug('WARNING - JSON syntax / parsing errors detected:')
|
216
|
-
logger.debug(
|
233
|
+
logger.debug(error)
|
217
234
|
end
|
218
235
|
return false
|
219
236
|
end
|
@@ -253,9 +270,12 @@ module NetHTTP
|
|
253
270
|
return false unless html_doc.include?('<body>')
|
254
271
|
return false unless html_doc.include?('</body>')
|
255
272
|
return false unless Nokogiri::HTML(html_doc).errors.empty?
|
273
|
+
return false unless Nokogiri::XML(html_doc).errors.empty?
|
256
274
|
|
257
275
|
begin
|
258
|
-
parse_errors = Nokogiri::HTML.parse(html_doc).validate
|
276
|
+
# parse_errors = Nokogiri::HTML.parse(html_doc).validate
|
277
|
+
parse_errors = Nokogiri::XML(html_doc).errors { |c| c.options = Nokogiri::XML::ParseOptions::STRICT }
|
278
|
+
Nokogiri::XML(html_doc) { |c| c.options = Nokogiri::XML::ParseOptions::STRICT }
|
259
279
|
rescue Nokogiri::XML::SyntaxError
|
260
280
|
if logger.nil? || logger.to_s.empty?
|
261
281
|
puts 'WARNING - HTML syntax / parsing errors detected:'
|
@@ -266,8 +286,8 @@ module NetHTTP
|
|
266
286
|
end
|
267
287
|
return true
|
268
288
|
end
|
269
|
-
rescue RuntimeError =>
|
270
|
-
raise
|
289
|
+
rescue RuntimeError => error
|
290
|
+
raise error
|
271
291
|
end
|
272
292
|
|
273
293
|
true
|
data/lib/request/request.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require_relative 'schema'
|
4
4
|
require_relative '../core/core'
|
5
|
+
require_relative '../response/response'
|
5
6
|
|
6
7
|
module NetHTTP
|
7
8
|
class Client
|
@@ -30,11 +31,11 @@ module NetHTTP
|
|
30
31
|
|
31
32
|
opts[:method] = 'delete'
|
32
33
|
request_opts = request_opts(opts)
|
33
|
-
logger.debug('Request Method => ' + request_opts[:method])
|
34
|
-
logger.debug('Request Host => ' + request_opts[:uri].scheme.to_s + request_opts[:uri].host.to_s)
|
34
|
+
logger.debug('Request Method => ' + request_opts[:method].to_s.upcase)
|
35
|
+
logger.debug('Request Host => ' + request_opts[:uri].scheme.to_s + '://' + request_opts[:uri].host.to_s)
|
35
36
|
logger.debug('Request Port => ' + request_opts[:uri].port.to_s)
|
36
37
|
logger.debug('Request Path => ' + request_opts[:path])
|
37
|
-
Response.new(
|
38
|
+
NetHTTP::Response.new(
|
38
39
|
response: client.delete(
|
39
40
|
request_opts[:path]
|
40
41
|
),
|
@@ -47,13 +48,13 @@ module NetHTTP
|
|
47
48
|
|
48
49
|
opts[:method] = 'get'
|
49
50
|
request_opts = request_opts(opts)
|
50
|
-
logger.debug('Request Method => ' + request_opts[:method])
|
51
|
-
logger.debug('Request Host => ' + request_opts[:uri].scheme.to_s + request_opts[:uri].host.to_s)
|
51
|
+
logger.debug('Request Method => ' + request_opts[:method].to_s.upcase)
|
52
|
+
logger.debug('Request Host => ' + request_opts[:uri].scheme.to_s + '://' + request_opts[:uri].host.to_s)
|
52
53
|
logger.debug('Request Port => ' + request_opts[:uri].port.to_s)
|
53
54
|
logger.debug('Request Path => ' + request_opts[:path])
|
54
55
|
logger.debug('Request Headers =>')
|
55
56
|
logger.debug(request_opts[:headers])
|
56
|
-
Response.new(
|
57
|
+
NetHTTP::Response.new(
|
57
58
|
response: client.get(
|
58
59
|
request_opts[:path],
|
59
60
|
request_opts[:headers]
|
@@ -67,15 +68,15 @@ module NetHTTP
|
|
67
68
|
|
68
69
|
opts[:method] = 'post'
|
69
70
|
request_opts = request_opts(opts)
|
70
|
-
logger.debug('Request Method => ' + request_opts[:method])
|
71
|
-
logger.debug('Request Host => ' + request_opts[:uri].scheme.to_s + request_opts[:uri].host.to_s)
|
71
|
+
logger.debug('Request Method => ' + request_opts[:method].to_s.upcase)
|
72
|
+
logger.debug('Request Host => ' + request_opts[:uri].scheme.to_s + '://' + request_opts[:uri].host.to_s)
|
72
73
|
logger.debug('Request Port => ' + request_opts[:uri].port.to_s)
|
73
74
|
logger.debug('Request Path => ' + request_opts[:path])
|
74
75
|
logger.debug('Request Headers =>')
|
75
76
|
logger.debug(request_opts[:headers])
|
76
77
|
logger.debug('Request Body =>')
|
77
78
|
logger.debug(request_opts[:body])
|
78
|
-
Response.new(
|
79
|
+
NetHTTP::Response.new(
|
79
80
|
response: client.post(
|
80
81
|
request_opts[:path],
|
81
82
|
request_opts[:body],
|
@@ -90,15 +91,15 @@ module NetHTTP
|
|
90
91
|
|
91
92
|
opts[:method] = 'post_form'
|
92
93
|
request_opts = request_opts(opts)
|
93
|
-
logger.debug('Request Method => ' + request_opts[:method])
|
94
|
-
logger.debug('Request Host => ' + request_opts[:uri].scheme.to_s + request_opts[:uri].host.to_s)
|
94
|
+
logger.debug('Request Method => ' + request_opts[:method].to_s.upcase)
|
95
|
+
logger.debug('Request Host => ' + request_opts[:uri].scheme.to_s + '://' + request_opts[:uri].host.to_s)
|
95
96
|
logger.debug('Request Port => ' + request_opts[:uri].port.to_s)
|
96
97
|
logger.debug('Request Path => ' + request_opts[:path])
|
97
98
|
logger.debug('Request Headers =>')
|
98
99
|
logger.debug(request_opts[:headers])
|
99
100
|
logger.debug('Request Body =>')
|
100
101
|
logger.debug(URI.encode_www_form(request_opts[:body]))
|
101
|
-
Response.new(
|
102
|
+
NetHTTP::Response.new(
|
102
103
|
response: client.post(
|
103
104
|
uri,
|
104
105
|
URI.encode_www_form(request_opts[:body]),
|
@@ -115,15 +116,15 @@ module NetHTTP
|
|
115
116
|
|
116
117
|
opts[:method] = 'put'
|
117
118
|
request_opts = request_opts(opts)
|
118
|
-
logger.debug('Request Method => ' + request_opts[:method])
|
119
|
-
logger.debug('Request Host => ' + request_opts[:uri].scheme.to_s + request_opts[:uri].host.to_s)
|
119
|
+
logger.debug('Request Method => ' + request_opts[:method].to_s.upcase)
|
120
|
+
logger.debug('Request Host => ' + request_opts[:uri].scheme.to_s + '://' + request_opts[:uri].host.to_s)
|
120
121
|
logger.debug('Request Port => ' + request_opts[:uri].port.to_s)
|
121
122
|
logger.debug('Request Path => ' + request_opts[:path])
|
122
123
|
logger.debug('Request Headers =>')
|
123
124
|
logger.debug(request_opts[:headers])
|
124
125
|
logger.debug('Request Body =>')
|
125
126
|
logger.debug(request_opts[:body])
|
126
|
-
Response.new(
|
127
|
+
NetHTTP::Response.new(
|
127
128
|
response: client.put(
|
128
129
|
request_opts[:path],
|
129
130
|
request_opts[:body],
|
@@ -133,17 +134,43 @@ module NetHTTP
|
|
133
134
|
)
|
134
135
|
end
|
135
136
|
|
136
|
-
def request_opts(opts
|
137
|
+
def request_opts(opts)
|
137
138
|
Core.schema_validation(opts, NetHTTP::Request::Schema, logger) unless opts[:enforce_schema_validation] == false
|
138
139
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
140
|
+
request_method = opts[:method] ||= 'post'
|
141
|
+
request_uri = Core::Utilities.parse_uri(opts[:uri] || opts[:url] || uri)
|
142
|
+
request_path = request_path(
|
143
|
+
path: (opts[:path] || request_uri.path || path),
|
144
|
+
query: (opts[:query] || request_uri.query || query)
|
145
|
+
)
|
146
|
+
request_headers = opts[:headers] ||= {}
|
147
|
+
request_body = opts[:body] ||= nil
|
148
|
+
|
149
|
+
{
|
150
|
+
method: request_method,
|
151
|
+
uri: request_uri,
|
152
|
+
path: request_path,
|
153
|
+
headers: request_headers,
|
154
|
+
body: request_body
|
155
|
+
}
|
156
|
+
end
|
157
|
+
|
158
|
+
def request_path(opts)
|
159
|
+
# i.e. URI('https://www.google.com')
|
160
|
+
# uri.path defaults to "" if empty / not set
|
161
|
+
# uri.query defaults to nil if empty / not set
|
162
|
+
path = opts[:path].to_s.chomp('?')
|
163
|
+
if opts[:query].to_s.start_with?('?')
|
164
|
+
query = opts[:query][1..-1]
|
165
|
+
else
|
166
|
+
query = opts[:query].to_s
|
167
|
+
end
|
168
|
+
|
169
|
+
return '' if path.empty? && query.empty?
|
170
|
+
return path if query.empty?
|
171
|
+
return '/' + query if path.empty?
|
172
|
+
|
173
|
+
path + '?' + query
|
147
174
|
end
|
148
175
|
end
|
149
176
|
end
|
data/lib/request/schema.rb
CHANGED
@@ -5,9 +5,16 @@ require 'dry-validation'
|
|
5
5
|
module NetHTTP
|
6
6
|
class Request
|
7
7
|
Schema = Dry::Validation.Schema do
|
8
|
+
configure do
|
9
|
+
def name
|
10
|
+
'NetHTTP::Request::Schema'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
8
14
|
required(:method).filled(type?: String)
|
9
15
|
optional(:headers).maybe(type?: Hash)
|
10
16
|
optional(:body).maybe
|
17
|
+
optional(:query).filled(type?: String)
|
11
18
|
|
12
19
|
rule(if_url_and_uri_are_nil_must_provide_path: [:uri, :url, :path]) do |uri, url, path|
|
13
20
|
uri.empty?.then(url.empty?.then(path.filled?))
|