social-avatar-proxy 0.0.6 → 0.0.7

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/README.md CHANGED
@@ -30,26 +30,26 @@ This usage is based on Rails, however it should be easily adaptable for other la
30
30
  In your `config/routes.rb` file:
31
31
 
32
32
  ```ruby
33
- mount SocialAvatarProxy::App, at: "/avatars"
33
+ mount SocialAvatarProxy::App, at: "/avatars", as: :sap
34
34
  ```
35
35
 
36
- ### COMING SOON
36
+ Note: you must specify an `as` option above, otherwise the path helpers below won't work.
37
37
 
38
38
  In your views:
39
39
 
40
40
  ```ruby
41
41
  # for a Twitter user, by username:
42
- image_tag(twitter_avatar_path("username"))
42
+ image_tag(sap.twitter_avatar_path("username"))
43
43
  # by ID:
44
- image_tag(twitter_avatar_path(12345))
44
+ image_tag(sap.twitter_avatar_path(12345))
45
45
 
46
46
  # for a Facebook user, by username:
47
- image_tag(facebook_avatar_path("username"))
47
+ image_tag(sap.facebook_avatar_path("username"))
48
48
  # by ID:
49
- image_tag(facebook_avatar_path(12345))
49
+ image_tag(sap.facebook_avatar_path(12345))
50
50
  ```
51
51
 
52
- The above helper methods are provided by the `SocialAvatarProxy::Paths` module.
52
+ The above path helper methods are provided by the `SocialAvatarProxy::PathHelpers` module. Note: `image_tag` is a Rails helper, replace with your framework's equivalent. You'll need to call `avatar_base_path=` with the mounted path prefix (in the example above we were mounted at `/avatars`, however Rails handles it automatically)
53
53
 
54
54
  ## Contributing
55
55
 
@@ -1,5 +1,6 @@
1
1
  require "social_avatar_proxy/facebook_avatar"
2
2
  require "social_avatar_proxy/twitter_avatar"
3
+ require "social_avatar_proxy/routes"
3
4
  require "rack"
4
5
 
5
6
  module SocialAvatarProxy
@@ -28,7 +29,7 @@ module SocialAvatarProxy
28
29
  end
29
30
 
30
31
  def path_prefix
31
- request.env["SCRIPT_NAME"].gsub(/\/$/, "")
32
+ request && request.env["SCRIPT_NAME"].gsub(/\/$/, "")
32
33
  end
33
34
 
34
35
  def response
@@ -72,6 +73,10 @@ module SocialAvatarProxy
72
73
  Rack::Response.new("Not Found", 404)
73
74
  end
74
75
 
76
+ def routes
77
+ @routes ||= Routes.new(self)
78
+ end
79
+
75
80
  private
76
81
  def load_avatar(service, id)
77
82
  # titleize the service name
@@ -0,0 +1,27 @@
1
+ module SocialAvatarProxy
2
+ module PathHelpers
3
+ def avatar_base_path
4
+ @avatar_base_path ||= ""
5
+ end
6
+
7
+ def avatar_base_path=(path)
8
+ # strip leading / trailing slashes
9
+ path = path.gsub(/^\/|\/$/, "")
10
+ if path.empty?
11
+ # reset to an empty string
12
+ @avatar_base_path = ""
13
+ else
14
+ # set with prepended slash
15
+ @avatar_base_path = "/#{path}"
16
+ end
17
+ end
18
+
19
+ def twitter_avatar_path(identifier)
20
+ File.join(avatar_base_path, "twitter", identifier.to_s)
21
+ end
22
+
23
+ def facebook_avatar_path(identifier)
24
+ File.join(avatar_base_path, "facebook", identifier.to_s)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,13 @@
1
+ require "social_avatar_proxy/path_helpers"
2
+
3
+ module SocialAvatarProxy
4
+ class Routes
5
+ include PathHelpers
6
+
7
+ def initialize(app)
8
+ if app.path_prefix
9
+ self.avatar_base_path = app.path_prefix
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  module SocialAvatarProxy
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -37,6 +37,15 @@ describe SocialAvatarProxy::App do
37
37
  end
38
38
  end
39
39
 
40
+ describe "#routes" do
41
+ subject { app }
42
+
43
+ it "should return a object providing the path helpers" do
44
+ expect(subject.routes.facebook_avatar_path("ryandtownsned")).to match(/^\/.*$/)
45
+ expect(subject.routes.twitter_avatar_path(2202971)).to match(/^\/.*$/)
46
+ end
47
+ end
48
+
40
49
  context "given an invalid path" do
41
50
  it "should return a 404 response" do
42
51
  path = "/unknown"
