httparty 0.15.6 → 0.21.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.
Files changed (95) hide show
  1. checksums.yaml +5 -5
  2. data/.editorconfig +18 -0
  3. data/.github/workflows/ci.yml +26 -0
  4. data/.gitignore +2 -0
  5. data/.rubocop_todo.yml +1 -1
  6. data/Changelog.md +105 -0
  7. data/Gemfile +7 -0
  8. data/Guardfile +3 -2
  9. data/README.md +6 -6
  10. data/docs/README.md +90 -5
  11. data/examples/README.md +28 -11
  12. data/examples/aaws.rb +6 -2
  13. data/examples/body_stream.rb +14 -0
  14. data/examples/custom_parsers.rb +4 -0
  15. data/examples/headers_and_user_agents.rb +7 -3
  16. data/examples/idn.rb +10 -0
  17. data/examples/logging.rb +3 -3
  18. data/examples/microsoft_graph.rb +52 -0
  19. data/examples/multipart.rb +22 -0
  20. data/examples/peer_cert.rb +9 -0
  21. data/examples/stream_download.rb +8 -2
  22. data/httparty.gemspec +3 -3
  23. data/lib/httparty/connection_adapter.rb +59 -16
  24. data/lib/httparty/cookie_hash.rb +10 -8
  25. data/lib/httparty/decompressor.rb +102 -0
  26. data/lib/httparty/exceptions.rb +3 -1
  27. data/lib/httparty/hash_conversions.rb +28 -12
  28. data/lib/httparty/headers_processor.rb +32 -0
  29. data/lib/httparty/logger/apache_formatter.rb +31 -6
  30. data/lib/httparty/logger/curl_formatter.rb +9 -7
  31. data/lib/httparty/logger/logger.rb +5 -1
  32. data/lib/httparty/logger/logstash_formatter.rb +61 -0
  33. data/lib/httparty/module_inheritable_attributes.rb +6 -4
  34. data/lib/httparty/net_digest_auth.rb +15 -15
  35. data/lib/httparty/parser.rb +21 -15
  36. data/lib/httparty/request/body.rb +105 -0
  37. data/lib/httparty/request/multipart_boundary.rb +13 -0
  38. data/lib/httparty/request.rb +86 -94
  39. data/lib/httparty/response/headers.rb +4 -2
  40. data/lib/httparty/response.rb +59 -8
  41. data/lib/httparty/response_fragment.rb +21 -0
  42. data/lib/httparty/text_encoder.rb +72 -0
  43. data/lib/httparty/utils.rb +13 -0
  44. data/lib/httparty/version.rb +3 -1
  45. data/lib/httparty.rb +70 -25
  46. data/website/css/common.css +1 -1
  47. metadata +37 -103
  48. data/.simplecov +0 -1
  49. data/.travis.yml +0 -9
  50. data/features/basic_authentication.feature +0 -20
  51. data/features/command_line.feature +0 -95
  52. data/features/deals_with_http_error_codes.feature +0 -26
  53. data/features/digest_authentication.feature +0 -30
  54. data/features/handles_compressed_responses.feature +0 -27
  55. data/features/handles_multiple_formats.feature +0 -57
  56. data/features/steps/env.rb +0 -27
  57. data/features/steps/httparty_response_steps.rb +0 -56
  58. data/features/steps/httparty_steps.rb +0 -43
  59. data/features/steps/mongrel_helper.rb +0 -127
  60. data/features/steps/remote_service_steps.rb +0 -92
  61. data/features/supports_read_timeout_option.feature +0 -13
  62. data/features/supports_redirection.feature +0 -22
  63. data/features/supports_timeout_option.feature +0 -13
  64. data/spec/fixtures/delicious.xml +0 -23
  65. data/spec/fixtures/empty.xml +0 -0
  66. data/spec/fixtures/google.html +0 -3
  67. data/spec/fixtures/ssl/generate.sh +0 -29
  68. data/spec/fixtures/ssl/generated/bogushost.crt +0 -13
  69. data/spec/fixtures/ssl/generated/ca.crt +0 -16
  70. data/spec/fixtures/ssl/generated/ca.key +0 -15
  71. data/spec/fixtures/ssl/generated/selfsigned.crt +0 -14
  72. data/spec/fixtures/ssl/generated/server.crt +0 -13
  73. data/spec/fixtures/ssl/generated/server.key +0 -15
  74. data/spec/fixtures/ssl/openssl-exts.cnf +0 -9
  75. data/spec/fixtures/twitter.csv +0 -2
  76. data/spec/fixtures/twitter.json +0 -1
  77. data/spec/fixtures/twitter.xml +0 -403
  78. data/spec/fixtures/undefined_method_add_node_for_nil.xml +0 -2
  79. data/spec/httparty/connection_adapter_spec.rb +0 -495
  80. data/spec/httparty/cookie_hash_spec.rb +0 -100
  81. data/spec/httparty/exception_spec.rb +0 -45
  82. data/spec/httparty/hash_conversions_spec.rb +0 -49
  83. data/spec/httparty/logger/apache_formatter_spec.rb +0 -41
  84. data/spec/httparty/logger/curl_formatter_spec.rb +0 -119
  85. data/spec/httparty/logger/logger_spec.rb +0 -38
  86. data/spec/httparty/net_digest_auth_spec.rb +0 -268
  87. data/spec/httparty/parser_spec.rb +0 -190
  88. data/spec/httparty/request_spec.rb +0 -1279
  89. data/spec/httparty/response_spec.rb +0 -347
  90. data/spec/httparty/ssl_spec.rb +0 -74
  91. data/spec/httparty_spec.rb +0 -878
  92. data/spec/spec_helper.rb +0 -51
  93. data/spec/support/ssl_test_helper.rb +0 -47
  94. data/spec/support/ssl_test_server.rb +0 -80
  95. data/spec/support/stub_response.rb +0 -49
