httpi 1.1.1 → 2.0.0.rc1

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/.gitignore CHANGED
@@ -7,3 +7,5 @@ tmp
7
7
  *.gem
8
8
  .bundle
9
9
  Gemfile.lock
10
+ .idea/*
11
+ .rbx/
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm 1.9.3@httpi --create
data/CHANGELOG.md CHANGED
@@ -1,6 +1,31 @@
1
+ ## 2.0.0.rc1
2
+
3
+ * Feature: [#63](https://github.com/savonrb/httpi/pull/63) adds support for
4
+ EventMachine::HttpRequest. Additional information at [#40](https://github.com/savonrb/httpi/pull/40).
5
+
6
+ * Feature: Added support for custom HTTP methods to clients supporting this feature.
7
+ It's limited to the `:httpclient` and `:em_http` adapter.
8
+
9
+ ``` ruby
10
+ HTTPI.request(:custom, request)
11
+ ```
12
+
13
+ * Improvement: [#64](https://github.com/savonrb/httpi/pull/64) adds support for
14
+ specifying the SSL version to use.
15
+
16
+ * Improvement: Log to `$stdout` (instead of `STDOUT`) using a default log level of
17
+ `:debug` (instead of `:warn`).
18
+
19
+ * Improvement: In case an adapter doesn't support a general feature, we now raise
20
+ an `HTTPI::NotSupportedError`.
21
+
22
+ * Improvement: Added support for adding custom adapters.
23
+
24
+ * Refactoring: Simplified the adapter interface.
25
+
1
26
  ## 1.1.1 (2012-07-01)
2
27
 
3
- * Fix: [#56](https://github.com/rubiii/httpi/pull/56) ensures that the "Cookie"
28
+ * Fix: [#56](https://github.com/savonrb/httpi/pull/56) ensures that the "Cookie"
4
29
  header is not set to nil.
5
30
 
6
31
  ## 1.1.0 (2012-06-26)
@@ -10,15 +35,15 @@
10
35
 
11
36
  ## 1.0.0 (2012-06-07)
12
37
 
13
- * Feature: [#48](https://github.com/rubiii/httpi/pull/48) @jheiss added support
38
+ * Feature: [#48](https://github.com/savonrb/httpi/pull/48) @jheiss added support
14
39
  for HTTP Negotiate/SPNEGO authentication (curb-specific).
15
40
 
16
- * Fix: [#53](https://github.com/rubiii/httpi/issues/53) fixed an issue where
41
+ * Fix: [#53](https://github.com/savonrb/httpi/issues/53) fixed an issue where
17
42
  `HTTPI.log_level` did not do anything at all.
18
43
 
19
44
  ## 0.9.7 (2012-04-26)
20
45
 
21
- * Fix: Merged [pull request 49](https://github.com/rubiii/httpi/pull/49) so that cert
46
+ * Fix: Merged [pull request 49](https://github.com/savonrb/httpi/pull/49) so that cert
22
47
  and cert_key can be manually set.
23
48
 
24
49
  * Fix: Stop auto-detecting gzipped responses by inspecting the response body to allow
@@ -26,22 +51,22 @@
26
51
 
27
52
  ## 0.9.6 (2012-02-23)
28
53
 
29
- * Feature: Merged [pull request 46](https://github.com/rubiii/httpi/pull/46) to support
30
- request body Hashes. Fixes [issue 45](https://github.com/rubiii/httpi/issues/45).
54
+ * Feature: Merged [pull request 46](https://github.com/savonrb/httpi/pull/46) to support
55
+ request body Hashes. Fixes [issue 45](https://github.com/savonrb/httpi/issues/45).
31
56
 
32
57
  ``` ruby
33
58
  request.body = { :foo => :bar, :baz => :foo } # => "foo=bar&baz=foo"
34
59
  ```
35
60
 
36
- * Feature: Merged [pull request 43](https://github.com/rubiii/httpi/pull/43) to allow
61
+ * Feature: Merged [pull request 43](https://github.com/savonrb/httpi/pull/43) to allow
37
62
  proxy authentication with net/http.
38
63
 
39
- * Feature: Merged [pull request 42](https://github.com/rubiii/httpi/pull/42) which sets up
64
+ * Feature: Merged [pull request 42](https://github.com/savonrb/httpi/pull/42) which sets up
40
65
  HTTP basic authentication if user information is present in the URL.
41
66
 
42
- * Fix: Merged [pull request 44](https://github.com/rubiii/httpi/pull/44) to fix
43
- [issue 26](https://github.com/rubiii/httpi/issues/26) and probably also
44
- [issue 32](https://github.com/rubiii/httpi/issues/32) - SSL client authentication.
67
+ * Fix: Merged [pull request 44](https://github.com/savonrb/httpi/pull/44) to fix
68
+ [issue 26](https://github.com/savonrb/httpi/issues/26) and probably also
69
+ [issue 32](https://github.com/savonrb/httpi/issues/32) - SSL client authentication.
45
70
 
46
71
  ## 0.9.5 (2011-06-30)
47
72
 
@@ -51,8 +76,8 @@
51
76
 
52
77
  ## 0.9.4 (2011-05-15)
53
78
 
54
- * Fix: issues [34](https://github.com/rubiii/httpi/issues/34) and
55
- [29](https://github.com/rubiii/httpi/issues/29) - replaced the dependency
79
+ * Fix: issues [34](https://github.com/savonrb/httpi/issues/34) and
80
+ [29](https://github.com/savonrb/httpi/issues/29) - replaced the dependency
56
81
  on `ntlm-http` with a dependency on `pyu-ntlm-http` which comes with quite
57
82
  a few bugfixes.
58
83
 
@@ -64,22 +89,22 @@
64
89
 
65
90
  ## 0.9.3 (2011-04-28)
66
91
 
67
- * Fix: [issue 31](https://github.com/rubiii/httpi/issues/31) missing headers when using httpclient.
92
+ * Fix: [issue 31](https://github.com/savonrb/httpi/issues/31) missing headers when using httpclient.
68
93
 
69
- * Fix: [issue 30](https://github.com/rubiii/httpi/issues/30) fix for using SSL with Net::HTTP.
94
+ * Fix: [issue 30](https://github.com/savonrb/httpi/issues/30) fix for using SSL with Net::HTTP.
70
95
 
71
96
  ## 0.9.2 (2011-04-05)
72
97
 
73
- * Fix: issues [161](https://github.com/rubiii/savon/issues/161) and [165](https://github.com/rubiii/savon/issues/165)
74
- reported at [rubiii/savon](https://github.com/rubiii/savon).
98
+ * Fix: issues [161](https://github.com/savonrb/savon/issues/161) and [165](https://github.com/savonrb/savon/issues/165)
99
+ reported at [savonrb/savon](https://github.com/savonrb/savon).
75
100
 
76
101
  ## 0.9.1 (2011-04-04)
77
102
 
78
- * Fix: [issue 25](https://github.com/rubiii/httpi/issues/22) problem with HTTPI using the Net::HTTP adapter [hakanensari].
103
+ * Fix: [issue 25](https://github.com/savonrb/httpi/issues/22) problem with HTTPI using the Net::HTTP adapter [hakanensari].
79
104
 
80
105
  ## 0.9.0 (2011-03-08)
81
106
 
82
- * Feature: improved the adapter loading process ([d4a091](https://github.com/rubiii/httpi/commit/d4a091)) [rubiii].
107
+ * Feature: improved the adapter loading process ([d4a091](https://github.com/savonrb/httpi/commit/d4a091)) [rubiii].
83
108
 
84
109
  Instead of using HTTPClient as the default and falling back to NetHTTP, the loading process now does the following:
85
110
 
@@ -91,21 +116,21 @@
91
116
 
92
117
  Of course you can still manually specify the adapter to use.
93
118
 
94
- * Fix: [issue 22](https://github.com/rubiii/httpi/issues/22) argument error on logging adapter warning [rubiii].
119
+ * Fix: [issue 22](https://github.com/savonrb/httpi/issues/22) argument error on logging adapter warning [rubiii].
95
120
 
96
- * Fix: [issue 23](https://github.com/rubiii/httpi/issues/23) the HTTPI.log method now works as expected [rubiii].
121
+ * Fix: [issue 23](https://github.com/savonrb/httpi/issues/23) the HTTPI.log method now works as expected [rubiii].
97
122
 
98
123
  ## 0.8.0 (2011-03-07)
99
124
 
100
- * Feature: added support for NTLM authentication ([96ceb1](https://github.com/rubiii/httpi/commit/96ceb1)) [MattHall].
125
+ * Feature: added support for NTLM authentication ([96ceb1](https://github.com/savonrb/httpi/commit/96ceb1)) [MattHall].
101
126
 
102
127
  You should now be able to use NTLM authentication by specifying your credentials via `HTTPI::Auth::Config#ntlm`:
103
128
 
104
129
  request = HTTPI::Request.new
105
130
  request.auth.ntlm "username", "password"
106
131
 
107
- * Improvement: changed the default log level to :warn ([d01591](https://github.com/rubiii/httpi/commit/d01591))
108
- and log at appropriate levels ([21ee1b](https://github.com/rubiii/httpi/commit/21ee1b)) [ichverstehe].
132
+ * Improvement: changed the default log level to :warn ([d01591](https://github.com/savonrb/httpi/commit/d01591))
133
+ and log at appropriate levels ([21ee1b](https://github.com/savonrb/httpi/commit/21ee1b)) [ichverstehe].
109
134
 
110
- * Fix: [issue 18](https://github.com/rubiii/httpi/issues/18) don't mask exceptions in decoded_gzip_body
111
- ([f3811b](https://github.com/rubiii/httpi/commit/f3811b)) [fj].
135
+ * Fix: [issue 18](https://github.com/savonrb/httpi/issues/18) don't mask exceptions in decoded_gzip_body
136
+ ([f3811b](https://github.com/savonrb/httpi/commit/f3811b)) [fj].
data/Gemfile CHANGED
@@ -1,9 +1,11 @@
1
1
  source :rubygems
2
2
  gemspec
3
3
 
4
- gem "jruby-openssl", :platforms => :jruby
4
+ gem "jruby-openssl", :platforms => :jruby
5
5
 
6
6
  # http clients
7
- gem "httpclient", "~> 2.1.7"
8
- gem "curb", "~> 0.7.8", :platforms => :ruby
9
- gem "mock-server", :git => "https://github.com/djanowski/mock-server.git"
7
+ gem "mock-server", :git => "https://github.com/djanowski/mock-server.git"
8
+ gem "httpclient", "~> 2.3", :require => false
9
+ gem "curb", "~> 0.8", :require => false, :platforms => :ruby
10
+ gem 'em-http-request', :require => false, :platforms => [:ruby, :jruby]
11
+ gem 'em-synchrony', :require => false, :platforms => [:ruby, :jruby]
data/README.md CHANGED
@@ -1,9 +1,10 @@
1
- HTTPI [![Build Status](https://secure.travis-ci.org/rubiii/httpi.png)](http://travis-ci.org/rubiii/httpi)
1
+ HTTPI [![Build Status](https://secure.travis-ci.org/savonrb/httpi.png)](http://travis-ci.org/savonrb/httpi)
2
2
  =====
3
3
 
4
- HTTPI provides a common interface for Ruby HTTP libraries.
4
+ HTTPI provides a common interface for Ruby's HTTP libraries.
5
5
 
6
- [Bugs](http://github.com/rubiii/httpi/issues) | [RDoc](http://rubydoc.info/gems/httpi/frames)
6
+ [Documentation](http://httpirb.com) | [RDoc](http://rubydoc.info/gems/httpi) |
7
+ [Mailing list](https://groups.google.com/forum/#!forum/httpirb)
7
8
 
8
9
  Installation
9
10
  ------------
@@ -15,217 +16,30 @@ $ gem install httpi
15
16
  ```
16
17
 
17
18
 
18
- Getting started
19
- ---------------
20
-
21
- In order to provide a common interface, HTTPI provides the `HTTPI::Request` object for you to
22
- configure your request. Here's a very simple GET request.
19
+ Introduction
20
+ ------------
23
21
 
24
22
  ``` ruby
25
- request = HTTPI::Request.new("http://example.com")
26
- HTTPI.get request
27
- ```
28
-
29
- To execute a POST request, you may want to specify a payload.
23
+ require "httpi"
30
24
 
31
- ``` ruby
25
+ # create a request object
32
26
  request = HTTPI::Request.new
33
- request.url = "http://post.example.com"
34
- request.body = "some data"
35
-
36
- HTTPI.post request
37
- ```
38
-
39
-
40
- HTTPI
41
- -----
42
-
43
- The `HTTPI` module uses one of the available adapters to execute HTTP requests.
44
-
45
- #### GET
46
-
47
- ``` ruby
48
- HTTPI.get(request, adapter = nil)
49
- HTTPI.get(url, adapter = nil)
50
- ```
51
-
52
- #### POST
53
-
54
- ``` ruby
55
- HTTPI.post(request, adapter = nil)
56
- HTTPI.post(url, body, adapter = nil)
57
- ```
58
-
59
- #### HEAD
60
-
61
- ``` ruby
62
- HTTPI.head(request, adapter = nil)
63
- HTTPI.head(url, adapter = nil)
64
- ```
65
-
66
- #### PUT
67
-
68
- ``` ruby
69
- HTTPI.put(request, adapter = nil)
70
- HTTPI.put(url, body, adapter = nil)
71
- ```
72
-
73
- #### DELETE
74
-
75
- ``` ruby
76
- HTTPI.delete(request, adapter = nil)
77
- HTTPI.delete(url, adapter = nil)
78
- ```
79
-
80
- #### Notice
81
-
82
- * You can specify the adapter to use per request
83
- * And request methods always return an `HTTPI::Response`
84
-
85
- #### More control
86
-
87
- If you need more control over the request, you can access the HTTP client instance
88
- represented by your adapter in a block:
89
-
90
- ``` ruby
91
- HTTPI.post request do |http|
92
- http.use_ssl = true # Curb example
93
- end
94
- ```
95
-
96
-
97
- HTTPI::Adapter
98
- --------------
99
-
100
- HTTPI uses adapters to support multiple HTTP libraries.
101
- It currently contains adapters for:
102
-
103
- * [httpclient](http://rubygems.org/gems/httpclient) ~> 2.1.5
104
- * [curb](http://rubygems.org/gems/curb) ~> 0.7.8
105
- * [net/http](http://ruby-doc.org/stdlib/libdoc/net/http/rdoc)
106
-
107
- You can manually specify the adapter to use via:
108
-
109
- ``` ruby
110
- HTTPI.adapter = :curb # or one of [:httpclient, :net_http]
111
- ```
112
-
113
- If you don't specify which adapter to use, HTTPI will try to load HTTPClient, then Curb and finally NetHTTP.
114
-
115
- #### Notice
116
-
117
- HTTPI does not force you to install any of these libraries. If you'd like to use on of the more advanced
118
- libraries (HTTPClient or Curb), you have to make sure they're in your LOAD_PATH. HTTPI will then load the
119
- library when executing HTTP requests.
120
-
121
-
122
- HTTPI::Request
123
- --------------
124
-
125
- #### URL
126
-
127
- ``` ruby
128
27
  request.url = "http://example.com"
129
- request.url # => #<URI::HTTP:0x101c1ab18 URL:http://example.com>
130
- ```
131
28
 
132
- #### Proxy
133
-
134
- ``` ruby
135
- request.proxy = "http://example.com"
136
- request.proxy # => #<URI::HTTP:0x101c1ab18 URL:http://example.com>
137
- ```
29
+ # and pass it to a request method
30
+ HTTPI.get(request)
138
31
 
139
- #### Headers
32
+ # use a specific adapter per request
33
+ HTTPI.get(request, :curb)
140
34
 
141
- ``` ruby
142
- request.headers["Accept-Charset"] = "utf-8"
143
- request.headers = { "Accept-Charset" => "utf-8" }
144
- request.headers # => { "Accept-Charset" => "utf-8" }
145
- ```
146
-
147
- #### Body
148
-
149
- ``` ruby
150
- request.body = "some data"
151
- request.body # => "some data"
152
- ```
35
+ # or specify a global adapter to use
36
+ HTTPI.adapter = :httpclient
153
37
 
154
- #### Open timeout
155
-
156
- ``` ruby
157
- request.open_timeout = 30 # sec
158
- ```
159
-
160
- #### Read timeout
161
-
162
- ``` ruby
163
- request.read_timeout = 30 # sec
164
- ```
165
-
166
-
167
- HTTPI::Auth
168
- -----------
169
-
170
- `HTTPI::Auth` supports HTTP basic, digest and Negotiate/SPNEGO authentication.
171
-
172
- ``` ruby
173
- request.auth.basic("username", "password") # HTTP basic auth credentials
174
- request.auth.digest("username", "password") # HTTP digest auth credentials
175
- request.auth.gssnegotiate # HTTP Negotiate/SPNEGO (aka Kerberos)
38
+ # and execute arbitary requests
39
+ HTTPI.request(:custom, request)
176
40
  ```
177
41
 
178
- HTTP Negotiate only works when using Curb.
42
+ Documentation
43
+ -------------
179
44
 
180
- For experimental NTLM authentication, please use the [httpi-ntlm](rubygems.org/gems/httpi-ntml)
181
- gem and provide feedback.
182
-
183
- ``` ruby
184
- request.auth.ntlm("username", "password") # NTLM auth credentials
185
- ```
186
-
187
- HTTPI::Auth::SSL
188
- ----------------
189
-
190
- `HTTPI::Auth::SSL` manages SSL client authentication.
191
-
192
- ``` ruby
193
- request.auth.ssl.cert_key_file = "client_key.pem" # the private key file to use
194
- request.auth.ssl.cert_key_password = "C3rtP@ssw0rd" # the key file's password
195
- request.auth.ssl.cert_file = "client_cert.pem" # the certificate file to use
196
- request.auth.ssl.ca_cert_file = "ca_cert.pem" # the ca certificate file to use
197
- request.auth.ssl.verify_mode = :none # or one of [:peer, :fail_if_no_peer_cert, :client_once]
198
- ```
199
-
200
-
201
- HTTPI::Response
202
- ---------------
203
-
204
- Every request returns an `HTTPI::Response`. It contains the response code, headers and body.
205
-
206
- ``` ruby
207
- response = HTTPI.get request
208
-
209
- response.code # => 200
210
- response.headers # => { "Content-Encoding" => "gzip" }
211
- response.body # => "<!DOCTYPE HTML PUBLIC ...>"
212
- ```
213
-
214
- The `response.body` handles gzipped and [DIME](http://en.wikipedia.org/wiki/Direct_Internet_Message_Encapsulation) encoded responses.
215
-
216
- #### TODO
217
-
218
- * Return the original `HTTPI::Request` for debugging purposes
219
- * Return the time it took to execute the request
220
-
221
-
222
- Logging
223
- -------
224
-
225
- HTTPI by default logs each HTTP request to STDOUT using a log level of :debug.
226
-
227
- ``` ruby
228
- HTTPI.log = false # disable logging
229
- HTTPI.logger = MyLogger # change the logger
230
- HTTPI.log_level = :info # change the log level
231
- ```
45
+ Continue reading at [httpirb.com](http://httpirb.com)
data/httpi.gemspec CHANGED
@@ -8,21 +8,18 @@ Gem::Specification.new do |s|
8
8
  s.version = HTTPI::VERSION
9
9
  s.authors = ["Daniel Harrington", "Martin Tepper"]
10
10
  s.email = "me@rubiii.com"
11
- s.homepage = "http://github.com/rubiii/#{s.name}"
12
- s.summary = "Interface for Ruby HTTP libraries"
13
- s.description = "HTTPI provides a common interface for Ruby HTTP libraries."
11
+ s.homepage = "http://github.com/savonrb/#{s.name}"
12
+ s.summary = "Common interface for Ruby's HTTP libraries"
13
+ s.description = "HTTPI provides a common interface for Ruby's HTTP libraries"
14
14
 
15
15
  s.rubyforge_project = s.name
16
16
 
17
17
  s.add_dependency "rack"
18
18
 
19
- s.add_development_dependency "rake", "~> 0.8.7"
20
- s.add_development_dependency "rspec", "~> 2.7"
21
- s.add_development_dependency "mocha", "~> 0.9.9"
22
- s.add_development_dependency "webmock", "~> 1.4.0"
23
-
24
- s.add_development_dependency "autotest"
25
- s.add_development_dependency "ZenTest", "4.5.0"
19
+ s.add_development_dependency "rake", "~> 0.9"
20
+ s.add_development_dependency "rspec", "~> 2.11"
21
+ s.add_development_dependency "mocha", "~> 0.12"
22
+ s.add_development_dependency "webmock", "~> 1.8"
26
23
 
27
24
  s.files = `git ls-files`.split("\n")
28
25
  s.require_path = "lib"