httpi 1.1.1 → 2.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/.rvmrc +1 -0
- data/CHANGELOG.md +51 -26
- data/Gemfile +6 -4
- data/README.md +19 -205
- data/httpi.gemspec +7 -10
- data/lib/httpi.rb +54 -56
- data/lib/httpi/adapter.rb +25 -18
- data/lib/httpi/adapter/base.rb +35 -0
- data/lib/httpi/adapter/curb.rb +59 -60
- data/lib/httpi/adapter/em_http.rb +126 -0
- data/lib/httpi/adapter/httpclient.rb +33 -63
- data/lib/httpi/adapter/net_http.rb +44 -62
- data/lib/httpi/auth/ssl.rb +26 -2
- data/lib/httpi/dime.rb +45 -29
- data/lib/httpi/request.rb +1 -1
- data/lib/httpi/response.rb +6 -4
- data/lib/httpi/version.rb +1 -1
- data/spec/httpi/adapter/base_spec.rb +23 -0
- data/spec/httpi/adapter/curb_spec.rb +107 -67
- data/spec/httpi/adapter/em_http_spec.rb +168 -0
- data/spec/httpi/adapter/httpclient_spec.rb +67 -56
- data/spec/httpi/adapter/net_http_spec.rb +62 -47
- data/spec/httpi/adapter_spec.rb +15 -2
- data/spec/httpi/auth/ssl_spec.rb +34 -1
- data/spec/httpi/httpi_spec.rb +80 -115
- data/spec/integration/fixtures/ca.pem +23 -0
- data/spec/integration/fixtures/ca_all.pem +44 -0
- data/spec/integration/fixtures/htdigest +1 -0
- data/spec/integration/fixtures/htpasswd +2 -0
- data/spec/integration/fixtures/server.cert +19 -0
- data/spec/integration/fixtures/server.key +15 -0
- data/spec/integration/fixtures/subca.pem +21 -0
- data/spec/integration/request_spec.rb +15 -2
- data/spec/integration/ssl_server.rb +70 -0
- data/spec/integration/ssl_spec.rb +102 -0
- data/spec/support/fixture.rb +1 -1
- metadata +60 -73
@@ -0,0 +1 @@
|
|
1
|
+
admin:auth:4302fe65caa32f27721949149ccd3083
|
@@ -0,0 +1,19 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIC/zCCAeegAwIBAgIBATANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQGDAJKUDES
|
3
|
+
MBAGA1UECgwJSklOLkdSLkpQMQwwCgYDVQQLDANSUlIxDjAMBgNVBAMMBVN1YkNB
|
4
|
+
MB4XDTA0MDEzMTAzMTMxNloXDTMzMDEyMzAzMTMxNlowQzELMAkGA1UEBgwCSlAx
|
5
|
+
EjAQBgNVBAoMCUpJTi5HUi5KUDEMMAoGA1UECwwDUlJSMRIwEAYDVQQDDAlsb2Nh
|
6
|
+
bGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANFJTxWqup3nV9dsJAku
|
7
|
+
p+WaXnPNIzcpAA3qMGZDJTJsfa8Du7ZxTP0XJK5mETttBrn711cJxAuP3KjqnW9S
|
8
|
+
vtZ9lY2sXJ6Zj62sN5LwG3VVe25dI28yR1EsbHjJ5Zjf9tmggMC6am52dxuHbt5/
|
9
|
+
vHo4ngJuKE/U+eeGRivMn6gFAgMBAAGjgYUwgYIwDAYDVR0TAQH/BAIwADAxBglg
|
10
|
+
hkgBhvhCAQ0EJBYiUnVieS9PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAd
|
11
|
+
BgNVHQ4EFgQUpZIyygD9JxFYHHOTEuWOLbCKfckwCwYDVR0PBAQDAgWgMBMGA1Ud
|
12
|
+
JQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBBQUAA4IBAQBwAIj5SaBHaA5X31IP
|
13
|
+
CFCJiep96awfp7RANO0cuUj+ZpGoFn9d6FXY0g+Eg5wAkCNIzZU5NHN9xsdOpnUo
|
14
|
+
zIBbyTfQEPrge1CMWMvL6uGaoEXytq84VTitF/xBTky4KtTn6+es4/e7jrrzeUXQ
|
15
|
+
RC46gkHObmDT91RkOEGjHLyld2328jo3DIN/VTHIryDeVHDWjY5dENwpwdkhhm60
|
16
|
+
DR9IrNBbXWEe9emtguNXeN0iu1ux0lG1Hc6pWGQxMlRKNvGh0yZB9u5EVe38tOV0
|
17
|
+
jQaoNyL7qzcQoXD3Dmbi1p0iRmg/+HngISsz8K7k7MBNVsSclztwgCzTZOBiVtkM
|
18
|
+
rRlQ
|
19
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,15 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIICXQIBAAKBgQDRSU8Vqrqd51fXbCQJLqflml5zzSM3KQAN6jBmQyUybH2vA7u2
|
3
|
+
cUz9FySuZhE7bQa5+9dXCcQLj9yo6p1vUr7WfZWNrFyemY+trDeS8Bt1VXtuXSNv
|
4
|
+
MkdRLGx4yeWY3/bZoIDAumpudncbh27ef7x6OJ4CbihP1PnnhkYrzJ+oBQIDAQAB
|
5
|
+
AoGBAIf4CstW2ltQO7+XYGoex7Hh8s9lTSW/G2vu5Hbr1LTHy3fzAvdq8MvVR12O
|
6
|
+
rk9fa+lU9vhzPc0NMB0GIDZ9GcHuhW5hD1Wg9OSCbTOkZDoH3CAFqonjh4Qfwv5W
|
7
|
+
IPAFn9KHukdqGXkwEMdErsUaPTy9A1V/aROVEaAY+HJgq/eZAkEA/BP1QMV04WEZ
|
8
|
+
Oynzz7/lLizJGGxp2AOvEVtqMoycA/Qk+zdKP8ufE0wbmCE3Qd6GoynavsHb6aGK
|
9
|
+
gQobb8zDZwJBANSK6MrXlrZTtEaeZuyOB4mAmRzGzOUVkUyULUjEx2GDT93ujAma
|
10
|
+
qm/2d3E+wXAkNSeRpjUmlQXy/2oSqnGvYbMCQQDRM+cYyEcGPUVpWpnj0shrF/QU
|
11
|
+
9vSot/X1G775EMTyaw6+BtbyNxVgOIu2J+rqGbn3c+b85XqTXOPL0A2RLYkFAkAm
|
12
|
+
syhSDtE9X55aoWsCNZY/vi+i4rvaFoQ/WleogVQAeGVpdo7/DK9t9YWoFBIqth0L
|
13
|
+
mGSYFu9ZhvZkvQNV8eYrAkBJ+rOIaLDsmbrgkeDruH+B/9yrm4McDtQ/rgnOGYnH
|
14
|
+
LjLpLLOrgUxqpzLWe++EwSLwK2//dHO+SPsQJ4xsyQJy
|
15
|
+
-----END RSA PRIVATE KEY-----
|
@@ -0,0 +1,21 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDaDCCAlCgAwIBAgIBATANBgkqhkiG9w0BAQUFADA8MQswCQYDVQQGDAJKUDES
|
3
|
+
MBAGA1UECgwJSklOLkdSLkpQMQwwCgYDVQQLDANSUlIxCzAJBgNVBAMMAkNBMB4X
|
4
|
+
DTA0MDEzMDAwNDMyN1oXDTM1MDEyMjAwNDMyN1owPzELMAkGA1UEBgwCSlAxEjAQ
|
5
|
+
BgNVBAoMCUpJTi5HUi5KUDEMMAoGA1UECwwDUlJSMQ4wDAYDVQQDDAVTdWJDQTCC
|
6
|
+
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ0Ou7AyRcRXnB/kVHv/6kwe
|
7
|
+
ANzgg/DyJfsAUqW90m7Lu1nqyug8gK0RBd77yU0w5HOAMHTVSdpjZK0g2sgx4Mb1
|
8
|
+
d/213eL9TTl5MRVEChTvQr8q5DVG/8fxPPE7fMI8eOAzd98/NOAChk+80r4Sx7fC
|
9
|
+
kGVEE1bKwY1MrUsUNjOY2d6t3M4HHV3HX1V8ShuKfsHxgCmLzdI8U+5CnQedFgkm
|
10
|
+
3e+8tr8IX5RR1wA1Ifw9VadF7OdI/bGMzog/Q8XCLf+WPFjnK7Gcx6JFtzF6Gi4x
|
11
|
+
4dp1Xl45JYiVvi9zQ132wu8A1pDHhiNgQviyzbP+UjcB/tsOpzBQF8abYzgEkWEC
|
12
|
+
AwEAAaNyMHAwDwYDVR0TAQH/BAUwAwEB/zAxBglghkgBhvhCAQ0EJBYiUnVieS9P
|
13
|
+
cGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUlCjXWLsReYzH
|
14
|
+
LzsxwVnCXmKoB/owCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCJ/OyN
|
15
|
+
rT8Cq2Y+G2yA/L1EMRvvxwFBqxavqaqHl/6rwsIBFlB3zbqGA/0oec6MAVnYynq4
|
16
|
+
c4AcHTjx3bQ/S4r2sNTZq0DH4SYbQzIobx/YW8PjQUJt8KQdKMcwwi7arHP7A/Ha
|
17
|
+
LKu8eIC2nsUBnP4NhkYSGhbmpJK+PFD0FVtD0ZIRlY/wsnaZNjWWcnWF1/FNuQ4H
|
18
|
+
ySjIblqVQkPuzebv3Ror6ZnVDukn96Mg7kP4u6zgxOeqlJGRe1M949SS9Vudjl8X
|
19
|
+
SF4aZUUB9pQGhsqQJVqaz2OlhGOp9D0q54xko/rekjAIcuDjl1mdX4F2WRrzpUmZ
|
20
|
+
uY/bPeOBYiVsOYVe
|
21
|
+
-----END CERTIFICATE-----
|
@@ -78,7 +78,20 @@ describe HTTPI do
|
|
78
78
|
end
|
79
79
|
|
80
80
|
HTTPI::Adapter::ADAPTERS.keys.each do |adapter|
|
81
|
-
|
81
|
+
if adapter == :em_http && RUBY_VERSION >= "1.9.0"
|
82
|
+
|
83
|
+
around(:each) do |example|
|
84
|
+
# Only wrap the example for the :em_http adapter
|
85
|
+
if EM.respond_to?(:synchrony)
|
86
|
+
EM.synchrony do
|
87
|
+
example.run
|
88
|
+
EM.stop
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
unless (adapter == :curb && RUBY_PLATFORM =~ /java/) || (adapter == :em_http && RUBY_VERSION =~ /1\.8/)
|
82
95
|
context "using :#{adapter}" do
|
83
96
|
let(:adapter) { adapter }
|
84
97
|
it_should_behave_like "an HTTP client"
|
@@ -88,7 +101,7 @@ describe HTTPI do
|
|
88
101
|
end
|
89
102
|
|
90
103
|
(HTTPI::Adapter::ADAPTERS.keys - [:net_http]).each do |adapter|
|
91
|
-
unless adapter == :curb && RUBY_PLATFORM =~ /java/
|
104
|
+
unless (adapter == :curb && RUBY_PLATFORM =~ /java/) || adapter == :em_http
|
92
105
|
context "using :#{adapter}" do
|
93
106
|
let(:adapter) { adapter }
|
94
107
|
it_should_behave_like "it works with HTTP digest auth"
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require "webrick/https"
|
2
|
+
require "logger"
|
3
|
+
require "cgi"
|
4
|
+
|
5
|
+
# https://github.com/asakusarb/odrk-http-client
|
6
|
+
class SSLServer < WEBrick::HTTPServer
|
7
|
+
DIR = File.dirname(__FILE__)
|
8
|
+
|
9
|
+
def initialize(host, port)
|
10
|
+
@logger = Logger.new($stderr)
|
11
|
+
@logger.level = Logger::Severity::FATAL
|
12
|
+
|
13
|
+
super(
|
14
|
+
:BindAddress => host,
|
15
|
+
:Logger => logger,
|
16
|
+
:Port => port,
|
17
|
+
:AccessLog => [],
|
18
|
+
:DocumentRoot => DIR,
|
19
|
+
:SSLEnable => true,
|
20
|
+
:SSLCACertificateFile => File.join(DIR, "fixtures", "ca.pem"),
|
21
|
+
:SSLCertificate => cert("server.cert"),
|
22
|
+
:SSLPrivateKey => key("server.key"),
|
23
|
+
:SSLVerifyClient => nil, #OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT|OpenSSL::SSL::VERIFY_PEER,
|
24
|
+
:SSLClientCA => nil,
|
25
|
+
:SSLCertName => nil
|
26
|
+
)
|
27
|
+
|
28
|
+
self.mount(
|
29
|
+
"/hello",
|
30
|
+
WEBrick::HTTPServlet::ProcHandler.new(method("do_hello").to_proc)
|
31
|
+
)
|
32
|
+
|
33
|
+
@server_thread = start_server_thread(self)
|
34
|
+
end
|
35
|
+
|
36
|
+
def shutdown
|
37
|
+
super
|
38
|
+
@server_thread.join if defined?(RUBY_ENGINE) && RUBY_ENGINE == "rbx"
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def cert(filename)
|
44
|
+
OpenSSL::X509::Certificate.new File.read(File.join(DIR, "fixtures", filename))
|
45
|
+
end
|
46
|
+
|
47
|
+
def key(filename)
|
48
|
+
OpenSSL::PKey::RSA.new File.read(File.join(DIR, "fixtures", filename))
|
49
|
+
end
|
50
|
+
|
51
|
+
def start_server_thread(server)
|
52
|
+
t = Thread.new { server.start }
|
53
|
+
|
54
|
+
while server.status != :Running
|
55
|
+
Thread.pass
|
56
|
+
unless t.alive?
|
57
|
+
t.join
|
58
|
+
raise
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
t
|
63
|
+
end
|
64
|
+
|
65
|
+
def do_hello(req, res)
|
66
|
+
res["Content-Type"] = "text/plain"
|
67
|
+
res.body = "hello ssl"
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "httpi"
|
3
|
+
require "integration/ssl_server"
|
4
|
+
|
5
|
+
describe "SSL authentication" do
|
6
|
+
|
7
|
+
before :all do
|
8
|
+
WebMock.allow_net_connect!
|
9
|
+
|
10
|
+
@host = "localhost"
|
11
|
+
@port = 17171
|
12
|
+
@ssl_port = 17172
|
13
|
+
@proxy_port = 17173
|
14
|
+
|
15
|
+
@url = "http://#{@host}:#{@port}/"
|
16
|
+
@ssl_url = "https://localhost:#{@ssl_port}/"
|
17
|
+
@ssl_fake_url = "https://127.0.0.1:#{@ssl_port}/"
|
18
|
+
@proxy_url = "http://#{@host}:#{@proxy_port}/"
|
19
|
+
|
20
|
+
@ssl_server = SSLServer.new(@host, @ssl_port)
|
21
|
+
end
|
22
|
+
|
23
|
+
def teardown
|
24
|
+
@ssl_server.shutdown if @ssl_server
|
25
|
+
end
|
26
|
+
|
27
|
+
HTTPI::Adapter::ADAPTERS.keys.each do |adapter|
|
28
|
+
context "with #{adapter}" do
|
29
|
+
|
30
|
+
if adapter == :em_http && RUBY_VERSION =~ /1\.8/
|
31
|
+
# em_http depends on fibers
|
32
|
+
elsif adapter == :curb && RUBY_PLATFORM =~ /java/
|
33
|
+
# curb does not run on jruby
|
34
|
+
elsif adapter == :em_http && RUBY_VERSION >= "1.9.0" && RUBY_PLATFORM =~ /java/
|
35
|
+
it "fails for whatever reason"
|
36
|
+
else
|
37
|
+
|
38
|
+
if adapter == :em_http && RUBY_VERSION >= "1.9.0"
|
39
|
+
# dependencies are loaded upon request, so we need to manually require this
|
40
|
+
require "em-synchrony"
|
41
|
+
|
42
|
+
around(:each) do |example|
|
43
|
+
EM.synchrony do
|
44
|
+
example.run
|
45
|
+
EM.stop
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# 105 ssl
|
51
|
+
if adapter == :httpclient || adapter == :curb
|
52
|
+
it "raises when no certificate was set up" do
|
53
|
+
expect { HTTPI.post(@ssl_url + "hello", "", adapter) }.
|
54
|
+
to raise_error(HTTPI::SSLError)
|
55
|
+
end
|
56
|
+
else
|
57
|
+
if adapter == :net_http && RUBY_VERSION >= "1.9"
|
58
|
+
it "raises in 1.9, but does not raise in 1.8"
|
59
|
+
else
|
60
|
+
it "does not raise when no certificate was set up" do
|
61
|
+
expect { HTTPI.post(@ssl_url + "hello", "", adapter) }.
|
62
|
+
to_not raise_error(HTTPI::SSLError)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# 106 ssl ca
|
68
|
+
it "works when set up properly" do
|
69
|
+
unless adapter == :em_http
|
70
|
+
ca_file = File.expand_path("../fixtures/ca_all.pem", __FILE__)
|
71
|
+
request = HTTPI::Request.new(@ssl_url + "hello")
|
72
|
+
request.auth.ssl.ca_cert_file = ca_file
|
73
|
+
|
74
|
+
response = HTTPI.get(request, adapter)
|
75
|
+
expect(response.body).to eq("hello ssl")
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# 107 ssl hostname
|
80
|
+
if adapter == :em_http
|
81
|
+
it "raises when configured for ssl client auth" do
|
82
|
+
ca_file = File.expand_path("../fixtures/ca_all.pem", __FILE__)
|
83
|
+
request = HTTPI::Request.new(@ssl_fake_url + "hello")
|
84
|
+
request.auth.ssl.ca_cert_file = ca_file
|
85
|
+
|
86
|
+
expect { HTTPI.get(request, adapter) }.
|
87
|
+
to raise_error(HTTPI::NotSupportedError, "EM-HTTP-Request does not support SSL client auth")
|
88
|
+
end
|
89
|
+
else
|
90
|
+
it "raises when the server could not be verified" do
|
91
|
+
ca_file = File.expand_path("../fixtures/ca_all.pem", __FILE__)
|
92
|
+
request = HTTPI::Request.new(@ssl_fake_url + "hello")
|
93
|
+
request.auth.ssl.ca_cert_file = ca_file
|
94
|
+
|
95
|
+
expect { HTTPI.get(request, adapter) }.to raise_error(HTTPI::SSLError)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
data/spec/support/fixture.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: httpi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: -342245774
|
5
|
+
prerelease: 6
|
6
6
|
segments:
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
- 0
|
10
|
+
- rc
|
7
11
|
- 1
|
8
|
-
|
9
|
-
- 1
|
10
|
-
version: 1.1.1
|
12
|
+
version: 2.0.0.rc1
|
11
13
|
platform: ruby
|
12
14
|
authors:
|
13
15
|
- Daniel Harrington
|
@@ -16,10 +18,11 @@ autorequire:
|
|
16
18
|
bindir: bin
|
17
19
|
cert_chain: []
|
18
20
|
|
19
|
-
date: 2012-
|
21
|
+
date: 2012-11-10 00:00:00 +01:00
|
22
|
+
default_executable:
|
20
23
|
dependencies:
|
21
24
|
- !ruby/object:Gem::Dependency
|
22
|
-
|
25
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
23
26
|
none: false
|
24
27
|
requirements:
|
25
28
|
- - ">="
|
@@ -28,104 +31,71 @@ dependencies:
|
|
28
31
|
segments:
|
29
32
|
- 0
|
30
33
|
version: "0"
|
34
|
+
version_requirements: *id001
|
31
35
|
name: rack
|
32
|
-
type: :runtime
|
33
36
|
prerelease: false
|
34
|
-
|
37
|
+
type: :runtime
|
35
38
|
- !ruby/object:Gem::Dependency
|
36
|
-
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
37
40
|
none: false
|
38
41
|
requirements:
|
39
42
|
- - ~>
|
40
43
|
- !ruby/object:Gem::Version
|
41
|
-
hash:
|
44
|
+
hash: 25
|
42
45
|
segments:
|
43
46
|
- 0
|
44
|
-
-
|
45
|
-
|
46
|
-
|
47
|
+
- 9
|
48
|
+
version: "0.9"
|
49
|
+
version_requirements: *id002
|
47
50
|
name: rake
|
48
|
-
type: :development
|
49
51
|
prerelease: false
|
50
|
-
|
52
|
+
type: :development
|
51
53
|
- !ruby/object:Gem::Dependency
|
52
|
-
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
53
55
|
none: false
|
54
56
|
requirements:
|
55
57
|
- - ~>
|
56
58
|
- !ruby/object:Gem::Version
|
57
|
-
hash:
|
59
|
+
hash: 21
|
58
60
|
segments:
|
59
61
|
- 2
|
60
|
-
-
|
61
|
-
version: "2.
|
62
|
+
- 11
|
63
|
+
version: "2.11"
|
64
|
+
version_requirements: *id003
|
62
65
|
name: rspec
|
63
|
-
type: :development
|
64
66
|
prerelease: false
|
65
|
-
|
67
|
+
type: :development
|
66
68
|
- !ruby/object:Gem::Dependency
|
67
|
-
|
69
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
68
70
|
none: false
|
69
71
|
requirements:
|
70
72
|
- - ~>
|
71
73
|
- !ruby/object:Gem::Version
|
72
|
-
hash:
|
74
|
+
hash: 19
|
73
75
|
segments:
|
74
76
|
- 0
|
75
|
-
-
|
76
|
-
|
77
|
-
|
77
|
+
- 12
|
78
|
+
version: "0.12"
|
79
|
+
version_requirements: *id004
|
78
80
|
name: mocha
|
79
|
-
type: :development
|
80
81
|
prerelease: false
|
81
|
-
|
82
|
+
type: :development
|
82
83
|
- !ruby/object:Gem::Dependency
|
83
|
-
|
84
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
84
85
|
none: false
|
85
86
|
requirements:
|
86
87
|
- - ~>
|
87
88
|
- !ruby/object:Gem::Version
|
88
|
-
hash:
|
89
|
+
hash: 31
|
89
90
|
segments:
|
90
91
|
- 1
|
91
|
-
-
|
92
|
-
|
93
|
-
|
92
|
+
- 8
|
93
|
+
version: "1.8"
|
94
|
+
version_requirements: *id005
|
94
95
|
name: webmock
|
95
|
-
type: :development
|
96
96
|
prerelease: false
|
97
|
-
requirement: *id005
|
98
|
-
- !ruby/object:Gem::Dependency
|
99
|
-
version_requirements: &id006 !ruby/object:Gem::Requirement
|
100
|
-
none: false
|
101
|
-
requirements:
|
102
|
-
- - ">="
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
hash: 3
|
105
|
-
segments:
|
106
|
-
- 0
|
107
|
-
version: "0"
|
108
|
-
name: autotest
|
109
97
|
type: :development
|
110
|
-
|
111
|
-
requirement: *id006
|
112
|
-
- !ruby/object:Gem::Dependency
|
113
|
-
version_requirements: &id007 !ruby/object:Gem::Requirement
|
114
|
-
none: false
|
115
|
-
requirements:
|
116
|
-
- - "="
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
hash: 43
|
119
|
-
segments:
|
120
|
-
- 4
|
121
|
-
- 5
|
122
|
-
- 0
|
123
|
-
version: 4.5.0
|
124
|
-
name: ZenTest
|
125
|
-
type: :development
|
126
|
-
prerelease: false
|
127
|
-
requirement: *id007
|
128
|
-
description: HTTPI provides a common interface for Ruby HTTP libraries.
|
98
|
+
description: HTTPI provides a common interface for Ruby's HTTP libraries
|
129
99
|
email: me@rubiii.com
|
130
100
|
executables: []
|
131
101
|
|
@@ -136,6 +106,7 @@ extra_rdoc_files: []
|
|
136
106
|
files:
|
137
107
|
- .gitignore
|
138
108
|
- .rspec
|
109
|
+
- .rvmrc
|
139
110
|
- .travis.yml
|
140
111
|
- CHANGELOG.md
|
141
112
|
- Gemfile
|
@@ -145,7 +116,9 @@ files:
|
|
145
116
|
- httpi.gemspec
|
146
117
|
- lib/httpi.rb
|
147
118
|
- lib/httpi/adapter.rb
|
119
|
+
- lib/httpi/adapter/base.rb
|
148
120
|
- lib/httpi/adapter/curb.rb
|
121
|
+
- lib/httpi/adapter/em_http.rb
|
149
122
|
- lib/httpi/adapter/httpclient.rb
|
150
123
|
- lib/httpi/adapter/net_http.rb
|
151
124
|
- lib/httpi/auth/config.rb
|
@@ -163,7 +136,9 @@ files:
|
|
163
136
|
- spec/fixtures/xml.xml
|
164
137
|
- spec/fixtures/xml_dime.dime
|
165
138
|
- spec/fixtures/xml_dime.xml
|
139
|
+
- spec/httpi/adapter/base_spec.rb
|
166
140
|
- spec/httpi/adapter/curb_spec.rb
|
141
|
+
- spec/httpi/adapter/em_http_spec.rb
|
167
142
|
- spec/httpi/adapter/httpclient_spec.rb
|
168
143
|
- spec/httpi/adapter/net_http_spec.rb
|
169
144
|
- spec/httpi/adapter_spec.rb
|
@@ -174,12 +149,22 @@ files:
|
|
174
149
|
- spec/httpi/httpi_spec.rb
|
175
150
|
- spec/httpi/request_spec.rb
|
176
151
|
- spec/httpi/response_spec.rb
|
152
|
+
- spec/integration/fixtures/ca.pem
|
153
|
+
- spec/integration/fixtures/ca_all.pem
|
154
|
+
- spec/integration/fixtures/htdigest
|
155
|
+
- spec/integration/fixtures/htpasswd
|
156
|
+
- spec/integration/fixtures/server.cert
|
157
|
+
- spec/integration/fixtures/server.key
|
158
|
+
- spec/integration/fixtures/subca.pem
|
177
159
|
- spec/integration/request_spec.rb
|
178
160
|
- spec/integration/server.rb
|
161
|
+
- spec/integration/ssl_server.rb
|
162
|
+
- spec/integration/ssl_spec.rb
|
179
163
|
- spec/spec_helper.rb
|
180
164
|
- spec/support/fixture.rb
|
181
165
|
- spec/support/matchers.rb
|
182
|
-
|
166
|
+
has_rdoc: true
|
167
|
+
homepage: http://github.com/savonrb/httpi
|
183
168
|
licenses: []
|
184
169
|
|
185
170
|
post_install_message:
|
@@ -199,18 +184,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
199
184
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
200
185
|
none: false
|
201
186
|
requirements:
|
202
|
-
- - "
|
187
|
+
- - ">"
|
203
188
|
- !ruby/object:Gem::Version
|
204
|
-
hash:
|
189
|
+
hash: 25
|
205
190
|
segments:
|
206
|
-
-
|
207
|
-
|
191
|
+
- 1
|
192
|
+
- 3
|
193
|
+
- 1
|
194
|
+
version: 1.3.1
|
208
195
|
requirements: []
|
209
196
|
|
210
197
|
rubyforge_project: httpi
|
211
|
-
rubygems_version: 1.
|
198
|
+
rubygems_version: 1.6.2
|
212
199
|
signing_key:
|
213
200
|
specification_version: 3
|
214
|
-
summary:
|
201
|
+
summary: Common interface for Ruby's HTTP libraries
|
215
202
|
test_files: []
|
216
203
|
|