nethttputils 0.2.3.0 → 0.2.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bec88b8ff9beeae7cc18250b6a2d955aa6d7845b
4
- data.tar.gz: 820c5f45fbd937fd89912eb30c35c264f98923df
3
+ metadata.gz: 1dcab77cae6a0a44cfd6fe0414a365763f114e95
4
+ data.tar.gz: f20d494f49424479fcf8c2534b3bc6d19be6b583
5
5
  SHA512:
6
- metadata.gz: d5d9ab8603996adc703bb812d85fea42e359167736be39eecdd1aecc71d8c1667662672b8cb22ce7ff66384b655415aa342b4b0b0f005d3a5a7e09359074df88
7
- data.tar.gz: 6ebc04827c686dfc8e15f9cdb14758ef5604a45e252e2472da070603dacb779a92f2ff11d5869b6b1d7bd64f9d4bb049b66dd69ddbbdc5bf91730e9a87877814
6
+ metadata.gz: 485981929b85428261d1e019d837c9915ee608bfd3e6e80c8af3988d55ddfa4d710a5c8ba4025ba850b268ea6bf67bddc0cb4df154d8f5a4a35f9830b62e7b80
7
+ data.tar.gz: 58b3cc0fb11c0557a8d0f59809f89fea37c971b6749ceee90f5cc6522d21bcc54c3f913ad99b02f9d2307d7d124699c00ed30a797f659a43f88f69c76a4b209a
data/lib/nethttputils.rb CHANGED
@@ -58,24 +58,33 @@ module NetHTTPUtils
58
58
  # pp Object.instance_method(:method).bind(request).call(:set_form).source_location
59
59
  if (mtd == :POST || mtd == :PATCH) && !form.empty?
60
60
  case type
61
+ when :json ; request.body = JSON.dump form
62
+ request.content_type = "application/json"
61
63
  when :form ; if form.any?{ |k, v| v.respond_to? :to_path }
62
64
  request.set_form form, "multipart/form-data"
63
65
  else
64
66
  request.set_form_data form
65
67
  request.content_type = "application/x-www-form-urlencoded;charset=UTF-8"
66
68
  end
67
- when :json ; request.body = JSON.dump form
68
- request.content_type = "application/json"
69
69
  else ; raise "unknown content-type '#{type}'"
70
70
  end
71
71
  end
72
72
  header.each{ |k, v| request[k.to_s] = v }
73
73
 
74
- logger.info "> #{request} #{request.path}"
74
+ logger.info "> #{request.class} #{uri.host} #{request.path}"
75
75
  next unless logger.debug?
76
- logger.debug "curl -vsSL -o /dev/null #{request.each_header.map{ |k, v| "-H \"#{k}: #{v}\" " unless k == "host" }.join}#{url.gsub "&", "\\\\&"}"
76
+ logger.debug "content-type: #{request.content_type}" unless mtd == :GET
77
+ curl_form = case request.content_type
78
+ when "application/json" ; "-d #{JSON.dump form} "
79
+ when "multipart/form-data" ; form.map{ |k, v| "-F \"#{k}=#{v.respond_to?(:to_path) ? "@#{v.to_path}" : v}\" " }.join
80
+ when "application/x-www-form-urlencoded" ; "-d \"#{URI.encode_www_form form}\" "
81
+ else ; mtd == :GET ? "" : fail("unknown content-type '#{request.content_type}'")
82
+ end
83
+ logger.debug "curl -vsSL -o /dev/null #{
84
+ request.each_header.map{ |k, v| "-H \"#{k}: #{v}\" " unless k == "host" }.join
85
+ }#{curl_form}#{url.gsub "&", "\\\\&"}"
77
86
  logger.debug "> header: #{request.each_header.to_a}"
78
- logger.debug "> body: #{request.body.inspect.tap{ |body| body[100..-1] = "..." if body.size > 100 }}"
87
+ logger.debug "> body: #{request.body.inspect.tap{ |body| body[997..-1] = "..." if body.size > 500 }}"
79
88
  stack = caller.reverse.map do |level|
80
89
  /((?:[^\/:]+\/)?[^\/:]+):([^:]+)/.match(level).captures
81
90
  end.chunk(&:first).map do |file, group|
@@ -96,7 +105,18 @@ module NetHTTPUtils
96
105
  ) do |http|
97
106
  # http.open_timeout = timeout # seems like when opening hangs, this line in unreachable
98
107
  # http.read_timeout = timeout
