httpi 0.8.0 → 0.9.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.
@@ -0,0 +1,32 @@
1
+ ## 0.9.0 (2011-03-08)
2
+
3
+ * Feature: improved the adapter loading process ([d4a091](https://github.com/rubiii/savon/commit/d4a091)) [rubiii].
4
+
5
+ Instead of using HTTPClient as the default and falling back to NetHTTP, the loading process now does the following:
6
+
7
+ 1. Check if either HTTPClient, Curb or NetHTTP are already defined.
8
+ If any one of those is defined, use it.
9
+
10
+ 2. Try to require HTTPClient, Curb and NetHTTP at last.
11
+ If any one of those can be required, use it.
12
+
13
+ Of course you can still manually specify the adapter to use.
14
+
15
+ * Fix: [issue 22](https://github.com/rubiii/httpi/issues/22) argument error on logging adapter warning [rubiii].
16
+
17
+ * Fix: [issue 23](https://github.com/rubiii/httpi/issues/23) the HTTPI.log method now works as expected [rubiii].
18
+
19
+ ## 0.8.0 (2011-03-07)
20
+
21
+ * Feature: added support for NTLM authentication ([96ceb1](https://github.com/rubiii/savon/commit/96ceb1)) [MattHall].
22
+
23
+ You should now be able to use NTLM authentication by specifying your credentials via `HTTPI::Auth::Config#ntlm`:
24
+
25
+ request = HTTPI::Request.new
26
+ request.auth.ntlm "username", "password"
27
+
28
+ * Improvement: changed the default log level to :warn ([d01591](https://github.com/rubiii/savon/commit/d01591))
29
+ and log at appropriate levels ([21ee1b](https://github.com/rubiii/savon/commit/21ee1b)) [ichverstehe].
30
+
31
+ * Fix: [issue 18](https://github.com/rubiii/httpi/issues/18) don't mask exceptions in decoded_gzip_body
32
+ ([f3811b](https://github.com/rubiii/savon/commit/f3811b)) [fj].
@@ -24,7 +24,7 @@ require "httpi/adapter"
24
24
  # request = HTTPI::Request.new
25
25
  # request.url = "http://example.com"
26
26
  # request.body = "<some>xml</some>"
27
- #
27
+ #
28
28
  # HTTPI.post request, :httpclient
29
29
  #
30
30
  # === Shortcuts
@@ -45,7 +45,7 @@ require "httpi/adapter"
45
45
  # request = HTTPI::Request.new
46
46
  # request.url = "http://example.com"
47
47
  # request.body = "<some>xml</some>"
48
- #
48
+ #
49
49
  # HTTPI.put request, :httpclient
50
50
  #
51
51
  # === Shortcuts
@@ -80,7 +80,7 @@ module HTTPI
80
80
  # Executes an HTTP GET request.
81
81
  def get(request, adapter = nil)
82
82
  request = Request.new :url => request if request.kind_of? String
83
-
83
+
84
84
  with_adapter :get, request, adapter do |adapter|
85
85
  yield adapter.client if block_given?
86
86
  adapter.get request
@@ -90,7 +90,7 @@ module HTTPI
90
90
  # Executes an HTTP POST request.
91
91
  def post(*args)
92
92
  request, adapter = request_and_adapter_from(args)
93
-
93
+
94
94
  with_adapter :post, request, adapter do |adapter|
95
95
  yield adapter.client if block_given?
96
96
  adapter.post request
@@ -100,7 +100,7 @@ module HTTPI
100
100
  # Executes an HTTP HEAD request.
101
101
  def head(request, adapter = nil)
102
102
  request = Request.new :url => request if request.kind_of? String
103
-
103
+
104
104
  with_adapter :head, request, adapter do |adapter|
105
105
  yield adapter.client if block_given?
106
106
  adapter.head request
@@ -110,7 +110,7 @@ module HTTPI
110
110
  # Executes an HTTP PUT request.
111
111
  def put(*args)
112
112
  request, adapter = request_and_adapter_from(args)
113
-
113
+
114
114
  with_adapter :put, request, adapter do |adapter|
115
115
  yield adapter.client if block_given?
116
116
  adapter.put request
@@ -120,7 +120,7 @@ module HTTPI
120
120
  # Executes an HTTP DELETE request.
121
121
  def delete(request, adapter = nil)
122
122
  request = Request.new :url => request if request.kind_of? String
123
-
123
+
124
124
  with_adapter :delete, request, adapter do |adapter|
125
125
  yield adapter.client if block_given?
126
126
  adapter.delete request
@@ -159,7 +159,8 @@ module HTTPI
159
159
 
160
160
  # Logs given +messages+.
161
161
  def log(*messages)
162
- logger.send log_level, messages.join(" ") if log?
162
+ level = Symbol === messages.first ? messages.shift : log_level
163
+ logger.send level, messages.join(" ") if log?
163
164
  end
164
165
 
165
166
  # Reset the default config.
@@ -182,10 +183,9 @@ module HTTPI
182
183
  # Expects a request +method+, a +request+ and an +adapter+ (defaults to
183
184
  # <tt>Adapter.use</tt>) and yields an instance of the adapter to a given block.
184
185
  def with_adapter(method, request, adapter)
185
- adapter ||= Adapter.use
186
- adapter, adapter_class = Adapter.find adapter
187
-
188
- HTTPI.logger.debug "HTTPI executes HTTP #{method.to_s.upcase} using the #{adapter} adapter"
186
+ adapter, adapter_class = Adapter.load adapter
187
+
188
+ log :debug, "HTTPI executes HTTP #{method.to_s.upcase} using the #{adapter} adapter"
189
189
  yield adapter_class.new(request)
190
190
  end
191
191
 
@@ -13,56 +13,55 @@ module HTTPI
13
13
  # * net/http
14
14
  module Adapter
15
15
 
16
- # The default adapter.
17
- DEFAULT = :httpclient
16
+ ADAPTERS = {
17
+ :httpclient => HTTPClient,
18
+ :curb => Curb,
19
+ :net_http => NetHTTP
20
+ }
18
21
 
19
- # The fallback (worst-choice) adapter.
20
- FALLBACK = :net_http
22
+ DEPENDENCIES = [
23
+ [:httpclient, ["httpclient"]],
24
+ [:curb, ["curb"]],
25
+ [:net_http, ["net/https", "net/ntlm_http"]]
26
+ ]
21
27
 
22
- # Returns the adapter to use. Defaults to <tt>HTTPI::Adapter::DEFAULT</tt>.
23
- def self.use
24
- @use ||= DEFAULT
25
- end
28
+ class << self
26
29
 
27
- # Sets the +adapter+ to use. Raises an +ArgumentError+ unless the +adapter+ exists.
28
- def self.use=(adapter)
29
- validate_adapter! adapter
30
- @use = adapter
31
- end
30
+ def use=(adapter)
31
+ @adapter = adapter.nil? ? nil : validate_adapter!(adapter)
32
+ end
32
33
 
33
- # Returns a memoized +Hash+ of adapters.
34
- def self.adapters
35
- @adapters ||= {
36
- :httpclient => { :class => HTTPClient, :require => ["httpclient"] },
37
- :curb => { :class => Curb, :require => ["curb"] },
38
- :net_http => { :class => NetHTTP, :require => ["net/https", "net/ntlm_http"] }
39
- }
40
- end
34
+ def use
35
+ @adapter ||= default_adapter
36
+ end
41
37
 
42
- # Returns an +adapter+. Raises an +ArgumentError+ unless the +adapter+ exists.
43
- def self.find(adapter)
44
- validate_adapter! adapter
45
- load_adapter adapter
46
- end
38
+ def load(adapter = nil)
39
+ adapter = adapter ? validate_adapter!(adapter) : use
40
+ [adapter, ADAPTERS[adapter]]
41
+ end
47
42
 
48
- private
43
+ private
49
44
 
50
- # Raises an +ArgumentError+ unless the +adapter+ exists.
51
- def self.validate_adapter!(adapter)
52
- raise ArgumentError, "Invalid HTTPI adapter: #{adapter}" unless adapters[adapter]
53
- end
45
+ def validate_adapter!(adapter)
46
+ raise ArgumentError, "Invalid HTTPI adapter: #{adapter}" unless ADAPTERS[adapter]
47
+ adapter
48
+ end
54
49
 
55
- # Tries to load and return the given +adapter+ name and class and falls back to the +FALLBACK+ adapter.
56
- def self.load_adapter(adapter)
57
- adapters[adapter][:require].each { |dependency| require dependency }
58
- [adapter, adapters[adapter][:class]]
59
- rescue LoadError
60
- HTTPI.logger.warn "HTTPI tried to use the #{adapter} adapter, but was unable to find the library in the LOAD_PATH.",
61
- "Falling back to using the #{FALLBACK} adapter now."
50
+ def default_adapter
51
+ return :httpclient if defined?(::HTTPClient)
52
+ return :curb if defined?(::Curl::Easy)
53
+ return :net_http if defined?(::NetHTTP)
62
54
 
63
- require adapters[FALLBACK][:require]
64
- [FALLBACK, adapters[FALLBACK][:class]]
65
- end
55
+ DEPENDENCIES.each do |(adapter, dependencies)|
56
+ begin
57
+ dependencies.each { |dependency| require dependency }
58
+ return adapter
59
+ rescue LoadError
60
+ next
61
+ end
62
+ end
63
+ end
66
64
 
65
+ end
67
66
  end
68
67
  end
@@ -1,5 +1,5 @@
1
1
  module HTTPI
2
2
 
3
- VERSION = "0.8.0"
3
+ VERSION = "0.9.0"
4
4
 
5
5
  end
@@ -1,68 +1,40 @@
1
1
  require "spec_helper"
2
2
  require "httpi/adapter"
3
3
 
4
+
4
5
  describe HTTPI::Adapter do
5
6
  let(:adapter) { HTTPI::Adapter }
6
7
 
7
8
  describe ".use" do
8
- it "should default to HTTPClient" do
9
- adapter.use.should == :httpclient
10
- end
11
-
12
- it "should accept an adapter to use" do
9
+ it "should set the adapter to use" do
10
+ adapter.use.should_not == :curb
11
+
13
12
  adapter.use = :curb
14
13
  adapter.use.should == :curb
15
-
16
- # reset to default
17
- adapter.use = HTTPI::Adapter::DEFAULT
18
- end
19
14
 
20
- it "should raise an ArgumentError in case of an invalid adapter" do
21
- lambda { adapter.use = :unknown }.should raise_error(ArgumentError)
15
+ adapter.use = nil # reset
22
16
  end
23
- end
24
17
 
25
- describe ".adapters" do
26
- it "should return a Hash of adapter details" do
27
- adapter.adapters.should == {
28
- :httpclient => { :class => HTTPI::Adapter::HTTPClient, :require => "httpclient" },
29
- :curb => { :class => HTTPI::Adapter::Curb, :require => "curb" },
30
- :net_http => { :class => HTTPI::Adapter::NetHTTP, :require => "net/https" }
31
- }
18
+ it "should default to use the HTTPClient adapter" do
19
+ adapter.use.should == :httpclient
32
20
  end
33
21
 
34
- it "should return a memoized Hash" do
35
- adapter.adapters.should equal(adapter.adapters)
22
+ it "should raise an ArgumentError in case of an invalid adapter" do
23
+ lambda { adapter.use = :unknown }.should raise_error(ArgumentError)
36
24
  end
37
25
  end
38
26
 
39
- describe ".find" do
40
- it "should return the adapter name and class for a given Symbol" do
41
- adapter.find(:httpclient).should == [:httpclient, HTTPI::Adapter::HTTPClient]
27
+ describe ".load" do
28
+ it "should return the adapter name and it's class for a given adapter" do
29
+ adapter.load(:curb).should == [:curb, HTTPI::Adapter::Curb]
42
30
  end
43
31
 
44
- it "should raise an ArgumentError in case of an invalid adapter" do
45
- lambda { adapter.find :unknown }.should raise_error(ArgumentError)
32
+ it "should return the HTTPClient adapter name and it's class by default" do
33
+ adapter.load.should == [:httpclient, HTTPI::Adapter::HTTPClient]
46
34
  end
47
35
 
48
- context "when the given adapter could not be found" do
49
- before do
50
- adapter.expects(:require).with("httpclient").raises(LoadError)
51
- adapter.expects(:require).with(HTTPI::Adapter.adapters[HTTPI::Adapter::FALLBACK][:require])
52
- end
53
-
54
- it "should fall back to use the HTTPI::Adapter::FALLBACK adapter" do
55
- adapter.find :httpclient
56
- end
57
-
58
- it "should log that the adapter to use could not be required" do
59
- HTTPI.expects(:log).with(
60
- "HTTPI tried to use the httpclient adapter, but was unable to find the library in the LOAD_PATH.",
61
- "Falling back to using the #{HTTPI::Adapter::FALLBACK} adapter now."
62
- )
63
-
64
- adapter.find :httpclient
65
- end
36
+ it "should raise an ArgumentError in case of an invalid adapter" do
37
+ lambda { adapter.use = :unknown }.should raise_error(ArgumentError)
66
38
  end
67
39
  end
68
40
 
@@ -3,14 +3,14 @@ require "httpi"
3
3
 
4
4
  describe HTTPI do
5
5
  let(:client) { HTTPI }
6
- let(:default_adapter) { HTTPI::Adapter.find(HTTPI::Adapter.use)[1] }
7
- let(:curb) { HTTPI::Adapter.find(:curb)[1] }
6
+ let(:httpclient) { HTTPI::Adapter.load(:httpclient)[1] }
7
+ let(:curb) { HTTPI::Adapter.load(:curb)[1] }
8
8
 
9
9
  describe ".get(request)" do
10
10
  it "should execute an HTTP GET request using the default adapter" do
11
11
  request = HTTPI::Request.new
12
- default_adapter.any_instance.expects(:get).with(request)
13
-
12
+ httpclient.any_instance.expects(:get).with(request)
13
+
14
14
  client.get request
15
15
  end
16
16
  end
@@ -19,7 +19,7 @@ describe HTTPI do
19
19
  it "should execute an HTTP GET request using the given adapter" do
20
20
  request = HTTPI::Request.new
21
21
  curb.any_instance.expects(:get).with(request)
22
-
22
+
23
23
  client.get request, :curb
24
24
  end
25
25
  end
@@ -27,8 +27,8 @@ describe HTTPI do
27
27
  describe ".get(url)" do
28
28
  it "should execute an HTTP GET request using the default adapter" do
29
29
  HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
30
- default_adapter.any_instance.expects(:get).with(instance_of(HTTPI::Request))
31
-
30
+ httpclient.any_instance.expects(:get).with(instance_of(HTTPI::Request))
31
+
32
32
  client.get "http://example.com"
33
33
  end
34
34
  end
@@ -37,7 +37,7 @@ describe HTTPI do
37
37
  it "should execute an HTTP GET request using the given adapter" do
38
38
  HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
39
39
  curb.any_instance.expects(:get).with(instance_of(HTTPI::Request))
40
-
40
+
41
41
  client.get "http://example.com", :curb
42
42
  end
43
43
  end
@@ -45,8 +45,8 @@ describe HTTPI do
45
45
  describe ".post(request)" do
46
46
  it "should execute an HTTP POST request using the default adapter" do
47
47
  request = HTTPI::Request.new
48
- default_adapter.any_instance.expects(:post).with(request)
49
-
48
+ httpclient.any_instance.expects(:post).with(request)
49
+
50
50
  client.post request
51
51
  end
52
52
  end
@@ -55,7 +55,7 @@ describe HTTPI do
55
55
  it "should execute an HTTP POST request using the given adapter" do
56
56
  request = HTTPI::Request.new
57
57
  curb.any_instance.expects(:post).with(request)
58
-
58
+
59
59
  client.post request, :curb
60
60
  end
61
61
  end
@@ -64,8 +64,8 @@ describe HTTPI do
64
64
  it "should execute an HTTP POST request using the default adapter" do
65
65
  HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
66
66
  HTTPI::Request.any_instance.expects(:body=).with("<some>xml</some>")
67
- default_adapter.any_instance.expects(:post).with(instance_of(HTTPI::Request))
68
-
67
+ httpclient.any_instance.expects(:post).with(instance_of(HTTPI::Request))
68
+
69
69
  client.post "http://example.com", "<some>xml</some>"
70
70
  end
71
71
  end
@@ -75,7 +75,7 @@ describe HTTPI do
75
75
  HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
76
76
  HTTPI::Request.any_instance.expects(:body=).with("<some>xml</some>")
77
77
  curb.any_instance.expects(:post).with(instance_of(HTTPI::Request))
78
-
78
+
79
79
  client.post "http://example.com", "<some>xml</some>", :curb
80
80
  end
81
81
  end
@@ -83,8 +83,8 @@ describe HTTPI do
83
83
  describe ".head(request)" do
84
84
  it "should execute an HTTP HEAD request using the default adapter" do
85
85
  request = HTTPI::Request.new
86
- default_adapter.any_instance.expects(:head).with(request)
87
-
86
+ httpclient.any_instance.expects(:head).with(request)
87
+
88
88
  client.head request
89
89
  end
90
90
  end
@@ -93,7 +93,7 @@ describe HTTPI do
93
93
  it "should execute an HTTP HEAD request using the given adapter" do
94
94
  request = HTTPI::Request.new
95
95
  curb.any_instance.expects(:head).with(request)
96
-
96
+
97
97
  client.head request, :curb
98
98
  end
99
99
  end
@@ -101,8 +101,8 @@ describe HTTPI do
101
101
  describe ".head(url)" do
102
102
  it "should execute an HTTP HEAD request using the default adapter" do
103
103
  HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
104
- default_adapter.any_instance.expects(:head).with(instance_of(HTTPI::Request))
105
-
104
+ httpclient.any_instance.expects(:head).with(instance_of(HTTPI::Request))
105
+
106
106
  client.head "http://example.com"
107
107
  end
108
108
  end
@@ -111,7 +111,7 @@ describe HTTPI do
111
111
  it "should execute an HTTP HEAD request using the given adapter" do
112
112
  HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
113
113
  curb.any_instance.expects(:head).with(instance_of(HTTPI::Request))
114
-
114
+
115
115
  client.head "http://example.com", :curb
116
116
  end
117
117
  end
@@ -119,8 +119,8 @@ describe HTTPI do
119
119
  describe ".put(request)" do
120
120
  it "should execute an HTTP PUT request using the default adapter" do
121
121
  request = HTTPI::Request.new
122
- default_adapter.any_instance.expects(:put).with(request)
123
-
122
+ httpclient.any_instance.expects(:put).with(request)
123
+
124
124
  client.put request
125
125
  end
126
126
  end
@@ -129,7 +129,7 @@ describe HTTPI do
129
129
  it "should execute an HTTP PUT request using the given adapter" do
130
130
  request = HTTPI::Request.new
131
131
  curb.any_instance.expects(:put).with(request)
132
-
132
+
133
133
  client.put request, :curb
134
134
  end
135
135
  end
@@ -138,8 +138,8 @@ describe HTTPI do
138
138
  it "should execute an HTTP PUT request using the default adapter" do
139
139
  HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
140
140
  HTTPI::Request.any_instance.expects(:body=).with("<some>xml</some>")
141
- default_adapter.any_instance.expects(:put).with(instance_of(HTTPI::Request))
142
-
141
+ httpclient.any_instance.expects(:put).with(instance_of(HTTPI::Request))
142
+
143
143
  client.put "http://example.com", "<some>xml</some>"
144
144
  end
145
145
  end
@@ -149,7 +149,7 @@ describe HTTPI do
149
149
  HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
150
150
  HTTPI::Request.any_instance.expects(:body=).with("<some>xml</some>")
151
151
  curb.any_instance.expects(:put).with(instance_of(HTTPI::Request))
152
-
152
+
153
153
  client.put "http://example.com", "<some>xml</some>", :curb
154
154
  end
155
155
  end
@@ -157,8 +157,8 @@ describe HTTPI do
157
157
  describe ".delete(request)" do
158
158
  it "should execute an HTTP DELETE request using the default adapter" do
159
159
  request = HTTPI::Request.new
160
- default_adapter.any_instance.expects(:delete).with(request)
161
-
160
+ httpclient.any_instance.expects(:delete).with(request)
161
+
162
162
  client.delete request
163
163
  end
164
164
  end
@@ -167,7 +167,7 @@ describe HTTPI do
167
167
  it "should execute an HTTP DELETE request using the given adapter" do
168
168
  request = HTTPI::Request.new
169
169
  curb.any_instance.expects(:delete).with(request)
170
-
170
+
171
171
  client.delete request, :curb
172
172
  end
173
173
  end
@@ -175,8 +175,8 @@ describe HTTPI do
175
175
  describe ".delete(url)" do
176
176
  it "should execute an HTTP DELETE request using the default adapter" do
177
177
  HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
178
- default_adapter.any_instance.expects(:delete).with(instance_of(HTTPI::Request))
179
-
178
+ httpclient.any_instance.expects(:delete).with(instance_of(HTTPI::Request))
179
+
180
180
  client.delete "http://example.com"
181
181
  end
182
182
  end
@@ -185,7 +185,7 @@ describe HTTPI do
185
185
  it "should execute an HTTP DELETE request using the given adapter" do
186
186
  HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
187
187
  curb.any_instance.expects(:delete).with(instance_of(HTTPI::Request))
188
-
188
+
189
189
  client.delete "http://example.com", :curb
190
190
  end
191
191
  end
@@ -215,7 +215,7 @@ describe HTTPI do
215
215
  lambda { client.request method, "invalid" }.should raise_error(ArgumentError)
216
216
  end
217
217
 
218
- HTTPI::Adapter.adapters.each do |adapter, values|
218
+ HTTPI::Adapter::ADAPTERS.each do |adapter, adapter_class|
219
219
  client_class = {
220
220
  :httpclient => lambda { HTTPClient },
221
221
  :curb => lambda { Curl::Easy },
@@ -223,10 +223,10 @@ describe HTTPI do
223
223
  }
224
224
 
225
225
  context "using #{adapter}" do
226
- before { values[:class].any_instance.expects(method) }
226
+ before { adapter_class.any_instance.expects(method) }
227
227
 
228
228
  it "should log that we're executing an HTTP request" do
229
- HTTPI.expects(:log).with("HTTPI executes HTTP #{method.to_s.upcase} using the #{adapter} adapter")
229
+ HTTPI.expects(:log).with(:debug, "HTTPI executes HTTP #{method.to_s.upcase} using the #{adapter} adapter")
230
230
  client.request method, request, adapter
231
231
  end
232
232
 
@@ -236,26 +236,6 @@ describe HTTPI do
236
236
  end
237
237
  end
238
238
  end
239
-
240
- HTTPI::Adapter.adapters.reject { |key, value| key == HTTPI::Adapter::FALLBACK }.each do |adapter, values|
241
- context "when #{adapter} could not be loaded" do
242
- before do
243
- HTTPI::Adapter.expects(:require).with(values[:require]).raises(LoadError)
244
- HTTPI::Adapter.expects(:require).with("net/https")
245
- HTTPI::Adapter::NetHTTP.any_instance.expects(method)
246
- end
247
-
248
- it "should fall back to using the FALLBACK adapter" do
249
- HTTPI.expects(:log).with(
250
- "HTTPI tried to use the #{adapter} adapter, but was unable to find the library in the LOAD_PATH.",
251
- "Falling back to using the #{HTTPI::Adapter::FALLBACK} adapter now."
252
- )
253
- HTTPI.expects(:log).with("HTTPI executes HTTP #{method.to_s.upcase} using the #{HTTPI::Adapter::FALLBACK} adapter")
254
-
255
- client.request method, request, adapter
256
- end
257
- end
258
- end
259
239
  end
260
240
  end
261
241
 
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: 63
4
+ hash: 59
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 8
8
+ - 9
9
9
  - 0
10
- version: 0.8.0
10
+ version: 0.9.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-03-07 00:00:00 +01:00
19
+ date: 2011-03-08 00:00:00 +01:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -154,6 +154,7 @@ files:
154
154
  - .autotest
155
155
  - .gitignore
156
156
  - .rspec
157
+ - CHANGELOG.md
157
158
  - Gemfile
158
159
  - LICENSE
159
160
  - README.md