httpi 0.7.9 → 0.8.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.
- data/httpi.gemspec +1 -0
- data/lib/httpi.rb +3 -3
- data/lib/httpi/adapter.rb +6 -6
- data/lib/httpi/adapter/curb.rb +8 -2
- data/lib/httpi/adapter/httpclient.rb +2 -2
- data/lib/httpi/adapter/net_http.rb +5 -1
- data/lib/httpi/auth/config.rb +14 -1
- data/lib/httpi/response.rb +2 -1
- data/lib/httpi/version.rb +1 -1
- data/spec/httpi/httpi_spec.rb +3 -2
- data/spec/httpi/response_spec.rb +6 -0
- metadata +33 -17
data/httpi.gemspec
CHANGED
data/lib/httpi.rb
CHANGED
@@ -73,7 +73,7 @@ module HTTPI
|
|
73
73
|
|
74
74
|
REQUEST_METHODS = [:get, :post, :head, :put, :delete]
|
75
75
|
|
76
|
-
DEFAULT_LOG_LEVEL = :
|
76
|
+
DEFAULT_LOG_LEVEL = :warn
|
77
77
|
|
78
78
|
class << self
|
79
79
|
|
@@ -154,7 +154,7 @@ module HTTPI
|
|
154
154
|
|
155
155
|
# Returns the log level. Defaults to :debug.
|
156
156
|
def log_level
|
157
|
-
@log_level ||=
|
157
|
+
@log_level ||= DEFAULT_LOG_LEVEL
|
158
158
|
end
|
159
159
|
|
160
160
|
# Logs given +messages+.
|
@@ -185,7 +185,7 @@ module HTTPI
|
|
185
185
|
adapter ||= Adapter.use
|
186
186
|
adapter, adapter_class = Adapter.find adapter
|
187
187
|
|
188
|
-
HTTPI.
|
188
|
+
HTTPI.logger.debug "HTTPI executes HTTP #{method.to_s.upcase} using the #{adapter} adapter"
|
189
189
|
yield adapter_class.new(request)
|
190
190
|
end
|
191
191
|
|
data/lib/httpi/adapter.rb
CHANGED
@@ -33,9 +33,9 @@ module HTTPI
|
|
33
33
|
# Returns a memoized +Hash+ of adapters.
|
34
34
|
def self.adapters
|
35
35
|
@adapters ||= {
|
36
|
-
:httpclient => { :class => HTTPClient, :require => "httpclient" },
|
37
|
-
:curb => { :class => Curb, :require => "curb" },
|
38
|
-
:net_http => { :class => NetHTTP, :require => "net/https" }
|
36
|
+
:httpclient => { :class => HTTPClient, :require => ["httpclient"] },
|
37
|
+
:curb => { :class => Curb, :require => ["curb"] },
|
38
|
+
:net_http => { :class => NetHTTP, :require => ["net/https", "net/ntlm_http"] }
|
39
39
|
}
|
40
40
|
end
|
41
41
|
|
@@ -54,12 +54,12 @@ module HTTPI
|
|
54
54
|
|
55
55
|
# Tries to load and return the given +adapter+ name and class and falls back to the +FALLBACK+ adapter.
|
56
56
|
def self.load_adapter(adapter)
|
57
|
-
|
57
|
+
adapters[adapter][:require].each { |dependency| require dependency }
|
58
58
|
[adapter, adapters[adapter][:class]]
|
59
59
|
rescue LoadError
|
60
|
-
HTTPI.
|
60
|
+
HTTPI.logger.warn "HTTPI tried to use the #{adapter} adapter, but was unable to find the library in the LOAD_PATH.",
|
61
61
|
"Falling back to using the #{FALLBACK} adapter now."
|
62
|
-
|
62
|
+
|
63
63
|
require adapters[FALLBACK][:require]
|
64
64
|
[FALLBACK, adapters[FALLBACK][:class]]
|
65
65
|
end
|
data/lib/httpi/adapter/curb.rb
CHANGED
@@ -59,6 +59,7 @@ module HTTPI
|
|
59
59
|
basic_setup request
|
60
60
|
setup_http_auth request if request.auth.http?
|
61
61
|
setup_ssl_auth request.auth.ssl if request.auth.ssl?
|
62
|
+
setup_ntlm_auth request if request.auth.ntlm?
|
62
63
|
end
|
63
64
|
|
64
65
|
def basic_setup(request)
|
@@ -83,6 +84,11 @@ module HTTPI
|
|
83
84
|
client.ssl_verify_peer = ssl.verify_mode == :peer
|
84
85
|
end
|
85
86
|
|
87
|
+
def setup_ntlm_auth(request)
|
88
|
+
client.username, client.password = *request.auth.credentials
|
89
|
+
client.http_auth_types = request.auth.type
|
90
|
+
end
|
91
|
+
|
86
92
|
def respond_with(client)
|
87
93
|
status, headers = parse_header_string(client.header_str)
|
88
94
|
Response.new client.response_code, headers, client.body_str
|
@@ -93,7 +99,7 @@ module HTTPI
|
|
93
99
|
def parse_header_string(header_string)
|
94
100
|
status, headers = nil, {}
|
95
101
|
return [status, headers] unless header_string
|
96
|
-
|
102
|
+
|
97
103
|
header_string.split(/\r\n/).each do |header|
|
98
104
|
if header =~ %r|^HTTP/1.[01] \d\d\d (.*)|
|
99
105
|
status = $1
|
@@ -110,7 +116,7 @@ module HTTPI
|
|
110
116
|
end
|
111
117
|
end
|
112
118
|
end
|
113
|
-
|
119
|
+
|
114
120
|
[status, headers]
|
115
121
|
end
|
116
122
|
|
@@ -66,7 +66,7 @@ module HTTPI
|
|
66
66
|
|
67
67
|
def setup_client(request)
|
68
68
|
basic_setup request
|
69
|
-
|
69
|
+
setup_auth request if request.auth.http? || request.auth.ntlm?
|
70
70
|
setup_ssl_auth request.auth.ssl if request.auth.ssl?
|
71
71
|
end
|
72
72
|
|
@@ -76,7 +76,7 @@ module HTTPI
|
|
76
76
|
client.receive_timeout = request.read_timeout if request.read_timeout
|
77
77
|
end
|
78
78
|
|
79
|
-
def
|
79
|
+
def setup_auth(request)
|
80
80
|
client.set_auth request.url, *request.auth.credentials
|
81
81
|
end
|
82
82
|
|
@@ -9,7 +9,7 @@ module HTTPI
|
|
9
9
|
# Adapter for the Net::HTTP client.
|
10
10
|
# http://ruby-doc.org/stdlib/libdoc/net/http/rdoc/
|
11
11
|
class NetHTTP
|
12
|
-
|
12
|
+
|
13
13
|
def initialize(request)
|
14
14
|
self.client = new_client request
|
15
15
|
end
|
@@ -88,6 +88,7 @@ module HTTPI
|
|
88
88
|
client.ca_file = ssl.ca_cert_file if ssl.ca_cert_file
|
89
89
|
client.verify_mode = ssl.openssl_verify_mode
|
90
90
|
end
|
91
|
+
|
91
92
|
|
92
93
|
def request_client(type, request)
|
93
94
|
request_class = case type
|
@@ -99,7 +100,10 @@ module HTTPI
|
|
99
100
|
end
|
100
101
|
|
101
102
|
request_client = request_class.new request.url.request_uri, request.headers
|
103
|
+
|
102
104
|
request_client.basic_auth *request.auth.credentials if request.auth.basic?
|
105
|
+
request_client.ntlm_auth *request.auth.credentials if request.auth.ntlm?
|
106
|
+
|
103
107
|
request_client
|
104
108
|
end
|
105
109
|
|
data/lib/httpi/auth/config.rb
CHANGED
@@ -10,7 +10,7 @@ module HTTPI
|
|
10
10
|
class Config
|
11
11
|
|
12
12
|
# Supported authentication types.
|
13
|
-
TYPES = [:basic, :digest, :ssl]
|
13
|
+
TYPES = [:basic, :digest, :ssl, :ntlm]
|
14
14
|
|
15
15
|
# Accessor for the HTTP basic auth credentials.
|
16
16
|
def basic(*args)
|
@@ -43,6 +43,19 @@ module HTTPI
|
|
43
43
|
type == :basic || type == :digest
|
44
44
|
end
|
45
45
|
|
46
|
+
# Accessor for the NTLM auth credentials.
|
47
|
+
def ntlm(*args)
|
48
|
+
return @ntlm if args.empty?
|
49
|
+
|
50
|
+
self.type = :ntlm
|
51
|
+
@ntlm = args.flatten.compact
|
52
|
+
end
|
53
|
+
|
54
|
+
# Returns whether to use NTLM auth.
|
55
|
+
def ntlm?
|
56
|
+
type == :ntlm
|
57
|
+
end
|
58
|
+
|
46
59
|
# Returns the <tt>HTTPI::Auth::SSL</tt> object.
|
47
60
|
def ssl
|
48
61
|
@ssl ||= SSL.new
|
data/lib/httpi/response.rb
CHANGED
@@ -68,9 +68,10 @@ module HTTPI
|
|
68
68
|
# Returns the gzip decoded response body.
|
69
69
|
def decoded_gzip_body
|
70
70
|
gzip = Zlib::GzipReader.new StringIO.new(raw_body)
|
71
|
+
raise ArgumentError.new "couldn't create gzip reader" unless gzip
|
71
72
|
gzip.read
|
72
73
|
ensure
|
73
|
-
gzip.close
|
74
|
+
gzip.close if gzip
|
74
75
|
end
|
75
76
|
|
76
77
|
# Returns the DIME decoded response body.
|
data/lib/httpi/version.rb
CHANGED
data/spec/httpi/httpi_spec.rb
CHANGED
@@ -291,8 +291,8 @@ describe HTTPI do
|
|
291
291
|
end
|
292
292
|
|
293
293
|
describe ".log_level" do
|
294
|
-
it "should default to :
|
295
|
-
HTTPI.log_level.should == :
|
294
|
+
it "should default to :warn" do
|
295
|
+
HTTPI.log_level.should == :warn
|
296
296
|
end
|
297
297
|
|
298
298
|
it "should set the log level to use" do
|
@@ -303,6 +303,7 @@ describe HTTPI do
|
|
303
303
|
|
304
304
|
describe ".log" do
|
305
305
|
it "should log given messages" do
|
306
|
+
HTTPI.log_level = :debug
|
306
307
|
HTTPI.logger.expects(:debug).with("Log this")
|
307
308
|
HTTPI.log "Log", "this"
|
308
309
|
end
|
data/spec/httpi/response_spec.rb
CHANGED
@@ -79,6 +79,12 @@ describe HTTPI::Response do
|
|
79
79
|
it "should return the (gzip decoded) HTTP response body" do
|
80
80
|
response.body.should == Fixture.xml
|
81
81
|
end
|
82
|
+
|
83
|
+
it "should bubble Zlib errors" do
|
84
|
+
arbitrary_error = Class.new(ArgumentError)
|
85
|
+
Zlib::GzipReader.expects(:new).raises(arbitrary_error)
|
86
|
+
lambda { response.body }.should raise_error(arbitrary_error)
|
87
|
+
end
|
82
88
|
end
|
83
89
|
|
84
90
|
describe "#raw_body" do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: httpi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 63
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 8
|
9
|
+
- 0
|
10
|
+
version: 0.8.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Daniel Harrington
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2011-
|
19
|
+
date: 2011-03-07 00:00:00 +01:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -34,9 +34,25 @@ dependencies:
|
|
34
34
|
type: :runtime
|
35
35
|
version_requirements: *id001
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
|
-
name:
|
37
|
+
name: ntlm-http
|
38
38
|
prerelease: false
|
39
39
|
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 25
|
45
|
+
segments:
|
46
|
+
- 0
|
47
|
+
- 1
|
48
|
+
- 1
|
49
|
+
version: 0.1.1
|
50
|
+
type: :runtime
|
51
|
+
version_requirements: *id002
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: httpclient
|
54
|
+
prerelease: false
|
55
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
40
56
|
none: false
|
41
57
|
requirements:
|
42
58
|
- - ~>
|
@@ -48,11 +64,11 @@ dependencies:
|
|
48
64
|
- 5
|
49
65
|
version: 2.1.5
|
50
66
|
type: :development
|
51
|
-
version_requirements: *
|
67
|
+
version_requirements: *id003
|
52
68
|
- !ruby/object:Gem::Dependency
|
53
69
|
name: curb
|
54
70
|
prerelease: false
|
55
|
-
requirement: &
|
71
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
56
72
|
none: false
|
57
73
|
requirements:
|
58
74
|
- - ~>
|
@@ -64,11 +80,11 @@ dependencies:
|
|
64
80
|
- 8
|
65
81
|
version: 0.7.8
|
66
82
|
type: :development
|
67
|
-
version_requirements: *
|
83
|
+
version_requirements: *id004
|
68
84
|
- !ruby/object:Gem::Dependency
|
69
85
|
name: rspec
|
70
86
|
prerelease: false
|
71
|
-
requirement: &
|
87
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
72
88
|
none: false
|
73
89
|
requirements:
|
74
90
|
- - ~>
|
@@ -79,11 +95,11 @@ dependencies:
|
|
79
95
|
- 2
|
80
96
|
version: "2.2"
|
81
97
|
type: :development
|
82
|
-
version_requirements: *
|
98
|
+
version_requirements: *id005
|
83
99
|
- !ruby/object:Gem::Dependency
|
84
100
|
name: autotest
|
85
101
|
prerelease: false
|
86
|
-
requirement: &
|
102
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
87
103
|
none: false
|
88
104
|
requirements:
|
89
105
|
- - ">="
|
@@ -93,11 +109,11 @@ dependencies:
|
|
93
109
|
- 0
|
94
110
|
version: "0"
|
95
111
|
type: :development
|
96
|
-
version_requirements: *
|
112
|
+
version_requirements: *id006
|
97
113
|
- !ruby/object:Gem::Dependency
|
98
114
|
name: mocha
|
99
115
|
prerelease: false
|
100
|
-
requirement: &
|
116
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
101
117
|
none: false
|
102
118
|
requirements:
|
103
119
|
- - ~>
|
@@ -109,11 +125,11 @@ dependencies:
|
|
109
125
|
- 9
|
110
126
|
version: 0.9.9
|
111
127
|
type: :development
|
112
|
-
version_requirements: *
|
128
|
+
version_requirements: *id007
|
113
129
|
- !ruby/object:Gem::Dependency
|
114
130
|
name: webmock
|
115
131
|
prerelease: false
|
116
|
-
requirement: &
|
132
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
117
133
|
none: false
|
118
134
|
requirements:
|
119
135
|
- - ~>
|
@@ -125,7 +141,7 @@ dependencies:
|
|
125
141
|
- 0
|
126
142
|
version: 1.4.0
|
127
143
|
type: :development
|
128
|
-
version_requirements: *
|
144
|
+
version_requirements: *id008
|
129
145
|
description: HTTPI provides a common interface for Ruby HTTP libraries.
|
130
146
|
email: me@rubiii.com
|
131
147
|
executables: []
|