@@ -1,9 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module HTTParty
2
4
  class Response < Object
3
5
  def self.underscore(string)
4
6
  string.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').gsub(/([a-z])([A-Z])/, '\1_\2').downcase
5
7
  end
6
8
 
9
+ def self._load(data)
10
+ req, resp, parsed_resp, resp_body = Marshal.load(data)
11
+
12
+ new(req, resp, -> { parsed_resp }, body: resp_body)
13
+ end
14
+
7
15
  attr_reader :request, :response, :body, :headers
8
16
 
9
17
  def initialize(request, response, parsed_block, options = {})
@@ -14,7 +22,11 @@ module HTTParty
14
22
  @headers = Headers.new(response.to_hash)
15
23
 
16
24
  if request.options[:logger]
17
- logger = ::HTTParty::Logger.build(request.options[:logger], request.options[:log_level], request.options[:log_format])
25
+ logger = ::HTTParty::Logger.build(
26
+ request.options[:logger],
27
+ request.options[:log_level],
28
+ request.options[:log_format]
29
+ )
18
30
  logger.format(request, self)
19
31
  end
20
32
 
@@ -29,20 +41,24 @@ module HTTParty
29
41
  response.code.to_i
30
42
  end
31
43
 
44
+ def http_version
45
+ response.http_version
46
+ end
47
+
32
48
  def tap
33
49
  yield self
34
50
  self
35
51
  end
36
52
 
37
53
  def inspect