99
- http.set_debug_output STDERR if logger.level == Logger::DEBUG # use `logger.debug?`?
108
+ http.set_debug_output( Object.new.tap do |obj|
109
+ obj.instance_eval do
110
+ def << msg
111
+ @@buffer ||= "[Net::HTTP debug] "
112
+ @@buffer.concat msg
113
+ @@buffer = @@buffer[0...997] + "..." if @@buffer.size > 500
114
+ return unless @@buffer.end_with? ?\n
115
+ NetHTTPUtils.logger.debug @@buffer.sub ?\n, " "
116
+ @@buffer = nil
117
+ end
118
+ end
119
+ end ) if logger.level == Logger::DEBUG # use `logger.debug?`?
100
120
  http
101
121
  end
102
122
  rescue Errno::ECONNREFUSED => e
@@ -175,9 +195,15 @@ module NetHTTPUtils
175
195
  do_request.call prepare_request[new_uri]
176
196
  when "404"
177
197
  logger.error "404 at #{request.method} #{request.uri} with body: #{
178
- response.body.is_a?(Net::ReadAdapter) ? "impossible to reread Net::ReadAdapter -- check the IO you've used in block form" : response.body.tap do |body|
179
- body.replace remove_tags body if body[/<html[> ]/]
180
- end.inspect
198
+ if response.body.is_a? Net::ReadAdapter
199
+ "impossible to reread Net::ReadAdapter -- check the IO you've used in block form"
200
+ elsif response.to_hash["content-type"] == ["image/png"]
201
+ response.to_hash["content-type"].to_s
202
+ else
203
+ response.body.tap do |body|
204
+ body.replace remove_tags body if body[/<html[> ]/]
205
+ end.inspect
206
+ end
181
207
  }"
182
208
  response
183
209
  when "429"
@@ -209,13 +235,16 @@ module NetHTTPUtils
209
235
  end
210
236
  do_request[prepare_request[uri]].tap do |response|
211
237
  cookies.each{ |k, v| response.add_field "Set-Cookie", "#{k}=#{v};" }
212
- logger.debug response.to_hash
238
+ logger.debug "< header: #{response.to_hash}"
213
239
  end
214
240
  end
215
241
 
216
242
  def request_data *args, &block
217
243
  response = get_response *args, &block
218
- raise Error.new response.body, response.code.to_i unless response.code[/\A(20\d|3\d\d)\z/]
244
+ raise Error.new(
245
+ (response.to_hash["content-type"] == ["image/png"] ? response.to_hash["content-type"] : response.body),
246
+ response.code.to_i
247
+ ) unless response.code[/\A(20\d|3\d\d)\z/]
219
248
  if response["content-encoding"] == "gzip"
220
249
  Zlib::GzipReader.new(StringIO.new(response.body)).read
221
250
  else
@@ -265,15 +294,18 @@ if $0 == __FILE__
265
294
  fail unless NetHTTPUtils.get_response("http://httpstat.us/404").body == "404 Not Found"
266
295
  fail unless NetHTTPUtils.get_response("http://httpstat.us/500").body == "500 Internal Server Error"
267
296
  fail unless NetHTTPUtils.get_response("http://httpstat.us/503").body == "503 Service Unavailable"
268
- %w{
269
- https://imgur.com/a/cccccc
270
- https://imgur.com/mM4Dh7Z
271
- }.each do |url|
297
+ NetHTTPUtils.logger.level = Logger::FATAL
298
+ [
299
+ ["https://imgur.com/a/cccccc"],
300
+ ["https://imgur.com/mM4Dh7Z"],
301
+ ["https://i.redd.it/si758zk7r5xz.jpg", "HTTP error #404 [\"image/png\"]"],
302
+ ].each do |url, expectation|
272
303
  begin
273
304
  puts NetHTTPUtils.remove_tags NetHTTPUtils.request_data url
274
305
  fail
275
306
  rescue NetHTTPUtils::Error => e
276
- raise unless e.code == 404
307
+ raise e.code.inspect unless e.code == 404
308
+ raise e.to_s if e.to_s != expectation if expectation
277
309
  end
278
310
  end
279
311
  %w{
data/nethttputils.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "nethttputils"
3
- spec.version = "0.2.3.0"
3
+ spec.version = "0.2.4.0"
4
4
  spec.summary = "this tool is like a pet that I adopted young and now I depend on, sorry"
5
5
  spec.description = <<-EOF
6
6
  Back in 2015 I was a guy automating things at my job and two scripts had a common need --
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nethttputils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3.0
4
+ version: 0.2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Victor Maslov aka Nakilon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-17 00:00:00.000000000 Z
11
+ date: 2018-05-23 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |2
14
14
  Back in 2015 I was a guy automating things at my job and two scripts had a common need --