@@ -0,0 +1,62 @@
1
+ require "spec_helper"
2
+
3
+ describe SocialAvatarProxy::PathHelpers do
4
+ subject do
5
+ Class.new do
6
+ include SocialAvatarProxy::PathHelpers
7
+ end.new
8
+ end
9
+
10
+ describe "#avatar_base_path" do
11
+ it "should return empty string as default" do
12
+ expect(subject.avatar_base_path).to eq("")
13
+ end
14
+ end
15
+
16
+ describe "#avatar_base_path=" do
17
+ it "should update the #avatar_base_path" do
18
+ subject.avatar_base_path = "/test"
19
+ expect(subject.avatar_base_path).to eq("/test")
20
+ end
21
+
22
+ it "should remove trailing slashes" do
23
+ subject.avatar_base_path = "/test/"
24
+ expect(subject.avatar_base_path).to eq("/test")
25
+ end
26
+
27
+ it "should prepend a slash if missing" do
28
+ subject.avatar_base_path = "test"
29
+ expect(subject.avatar_base_path).to eq("/test")
30
+ end
31
+ end
32
+
33
+ describe "#twitter_avatar_path" do
34
+ context "with no #avatar_base_path" do
35
+ it "should join the service and identifier" do
36
+ expect(subject.twitter_avatar_path("dave")).to eq "/twitter/dave"
37
+ end
38
+ end
39
+
40
+ context "with a custom #avatar_base_path" do
41
+ it "should join the base path, service and identifier" do
42
+ subject.avatar_base_path = "avatars"
43
+ expect(subject.twitter_avatar_path("dave")).to eq "/avatars/twitter/dave"
44
+ end
45
+ end
46
+ end
47
+
48
+ describe "#facebook_avatar_path" do
49
+ context "with no #avatar_base_path" do
50
+ it "should join the service and identifier" do
51
+ expect(subject.facebook_avatar_path("dave")).to eq "/facebook/dave"
52
+ end
53
+ end
54
+
55
+ context "with a custom #avatar_base_path" do
56
+ it "should join the base path, service and identifier" do
57
+ subject.avatar_base_path = "avatars"
58
+ expect(subject.facebook_avatar_path("dave")).to eq "/avatars/facebook/dave"
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,25 @@
1
+ require "spec_helper"
2
+
3
+ describe SocialAvatarProxy::Routes do
4
+ subject do
5
+ SocialAvatarProxy::Routes.new(app)
6
+ end
7
+
8
+ let(:path_prefix) { "" }
9
+ let(:app) { mock("app", path_prefix: path_prefix) }
10
+
11
+ describe "#avatar_base_path" do
12
+ context "without a path_prefix" do
13
+ it "should return empty string" do
14
+ expect(subject.avatar_base_path).to eq("")
15
+ end
16
+ end
17
+
18
+ context "with a path_prefix" do
19
+ let(:path_prefix) { "/avatars" }
20
+ it "should return the path prefix" do
21
+ expect(subject.avatar_base_path).to eq("/avatars")
22
+ end
23
+ end
24
+ end
25
+ end
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: 0.0.6
4
+ version: 0.0.7
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-02 00:00:00.000000000 Z
12
+ date: 2012-10-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
@@ -110,14 +110,18 @@ files:
110
110
  - lib/social_avatar_proxy/app.rb
111
111
  - lib/social_avatar_proxy/avatar.rb
112
112
  - lib/social_avatar_proxy/facebook_avatar.rb
113
+ - lib/social_avatar_proxy/path_helpers.rb
113
114
  - lib/social_avatar_proxy/remote_file_resolver.rb
115
+ - lib/social_avatar_proxy/routes.rb
114
116
  - lib/social_avatar_proxy/twitter_avatar.rb
115
117
  - lib/social_avatar_proxy/version.rb
116
118
  - social-avatar-proxy.gemspec
117
119
  - spec/social_avatar_proxy/app_spec.rb
118
120
  - spec/social_avatar_proxy/avatar_spec.rb
119
121
  - spec/social_avatar_proxy/facebook_avatar_spec.rb
122
+ - spec/social_avatar_proxy/path_helpers_spec.rb
120
123
  - spec/social_avatar_proxy/remote_file_resolver_spec.rb
124
+ - spec/social_avatar_proxy/routes_spec.rb
121
125
  - spec/social_avatar_proxy/twitter_avatar_spec.rb
122
126
  - spec/spec_helper.rb
123
127
  - spec/support/env.rb
@@ -136,7 +140,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
136
140
  version: '0'
137
141
  segments:
138
142
  - 0
139
- hash: 2654966469690672685
143
+ hash: -420987875933585136
140
144
  required_rubygems_version: !ruby/object:Gem::Requirement
141
145
  none: false
142
146
  requirements:
@@ -145,7 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
149
  version: '0'
146
150
  segments:
147
151
  - 0
148
- hash: 2654966469690672685
152
+ hash: -420987875933585136
149
153
  requirements: []
150
154
  rubyforge_project:
151
155
  rubygems_version: 1.8.24
@@ -156,7 +160,9 @@ test_files:
156
160
  - spec/social_avatar_proxy/app_spec.rb
157
161
  - spec/social_avatar_proxy/avatar_spec.rb
158
162
  - spec/social_avatar_proxy/facebook_avatar_spec.rb
163
+ - spec/social_avatar_proxy/path_helpers_spec.rb
159
164
  - spec/social_avatar_proxy/remote_file_resolver_spec.rb
165
+ - spec/social_avatar_proxy/routes_spec.rb
160
166
  - spec/social_avatar_proxy/twitter_avatar_spec.rb
161
167
  - spec/spec_helper.rb
162
168
  - spec/support/env.rb