rb-net_http-client 0.0.4 → 1.0.1
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/lib/client/client.rb +67 -34
- data/lib/client/ext.rb +101 -84
- data/lib/client/schema.rb +1 -1
- data/lib/core/core.rb +6 -55
- data/lib/core/utilities.rb +57 -23
- data/lib/request/request.rb +149 -0
- data/lib/request/schema.rb +2 -5
- data/lib/response/response.rb +131 -0
- data/lib/response/schema.rb +11 -0
- data/lib/version.rb +1 -1
- metadata +6 -6
- data/lib/request/ext.rb +0 -87
- data/lib/response/ext.rb +0 -111
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 864953a6821c8556cd571a116d852aadb39810fbe41c672ce4a4d0a9d37ad0cc
|
4
|
+
data.tar.gz: 53fbde8821ae8c0610dc7ad7b1b798b92728df13fc05fd1bad0ca620dfb61761
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fecbe20848e6f55335b16cbe3d5a8f418a1b5843a69aac09fa9f068eb67ccb08c407ca3226357c4595d9e2ccb60454b6e06357b6c7fba109d297098ffba47d7b
|
7
|
+
data.tar.gz: 7d5ffbc523f9c97bc3e241c7ca41f117f2ba51849d69b540c0e4ad5d5f8d30a221a4c09012812ab95d8c029c61ff030b8042eb2d46d175c028a1c638fb4ab2eb
|
data/lib/client/client.rb
CHANGED
@@ -4,48 +4,81 @@ require 'net/https'
|
|
4
4
|
require_relative 'ext'
|
5
5
|
require_relative 'schema'
|
6
6
|
require_relative '../core/core'
|
7
|
-
require_relative '../
|
8
|
-
require_relative '../
|
7
|
+
require_relative '../response/response'
|
8
|
+
require_relative '../request/request'
|
9
9
|
|
10
10
|
module NetHTTP
|
11
|
-
|
11
|
+
class Client
|
12
|
+
attr_reader :ca_file,
|
13
|
+
:cert,
|
14
|
+
:client,
|
15
|
+
:host,
|
16
|
+
:key,
|
17
|
+
:logger,
|
18
|
+
:path,
|
19
|
+
:pkcs12,
|
20
|
+
:port,
|
21
|
+
:proxy_uri,
|
22
|
+
:open_timeout,
|
23
|
+
:read_timeout,
|
24
|
+
:response,
|
25
|
+
:scheme,
|
26
|
+
:ssl_path,
|
27
|
+
:uri,
|
28
|
+
:use_proxy,
|
29
|
+
:use_ssl,
|
30
|
+
:verify_mode
|
31
|
+
|
32
|
+
def initialize(opts = {})
|
33
|
+
send('logger=', opts[:logger])
|
34
|
+
Core.schema_validation(opts, NetHTTP::Client::Schema, logger) unless opts[:enforce_schema_validation] == false
|
35
|
+
send('uri=', (opts[:uri] || opts[:url]))
|
36
|
+
send('client=', opts)
|
37
|
+
end
|
12
38
|
|
13
|
-
|
14
|
-
|
39
|
+
def client=(opts = {})
|
40
|
+
@client = Net::HTTP.new(uri.host, uri.port)
|
15
41
|
|
16
|
-
|
42
|
+
send('scheme=', uri.scheme)
|
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=')
|
48
|
+
send('open_timeout=', (opts[:open_timeout] ||= 60))
|
49
|
+
send('read_timeout=', (opts[:read_timeout] ||= 60))
|
50
|
+
send('use_ssl=', opts[:use_ssl], uri.scheme)
|
51
|
+
send('ssl_path=', opts[:ssl_path])
|
52
|
+
send('pkcs12_file=', opts[:pkcs12_file])
|
53
|
+
send('pkcs12_passphrase=', opts[:pkcs12_passphrase])
|
54
|
+
send('pkcs12=')
|
55
|
+
send('cert=')
|
56
|
+
send('key=')
|
57
|
+
send('ca_file=', opts[:ca_file])
|
58
|
+
send('verify_mode=', opts[:verify_mode])
|
17
59
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
60
|
+
@client.open_timeout = open_timeout
|
61
|
+
@client.read_timeout = read_timeout
|
62
|
+
@client.use_ssl = use_ssl
|
63
|
+
if use_ssl
|
64
|
+
@client.cert = cert
|
65
|
+
@client.key = key
|
66
|
+
@client.ca_file = ca_file
|
67
|
+
@client.verify_mode = verify_mode
|
68
|
+
end
|
22
69
|
end
|
23
70
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
client.uri = uri
|
30
|
-
client.host = uri.host
|
31
|
-
client.port = uri.port
|
32
|
-
client.path = uri.path
|
33
|
-
client.use_proxy = Client.use_proxy(opts[:use_proxy])
|
34
|
-
client.proxy_uri = Client.proxy_uri((opts[:proxy_uri] ||= opts[:proxy_url]), client.use_proxy)
|
35
|
-
client.open_timeout = Client.open_timeout(opts[:open_timeout])
|
36
|
-
client.read_timeout = Client.read_timeout(opts[:read_timeout])
|
37
|
-
|
38
|
-
# SSL config:
|
39
|
-
client.use_ssl = Client.use_ssl(opts[:use_ssl], uri.scheme)
|
40
|
-
|
41
|
-
if client.use_ssl
|
42
|
-
pkcs12 = Client.pkcs12(opts[:ssl_path], opts[:pkcs12_file], opts[:pkcs12_passphrase])
|
43
|
-
client.cert = Client.cert(pkcs12)
|
44
|
-
client.key = Client.key(pkcs12)
|
45
|
-
client.ca_file = Client.ca_file(opts[:ssl_path], opts[:ca_file])
|
46
|
-
client.verify_mode = Client.verify_mode(opts[:verify_mode])
|
71
|
+
private :logger,
|
72
|
+
:response
|
73
|
+
|
74
|
+
def logger=(logger = nil)
|
75
|
+
@logger = Core.get_logger(logger)
|
47
76
|
end
|
77
|
+
end
|
78
|
+
|
79
|
+
module_function
|
48
80
|
|
49
|
-
|
81
|
+
def client(opts = {})
|
82
|
+
Client.new(opts)
|
50
83
|
end
|
51
84
|
end
|
data/lib/client/ext.rb
CHANGED
@@ -1,120 +1,137 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative '../core/core'
|
4
|
-
|
5
3
|
module NetHTTP
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
return nil if use_proxy == false
|
4
|
+
class Client
|
5
|
+
def scheme=(scheme = nil)
|
6
|
+
@scheme = scheme
|
7
|
+
end
|
11
8
|
|
12
|
-
|
9
|
+
def host=(host = nil)
|
10
|
+
@host = host
|
13
11
|
end
|
14
12
|
|
15
|
-
def
|
16
|
-
|
13
|
+
def port=(port = nil)
|
14
|
+
@port = port
|
15
|
+
end
|
17
16
|
|
18
|
-
|
17
|
+
def path=(path = nil)
|
18
|
+
@path = path
|
19
19
|
end
|
20
20
|
|
21
|
-
def
|
22
|
-
if
|
23
|
-
|
24
|
-
|
21
|
+
def use_proxy=
|
22
|
+
if proxy_uri.nil?
|
23
|
+
@use_proxy = false
|
24
|
+
else
|
25
|
+
@use_proxy = true
|
25
26
|
end
|
26
|
-
return false if use_ssl == false
|
27
|
-
|
28
|
-
true
|
29
27
|
end
|
30
28
|
|
31
|
-
def
|
32
|
-
|
29
|
+
def proxy_uri=(proxy_uri = nil)
|
30
|
+
proxy_uri = ENV['http_proxy'] ||= ENV['HTTP_PROXY'] ||= ENV['https_proxy'] ||= ENV['HTTPS_PROXY'] if proxy_uri.nil?
|
31
|
+
@proxy_uri = Core::Utilities.parse_uri(proxy_uri)
|
33
32
|
end
|
34
33
|
|
35
|
-
def
|
36
|
-
|
34
|
+
def uri=(uri = nil)
|
35
|
+
if !uri.nil?
|
36
|
+
@uri = Core::Utilities.parse_uri(uri)
|
37
|
+
else
|
38
|
+
@uri = Core::Utilities.parse_uri(Core::Utilities.construct_uri(opts[:scheme], opts[:host], opts[:port], opts[:path]))
|
39
|
+
end
|
37
40
|
end
|
38
41
|
|
39
|
-
def
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
OpenSSL::PKCS12.new(File.binread(ssl_path + '/' + pkcs12_file), pkcs12_passphrase)
|
42
|
+
def ca_file=(ca_file)
|
43
|
+
if ca_file.nil? || ca_file.to_s.empty?
|
44
|
+
@ca_file = nil
|
45
|
+
elsif ssl_path.nil? || ssl_path.to_s.empty?
|
46
|
+
@ca_file = nil
|
47
|
+
else
|
48
|
+
@ca_file = File.binread(ssl_path + '/' + ca_file)
|
49
|
+
end
|
48
50
|
end
|
49
51
|
|
50
|
-
def cert
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
52
|
+
def cert=
|
53
|
+
if pkcs12.nil? || pkcs12.to_s.empty?
|
54
|
+
@cert = nil
|
55
|
+
else
|
56
|
+
@cert = OpenSSL::X509::Certificate.new(pkcs12.certificate)
|
57
|
+
end
|
55
58
|
end
|
56
59
|
|
57
|
-
def key
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
60
|
+
def key=
|
61
|
+
if pkcs12.nil? || pkcs12.to_s.empty?
|
62
|
+
@key = nil
|
63
|
+
else
|
64
|
+
@key = OpenSSL::PKey::RSA.new(pkcs12.key)
|
65
|
+
end
|
62
66
|
end
|
63
67
|
|
64
|
-
def
|
65
|
-
|
66
|
-
|
67
|
-
return nil if ca_file.nil?
|
68
|
-
return nil if ca_file.to_s.empty?
|
68
|
+
def open_timeout=(open_timeout)
|
69
|
+
@open_timeout = open_timeout.to_s.to_i
|
70
|
+
end
|
69
71
|
|
70
|
-
|
72
|
+
def pkcs12=
|
73
|
+
if ssl_path.nil? || ssl_path.to_s.empty?
|
74
|
+
@pkcs12 = nil
|
75
|
+
elsif pkcs12_file.nil? || pkcs12_file.to_s.empty?
|
76
|
+
@pkcs12 = nil
|
77
|
+
elsif pkcs12_passphrase.nil? || pkcs12_passphrase.to_s.empty?
|
78
|
+
@pkcs12 = nil
|
79
|
+
else
|
80
|
+
OpenSSL::PKCS12.new(File.binread(ssl_path + '/' + pkcs12_file), pkcs12_passphrase)
|
81
|
+
end
|
71
82
|
end
|
72
83
|
|
73
|
-
def
|
74
|
-
|
75
|
-
|
84
|
+
def pkcs12_file=(pkcs12_file)
|
85
|
+
if pkcs12_file.nil? || pkcs12_file.to_s.empty?
|
86
|
+
@pkcs12_file = nil
|
87
|
+
else
|
88
|
+
@pkcs12_file = pkcs12_file
|
89
|
+
end
|
90
|
+
end
|
76
91
|
|
77
|
-
|
92
|
+
def pkcs12_passphrase=(pkcs12_passphrase)
|
93
|
+
if pkcs12_passphrase.nil? || pkcs12_passphrase.to_s.empty?
|
94
|
+
@pkcs12_passphrase = nil
|
95
|
+
else
|
96
|
+
@pkcs12_passphrase = pkcs12_passphrase
|
97
|
+
end
|
78
98
|
end
|
79
99
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
attr_reader :host,
|
84
|
-
:path,
|
85
|
-
:logger,
|
86
|
-
:uri,
|
87
|
-
:url,
|
88
|
-
:use_proxy,
|
89
|
-
:use_ssl
|
100
|
+
def read_timeout=(read_timeout)
|
101
|
+
@read_timeout = read_timeout.to_s.to_i
|
102
|
+
end
|
90
103
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
:use_ssl
|
104
|
+
def ssl_path=(ssl_path)
|
105
|
+
if ssl_path.nil? || ssl_path.to_s.empty?
|
106
|
+
@ssl_path = nil
|
107
|
+
else
|
108
|
+
@ssl_path = ssl_path
|
109
|
+
end
|
110
|
+
end
|
99
111
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
112
|
+
def use_ssl=(use_ssl, scheme)
|
113
|
+
@use_ssl = true
|
114
|
+
case use_ssl
|
115
|
+
when false
|
116
|
+
@use_ssl = false
|
117
|
+
when true
|
118
|
+
@use_ssl = true
|
119
|
+
else
|
120
|
+
case scheme.downcase
|
121
|
+
when 'http'
|
122
|
+
@use_ssl = false
|
123
|
+
when 'https'
|
124
|
+
@use_ssl = true
|
109
125
|
end
|
110
126
|
end
|
111
127
|
end
|
112
|
-
end
|
113
|
-
end
|
114
128
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
129
|
+
def verify_mode=(verify_mode)
|
130
|
+
if verify_mode.nil? || verify_mode.to_s.empty?
|
131
|
+
@verify_mode = OpenSSL::SSL::VERIFY_NONE
|
132
|
+
else
|
133
|
+
@verify_mode = verify_mode
|
134
|
+
end
|
135
|
+
end
|
119
136
|
end
|
120
137
|
end
|
data/lib/client/schema.rb
CHANGED
data/lib/core/core.rb
CHANGED
@@ -1,75 +1,26 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'logger'
|
4
|
-
require 'nokogiri'
|
5
|
-
require 'uri'
|
6
4
|
|
7
5
|
module NetHTTP
|
8
|
-
|
9
|
-
def logger
|
10
|
-
@logger || send('logger=', nil)
|
11
|
-
end
|
12
|
-
|
13
|
-
def logger=(logger = nil)
|
14
|
-
@logger = assign_logger(logger)
|
15
|
-
end
|
16
|
-
|
17
|
-
module_function
|
18
|
-
|
19
|
-
def assign_logger(logger = nil)
|
6
|
+
class Core
|
7
|
+
def self.get_logger(logger = nil)
|
20
8
|
return logger if logger.class == Logger
|
21
9
|
|
22
10
|
if logger.nil? || logger.to_s.empty?
|
23
11
|
logger = Logger.new(STDOUT)
|
24
12
|
logger.level = Logger::INFO
|
25
13
|
end
|
26
|
-
logger
|
27
|
-
end
|
28
|
-
|
29
|
-
def construct_uri(scheme, host, port, path)
|
30
|
-
return nil if host.nil?
|
31
|
-
|
32
|
-
uri_scheme = case scheme
|
33
|
-
when 'http', 'https'
|
34
|
-
"#{scheme}://"
|
35
|
-
end
|
36
|
-
uri_port = if port.nil? || port.to_s.empty?
|
37
|
-
nil
|
38
|
-
else
|
39
|
-
":#{port.to_i}"
|
40
|
-
end
|
41
|
-
"#{uri_scheme}#{host}#{uri_port}#{path}"
|
42
|
-
end
|
43
|
-
|
44
|
-
def parse_uri(uri)
|
45
|
-
return if uri.nil?
|
46
|
-
return if uri.to_s.empty?
|
47
|
-
|
48
|
-
parsed_uri = URI(uri)
|
49
|
-
|
50
|
-
scheme = parsed_uri.to_s.scan(%r{(https|http):\/\/}).flatten[0]
|
51
|
-
port = parsed_uri.to_s.scan(%r{:(\d+)\/}).flatten[0] ||= parsed_uri.port
|
52
|
-
|
53
|
-
return URI(parsed_uri) if scheme == 'http'
|
54
|
-
return URI(parsed_uri) if scheme == 'https'
|
55
14
|
|
56
|
-
|
57
|
-
when 80, '80'
|
58
|
-
URI("http://#{parsed_uri.to_s.gsub("#{scheme}://", '')}")
|
59
|
-
else
|
60
|
-
URI("https://#{parsed_uri.to_s.gsub("#{scheme}://", '')}")
|
61
|
-
end
|
15
|
+
logger
|
62
16
|
end
|
63
17
|
|
64
|
-
def schema_validation(opts, schema, logger
|
18
|
+
def self.schema_validation(opts, schema, logger)
|
65
19
|
results = schema.call(opts)
|
66
20
|
return if results.success?
|
67
21
|
|
68
|
-
|
69
|
-
|
70
|
-
logger.debug("NetHTTP::Core::Error - schema input validation failed due to => #{results.messages}")
|
71
|
-
end
|
72
|
-
raise 'NetHTTP::Core::Error - schema input validation failed.'
|
22
|
+
logger.debug("NetHTTP::Core::SchemaValidationError - #{schema} input validation failed due to => #{results.messages}")
|
23
|
+
raise "NetHTTP::Core::SchemaValidationError - #{schema} input validation failed."
|
73
24
|
end
|
74
25
|
end
|
75
26
|
end
|
data/lib/core/utilities.rb
CHANGED
@@ -2,15 +2,49 @@
|
|
2
2
|
|
3
3
|
require 'json'
|
4
4
|
require 'nokogiri'
|
5
|
+
require 'uri'
|
5
6
|
require 'yaml'
|
6
7
|
|
7
8
|
module NetHTTP
|
8
|
-
|
9
|
-
|
10
|
-
|
9
|
+
class Core
|
10
|
+
class Utilities
|
11
|
+
def self.construct_uri(uri = {})
|
12
|
+
return nil if uri[:host].nil?
|
13
|
+
|
14
|
+
scheme = case uri[:scheme]
|
15
|
+
when 'http', 'https'
|
16
|
+
"#{uri[:scheme]}://"
|
17
|
+
end
|
18
|
+
port = if uri[:port].nil? || uri[:port].to_s.empty?
|
19
|
+
nil
|
20
|
+
else
|
21
|
+
":#{uri[:port].to_i}"
|
22
|
+
end
|
23
|
+
"#{scheme}#{host}#{port}#{path}"
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.parse_uri(uri)
|
27
|
+
return if uri.nil?
|
28
|
+
return if uri.to_s.empty?
|
29
|
+
|
30
|
+
parsed_uri = URI(uri)
|
31
|
+
|
32
|
+
scheme = parsed_uri.to_s.scan(%r{(https|http):\/\/}).flatten[0]
|
33
|
+
port = parsed_uri.to_s.scan(%r{:(\d+)\/}).flatten[0] ||= parsed_uri.port
|
34
|
+
|
35
|
+
return URI(parsed_uri) if scheme == 'http'
|
36
|
+
return URI(parsed_uri) if scheme == 'https'
|
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
|
44
|
+
end
|
11
45
|
|
12
46
|
# CamelCase to snake_case
|
13
|
-
def camel_2_snake(key, type = nil)
|
47
|
+
def self.camel_2_snake(key, type = nil)
|
14
48
|
new_key = key.to_s
|
15
49
|
.tr('::', '/')
|
16
50
|
.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
@@ -29,7 +63,7 @@ module NetHTTP
|
|
29
63
|
end
|
30
64
|
|
31
65
|
# snake_case to CamelCase
|
32
|
-
def snake_2_camel(key, type = nil)
|
66
|
+
def self.snake_2_camel(key, type = nil)
|
33
67
|
new_key = key.to_s.split('_')
|
34
68
|
new_key = new_key[0].downcase + new_key[1..-1].map(&:capitalize).join('')
|
35
69
|
|
@@ -46,36 +80,36 @@ module NetHTTP
|
|
46
80
|
# convert hash / array / nested object keys to either snake_case or CamelCase
|
47
81
|
# format -> 'snake' or 'camel'
|
48
82
|
# type -> 'string' or 'symbol'
|
49
|
-
def convert_hash_keys(
|
50
|
-
return
|
83
|
+
def self.convert_hash_keys(opts = {})
|
84
|
+
return opts[:object] if opts[:format].nil? && opts[:type].nil?
|
51
85
|
|
52
|
-
case
|
86
|
+
case opts[:object]
|
53
87
|
when Hash
|
54
88
|
new_hash = {}
|
55
|
-
|
89
|
+
opts[:object].each do |key, value|
|
56
90
|
value = convert_hash_keys(
|
57
91
|
object: value,
|
58
|
-
format:
|
59
|
-
type:
|
92
|
+
format: opts[:format],
|
93
|
+
type: opts[:type]
|
60
94
|
)
|
61
|
-
case
|
95
|
+
case opts[:format].downcase
|
62
96
|
when 'snake'
|
63
|
-
new_key = camel_2_snake(key,
|
97
|
+
new_key = camel_2_snake(key, opts[:type])
|
64
98
|
when 'camel'
|
65
|
-
new_key = snake_2_camel(key,
|
99
|
+
new_key = snake_2_camel(key, opts[:type])
|
66
100
|
end
|
67
101
|
new_hash[new_key] = value
|
68
102
|
end
|
69
103
|
return new_hash
|
70
104
|
when Array
|
71
|
-
return
|
105
|
+
return opts[:object].map { |value| convert_hash_keys(object: value, format: opts[:format], type: opts[:type]) }
|
72
106
|
end
|
73
107
|
|
74
|
-
|
108
|
+
opts[:object]
|
75
109
|
end
|
76
110
|
|
77
111
|
# Convert JSON doc to a Ruby Hash.
|
78
|
-
def json_2_hash(json_doc, type = 'symbol', logger = nil)
|
112
|
+
def self.json_2_hash(json_doc, type = 'symbol', logger = nil)
|
79
113
|
msg = "Invalid 'type' => #{type}. Use either 'string' or 'symbol' (default)."
|
80
114
|
unless ['string', 'symbol'].include?(type.downcase)
|
81
115
|
if logger.nil? || logger.to_s.empty?
|
@@ -100,7 +134,7 @@ module NetHTTP
|
|
100
134
|
end
|
101
135
|
|
102
136
|
# Convert XML doc to a Ruby Hash.
|
103
|
-
def xml_2_hash(xml_doc, type = 'symbol', logger = nil)
|
137
|
+
def self.xml_2_hash(xml_doc, type = 'symbol', logger = nil)
|
104
138
|
msg = "Invalid 'type' => #{type}. Use either 'string' or 'symbol' (default)."
|
105
139
|
unless ['string', 'symbol'].include?(type.downcase)
|
106
140
|
if logger.nil? || logger.to_s.empty?
|
@@ -123,7 +157,7 @@ module NetHTTP
|
|
123
157
|
end
|
124
158
|
end
|
125
159
|
|
126
|
-
def format_xml_doc(xml_doc)
|
160
|
+
def self.format_xml_doc(xml_doc)
|
127
161
|
case xml_doc
|
128
162
|
when String
|
129
163
|
formatted_xml_doc = Nokogiri::XML(xml_doc) { |c| c.options = Nokogiri::XML::ParseOptions::STRICT }
|
@@ -138,7 +172,7 @@ module NetHTTP
|
|
138
172
|
end
|
139
173
|
|
140
174
|
# Convert YAML doc to a Ruby Hash.
|
141
|
-
def yaml_2_hash(yaml_doc, type = 'symbol', logger = nil)
|
175
|
+
def self.yaml_2_hash(yaml_doc, type = 'symbol', logger = nil)
|
142
176
|
msg = "Invalid 'type' => #{type}. Use either 'string' or 'symbol' (default)."
|
143
177
|
unless ['string', 'symbol'].include?(type.downcase)
|
144
178
|
if logger.nil? || logger.to_s.empty?
|
@@ -167,7 +201,7 @@ module NetHTTP
|
|
167
201
|
end
|
168
202
|
end
|
169
203
|
|
170
|
-
def valid_json?(json_doc, logger = nil)
|
204
|
+
def self.valid_json?(json_doc, logger = nil)
|
171
205
|
begin
|
172
206
|
return false if json_doc.nil?
|
173
207
|
return false if json_doc.empty?
|
@@ -187,7 +221,7 @@ module NetHTTP
|
|
187
221
|
true
|
188
222
|
end
|
189
223
|
|
190
|
-
def valid_xml?(xml_doc, logger = nil)
|
224
|
+
def self.valid_xml?(xml_doc, logger = nil)
|
191
225
|
begin
|
192
226
|
return false if xml_doc.nil?
|
193
227
|
return false if xml_doc.empty?
|
@@ -210,7 +244,7 @@ module NetHTTP
|
|
210
244
|
true
|
211
245
|
end
|
212
246
|
|
213
|
-
def valid_html?(html_doc, logger = nil)
|
247
|
+
def self.valid_html?(html_doc, logger = nil)
|
214
248
|
begin
|
215
249
|
return false if html_doc.nil?
|
216
250
|
return false if html_doc.empty?
|
@@ -0,0 +1,149 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'schema'
|
4
|
+
require_relative '../core/core'
|
5
|
+
|
6
|
+
module NetHTTP
|
7
|
+
class Client
|
8
|
+
def call_web_service(request_opts = {})
|
9
|
+
@response = case request_opts[:method].to_s.upcase
|
10
|
+
when 'DELETE'
|
11
|
+
delete(request_opts)
|
12
|
+
when 'GET'
|
13
|
+
get(request_opts)
|
14
|
+
when 'POST'
|
15
|
+
post(request_opts)
|
16
|
+
when 'POST_FORM', 'POST_FORM_DATA'
|
17
|
+
post_form(request_opts)
|
18
|
+
when 'PUT'
|
19
|
+
put(request_opts)
|
20
|
+
else
|
21
|
+
logger.debug("Request method => '#{request_opts[:method]}' not yet supported.")
|
22
|
+
raise "Request method => '#{request_opts[:method]}' not yet supported."
|
23
|
+
end
|
24
|
+
|
25
|
+
@response
|
26
|
+
end
|
27
|
+
|
28
|
+
def delete(opts = {})
|
29
|
+
raise 'Empty DELETE request options provided.' if opts.empty?
|
30
|
+
|
31
|
+
opts[:method] = 'delete'
|
32
|
+
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)
|
35
|
+
logger.debug('Request Port => ' + request_opts[:uri].port.to_s)
|
36
|
+
logger.debug('Request Path => ' + request_opts[:path])
|
37
|
+
Response.new(
|
38
|
+
response: client.delete(
|
39
|
+
request_opts[:path]
|
40
|
+
),
|
41
|
+
logger: logger
|
42
|
+
)
|
43
|
+
end
|
44
|
+
|
45
|
+
def get(opts = {})
|
46
|
+
raise 'Empty GET request options provided.' if opts.empty?
|
47
|
+
|
48
|
+
opts[:method] = 'get'
|
49
|
+
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)
|
52
|
+
logger.debug('Request Port => ' + request_opts[:uri].port.to_s)
|
53
|
+
logger.debug('Request Path => ' + request_opts[:path])
|
54
|
+
logger.debug('Request Headers =>')
|
55
|
+
logger.debug(request_opts[:headers])
|
56
|
+
Response.new(
|
57
|
+
response: client.get(
|
58
|
+
request_opts[:path],
|
59
|
+
request_opts[:headers]
|
60
|
+
),
|
61
|
+
logger: logger
|
62
|
+
)
|
63
|
+
end
|
64
|
+
|
65
|
+
def post(opts = {})
|
66
|
+
raise 'Empty POST request options provided.' if opts.empty?
|
67
|
+
|
68
|
+
opts[:method] = 'post'
|
69
|
+
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)
|
72
|
+
logger.debug('Request Port => ' + request_opts[:uri].port.to_s)
|
73
|
+
logger.debug('Request Path => ' + request_opts[:path])
|
74
|
+
logger.debug('Request Headers =>')
|
75
|
+
logger.debug(request_opts[:headers])
|
76
|
+
logger.debug('Request Body =>')
|
77
|
+
logger.debug(request_opts[:body])
|
78
|
+
Response.new(
|
79
|
+
response: client.post(
|
80
|
+
request_opts[:path],
|
81
|
+
request_opts[:body],
|
82
|
+
request_opts[:headers]
|
83
|
+
),
|
84
|
+
logger: logger
|
85
|
+
)
|
86
|
+
end
|
87
|
+
|
88
|
+
def post_form(opts = {})
|
89
|
+
raise 'Empty POST_FORM request options provided.' if opts.empty?
|
90
|
+
|
91
|
+
opts[:method] = 'post_form'
|
92
|
+
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)
|
95
|
+
logger.debug('Request Port => ' + request_opts[:uri].port.to_s)
|
96
|
+
logger.debug('Request Path => ' + request_opts[:path])
|
97
|
+
logger.debug('Request Headers =>')
|
98
|
+
logger.debug(request_opts[:headers])
|
99
|
+
logger.debug('Request Body =>')
|
100
|
+
logger.debug(URI.encode_www_form(request_opts[:body]))
|
101
|
+
Response.new(
|
102
|
+
response: client.post(
|
103
|
+
uri,
|
104
|
+
URI.encode_www_form(request_opts[:body]),
|
105
|
+
request_opts[:headers]
|
106
|
+
),
|
107
|
+
logger: logger
|
108
|
+
)
|
109
|
+
end
|
110
|
+
|
111
|
+
alias post_form_data post_form
|
112
|
+
|
113
|
+
def put(opts = {})
|
114
|
+
raise 'Empty PUT request options provided.' if opts.empty?
|
115
|
+
|
116
|
+
opts[:method] = 'put'
|
117
|
+
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)
|
120
|
+
logger.debug('Request Port => ' + request_opts[:uri].port.to_s)
|
121
|
+
logger.debug('Request Path => ' + request_opts[:path])
|
122
|
+
logger.debug('Request Headers =>')
|
123
|
+
logger.debug(request_opts[:headers])
|
124
|
+
logger.debug('Request Body =>')
|
125
|
+
logger.debug(request_opts[:body])
|
126
|
+
Response.new(
|
127
|
+
response: client.put(
|
128
|
+
request_opts[:path],
|
129
|
+
request_opts[:body],
|
130
|
+
request_opts[:headers]
|
131
|
+
),
|
132
|
+
logger: logger
|
133
|
+
)
|
134
|
+
end
|
135
|
+
|
136
|
+
def request_opts(opts = {})
|
137
|
+
Core.schema_validation(opts, NetHTTP::Request::Schema, logger) unless opts[:enforce_schema_validation] == false
|
138
|
+
|
139
|
+
request_opts = {}
|
140
|
+
request_opts[:method] = opts[:method] ||= 'post'
|
141
|
+
request_opts[:uri] = opts[:uri] ||= opts[:url] ||= uri
|
142
|
+
request_opts[:path] = opts[:path] ||= request_opts[:uri].path ||= path
|
143
|
+
request_opts[:path] = (request_opts[:path] + '?' + request_opts[:uri].query) unless request_opts[:uri].query.nil? || request_opts[:path].include?('?')
|
144
|
+
request_opts[:headers] = opts[:headers] ||= {}
|
145
|
+
request_opts[:body] = opts[:body] ||= nil
|
146
|
+
request_opts
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
data/lib/request/schema.rb
CHANGED
@@ -3,13 +3,10 @@
|
|
3
3
|
require 'dry-validation'
|
4
4
|
|
5
5
|
module NetHTTP
|
6
|
-
|
6
|
+
class Request
|
7
7
|
Schema = Dry::Validation.Schema do
|
8
|
-
|
9
|
-
optional(:method).filled(type?: String)
|
10
|
-
optional(:req_headers).maybe(type?: Hash)
|
8
|
+
required(:method).filled(type?: String)
|
11
9
|
optional(:headers).maybe(type?: Hash)
|
12
|
-
optional(:req_body).maybe
|
13
10
|
optional(:body).maybe
|
14
11
|
|
15
12
|
rule(if_url_and_uri_are_nil_must_provide_path: [:uri, :url, :path]) do |uri, url, path|
|
@@ -0,0 +1,131 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'nokogiri'
|
5
|
+
require 'ostruct'
|
6
|
+
require_relative 'schema'
|
7
|
+
require_relative '../core/core'
|
8
|
+
require_relative '../core/utilities'
|
9
|
+
|
10
|
+
module NetHTTP
|
11
|
+
class Response
|
12
|
+
attr_reader :logger,
|
13
|
+
:response
|
14
|
+
|
15
|
+
def initialize(opts = {})
|
16
|
+
send('logger=', opts[:logger])
|
17
|
+
puts opts[:response].class
|
18
|
+
Core.schema_validation(opts, NetHTTP::Response::Schema, logger) unless opts[:enforce_schema_validation] == false
|
19
|
+
@response = opts[:response]
|
20
|
+
log_response
|
21
|
+
end
|
22
|
+
|
23
|
+
alias resp response
|
24
|
+
|
25
|
+
def body
|
26
|
+
response.body
|
27
|
+
end
|
28
|
+
|
29
|
+
alias resp_body body
|
30
|
+
alias response_body body
|
31
|
+
|
32
|
+
def body_hash
|
33
|
+
begin
|
34
|
+
return NetHTTP::Core::Utilities.json_2_hash(body, 'symbol', logger) if valid_json?
|
35
|
+
rescue JSON::ParserError => err
|
36
|
+
logger.debug(err)
|
37
|
+
end
|
38
|
+
begin
|
39
|
+
return NetHTTP::Core::Utilities.xml_2_hash(body, 'symbol', logger) if valid_xml?
|
40
|
+
rescue Nokogiri::XML::SyntaxError => err
|
41
|
+
logger.debug(err)
|
42
|
+
end
|
43
|
+
begin
|
44
|
+
# TODO: revisit this if necessary
|
45
|
+
return NetHTTP::Core::Utilities.xml_2_hash(body, 'symbol', logger) if valid_html?
|
46
|
+
rescue Nokogiri::XML::SyntaxError => err
|
47
|
+
logger.debug(err)
|
48
|
+
end
|
49
|
+
|
50
|
+
{}
|
51
|
+
end
|
52
|
+
|
53
|
+
alias resp_body_hash body_hash
|
54
|
+
alias response_body_hash body_hash
|
55
|
+
|
56
|
+
def body_os
|
57
|
+
JSON.parse(body_hash.to_json, object_class: OpenStruct)
|
58
|
+
end
|
59
|
+
|
60
|
+
alias resp_body_os body_os
|
61
|
+
alias response_body_os body_os
|
62
|
+
alias body_open_struct body_os
|
63
|
+
alias resp_body_open_struct body_os
|
64
|
+
alias response_body_open_struct body_os
|
65
|
+
|
66
|
+
def code
|
67
|
+
response.code
|
68
|
+
end
|
69
|
+
|
70
|
+
alias resp_code code
|
71
|
+
alias response_code code
|
72
|
+
|
73
|
+
def headers
|
74
|
+
response_headers = {}
|
75
|
+
response.to_hash.each do |key, value|
|
76
|
+
response_headers[key] = value.flatten[0].to_s
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
alias resp_headers headers
|
81
|
+
alias response_headers headers
|
82
|
+
|
83
|
+
def headers_hash
|
84
|
+
NetHTTP::Core::Utilities.convert_hash_keys(
|
85
|
+
object: headers,
|
86
|
+
format: 'snake',
|
87
|
+
type: 'symbol'
|
88
|
+
)
|
89
|
+
end
|
90
|
+
|
91
|
+
alias resp_headers_hash headers_hash
|
92
|
+
alias response_headers_hash headers_hash
|
93
|
+
|
94
|
+
def headers_os
|
95
|
+
JSON.parse(headers_hash.to_json, object_class: OpenStruct)
|
96
|
+
end
|
97
|
+
|
98
|
+
alias resp_headers_os headers_os
|
99
|
+
alias response_headers_os headers_os
|
100
|
+
alias headers_open_struct headers_os
|
101
|
+
alias resp_headers_struct headers_os
|
102
|
+
alias response_headers_open_struct headers_os
|
103
|
+
|
104
|
+
def valid_json?
|
105
|
+
NetHTTP::Core::Utilities.valid_json?(body, logger)
|
106
|
+
end
|
107
|
+
|
108
|
+
def valid_xml?
|
109
|
+
NetHTTP::Core::Utilities.valid_xml?(body, logger)
|
110
|
+
end
|
111
|
+
|
112
|
+
def valid_html?
|
113
|
+
NetHTTP::Core::Utilities.valid_html?(body, logger)
|
114
|
+
end
|
115
|
+
|
116
|
+
private :logger,
|
117
|
+
:response
|
118
|
+
|
119
|
+
def logger=(logger = nil)
|
120
|
+
@logger = Core.get_logger(logger)
|
121
|
+
end
|
122
|
+
|
123
|
+
def log_response
|
124
|
+
logger.debug('Response Code => ' + code)
|
125
|
+
logger.debug('Response Headers => ')
|
126
|
+
logger.debug(headers)
|
127
|
+
logger.debug('Response Body => ')
|
128
|
+
logger.debug(body)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rb-net_http-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Bostian
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-02-
|
11
|
+
date: 2019-02-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-validation
|
@@ -206,9 +206,10 @@ files:
|
|
206
206
|
- lib/core/core.rb
|
207
207
|
- lib/core/utilities.rb
|
208
208
|
- lib/rb-net_http-client.rb
|
209
|
-
- lib/request/
|
209
|
+
- lib/request/request.rb
|
210
210
|
- lib/request/schema.rb
|
211
|
-
- lib/response/
|
211
|
+
- lib/response/response.rb
|
212
|
+
- lib/response/schema.rb
|
212
213
|
- lib/version.rb
|
213
214
|
- spec/integration/net_http/client/client_ext_spec.rb
|
214
215
|
- spec/integration/net_http/client/client_spec.rb
|
@@ -244,8 +245,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
244
245
|
- !ruby/object:Gem::Version
|
245
246
|
version: '0'
|
246
247
|
requirements: []
|
247
|
-
|
248
|
-
rubygems_version: 2.7.7
|
248
|
+
rubygems_version: 3.0.2
|
249
249
|
signing_key:
|
250
250
|
specification_version: 4
|
251
251
|
summary: A Simple Ruby HTTP Client
|
data/lib/request/ext.rb
DELETED
@@ -1,87 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative '../core/core'
|
4
|
-
require_relative 'schema'
|
5
|
-
|
6
|
-
module NetHTTP
|
7
|
-
module Request
|
8
|
-
module Ext
|
9
|
-
def call_web_service(opts = {})
|
10
|
-
logger = Core.assign_logger(self.logger ||= opts[:logger])
|
11
|
-
|
12
|
-
Core.schema_validation(opts, NetHTTP::Request::Schema, logger) unless opts[:enforce_schema_validation] == false
|
13
|
-
|
14
|
-
method = (opts[:method] ||= opts[:req_method] ||= opts[:request_method] ||= 'post').to_s.upcase
|
15
|
-
uri = Core.parse_uri(opts[:uri] ||= opts[:url] ||= self.uri)
|
16
|
-
path = opts[:path] ||= opts[:req_path] ||= opts[:request_path] ||= opts[:path] ||= uri.path ||= self.path
|
17
|
-
path = (path + '?' + uri.query) unless uri.query.nil? || path.include?('?')
|
18
|
-
headers = opts[:headers] ||= opts[:req_headers] ||= opts[:request_headers] ||= {}
|
19
|
-
body = opts[:body] ||= opts[:req_body] ||= opts[:request_body] ||= nil
|
20
|
-
|
21
|
-
resp = case method
|
22
|
-
when 'DELETE'
|
23
|
-
logger.debug('Request Method => ' + method)
|
24
|
-
logger.debug('Request Host => ' + uri.host.to_s)
|
25
|
-
logger.debug('Request Path => ' + path)
|
26
|
-
delete(path)
|
27
|
-
when 'GET'
|
28
|
-
logger.debug('Request Method => ' + method)
|
29
|
-
logger.debug('Request Host => ' + uri.host.to_s)
|
30
|
-
logger.debug('Request Path => ' + path)
|
31
|
-
logger.debug('Request Headers =>')
|
32
|
-
logger.debug(headers)
|
33
|
-
get(path, headers)
|
34
|
-
when 'POST'
|
35
|
-
logger.debug('Request Method => ' + method)
|
36
|
-
logger.debug('Request Host => ' + uri.host.to_s)
|
37
|
-
logger.debug('Request Path => ' + path)
|
38
|
-
logger.debug('Request Headers =>')
|
39
|
-
logger.debug(headers)
|
40
|
-
logger.debug('Request Body =>')
|
41
|
-
logger.debug(body)
|
42
|
-
post(path, body, headers)
|
43
|
-
when 'POST_FORM', 'POST_FORM_DATA'
|
44
|
-
logger.debug('Request Method => ' + method)
|
45
|
-
logger.debug('Request Host => ' + uri.host.to_s)
|
46
|
-
logger.debug('Request Path => ' + path)
|
47
|
-
logger.debug('Request Headers =>')
|
48
|
-
logger.debug(headers)
|
49
|
-
logger.debug('Request Body =>')
|
50
|
-
logger.debug(URI.encode_www_form(body))
|
51
|
-
post(uri, URI.encode_www_form(body), headers)
|
52
|
-
when 'PUT'
|
53
|
-
logger.debug('Request Method => ' + method)
|
54
|
-
logger.debug('Request Host => ' + uri.host.to_s)
|
55
|
-
logger.debug('Request Path => ' + path)
|
56
|
-
logger.debug('Request Headers =>')
|
57
|
-
logger.debug(headers)
|
58
|
-
logger.debug('Request Body =>')
|
59
|
-
logger.debug(body)
|
60
|
-
put(path, body, headers)
|
61
|
-
else
|
62
|
-
logger.debug("Request method => '#{method}' not yet supported.")
|
63
|
-
raise "Request method => '#{method}' not yet supported."
|
64
|
-
end
|
65
|
-
logger.debug('Response Code => ' + resp.code)
|
66
|
-
logger.debug('Response Headers => ')
|
67
|
-
logger.debug(resp.headers)
|
68
|
-
logger.debug('Response Body => ')
|
69
|
-
logger.debug(resp.body)
|
70
|
-
resp
|
71
|
-
end
|
72
|
-
|
73
|
-
alias call_api call_web_service
|
74
|
-
alias call_service call_web_service
|
75
|
-
alias execute_request call_web_service
|
76
|
-
alias send_request call_web_service
|
77
|
-
alias submit_request call_web_service
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
module Net
|
83
|
-
class HTTP
|
84
|
-
include NetHTTP::Core
|
85
|
-
include NetHTTP::Request::Ext
|
86
|
-
end
|
87
|
-
end
|
data/lib/response/ext.rb
DELETED
@@ -1,111 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'json'
|
4
|
-
require 'nokogiri'
|
5
|
-
require 'ostruct'
|
6
|
-
require_relative '../core/core'
|
7
|
-
require_relative '../core/utilities'
|
8
|
-
|
9
|
-
module NetHTTP
|
10
|
-
module Response
|
11
|
-
module Ext
|
12
|
-
def resp_code
|
13
|
-
code
|
14
|
-
end
|
15
|
-
|
16
|
-
alias response_code resp_code
|
17
|
-
|
18
|
-
def headers
|
19
|
-
resp_headers = {}
|
20
|
-
headers = to_hash
|
21
|
-
headers.each do |key, value|
|
22
|
-
resp_headers[key] = value.flatten[0].to_s
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
alias resp_headers headers
|
27
|
-
alias response_headers headers
|
28
|
-
|
29
|
-
def headers_hash
|
30
|
-
NetHTTP::Core::Utilities.convert_hash_keys(
|
31
|
-
object: headers,
|
32
|
-
format: 'snake',
|
33
|
-
type: 'symbol'
|
34
|
-
)
|
35
|
-
end
|
36
|
-
|
37
|
-
alias resp_headers_hash headers_hash
|
38
|
-
alias response_headers_hash headers_hash
|
39
|
-
|
40
|
-
def headers_os
|
41
|
-
JSON.parse(headers_hash.to_json, object_class: OpenStruct)
|
42
|
-
end
|
43
|
-
|
44
|
-
alias resp_headers_os headers_os
|
45
|
-
alias response_headers_os headers_os
|
46
|
-
alias headers_open_struct headers_os
|
47
|
-
alias resp_headers_struct headers_os
|
48
|
-
alias response_headers_open_struct headers_os
|
49
|
-
|
50
|
-
def resp_body
|
51
|
-
body
|
52
|
-
end
|
53
|
-
|
54
|
-
alias response_body resp_body
|
55
|
-
|
56
|
-
def body_hash
|
57
|
-
begin
|
58
|
-
return NetHTTP::Core::Utilities.json_2_hash(body, 'symbol', logger) if valid_json?
|
59
|
-
rescue JSON::ParserError => err
|
60
|
-
logger.debug(err)
|
61
|
-
end
|
62
|
-
begin
|
63
|
-
return NetHTTP::Core::Utilities.xml_2_hash(body, 'symbol', logger) if valid_xml?
|
64
|
-
rescue Nokogiri::XML::SyntaxError => err
|
65
|
-
logger.debug(err)
|
66
|
-
end
|
67
|
-
begin
|
68
|
-
# TODO: update this to work if necessary
|
69
|
-
# probably makes more sense to parse HTML using nokogiri
|
70
|
-
return NetHTTP::Core::Utilities.xml_2_hash(body, 'symbol', logger) if valid_html?
|
71
|
-
rescue Nokogiri::XML::SyntaxError => err
|
72
|
-
logger.debug(err)
|
73
|
-
end
|
74
|
-
|
75
|
-
{}
|
76
|
-
end
|
77
|
-
|
78
|
-
alias resp_body_hash body_hash
|
79
|
-
alias response_body_hash body_hash
|
80
|
-
|
81
|
-
def body_os
|
82
|
-
JSON.parse(body_hash.to_json, object_class: OpenStruct)
|
83
|
-
end
|
84
|
-
|
85
|
-
alias resp_body_os body_os
|
86
|
-
alias response_body_os body_os
|
87
|
-
alias body_open_struct body_os
|
88
|
-
alias resp_body_open_struct body_os
|
89
|
-
alias response_body_open_struct body_os
|
90
|
-
|
91
|
-
def valid_json?
|
92
|
-
NetHTTP::Core::Utilities.valid_json?(body, logger)
|
93
|
-
end
|
94
|
-
|
95
|
-
def valid_xml?
|
96
|
-
NetHTTP::Core::Utilities.valid_xml?(body, logger)
|
97
|
-
end
|
98
|
-
|
99
|
-
def valid_html?
|
100
|
-
NetHTTP::Core::Utilities.valid_html?(body, logger)
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
module Net
|
107
|
-
class HTTPResponse
|
108
|
-
include NetHTTP::Core
|
109
|
-
include NetHTTP::Response::Ext
|
110
|
-
end
|
111
|
-
end
|