social_count 0.0.4 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MjA5NjhjYTc4ZWY5NmEzZmY5NTNiOGUwMWExMWJhM2FiMGFlYWNkYw==
4
+ ZDg1MDdkOTUxZTlhZjM1ZTZiODM1MmI0Y2EzM2ZkZmU1NGMwZWY5NQ==
5
5
  data.tar.gz: !binary |-
6
- Nzc0NzdjZGI4ZWRkNjNiZDNiZjM0MGY0YzNjZDEwMDNjMjEyMmU0Mg==
6
+ ZjE4YzY1NGFiMjUwODRhYWFiNmFlOTU1NmMxMDZmNDkyOWNiZDAyMA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZTQ0MDAzYTAyNzliNjI0NTM2NGRjMzM2OWFiN2Y1NTgwYWMxMGI1MjEyMDMy
10
- NDJkMzU0M2NjZGY1NzIxYjU3YzRmOGU5ODg0Y2ZjNzBjYjAxNjQwMWFlMmJi
11
- OTIxMjEwOTYxMDE5YjRhZTA1MmUwOGI3NTQxM2M0NWYzYzEzNTE=
9
+ Y2Y5MDc1MzVlYzQ2MmEyY2FhZTU0MjQxZjhmNDRlNThkMDBiYTY5ZjJhNGU4
10
+ MmE5OGFmNDA0YjQ4OGU3NmZmNjEyNjBkOTg1MDM4NmMxNzJkMGZlNzY3OWFk
11
+ MjUyMDJlZDZjOGJhOWU2NTE3ZjYyNGY2OTE1ZGFhMzI1YjJiMzk=
12
12
  data.tar.gz: !binary |-
13
- YzliODBmZDkxYmU1ZjYxYjdjNWFlZDI2MzgxODkyZDMxNmNkZWZhOTk5YWNj
14
- NWMyMTViYWVhNTJlZjkyMDQ3ZmZmODA5ZmNhMWZhNjY1MTdmNWI5MzQxOGU2
15
- ZTUwMGZkNzlkZWNjMDk4NDQxNGYxYWRlZjU5ZDg5ZTNiNTUyMmM=
13
+ NzA3OGJjZDUzMzRmMjk4NjhmZTUxOWFkZWY5NTUwNTMxYWM5M2UyNDQ3NTdm
14
+ YTczNjI3N2JhODBmNzBmMjJjYWEwZDVlMzY1NDhiMDNkZjUwNTA2YWRkYTJj
15
+ Njc4Y2EzYjY0YzZiYTczYTM0Nzc5Yzc4OWUwMmM0ODVjZGIwMTA=
@@ -11,4 +11,15 @@ module SocialCount
11
11
  "Code(s): #{code}\nSee code explanations at https://dev.twitter.com/docs/error-codes-responses"
12
12
  end
13
13
  end
14
+ class FacebookApiError < Error
15
+ attr_reader :code
16
+ def initialize(msg, code)
17
+ @code = code
18
+ @msg = msg
19
+ super(msg)
20
+ end
21
+ def to_s
22
+ "Code: #{code}\n#{@msg}\nSee code explanations at https://developers.facebook.com/docs/reference/api/errors/"
23
+ end
24
+ end
14
25
  end
@@ -28,7 +28,12 @@ module SocialCount
28
28
  return unless valid?
29
29
  url = "#{DOMAIN}/fql?q=#{query(column)}"
30
30
  response = self.class.get_http_response(url)
31
- JSON.parse(response.body)["data"][0]["#{column}_count"]
31
+ response = JSON.parse(response.body)
32
+ data = response['data']
33
+ raise SocialCount::FacebookApiError.new("The social_count gem could not parse the response from the Facebook Graph API: #{response}", 0) unless data.is_a?(Array)
34
+ return nil if data.empty?
35
+ raise SocialCount::FacebookApiError.new("The social_count gem could not parse the response from the Facebook Graph API: #{response}", 0) unless data[0].is_a?(Hash)
36
+ data[0]["#{column}_count"]
32
37
  end
33
38
  def query(column)
34
39
  "SELECT #{column}_count FROM user WHERE uid=#{id}"
@@ -36,7 +41,13 @@ module SocialCount
36
41
 
37
42
  class << self
38
43
  def access_token
39
- @access_token ||= get_http_response(access_url).body.split("access_token=")[1]
44
+ return @access_token unless @access_token.nil?
45
+ response = get_http_response(access_url)
46
+ unless response.is_a?(Net::HTTPOK)
47
+ response = JSON.parse(response.body)
48
+ raise SocialCount::FacebookApiError.new("Facebook API returned the following error: #{response["error"]["message"]}", response["error"]["code"])
49
+ end
50
+ @access_token = response.body.split("access_token=")[1]
40
51
  end
41
52
  private
42
53
  def access_url
@@ -1,3 +1,3 @@
1
1
  module SocialCount
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -1,5 +1,17 @@
1
1
  require 'spec_helper'
2
2
 
3
+ module SocialCount
4
+ class FacebookUser
5
+ class << self
6
+ def reset_credentials
7
+ @access_token = nil
8
+ @access_url = nil
9
+ @credentials = nil
10
+ end
11
+ end
12
+ end
13
+ end
14
+
3
15
  describe SocialCount::FacebookUser do
4
16
  before(:all) do
5
17
  SocialCount.credentials = TestCredentials::INSTANCE
@@ -23,10 +35,10 @@ describe SocialCount::FacebookUser do
23
35
 
24
36
  describe "name" do
25
37
  it "cannot be an empty string" do
26
- expect{SocialCount::TwitterUser.new('')}.to raise_error(SocialCount::Error, "SocialCount::TwitterUser#name cannot be blank")
38
+ expect{SocialCount::FacebookUser.new('')}.to raise_error(SocialCount::Error, "SocialCount::FacebookUser#name cannot be blank")
27
39
  end
28
40
  it "cannot be nil" do
29
- expect{SocialCount::TwitterUser.new(nil)}.to raise_error(SocialCount::Error, "SocialCount::TwitterUser#name cannot be blank")
41
+ expect{SocialCount::FacebookUser.new(nil)}.to raise_error(SocialCount::Error, "SocialCount::FacebookUser#name cannot be blank")
30
42
  end
31
43
  end
32
44
 
@@ -52,7 +64,7 @@ describe SocialCount::FacebookUser do
52
64
  it "should get the user's follower count" do
53
65
  count = @facebook.follower_count
54
66
  count.should be_a(Fixnum)
55
- count.should eq(19528198)
67
+ count.should eq(20394278)
56
68
  end
57
69
  it "should handle friend_count gracefully" do
58
70
  @facebook.friend_count.should be_nil
@@ -66,7 +78,7 @@ describe SocialCount::FacebookUser do
66
78
  it "should get the user's friend count" do
67
79
  count = @facebook.friend_count
68
80
  count.should be_a(Fixnum)
69
- count.should eq(568)
81
+ count.should eq(586)
70
82
  end
71
83
  it "should handle friend_count gracefully" do
72
84
  @facebook.follower_count.should be_nil
@@ -96,4 +108,20 @@ describe SocialCount::FacebookUser do
96
108
  non_existent_user.follower_count.should be_nil
97
109
  end
98
110
  end
111
+
112
+ describe "expired credentials" do
113
+ before(:all) do
114
+ @old_credentials = SocialCount.credentials
115
+ SocialCount::FacebookUser.reset_credentials
116
+ SocialCount.credentials = TestCredentials::EXPIRED_CREDENTIALS
117
+ @facebook = SocialCount::FacebookUser.new(username)
118
+ end
119
+ it "should raise an exception when generating the access token" do
120
+ expect{@facebook.follower_count}.to raise_error(SocialCount::FacebookApiError, "Code: 1\nFacebook API returned the following error: Error validating client secret.\nSee code explanations at https://developers.facebook.com/docs/reference/api/errors/")
121
+ end
122
+ after(:all) do
123
+ SocialCount.credentials = @old_credentials
124
+ SocialCount::FacebookUser.reset_credentials
125
+ end
126
+ end
99
127
  end
@@ -39,7 +39,7 @@ describe SocialCount::TwitterUser do
39
39
  end
40
40
 
41
41
  it "should get the follow count" do
42
- @twitter.follower_count.should eq(12171)
42
+ @twitter.follower_count.should eq(12872)
43
43
  end
44
44
  end
45
45
 
@@ -69,7 +69,7 @@ describe SocialCount::TwitterUser do
69
69
  @twitter = SocialCount::TwitterUser.new(username)
70
70
  end
71
71
  it "should raise an exception" do
72
- expect{@twitter.follower_count}.to raise_error(SocialCount::TwitterApiError, "Code(s): 89\nSee code explanations at https://dev.twitter.com/docs/error-codes-responses")
72
+ expect{@twitter.follower_count}.to raise_error(SocialCount::TwitterApiError, "Code(s): 32\nSee code explanations at https://dev.twitter.com/docs/error-codes-responses")
73
73
  end
74
74
  after(:all) do
75
75
  SocialCount.credentials = @old_credentials
@@ -14,6 +14,6 @@ class TestCredentials
14
14
  'ANYTHING_RANDOM_STRING_HERE',
15
15
  'ANOTHER_RANDOM_STRING_HERE',
16
16
  'MY_FACEBOOK_APP_ID', # Same as above
17
- 'MY_FACEBOOK_APP_SECRET', # Same as above
17
+ 'ANOTHER_STRING_WHATEVER_YOU_WANT'
18
18
  )
19
19
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: social_count
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Isaac Betesh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-04 00:00:00.000000000 Z
11
+ date: 2013-11-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport