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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 864953a6821c8556cd571a116d852aadb39810fbe41c672ce4a4d0a9d37ad0cc
4
- data.tar.gz: 53fbde8821ae8c0610dc7ad7b1b798b92728df13fc05fd1bad0ca620dfb61761
3
+ metadata.gz: 5d6b584195ee54303f03e597cedf0863b804496d00fe7dc23e1c95a72685d27e
4
+ data.tar.gz: bd2031391105c97823c38fe5422b497617e50bcbe77d0fe82138b191a6a8dd6f
5
5
  SHA512:
6
- metadata.gz: fecbe20848e6f55335b16cbe3d5a8f418a1b5843a69aac09fa9f068eb67ccb08c407ca3226357c4595d9e2ccb60454b6e06357b6c7fba109d297098ffba47d7b
7
- data.tar.gz: 7d5ffbc523f9c97bc3e241c7ca41f117f2ba51849d69b540c0e4ad5d5f8d30a221a4c09012812ab95d8c029c61ff030b8042eb2d46d175c028a1c638fb4ab2eb
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
- :path,
17
+ :open_timeout,
19
18
  :pkcs12,
20
- :port,
21
19
  :proxy_uri,
22
- :open_timeout,
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=', (opts[:uri] || opts[:url]))
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('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=')
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 :logger,
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 scheme=(scheme = nil)
6
- @scheme = scheme
7
- end
8
-
9
- def host=(host = nil)
10
- @host = host
11
- end
12
-
13
- def port=(port = nil)
14
- @port = port
15
- end
16
-
17
- def path=(path = nil)
18
- @path = path
19
- end
20
-
21
- def use_proxy=
22
- if proxy_uri.nil?
23
- @use_proxy = false
24
- else
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 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)
32
- end
33
-
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]))
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(:logger).filled
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(:port).maybe(type?: Integer)
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(:use_proxy).filled(included_in?: true_or_false)
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
- results = schema.call(opts)
20
- return if results.success?
21
-
22
- logger.debug("NetHTTP::Core::SchemaValidationError - #{schema} input validation failed due to => #{results.messages}")
23
- raise "NetHTTP::Core::SchemaValidationError - #{schema} input validation failed."
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
@@ -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[: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}"
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
- 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
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
- 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
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 => err
132
- raise err
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 => err
156
- raise err
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 => err
200
- raise err
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 => err
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 err
230
+ puts error
214
231
  else
215
232
  logger.debug('WARNING - JSON syntax / parsing errors detected:')
216
- logger.debug(err)
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 => err
270
- raise err
289
+ rescue RuntimeError => error
290
+ raise error
271
291
  end
272
292
 
273
293
  true
@@ -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
- 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
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
@@ -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?))