38
- inspect_id = ::Kernel::format "%x", (object_id * 2)
54
+ inspect_id = ::Kernel::format '%x', (object_id * 2)
39
55
  %(#<#{self.class}:0x#{inspect_id} parsed_response=#{parsed_response.inspect}, @response=#{response.inspect}, @headers=#{headers.inspect}>)
40
56
  end
41
57
 
42
58
  CODES_TO_OBJ = ::Net::HTTPResponse::CODE_CLASS_TO_OBJ.merge ::Net::HTTPResponse::CODE_TO_OBJ
43
59
 
44
60
  CODES_TO_OBJ.each do |response_code, klass|
45
- name = klass.name.sub("Net::HTTP", '')
61
+ name = klass.name.sub('Net::HTTP', '')
46
62
  name = "#{underscore(name)}?".to_sym
47
63
 
48
64
  define_method(name) do
@@ -51,28 +67,46 @@ module HTTParty
51
67
  end
52
68
 
53
69
  # Support old multiple_choice? method from pre 2.0.0 era.
54
- if ::RUBY_VERSION >= "2.0.0" && ::RUBY_PLATFORM != "java"
70
+ if ::RUBY_VERSION >= '2.0.0' && ::RUBY_PLATFORM != 'java'
55
71
  alias_method :multiple_choice?, :multiple_choices?
56
72
  end
57
73
 
74
+ # Support old status codes method from pre 2.6.0 era.
75
+ if ::RUBY_VERSION >= '2.6.0' && ::RUBY_PLATFORM != 'java'
76
+ alias_method :gateway_time_out?, :gateway_timeout?
77
+ alias_method :request_entity_too_large?, :payload_too_large?
78
+ alias_method :request_time_out?, :request_timeout?
79
+ alias_method :request_uri_too_long?, :uri_too_long?
80
+ alias_method :requested_range_not_satisfiable?, :range_not_satisfiable?
81
+ end
82
+
58
83
  def nil?
84
+ warn_about_nil_deprecation
59
85
  response.nil? || response.body.nil? || response.body.empty?
60
86
  end
61
87
 
62
- def to_s
88
+ def to_s
63
89
  if !response.nil? && !response.body.nil? && response.body.respond_to?(:to_s)
64
90
  response.body.to_s
65
- else
91
+ else
66
92
  inspect
67
93
  end
68
94
  end
69
95
 
96
+ def pretty_print(pp)
97
+ if !parsed_response.nil? && parsed_response.respond_to?(:pretty_print)
98
+ parsed_response.pretty_print(pp)
99
+ else
100
+ super
101
+ end
102
+ end
103
+
70
104
  def display(port=$>)
71
105
  if !parsed_response.nil? && parsed_response.respond_to?(:display)
72
106
  parsed_response.display(port)
73
107
  elsif !response.nil? && !response.body.nil? && response.body.respond_to?(:display)
74
108
  response.body.display(port)
75
- else
109
+ else
76
110
  port.write(inspect)
77
111
  end
78
112
  end
@@ -81,7 +115,11 @@ module HTTParty
81
115
  return true if super
82
116
  parsed_response.respond_to?(name) || response.respond_to?(name)
83
117
  end
84
-
118
+
119
+ def _dump(_level)
120
+ Marshal.dump([request, response, parsed_response, body])
121
+ end
122
+
85
123
  protected
86
124
 
87
125
  def method_missing(name, *args, &block)
@@ -99,6 +137,19 @@ module HTTParty
99
137
  ::Kernel.raise ::HTTParty::ResponseError.new(@response), "Code #{code} - #{body}"
100
138
  end
101
139
  end
140
+
141
+ private
142
+
143
+ def warn_about_nil_deprecation
144
+ trace_line = caller.reject { |line| line.include?('httparty') }.first
145
+ warning = "[DEPRECATION] HTTParty will no longer override `response#nil?`. " \
146
+ "This functionality will be removed in future versions. " \
147
+ "Please, add explicit check `response.body.nil? || response.body.empty?`. " \
148
+ "For more info refer to: https://github.com/jnunemaker/httparty/issues/568\n" \
149
+ "#{trace_line}"
150
+
151
+ warn(warning)
152
+ end
102
153
  end
103
154
  end
104
155
 
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'delegate'
4
+
5
+ module HTTParty
6
+ # Allow access to http_response and code by delegation on fragment
7
+ class ResponseFragment < SimpleDelegator
8
+ attr_reader :http_response, :connection
9
+
10
+ def code
11
+ @http_response.code.to_i
12
+ end
13
+
14
+ def initialize(fragment, http_response, connection)
15
+ @fragment = fragment
16
+ @http_response = http_response
17
+ @connection = connection
18
+ super fragment
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HTTParty
4
+ class TextEncoder
5
+ attr_reader :text, :content_type, :assume_utf16_is_big_endian
6
+
7
+ def initialize(text, assume_utf16_is_big_endian: true, content_type: nil)
8
+ @text = +text
9
+ @content_type = content_type
10
+ @assume_utf16_is_big_endian = assume_utf16_is_big_endian
11
+ end
12
+
13
+ def call
14
+ if can_encode?
15
+ encoded_text
16
+ else
17
+ text
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ def can_encode?
24
+ ''.respond_to?(:encoding) && charset
25
+ end
26
+
27
+ def encoded_text
28
+ if 'utf-16'.casecmp(charset) == 0
29
+ encode_utf_16
30
+ else
31
+ encode_with_ruby_encoding
32
+ end
33
+ end
34
+
35
+ def encode_utf_16
36
+ if text.bytesize >= 2
37
+ if text.getbyte(0) == 0xFF && text.getbyte(1) == 0xFE
38
+ return text.force_encoding('UTF-16LE')
39
+ elsif text.getbyte(0) == 0xFE && text.getbyte(1) == 0xFF
40
+ return text.force_encoding('UTF-16BE')
41
+ end
42
+ end
43
+
44
+ if assume_utf16_is_big_endian # option
45
+ text.force_encoding('UTF-16BE')
46
+ else
47
+ text.force_encoding('UTF-16LE')
48
+ end
49
+ end
50
+
51
+ def encode_with_ruby_encoding
52
+ # NOTE: This will raise an argument error if the
53
+ # charset does not exist
54
+ encoding = Encoding.find(charset)
55
+ text.force_encoding(encoding.to_s)
56
+ rescue ArgumentError
57
+ text
58
+ end
59
+
60
+ def charset
61
+ return nil if content_type.nil?
62
+
63
+ if (matchdata = content_type.match(/;\s*charset\s*=\s*([^=,;"\s]+)/i))
64
+ return matchdata.captures.first
65
+ end
66
+
67
+ if (matchdata = content_type.match(/;\s*charset\s*=\s*"((\\.|[^\\"])+)"/i))
68
+ return matchdata.captures.first.gsub(/\\(.)/, '\1')
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HTTParty
4
+ module Utils
5
+ def self.stringify_keys(hash)
6
+ return hash.transform_keys(&:to_s) if hash.respond_to?(:transform_keys)
7
+
8
+ hash.each_with_object({}) do |(key, value), new_hash|
9
+ new_hash[key.to_s] = value
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module HTTParty
2
- VERSION = "0.15.6"
4
+ VERSION = '0.21.0'
3
5
  end
data/lib/httparty.rb CHANGED
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'pathname'
2
4
  require 'net/http'
3
- require 'net/https'
4
5
  require 'uri'
5
6
  require 'zlib'
6
7
  require 'multi_xml'
8
+ require 'mini_mime'
7
9
  require 'json'
8
10
  require 'csv'
9
11
 
@@ -13,6 +15,11 @@ require 'httparty/net_digest_auth'
13
15
  require 'httparty/version'
14
16
  require 'httparty/connection_adapter'
15
17
  require 'httparty/logger/logger'
18
+ require 'httparty/request/body'
19
+ require 'httparty/response_fragment'
20
+ require 'httparty/decompressor'
21
+ require 'httparty/text_encoder'
22
+ require 'httparty/headers_processor'
16
23
 
17
24
  # @see HTTParty::ClassMethods
18
25
  module HTTParty
@@ -21,8 +28,8 @@ module HTTParty
21
28
  base.send :include, ModuleInheritableAttributes
22
29
  base.send(:mattr_inheritable, :default_options)
23
30
  base.send(:mattr_inheritable, :default_cookies)
24
- base.instance_variable_set("@default_options", {})
25
- base.instance_variable_set("@default_cookies", CookieHash.new)
31
+ base.instance_variable_set(:@default_options, {})
32
+ base.instance_variable_set(:@default_cookies, CookieHash.new)
26
33
  end
27
34
 
28
35
  # == Common Request Options
@@ -36,10 +43,11 @@ module HTTParty
36
43
  # [:+limit+:] Maximum number of redirects to follow. Takes precedences over :+no_follow+.
37
44
  # [:+query+:] Query string, or an object that responds to #to_hash representing it. Normalized according to the same rules as :+body+. If you specify this on a POST, you must use an object which responds to #to_hash. See also HTTParty::ClassMethods.default_params.
38
45
  # [:+timeout+:] Timeout for opening connection and reading data.
39
- # [:+local_host:] Local address to bind to before connecting.
40
- # [:+local_port:] Local port to bind to before connecting.
41
- # [:+body_stream:] Allow streaming to a REST server to specify a body_stream.
42
- # [:+stream_body:] Allow for streaming large files without loading them into memory.
46
+ # [:+local_host+:] Local address to bind to before connecting.
47
+ # [:+local_port+:] Local port to bind to before connecting.
48
+ # [:+body_stream+:] Allow streaming to a REST server to specify a body_stream.
49
+ # [:+stream_body+:] Allow for streaming large files without loading them into memory.
50
+ # [:+multipart+:] Force content-type to be multipart
43
51
  #
44
52
  # There are also another set of options with names corresponding to various class methods. The methods in question are those that let you set a class-wide default, and the options override the defaults on a request-by-request basis. Those options are:
45
53
  # * :+base_uri+: see HTTParty::ClassMethods.base_uri.
@@ -168,9 +176,9 @@ module HTTParty
168
176
  # include HTTParty
169
177
  # default_timeout 10
170
178
  # end
171
- def default_timeout(t)
172
- raise ArgumentError, 'Timeout must be an integer or float' unless t && (t.is_a?(Integer) || t.is_a?(Float))
173
- default_options[:timeout] = t
179
+ def default_timeout(value)
180
+ validate_timeout_argument(__method__, value)
181
+ default_options[:timeout] = value
174
182
  end
175
183
 
176
184
  # Allows setting a default open_timeout for all HTTP calls in seconds
@@ -179,9 +187,9 @@ module HTTParty
179
187
  # include HTTParty
180
188
  # open_timeout 10
181
189
  # end
182
- def open_timeout(t)
183
- raise ArgumentError, 'open_timeout must be an integer or float' unless t && (t.is_a?(Integer) || t.is_a?(Float))
184
- default_options[:open_timeout] = t
190
+ def open_timeout(value)
191
+ validate_timeout_argument(__method__, value)
192
+ default_options[:open_timeout] = value
185
193
  end
186
194
 
187
195
  # Allows setting a default read_timeout for all HTTP calls in seconds
@@ -190,11 +198,24 @@ module HTTParty
190
198
  # include HTTParty
191
199
  # read_timeout 10
192
200
  # end
193
- def read_timeout(t)
194
- raise ArgumentError, 'read_timeout must be an integer or float' unless t && (t.is_a?(Integer) || t.is_a?(Float))
195
- default_options[:read_timeout] = t
201
+ def read_timeout(value)
202
+ validate_timeout_argument(__method__, value)
203
+ default_options[:read_timeout] = value
204
+ end
205
+
206
+ # Allows setting a default write_timeout for all HTTP calls in seconds
207
+ # Supported by Ruby > 2.6.0
208
+ #
209
+ # class Foo
210
+ # include HTTParty
211
+ # write_timeout 10
212
+ # end
213
+ def write_timeout(value)
214
+ validate_timeout_argument(__method__, value)
215
+ default_options[:write_timeout] = value
196
216
  end
197
217
 
218
+
198
219
  # Set an output stream for debugging, defaults to $stderr.
199
220
  # The output stream is passed on to Net::HTTP#set_debug_output.
200
221
  #
@@ -380,6 +401,22 @@ module HTTParty
380
401
  default_options[:ssl_version] = version
381
402
  end
382
403
 
404
+ # Deactivate automatic decompression of the response body.
405
+ # This will require you to explicitly handle body decompression
406
+ # by inspecting the Content-Encoding response header.
407
+ #
408
+ # Refer to docs/README.md "HTTP Compression" section for
409
+ # further details.
410
+ #
411
+ # @example
412
+ # class Foo
413
+ # include HTTParty
414
+ # skip_decompression
415
+ # end
416
+ def skip_decompression(value = true)
417
+ default_options[:skip_decompression] = !!value
418
+ end
419
+
383
420
  # Allows setting of SSL ciphers to use. This only works in Ruby 1.9+.
384
421
  # You can get a list of valid specific ciphers from OpenSSL::Cipher.ciphers.
385
422
  # You also can specify a cipher suite here, listed here at openssl.org:
@@ -546,10 +583,22 @@ module HTTParty
546
583
  perform_request Net::HTTP::Mkcol, path, options, &block
547
584
  end
548
585
 
586
+ def lock(path, options = {}, &block)
587
+ perform_request Net::HTTP::Lock, path, options, &block
588
+ end
589
+
590
+ def unlock(path, options = {}, &block)
591
+ perform_request Net::HTTP::Unlock, path, options, &block
592
+ end
593
+
549
594
  attr_reader :default_options
550
595
 
551
596
  private
552
597
 
598
+ def validate_timeout_argument(timeout_type, value)
599
+ raise ArgumentError, "#{ timeout_type } must be an integer or float" unless value && (value.is_a?(Integer) || value.is_a?(Float))
600
+ end
601
+
553
602
  def ensure_method_maintained_across_redirects(options)
554
603
  unless options.key?(:maintain_method_across_redirects)
555
604
  options[:maintain_method_across_redirects] = true
@@ -558,26 +607,21 @@ module HTTParty
558
607
 
559
608
  def perform_request(http_method, path, options, &block) #:nodoc:
560
609
  options = ModuleInheritableAttributes.hash_deep_dup(default_options).merge(options)
561
- process_headers(options)
610
+ HeadersProcessor.new(headers, options).call
562
611
  process_cookies(options)
563
612
  Request.new(http_method, path, options).perform(&block)
564
613
  end
565
614
 
566
- def process_headers(options)
567
- if options[:headers] && headers.any?
568
- options[:headers] = headers.merge(options[:headers])
569
- end
570
- end
571
-
572
615
  def process_cookies(options) #:nodoc:
573
616
  return unless options[:cookies] || default_cookies.any?
574
617
  options[:headers] ||= headers.dup
575
- options[:headers]["cookie"] = cookies.merge(options.delete(:cookies) || {}).to_cookie_string
618
+ options[:headers]['cookie'] = cookies.merge(options.delete(:cookies) || {}).to_cookie_string
576
619
  end
577
620
 
578
621
  def validate_format
579
622
  if format && parser.respond_to?(:supports_format?) && !parser.supports_format?(format)
580
- raise UnsupportedFormat, "'#{format.inspect}' Must be one of: #{parser.supported_formats.map(&:to_s).sort.join(', ')}"
623
+ supported_format_names = parser.supported_formats.map(&:to_s).sort.join(', ')
624
+ raise UnsupportedFormat, "'#{format.inspect}' Must be one of: #{supported_format_names}"
581
625
  end
582
626
  end
583
627
  end
@@ -635,6 +679,7 @@ module HTTParty
635
679
  end
636
680
 
637
681
  require 'httparty/hash_conversions'
682
+ require 'httparty/utils'
638
683
  require 'httparty/exceptions'
639
684
  require 'httparty/parser'
640
685
  require 'httparty/request'
@@ -8,7 +8,7 @@
8
8
  body {font:13px arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}table {font-size:inherit;font:100%;}select, input, textarea {font:99% arial,helvetica,clean,sans-serif;}pre, code {font:115% monospace;*font-size:100%;}body * {line-height:1.22em;}
9
9
  body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}/*ol,ul {list-style:none;}*/caption,th {text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym {border:0;}
10
10
  /* end of yahoo reset and fonts */
11
-
11
+
12
12
  body {color:#333; background:#4b1a1a; line-height:1.3;}
13
13
  p {margin:0 0 20px;}
14
14
  a {color:#4b1a1a;}
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: httparty
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.6
4
+ version: 0.21.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Nunemaker
8
8
  - Sandro Turriate
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-07-21 00:00:00.000000000 Z
12
+ date: 2022-12-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: multi_xml
@@ -25,6 +25,20 @@ dependencies:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
27
  version: 0.5.2
28
+ - !ruby/object:Gem::Dependency
29
+ name: mini_mime
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: 1.0.0
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: 1.0.0
28
42
  description: Makes http fun! Also, makes consuming restful web services dead easy.
29
43
  email:
30
44
  - nunemaker@gmail.com
@@ -33,11 +47,11 @@ executables:
33
47
  extensions: []
34
48
  extra_rdoc_files: []
35
49
  files:
50
+ - ".editorconfig"
51
+ - ".github/workflows/ci.yml"
36
52
  - ".gitignore"
37
53
  - ".rubocop.yml"
38
54
  - ".rubocop_todo.yml"
39
- - ".simplecov"
40
- - ".travis.yml"
41
55
  - CONTRIBUTING.md
42
56
  - Changelog.md
43
57
  - Gemfile
@@ -51,13 +65,18 @@ files:
51
65
  - examples/README.md
52
66
  - examples/aaws.rb
53
67
  - examples/basic.rb
68
+ - examples/body_stream.rb
54
69
  - examples/crack.rb
55
70
  - examples/custom_parsers.rb
56
71
  - examples/delicious.rb
57
72
  - examples/google.rb
58
73
  - examples/headers_and_user_agents.rb
74
+ - examples/idn.rb
59
75
  - examples/logging.rb
76
+ - examples/microsoft_graph.rb
77
+ - examples/multipart.rb
60
78
  - examples/nokogiri_html_parser.rb
79
+ - examples/peer_cert.rb
61
80
  - examples/rescue_json.rb
62
81
  - examples/rubyurl.rb
63
82
  - examples/stackexchange.rb
@@ -65,72 +84,34 @@ files:
65
84
  - examples/tripit_sign_in.rb
66
85
  - examples/twitter.rb
67
86
  - examples/whoismyrep.rb
68
- - features/basic_authentication.feature
69
- - features/command_line.feature
70
- - features/deals_with_http_error_codes.feature
71
- - features/digest_authentication.feature
72
- - features/handles_compressed_responses.feature
73
- - features/handles_multiple_formats.feature
74
- - features/steps/env.rb
75
- - features/steps/httparty_response_steps.rb
76
- - features/steps/httparty_steps.rb
77
- - features/steps/mongrel_helper.rb
78
- - features/steps/remote_service_steps.rb
79
- - features/supports_read_timeout_option.feature
80
- - features/supports_redirection.feature
81
- - features/supports_timeout_option.feature
82
87
  - httparty.gemspec
83
88
  - lib/httparty.rb
84
89
  - lib/httparty/connection_adapter.rb
85
90
  - lib/httparty/cookie_hash.rb
91
+ - lib/httparty/decompressor.rb
86
92
  - lib/httparty/exceptions.rb
87
93
  - lib/httparty/hash_conversions.rb
94
+ - lib/httparty/headers_processor.rb
88
95
  - lib/httparty/logger/apache_formatter.rb
89
96
  - lib/httparty/logger/curl_formatter.rb
90
97
  - lib/httparty/logger/logger.rb
98
+ - lib/httparty/logger/logstash_formatter.rb
91
99
  - lib/httparty/module_inheritable_attributes.rb
92
100
  - lib/httparty/net_digest_auth.rb
93
101
  - lib/httparty/parser.rb
94
102
  - lib/httparty/request.rb
103
+ - lib/httparty/request/body.rb
104
+ - lib/httparty/request/multipart_boundary.rb
95
105
  - lib/httparty/response.rb
96
106
  - lib/httparty/response/headers.rb
107
+ - lib/httparty/response_fragment.rb
108
+ - lib/httparty/text_encoder.rb
109
+ - lib/httparty/utils.rb
97
110
  - lib/httparty/version.rb
98
111
  - script/release
99
- - spec/fixtures/delicious.xml
100
- - spec/fixtures/empty.xml
101
- - spec/fixtures/google.html
102
- - spec/fixtures/ssl/generate.sh
103
- - spec/fixtures/ssl/generated/bogushost.crt
104
- - spec/fixtures/ssl/generated/ca.crt
105
- - spec/fixtures/ssl/generated/ca.key
106
- - spec/fixtures/ssl/generated/selfsigned.crt
107
- - spec/fixtures/ssl/generated/server.crt
108
- - spec/fixtures/ssl/generated/server.key
109
- - spec/fixtures/ssl/openssl-exts.cnf
110
- - spec/fixtures/twitter.csv
111
- - spec/fixtures/twitter.json
112
- - spec/fixtures/twitter.xml
113
- - spec/fixtures/undefined_method_add_node_for_nil.xml
114
- - spec/httparty/connection_adapter_spec.rb
115
- - spec/httparty/cookie_hash_spec.rb
116
- - spec/httparty/exception_spec.rb
117
- - spec/httparty/hash_conversions_spec.rb
118
- - spec/httparty/logger/apache_formatter_spec.rb
119
- - spec/httparty/logger/curl_formatter_spec.rb
120
- - spec/httparty/logger/logger_spec.rb
121
- - spec/httparty/net_digest_auth_spec.rb
122
- - spec/httparty/parser_spec.rb
123
- - spec/httparty/request_spec.rb
124
- - spec/httparty/response_spec.rb
125
- - spec/httparty/ssl_spec.rb
126
- - spec/httparty_spec.rb
127
- - spec/spec_helper.rb
128
- - spec/support/ssl_test_helper.rb
129
- - spec/support/ssl_test_server.rb
130
- - spec/support/stub_response.rb
131
112
  - website/css/common.css
132
113
  - website/index.html
133
- homepage: http://jnunemaker.github.com/httparty
114
+ homepage: https://github.com/jnunemaker/httparty
134
115
  licenses:
135
116
  - MIT
136
117
  metadata: {}
@@ -142,62 +123,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
142
123
  requirements:
143
124
  - - ">="
144
125
  - !ruby/object:Gem::Version
145
- version: 2.0.0
126
+ version: 2.3.0
146
127
  required_rubygems_version: !ruby/object:Gem::Requirement
147
128
  requirements:
148
129
  - - ">="
149
130
  - !ruby/object:Gem::Version
150
131
  version: '0'
151
132
  requirements: []
152
- rubyforge_project:
153
- rubygems_version: 2.5.2
154
- signing_key:
133
+ rubygems_version: 3.3.7
134
+ signing_key:
155
135
  specification_version: 4
156
136
  summary: Makes http fun! Also, makes consuming restful web services dead easy.
157
- test_files:
158
- - features/basic_authentication.feature
159
- - features/command_line.feature
160
- - features/deals_with_http_error_codes.feature
161
- - features/digest_authentication.feature
162
- - features/handles_compressed_responses.feature
163
- - features/handles_multiple_formats.feature
164
- - features/steps/env.rb
165
- - features/steps/httparty_response_steps.rb
166
- - features/steps/httparty_steps.rb
167
- - features/steps/mongrel_helper.rb
168
- - features/steps/remote_service_steps.rb
169
- - features/supports_read_timeout_option.feature
170
- - features/supports_redirection.feature
171
- - features/supports_timeout_option.feature
172
- - spec/fixtures/delicious.xml
173
- - spec/fixtures/empty.xml
174
- - spec/fixtures/google.html
175
- - spec/fixtures/ssl/generate.sh
176
- - spec/fixtures/ssl/generated/bogushost.crt
177
- - spec/fixtures/ssl/generated/ca.crt
178
- - spec/fixtures/ssl/generated/ca.key
179
- - spec/fixtures/ssl/generated/selfsigned.crt
180
- - spec/fixtures/ssl/generated/server.crt
181
- - spec/fixtures/ssl/generated/server.key
182
- - spec/fixtures/ssl/openssl-exts.cnf
183
- - spec/fixtures/twitter.csv
184
- - spec/fixtures/twitter.json
185
- - spec/fixtures/twitter.xml
186
- - spec/fixtures/undefined_method_add_node_for_nil.xml
187
- - spec/httparty/connection_adapter_spec.rb
188
- - spec/httparty/cookie_hash_spec.rb
189
- - spec/httparty/exception_spec.rb
190
- - spec/httparty/hash_conversions_spec.rb
191
- - spec/httparty/logger/apache_formatter_spec.rb
192
- - spec/httparty/logger/curl_formatter_spec.rb
193
- - spec/httparty/logger/logger_spec.rb
194
- - spec/httparty/net_digest_auth_spec.rb
195
- - spec/httparty/parser_spec.rb
196
- - spec/httparty/request_spec.rb
197
- - spec/httparty/response_spec.rb
198
- - spec/httparty/ssl_spec.rb
199
- - spec/httparty_spec.rb
200
- - spec/spec_helper.rb
201
- - spec/support/ssl_test_helper.rb
202
- - spec/support/ssl_test_server.rb
203
- - spec/support/stub_response.rb
137
+ test_files: []
data/.simplecov DELETED
@@ -1 +0,0 @@
1
- SimpleCov.start "test_frameworks"
data/.travis.yml DELETED
@@ -1,9 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.0.0
4
- - 2.1.8
5
- - 2.2.4
6
- - 2.3.0
7
- - 2.4.1
8
- bundler_args: --without development
9
- before_install: gem install bundler