ruby-satisfaction 0.6.5 → 0.6.7

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -47,9 +47,14 @@ PLATFORMS
47
47
  ruby
48
48
 
49
49
  DEPENDENCIES
50
+ activesupport (~> 2.3)
50
51
  bundler (>= 1.0.0)
51
52
  fakeweb (~> 1.3)
52
53
  gemcutter (>= 0.6.1)
54
+ json (>= 1.4.6)
55
+ memcache-client (>= 1.5.0)
56
+ nokogiri (>= 1.4.2)
57
+ oauth (>= 0.3.5)
53
58
  open_gem (>= 1.4)
54
59
  rr (= 1.0.2)
55
60
  rspec (~> 2.2)
data/README.markdown CHANGED
@@ -11,6 +11,14 @@ For questions, please visit the [Get Satisfaction API community][3]
11
11
 
12
12
  Changelog
13
13
  =========
14
+ 0.6.7
15
+
16
+ * Fixed Sfn::Loader#get so it uses cached content when a 304 Not Modified is received.
17
+
18
+ 0.6.6
19
+
20
+ * Handle HTTP 502/504 for unicorn.
21
+
14
22
  0.6.5
15
23
 
16
24
  * Fixed a divide-by-zero bug.
@@ -7,4 +7,6 @@ module Sfn
7
7
  class NotFound < Sfn::Error; end
8
8
  class SiteMaintenance < Sfn::Error; end
9
9
  class MethodNotAllowed < Sfn::Error; end
10
+ class BadGateway < Sfn::Error; end
11
+ class GatewayTimeOut < Sfn::Error; end
10
12
  end
@@ -36,17 +36,19 @@ class Sfn::Loader
36
36
  http = Net::HTTP.new(uri.host, uri.port)
37
37
  add_authentication(request, http, options)
38
38
  response = execute(http, request)
39
-
39
+
40
40
  case response
41
41
  when Net::HTTPSuccess
42
42
  cache.put(uri, response)
43
43
  [:ok, response.body]
44
+ when Net::HTTPNotModified
45
+ [:ok, cache_record.body]
44
46
  when Net::HTTPMovedPermanently, Net::HTTPMovedTemporarily
45
47
  limit = options[:redirect_limit] || 3
46
48
  raise Sfn::TooManyRedirects, "Too many redirects" unless limit > 0
47
49
  get(response['location'], options.merge(:redirect_limit => limit - 1))
48
50
  when Net::HTTPBadRequest
49
- raise Sfn::BadRequest, "Bad request. Response body:\n" + response.body
51
+ raise Sfn::BadRequest, "Bad request. Response body:\n#{response.body}"
50
52
  when Net::HTTPForbidden, Net::HTTPUnauthorized
51
53
  message = "Not authorized"
52
54
  if restricted_provider = response['X-Sfn-Restricted-Identity-Provider']
@@ -60,8 +62,12 @@ class Sfn::Loader
60
62
  raise Sfn::NotFound, "Not found"
61
63
  when Net::HTTPServiceUnavailable
62
64
  raise Sfn::SiteMaintenance, maintenance_message(response.body)
65
+ when Net::HTTPBadGateway
66
+ raise Sfn::BadGateway, "Bad Gateway"
67
+ when Net::HTTPGatewayTimeOut
68
+ raise Sfn::GatewayTimeOut, "Gateway TimeOut"
63
69
  else
64
- raise Sfn::Error, "Encountered error. Body of response:\n" + response.body
70
+ raise Sfn::Error, "Encountered error. Body of response:\n#{response.body}"
65
71
  end
66
72
  end
67
73
 
@@ -96,7 +102,7 @@ class Sfn::Loader
96
102
  when Net::HTTPNotFound
97
103
  raise Sfn::NotFound, "Not found"
98
104
  when Net::HTTPBadRequest
99
- raise Sfn::BadRequest, "Bad request. Response body:\n" + response.body
105
+ raise Sfn::BadRequest, "Bad request. Response body:\n#{response.body}"
100
106
  when Net::HTTPSuccess
101
107
  [:ok, response.body]
102
108
  when Net::HTTPMethodNotAllowed
@@ -107,8 +113,12 @@ class Sfn::Loader
107
113
  raise Sfn::MethodNotAllowed, "Method not allowed"
108
114
  when Net::HTTPServiceUnavailable
109
115
  raise Sfn::SiteMaintenance, maintenance_message(response.body)
