httpi 2.2.1 → 2.2.3

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.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ### 2.2.2 (edge)
2
+
3
+ * Feature: [#118](https://github.com/savonrb/httpi/pull/118) Support for other SSL certificate keys, not only RSA. Thanks to [Novikov Andrey](https://github.com/Envek).
4
+
1
5
  ### 2.2.1 (2014-06-11)
2
6
 
3
7
  * Fix: [#116](https://github.com/savonrb/httpi/pull/116) Fix NoMethodError when not using NTLM.
data/lib/httpi.rb CHANGED
@@ -136,7 +136,15 @@ module HTTPI
136
136
  yield adapter_class.client if block_given?
137
137
  log_request(method, request, Adapter.identify(adapter_class.class))
138
138
 
139
- adapter_class.request(method)
139
+ response = adapter_class.request(method)
140
+
141
+ if response and response.code == 302 and request.follow_redirect?
142
+ log('Following redirect...')
143
+ request.url = response.headers['location']
144
+ return request(method, request, adapter)
145
+ end
146
+
147
+ response
140
148
  end
141
149
 
142
150
  # Shortcut for setting the default adapter to use.
@@ -92,9 +92,9 @@ module HTTPI
92
92
  # Sets the +OpenSSL+ ca certificate.
93
93
  attr_writer :ca_cert
94
94
 
95
- # Returns an <tt>OpenSSL::PKey::RSA</tt> for the +cert_key_file+.
95
+ # Returns an <tt>OpenSSL::PKey</tt> subclass (usually <tt>OpenSSL::PKey::RSA</tt>) for the +cert_key_file+.
96
96
  def cert_key
97
- @cert_key ||= (OpenSSL::PKey::RSA.new(File.read(cert_key_file), cert_key_password) if cert_key_file)
97
+ @cert_key ||= (OpenSSL::PKey.read(File.read(cert_key_file), cert_key_password) if cert_key_file)
98
98
  end
99
99
 
100
100
  # Sets the +OpenSSL+ certificate key.
data/lib/httpi/request.rb CHANGED
@@ -11,7 +11,7 @@ module HTTPI
11
11
  class Request
12
12
 
13
13
  # Available attribute writers.
14
- ATTRIBUTES = [:url, :proxy, :headers, :body, :open_timeout, :read_timeout]
14
+ ATTRIBUTES = [:url, :proxy, :headers, :body, :open_timeout, :read_timeout, :follow_redirect]
15
15
 
16
16
  # Accepts a Hash of +args+ to mass assign attributes and authentication credentials.
17
17
  def initialize(args = {})
@@ -123,6 +123,13 @@ module HTTPI
123
123
  ATTRIBUTES.each { |key| send("#{key}=", args[key]) if args[key] }
124
124
  end
125
125
 
126
+ attr_writer :follow_redirect
127
+
128
+ # Returns whether or not redirects should be followed - defaults to false if not set.
129
+ def follow_redirect?
130
+ @follow_redirect ||= false
131
+ end
132
+
126
133
  private
127
134
 
128
135
  # Stores the cookies from past requests.
data/lib/httpi/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module HTTPI
2
2
 
3
- VERSION = "2.2.1"
3
+ VERSION = "2.2.3"
4
4
 
5
5
  end
@@ -195,12 +195,26 @@ describe HTTPI do
195
195
  end
196
196
 
197
197
  describe ".request" do
198
+ let(:request) { HTTPI::Request.new('http://example.com') }
199
+
198
200
  it "allows custom HTTP methods" do
199
- request = HTTPI::Request.new("http://example.com")
200
201
  httpclient.any_instance.expects(:request).with(:custom)
201
202
 
202
203
  client.request(:custom, request, :httpclient)
203
204
  end
205
+
206
+ it 'follows redirects' do
207
+ request.follow_redirect = true
208
+ redirect_location = 'http://foo.bar'
209
+
210
+ redirect = HTTPI::Response.new(302, {'location' => redirect_location}, 'Moved')
211
+ response = HTTPI::Response.new(200, {}, 'success')
212
+
213
+ httpclient.any_instance.expects(:request).twice.with(:custom).returns(redirect, response)
214
+ request.expects(:url=).with(redirect_location)
215
+
216
+ client.request(:custom, request, :httpclient)
217
+ end
204
218
  end
205
219
 
206
220
  HTTPI::REQUEST_METHODS.each do |method|
@@ -249,7 +263,7 @@ describe HTTPI do
249
263
 
250
264
  describe ".log" do
251
265
  it "defaults to true" do
252
- expect(HTTPI.log?).to be_true
266
+ expect(HTTPI.log?).to be_truthy
253
267
  end
254
268
  end
255
269
 
@@ -206,11 +206,22 @@ describe HTTPI::Request do
206
206
  describe "#auth?" do
207
207
  it "returns true when auth credentials are specified" do
208
208
  request.auth.basic "username", "password"
209
- expect(request.auth?).to be_true
209
+ expect(request.auth?).to be_truthy
210
210
  end
211
211
 
212
212
  it "returns false otherwise" do
213
- expect(request.auth?).to be_false
213
+ expect(request.auth?).to be_falsey
214
+ end
215
+ end
216
+
217
+ describe '#follow_redirect?' do
218
+ it 'returns true when follow_redirect is set to true' do
219
+ request.follow_redirect = true
220
+ expect(request.follow_redirect?).to be_truthy
221
+ end
222
+
223
+ it 'returns false by default' do
224
+ expect(request.follow_redirect?).to be_falsey
214
225
  end
215
226
  end
216
227
 
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: httpi
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.1
4
+ version: 2.2.3
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Daniel Harrington
@@ -9,11 +10,12 @@ authors:
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2014-06-11 00:00:00.000000000 Z
13
+ date: 2014-06-26 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: rack
16
17
  requirement: !ruby/object:Gem::Requirement
18
+ none: false
17
19
  requirements:
18
20
  - - ! '>='
19
21
  - !ruby/object:Gem::Version
@@ -21,6 +23,7 @@ dependencies:
21
23
  type: :runtime
22
24
  prerelease: false
23
25
  version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
24
27
  requirements:
25
28
  - - ! '>='
26
29
  - !ruby/object:Gem::Version
@@ -28,6 +31,7 @@ dependencies:
28
31
  - !ruby/object:Gem::Dependency
29
32
  name: rubyntlm
30
33
  requirement: !ruby/object:Gem::Requirement
34
+ none: false
31
35
  requirements:
32
36
  - - ~>
33
37
  - !ruby/object:Gem::Version
@@ -35,6 +39,7 @@ dependencies:
35
39
  type: :development
36
40
  prerelease: false
37
41
  version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
38
43
  requirements:
39
44
  - - ~>
40
45
  - !ruby/object:Gem::Version
@@ -42,6 +47,7 @@ dependencies:
42
47
  - !ruby/object:Gem::Dependency
43
48
  name: rake
44
49
  requirement: !ruby/object:Gem::Requirement
50
+ none: false
45
51
  requirements:
46
52
  - - ~>
47
53
  - !ruby/object:Gem::Version
@@ -49,6 +55,7 @@ dependencies:
49
55
  type: :development
50
56
  prerelease: false
51
57
  version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
52
59
  requirements:
53
60
  - - ~>
54
61
  - !ruby/object:Gem::Version
@@ -56,6 +63,7 @@ dependencies:
56
63
  - !ruby/object:Gem::Dependency
57
64
  name: rspec
58
65
  requirement: !ruby/object:Gem::Requirement
66
+ none: false
59
67
  requirements:
60
68
  - - ~>
61
69
  - !ruby/object:Gem::Version
@@ -63,6 +71,7 @@ dependencies:
63
71
  type: :development
64
72
  prerelease: false
65
73
  version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
66
75
  requirements:
67
76
  - - ~>
68
77
  - !ruby/object:Gem::Version
@@ -70,6 +79,7 @@ dependencies:
70
79
  - !ruby/object:Gem::Dependency
71
80
  name: mocha
72
81
  requirement: !ruby/object:Gem::Requirement
82
+ none: false
73
83
  requirements:
74
84
  - - ~>
75
85
  - !ruby/object:Gem::Version
@@ -77,6 +87,7 @@ dependencies:
77
87
  type: :development
78
88
  prerelease: false
79
89
  version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
80
91
  requirements:
81
92
  - - ~>
82
93
  - !ruby/object:Gem::Version
@@ -84,6 +95,7 @@ dependencies:
84
95
  - !ruby/object:Gem::Dependency
85
96
  name: puma
86
97
  requirement: !ruby/object:Gem::Requirement
98
+ none: false
87
99
  requirements:
88
100
  - - ~>
89
101
  - !ruby/object:Gem::Version
@@ -91,6 +103,7 @@ dependencies:
91
103
  type: :development
92
104
  prerelease: false
93
105
  version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
94
107
  requirements:
95
108
  - - ~>
96
109
  - !ruby/object:Gem::Version
@@ -170,25 +183,26 @@ files:
170
183
  homepage: http://github.com/savonrb/#{s.name}
171
184
  licenses:
172
185
  - MIT
173
- metadata: {}
174
186
  post_install_message:
175
187
  rdoc_options: []
176
188
  require_paths:
177
189
  - lib
178
190
  required_ruby_version: !ruby/object:Gem::Requirement
191
+ none: false
179
192
  requirements:
180
193
  - - ! '>='
181
194
  - !ruby/object:Gem::Version
182
195
  version: '0'
183
196
  required_rubygems_version: !ruby/object:Gem::Requirement
197
+ none: false
184
198
  requirements:
185
199
  - - ! '>='
186
200
  - !ruby/object:Gem::Version
187
201
  version: '0'
188
202
  requirements: []
189
203
  rubyforge_project: httpi
190
- rubygems_version: 2.2.2
204
+ rubygems_version: 1.8.23
191
205
  signing_key:
192
- specification_version: 4
206
+ specification_version: 3
193
207
  summary: Common interface for Ruby's HTTP libraries
194
208
  test_files: []
checksums.yaml DELETED
@@ -1,15 +0,0 @@
1
- ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ZDM4YmYwM2E3NWM1YzQ4OGQ3MWZkNWIxNGVhZTIwZDEzOWYyMmJiOA==
5
- data.tar.gz: !binary |-
6
- ZTU1NmUxZDRlMjczZjRjMDFkNjZhZGM5Mjc5ZWFiZTJlNzQ5ZWQ3NQ==
7
- SHA512:
8
- metadata.gz: !binary |-
9
- MWNiMjU5ZmQxYzRjODI2ZWZhNjAyNjBiZDkwMmUzMjY4NDY4ZDQyM2RiMDMx
10
- NTlhOWRlMDdlM2Q1Y2E2ZjZlMDkzMGIwNWIyMjU2NTE1MzBjYTEwMzllOWE0
11
- Y2FmNWUwZDY5OWFmODM2ZWEyYTc4MTI5MWNlMjdiZjhlMjI1NWE=
12
- data.tar.gz: !binary |-
13
- NjU1MzY3YWQ1MWVjNzlmYWNjNjE3MWJjOGMzMTIyY2E5NmJlNzJjYjFjNGI0
14
- NDc0NjcwZGY4OTIwYzQ2MTQ5OThjNzZmZjUzMGYzYzE0ZGE4NzIwNjU4OWJm
15
- ZTI1Nzc1OGVkZTRjMDI2ZmM3YzZmMGQ1ZDUzNjA1MTRmZTZmZjc=