social-avatar-proxy 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +3 -1
- data/lib/social_avatar_proxy/app.rb +17 -2
- data/lib/social_avatar_proxy/remote_file_resolver.rb +4 -5
- data/lib/social_avatar_proxy/timeout_error.rb +5 -0
- data/lib/social_avatar_proxy/too_many_redirects_error.rb +3 -0
- data/lib/social_avatar_proxy/version.rb +1 -1
- data/spec/social_avatar_proxy/app_spec.rb +20 -0
- data/spec/social_avatar_proxy/remote_file_resolver_spec.rb +1 -1
- metadata +5 -9
data/README.md
CHANGED
@@ -2,10 +2,12 @@
|
|
2
2
|
|
3
3
|
This gem acts as a proxy for avatars on Twitter & Facebook.
|
4
4
|
|
5
|
-
[![Build Status][2]][1]
|
5
|
+
[![Build Status][2]][1] [![Code Climate][3]][4]
|
6
6
|
|
7
7
|
[1]: http://travis-ci.org/platformq/social-avatar-proxy
|
8
8
|
[2]: https://secure.travis-ci.org/platformq/social-avatar-proxy.png?branch=master
|
9
|
+
[3]: https://codeclimate.com/badge.png
|
10
|
+
[4]: https://codeclimate.com/github/platformq/social-avatar-proxy
|
9
11
|
|
10
12
|
## Installation
|
11
13
|
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require "social_avatar_proxy/facebook_avatar"
|
2
2
|
require "social_avatar_proxy/twitter_avatar"
|
3
3
|
require "social_avatar_proxy/routes"
|
4
|
+
require "social_avatar_proxy/timeout_error"
|
5
|
+
require "social_avatar_proxy/too_many_redirects_error"
|
4
6
|
require "rack"
|
5
7
|
|
6
8
|
module SocialAvatarProxy
|
@@ -28,8 +30,13 @@ module SocialAvatarProxy
|
|
28
30
|
|
29
31
|
def call(env)
|
30
32
|
@request = Rack::Request.new(env)
|
31
|
-
|
32
|
-
|
33
|
+
begin
|
34
|
+
response.finish
|
35
|
+
rescue TimeoutError => e
|
36
|
+
timeout
|
37
|
+
rescue TooManyRedirectsError => e
|
38
|
+
bad_gateway
|
39
|
+
end
|
33
40
|
end
|
34
41
|
|
35
42
|
def path_prefix
|
@@ -77,6 +84,14 @@ module SocialAvatarProxy
|
|
77
84
|
Rack::Response.new("Not Found", 404)
|
78
85
|
end
|
79
86
|
|
87
|
+
def timeout
|
88
|
+
Rack::Response.new("Remote server timeout", 504)
|
89
|
+
end
|
90
|
+
|
91
|
+
def bad_gateway
|
92
|
+
Rack::Response.new("Bad response from remote server", 502)
|
93
|
+
end
|
94
|
+
|
80
95
|
def routes
|
81
96
|
Routes.new(self)
|
82
97
|
end
|
@@ -1,16 +1,15 @@
|
|
1
|
+
require "social_avatar_proxy/timeout_error"
|
2
|
+
require "social_avatar_proxy/too_many_redirects_error"
|
1
3
|
require "net/https"
|
2
4
|
require "net/http"
|
3
5
|
require "uri"
|
4
6
|
require "timeout"
|
5
7
|
|
6
|
-
module SocialAvatarProxy
|
7
|
-
class TooManyRedirects < StandardError; end
|
8
|
-
class TimeoutError < Timeout::Error; end
|
9
|
-
|
8
|
+
module SocialAvatarProxy
|
10
9
|
class RemoteFileResolver
|
11
10
|
def initialize(url, limit = 5)
|
12
11
|
# timeout if we have no redirects left
|
13
|
-
raise
|
12
|
+
raise TooManyRedirectsError if limit <= 0
|
14
13
|
# store the limit and URL
|
15
14
|
@url, @redirect_limit = url, limit
|
16
15
|
end
|
@@ -64,6 +64,26 @@ describe SocialAvatarProxy::App do
|
|
64
64
|
end
|
65
65
|
|
66
66
|
context "given a valid path" do
|
67
|
+
context "when the remote server times out" do
|
68
|
+
before(:each) do
|
69
|
+
app.should_receive(:response).and_raise(SocialAvatarProxy::TimeoutError)
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should return a 504 response" do
|
73
|
+
expect(subject.get("/facebook/61413673").status).to eq(504)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context "when the remote server has too many redirects" do
|
78
|
+
before(:each) do
|
79
|
+
app.should_receive(:response).and_raise(SocialAvatarProxy::TooManyRedirectsError)
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should return a 502 response" do
|
83
|
+
expect(subject.get("/facebook/61413673").status).to eq(502)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
67
87
|
context "that finds an existing avatar" do
|
68
88
|
let(:response) { successful_response }
|
69
89
|
let(:path) { "/facebook/61413673" }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: social-avatar-proxy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rack
|
@@ -131,6 +131,8 @@ files:
|
|
131
131
|
- lib/social_avatar_proxy/path_helpers.rb
|
132
132
|
- lib/social_avatar_proxy/remote_file_resolver.rb
|
133
133
|
- lib/social_avatar_proxy/routes.rb
|
134
|
+
- lib/social_avatar_proxy/timeout_error.rb
|
135
|
+
- lib/social_avatar_proxy/too_many_redirects_error.rb
|
134
136
|
- lib/social_avatar_proxy/twitter_avatar.rb
|
135
137
|
- lib/social_avatar_proxy/version.rb
|
136
138
|
- social-avatar-proxy.gemspec
|
@@ -158,21 +160,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
158
160
|
- - ! '>='
|
159
161
|
- !ruby/object:Gem::Version
|
160
162
|
version: '0'
|
161
|
-
segments:
|
162
|
-
- 0
|
163
|
-
hash: 1989247330318419261
|
164
163
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
165
164
|
none: false
|
166
165
|
requirements:
|
167
166
|
- - ! '>='
|
168
167
|
- !ruby/object:Gem::Version
|
169
168
|
version: '0'
|
170
|
-
segments:
|
171
|
-
- 0
|
172
|
-
hash: 1989247330318419261
|
173
169
|
requirements: []
|
174
170
|
rubyforge_project:
|
175
|
-
rubygems_version: 1.8.
|
171
|
+
rubygems_version: 1.8.23
|
176
172
|
signing_key:
|
177
173
|
specification_version: 3
|
178
174
|
summary: This gem acts as a proxy for avatars on Twitter & Facebook.
|