116
+ when Net::HTTPBadGateway
117
+ raise Sfn::BadGateway, "Bad Gateway"
118
+ when Net::HTTPGatewayTimeOut
119
+ raise Sfn::GatewayTimeOut, "Gateway TimeOut"
110
120
  else
111
- raise Sfn::Error, "Encountered error. Body of response:\n" + response.body
121
+ raise Sfn::Error, "Encountered error. Body of response:\n#{response.body}"
112
122
  end
113
123
  end
114
124
 
@@ -2,7 +2,7 @@ module Satisfaction
2
2
  module VERSION
3
3
  MAJOR = 0
4
4
  MINOR = 6
5
- PATCH = 5
5
+ PATCH = 7
6
6
  PRE = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, PATCH, PRE].compact.join('.')
@@ -8,6 +8,7 @@ describe Sfn::Loader do
8
8
  before(:each) do
9
9
  @response = nil
10
10
  @status_code = '200'
11
+ @loader = Sfn::Loader.new
11
12
  @get = lambda do
12
13
  FakeWeb.register_uri(
13
14
  :get,
@@ -15,9 +16,8 @@ describe Sfn::Loader do
15
16
  :body => @response_body,
16
17
  :status => [@status_code]
17
18
  )
18
- loader = Sfn::Loader.new
19
- stub(loader).add_authentication {}
20
- @response = loader.get('http://test')
19
+ stub(@loader).add_authentication {}
20
+ @response = @loader.get('http://test')
21
21
  end
22
22
  end
23
23
 
@@ -33,6 +33,21 @@ describe Sfn::Loader do
33
33
  end
34
34
  end
35
35
 
36
+ describe "when the status is not modified (304)" do
37
+ before(:each) do
38
+ @status_code = '304'
39
+ @cached_body = {:id => "123", :domain => "foo.bar"}.to_json
40
+ @response_body = nil
41
+ stub(@loader.cache).get(anything) { Sfn::Loader::CacheRecord.new('http://test', 'etag-foo', @cached_body) }
42
+
43
+ @get.call
44
+ end
45
+
46
+ it "should return a status of :ok and the cached response body" do
47
+ @response.should == [:ok, @cached_body]
48
+ end
49
+ end
50
+
36
51
  describe "when we are in a redirect loop" do
37
52
  attr_reader :loader
38
53
 
@@ -154,6 +169,27 @@ describe Sfn::Loader do
154
169
  end
155
170
  end
156
171
  end
172
+
173
+ # ---- GATEWAY -----------------------------------------------------------------------------------------------
174
+ describe "when the status is 502 (Bad Gateway, returned when a Unicorn worker is killed)" do
175
+ before(:each) do
176
+ @status_code = '502'
177
+ end
178
+
179
+ it "should raise an Sfn::BadGateway error" do
180
+ @get.should raise_error(Sfn::BadGateway, "Bad Gateway")
181
+ end
182
+ end
183
+
184
+ describe "when the status is 504 (GatewayTimeOut)" do
185
+ before(:each) do
186
+ @status_code = '504'
187
+ end
188
+
189
+ it "should raise an Sfn::GatewayTimeOut error" do
190
+ @get.should raise_error(Sfn::GatewayTimeOut, "Gateway TimeOut")
191
+ end
192
+ end
157
193
  end
158
194
 
159
195
  # ==== POST ==================================================================================================
@@ -302,6 +338,27 @@ describe Sfn::Loader do
302
338
  end
303
339
  end
304
340
 
341
+ # ---- GATEWAY -----------------------------------------------------------------------------------------------
342
+ describe "when the status is 502 (Bad Gateway, returned when a Unicorn worker is killed)" do
343
+ before(:each) do
344
+ @status_code = '502'
345
+ end
346
+
347
+ it "should raise an Sfn::BadGateway error" do
348
+ @post.should raise_error(Sfn::BadGateway, "Bad Gateway")
349
+ end
350
+ end
351
+
352
+ describe "when the status is 504 (GatewayTimeOut)" do
353
+ before(:each) do
354
+ @status_code = '504'
355
+ end
356
+
357
+ it "should raise an Sfn::GatewayTimeOut error" do
358
+ @post.should raise_error(Sfn::GatewayTimeOut, "Gateway TimeOut")
359
+ end
360
+ end
361
+
305
362
  end
306
363
 
307
364
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-satisfaction
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 9
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 6
9
- - 5
10
- version: 0.6.5
9
+ - 7
10
+ version: 0.6.7
11
11
  platform: ruby
12
12
  authors:
13
13
  - Get Satisfaction
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-05-09 00:00:00 -07:00
18
+ date: 2011-07-08 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency