social_count 0.0.2 → 0.0.3

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.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NWQ5ZjM0MWZmYmU1YWIyZTNiMGI4YTBkNzhkZGQ3OGY1NTM2YTYxNQ==
5
+ data.tar.gz: !binary |-
6
+ MzY0ZTRiYjIyOGNlY2JiZmE2M2M5MDk3MDhmYjFlYzFkZDFhNjMxOA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ ZjRmMDYxYWFmZmEzZmU5YWQ1YzhkYzE4MTU2NmFjZGE0MTNiYzBkMzg2Zjk4
10
+ MTRjZDdkY2FmNWE3NTZlMzFkZjc2MzQwYmRlMGYzNjYyZjg1MzdmNWYwMGRl
11
+ OGRkOWFiNTYyNDU1MGZlNGI2MDAwOGY1NjJlYjI5OGI0ODU5MzY=
12
+ data.tar.gz: !binary |-
13
+ NmVmYTA2NWU4ZjZkMmVmYzNkN2Y4YzViYTIzNmE2NTY5ZmMyNzQwZTJkOTQy
14
+ ZjY4OWU0YmVhZDcwNmNkZTYzNWFlZjFkMzJhZjk4NzNjNWEzZDQyYzdjMjc1
15
+ YzBkYTA3MjlmOWY1OThhMDFlYWNmNGVlOTYxMTg0OWU5YjdhN2U=
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
@@ -1,9 +1,12 @@
1
1
  require 'net/http'
2
+ require 'active_support/core_ext/object/blank'
3
+ require 'social_count/error'
2
4
 
3
5
  module SocialCount
4
6
  class ApiBase
5
7
  attr_reader :name
6
8
  def initialize(name)
9
+ raise SocialCount::Error, "#{self.class}#name cannot be blank" if name.blank?
7
10
  @name = name
8
11
  end
9
12
  class << self
@@ -0,0 +1,4 @@
1
+ module SocialCount
2
+ class Error < StandardError
3
+ end
4
+ end
@@ -21,7 +21,7 @@ module SocialCount
21
21
  end
22
22
  def follower_count
23
23
  count = run_query(:subscriber)
24
- count.zero? ? nil : count
24
+ count.to_i.zero? ? nil : count
25
25
  end
26
26
  private
27
27
  def run_query(column)
@@ -1,3 +1,3 @@
1
1
  module SocialCount
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/lib/social_count.rb CHANGED
@@ -1,12 +1,13 @@
1
+ require 'active_support/core_ext/object/blank'
1
2
  require "social_count/version"
3
+ require "social_count/error"
2
4
  require "social_count/facebook_user"
3
5
  require "social_count/twitter_user"
4
6
 
5
7
  module SocialCount
6
8
  REQUIRED_CREDENTIALS = [:twitter_consumer_key, :twitter_consumer_secret, :twitter_oauth_token, :twitter_oauth_token_secret, :fb_app_id, :fb_app_secret]
7
- class Error < StandardError; end
8
9
  class Credentials
9
- attr_reader *REQUIRED_CREDENTIALS
10
+ attr_accessor *REQUIRED_CREDENTIALS
10
11
  end
11
12
  class << self
12
13
  def credentials
@@ -20,7 +21,10 @@ module SocialCount
20
21
  end
21
22
  private
22
23
  def validate_credentials(_credentials)
23
- REQUIRED_CREDENTIALS.each { |attr| raise SocialCount::Error, "SocialCount.credentials must respond to #{attr}" unless _credentials.respond_to?(attr.to_s) }
24
+ REQUIRED_CREDENTIALS.each do |attr|
25
+ raise SocialCount::Error, "SocialCount.credentials must respond to #{attr}" unless _credentials.respond_to?(attr.to_s)
26
+ raise SocialCount::Error, "SocialCount.credentials.#{attr} cannot be blank" if _credentials.__send__(attr.to_s).blank?
27
+ end
24
28
  end
25
29
  end
26
30
  end
data/social_count.gemspec CHANGED
@@ -18,6 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
+ spec.add_dependency "activesupport"
21
22
  spec.add_dependency "fb_graph"
22
23
  spec.add_dependency "twitter_oauth", '~> 0.4.94'
23
24
 
@@ -13,16 +13,39 @@ def credentials_without(attr)
13
13
  SocialCount::REQUIRED_CREDENTIALS.dup.tap { |a| a.delete(attr) }
14
14
  end
15
15
 
16
+ def class_that_doesnt_respond_to(credential)
17
+ Class.new do
18
+ attributes = credentials_without(credential)
19
+ attributes.each do |a|
20
+ define_method(a) { '123' }
21
+ end
22
+ end
23
+ end
24
+
25
+ def class_that_responds_with_x_to(credential, x)
26
+ Class.new(class_that_doesnt_respond_to(credential)) do
27
+ define_method(credential) { x }
28
+ end
29
+ end
30
+
16
31
  describe SocialCount::Credentials do
17
32
  SocialCount::REQUIRED_CREDENTIALS.each do |credential|
18
33
  it "should require credentials to have a #{credential}" do
19
- credentials = Class.new do attr_reader *credentials_without(credential); end
34
+ credentials = class_that_doesnt_respond_to(credential)
20
35
  expect{SocialCount.credentials = credentials.new}.to raise_error(SocialCount::Error, "SocialCount.credentials must respond to #{credential}")
21
36
  end
37
+ it "should not allow #{credential} to be nil" do
38
+ credentials = class_that_responds_with_x_to(credential, nil)
39
+ expect{SocialCount.credentials = credentials.new}.to raise_error(SocialCount::Error, "SocialCount.credentials.#{credential} cannot be blank")
40
+ end
41
+ it "should not allow #{credential} to be an empty string" do
42
+ credentials = class_that_responds_with_x_to(credential, '')
43
+ expect{SocialCount.credentials = credentials.new}.to raise_error(SocialCount::Error, "SocialCount.credentials.#{credential} cannot be blank")
44
+ end
22
45
  end
23
46
 
24
47
  it "shouldn't change state when an exception is raised" do
25
- credentials = Class.new do attr_reader *credentials_without(:twitter_consumer_secret); end
48
+ credentials = class_that_doesnt_respond_to(:twitter_consumer_secret)
26
49
  SocialCount.reset_credentials
27
50
  expect{SocialCount.credentials = credentials.new}.to raise_error(SocialCount::Error, "SocialCount.credentials must respond to twitter_consumer_secret")
28
51
  expect(SocialCount.instance_variable_get("@credentials")).to be_nil
@@ -34,6 +57,13 @@ describe SocialCount::Credentials do
34
57
  end
35
58
 
36
59
  it "can be a SocialCount::Credentials instance" do
37
- expect{SocialCount.credentials = SocialCount::Credentials.new}.to_not raise_error
60
+ s = SocialCount::Credentials.new
61
+ s.twitter_consumer_key = "1"
62
+ s.twitter_consumer_secret = "1"
63
+ s.twitter_oauth_token = "1"
64
+ s.twitter_oauth_token_secret = "1"
65
+ s.fb_app_id = "1"
66
+ s.fb_app_secret = "1"
67
+ expect{SocialCount.credentials = s}.to_not raise_error
38
68
  end
39
69
  end
@@ -11,6 +11,7 @@ describe SocialCount::FacebookUser do
11
11
  def access_token_did_not_match_specified_format
12
12
  @access_token_did_not_match_specified_format ||= "Facebook Access Token #{@access_token} did not match specified format"
13
13
  end
14
+
14
15
  describe "class methods" do
15
16
  it "should receive an access token" do
16
17
  @access_token = SocialCount::FacebookUser.access_token.split("|")
@@ -19,6 +20,17 @@ describe SocialCount::FacebookUser do
19
20
  @access_token[1].should match(/[_A-Za-z0-9]{27}/), access_token_did_not_match_specified_format
20
21
  end
21
22
  end
23
+
24
+ describe "name" do
25
+ it "cannot be an empty string" do
26
+ expect{SocialCount::TwitterUser.new('')}.to raise_error(SocialCount::Error, "SocialCount::TwitterUser#name cannot be blank")
27
+ end
28
+ it "cannot be nil" do
29
+ expect{SocialCount::TwitterUser.new(nil)}.to raise_error(SocialCount::Error, "SocialCount::TwitterUser#name cannot be blank")
30
+ end
31
+ end
32
+
33
+
22
34
  describe "user that supports following" do
23
35
  before(:all) do
24
36
  @facebook = SocialCount::FacebookUser.new(username)
@@ -46,6 +58,7 @@ describe SocialCount::FacebookUser do
46
58
  @facebook.friend_count.should be_nil
47
59
  end
48
60
  end
61
+
49
62
  describe "user that supports friending" do
50
63
  before(:all) do
51
64
  @facebook = SocialCount::FacebookUser.new('jose.valim')
@@ -59,6 +72,7 @@ describe SocialCount::FacebookUser do
59
72
  @facebook.follower_count.should be_nil
60
73
  end
61
74
  end
75
+
62
76
  describe "non-existent user" do
63
77
  def non_existent_user
64
78
  SocialCount::FacebookUser.new("george_orwell")
@@ -78,5 +92,8 @@ describe SocialCount::FacebookUser do
78
92
  it "should have nil friend_count" do
79
93
  non_existent_user.friend_count.should be_nil
80
94
  end
95
+ it "should have nil follower_count" do
96
+ non_existent_user.follower_count.should be_nil
97
+ end
81
98
  end
82
99
  end
@@ -8,6 +8,15 @@ describe SocialCount::TwitterUser do
8
8
  @username ||= 'tsa'
9
9
  end
10
10
 
11
+ describe "name" do
12
+ it "cannot be an empty string" do
13
+ expect{SocialCount::TwitterUser.new('')}.to raise_error(SocialCount::Error, "SocialCount::TwitterUser#name cannot be blank")
14
+ end
15
+ it "cannot be nil" do
16
+ expect{SocialCount::TwitterUser.new(nil)}.to raise_error(SocialCount::Error, "SocialCount::TwitterUser#name cannot be blank")
17
+ end
18
+ end
19
+
11
20
  describe "existent user" do
12
21
  before(:each) do
13
22
  @twitter = SocialCount::TwitterUser.new(username)
@@ -6,7 +6,6 @@ class TestCredentials
6
6
  credentials_file = File.expand_path("#{__FILE__}/../credentials.rb")
7
7
  unless File.exists?(credentials_file)
8
8
  puts "Please configure your Facebook and Twitter application credentials by copying #{credentials_file}.example to #{credentials_file} and configuring the required values there appropriately."
9
- puts "Then comment out the 'exit' line in #{File.expand_path(__FILE__)} before running rspec."
10
9
  exit
11
10
  end
12
11
  end
metadata CHANGED
@@ -1,20 +1,32 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: social_count
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
5
- prerelease:
4
+ version: 0.0.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Isaac Betesh
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-10-02 00:00:00.000000000 Z
11
+ date: 2013-10-03 00:00:00.000000000 Z
13
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
14
27
  - !ruby/object:Gem::Dependency
15
28
  name: fb_graph
16
29
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
30
  requirements:
19
31
  - - ! '>='
20
32
  - !ruby/object:Gem::Version
@@ -22,7 +34,6 @@ dependencies:
22
34
  type: :runtime
23
35
  prerelease: false
24
36
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
37
  requirements:
27
38
  - - ! '>='
28
39
  - !ruby/object:Gem::Version
@@ -30,7 +41,6 @@ dependencies:
30
41
  - !ruby/object:Gem::Dependency
31
42
  name: twitter_oauth
32
43
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
44
  requirements:
35
45
  - - ~>
36
46
  - !ruby/object:Gem::Version
@@ -38,7 +48,6 @@ dependencies:
38
48
  type: :runtime
39
49
  prerelease: false
40
50
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
51
  requirements:
43
52
  - - ~>
44
53
  - !ruby/object:Gem::Version
@@ -46,7 +55,6 @@ dependencies:
46
55
  - !ruby/object:Gem::Dependency
47
56
  name: bundler
48
57
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
58
  requirements:
51
59
  - - ~>
52
60
  - !ruby/object:Gem::Version
@@ -54,7 +62,6 @@ dependencies:
54
62
  type: :development
55
63
  prerelease: false
56
64
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
65
  requirements:
59
66
  - - ~>
60
67
  - !ruby/object:Gem::Version
@@ -62,7 +69,6 @@ dependencies:
62
69
  - !ruby/object:Gem::Dependency
63
70
  name: rake
64
71
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
72
  requirements:
67
73
  - - ! '>='
68
74
  - !ruby/object:Gem::Version
@@ -70,7 +76,6 @@ dependencies:
70
76
  type: :development
71
77
  prerelease: false
72
78
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
79
  requirements:
75
80
  - - ! '>='
76
81
  - !ruby/object:Gem::Version
@@ -78,7 +83,6 @@ dependencies:
78
83
  - !ruby/object:Gem::Dependency
79
84
  name: rspec
80
85
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
86
  requirements:
83
87
  - - ! '>='
84
88
  - !ruby/object:Gem::Version
@@ -86,7 +90,6 @@ dependencies:
86
90
  type: :development
87
91
  prerelease: false
88
92
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
93
  requirements:
91
94
  - - ! '>='
92
95
  - !ruby/object:Gem::Version
@@ -100,12 +103,14 @@ extensions: []
100
103
  extra_rdoc_files: []
101
104
  files:
102
105
  - .gitignore
106
+ - .rspec
103
107
  - Gemfile
104
108
  - LICENSE.txt
105
109
  - README.md
106
110
  - Rakefile
107
111
  - lib/social_count.rb
108
112
  - lib/social_count/api_base.rb
113
+ - lib/social_count/error.rb
109
114
  - lib/social_count/facebook_user.rb
110
115
  - lib/social_count/twitter_user.rb
111
116
  - lib/social_count/version.rb
@@ -119,33 +124,26 @@ files:
119
124
  homepage: https://github.com/betesh/social_count
120
125
  licenses:
121
126
  - MIT
127
+ metadata: {}
122
128
  post_install_message:
123
129
  rdoc_options: []
124
130
  require_paths:
125
131
  - lib
126
132
  required_ruby_version: !ruby/object:Gem::Requirement
127
- none: false
128
133
  requirements:
129
134
  - - ! '>='
130
135
  - !ruby/object:Gem::Version
131
136
  version: '0'
132
- segments:
133
- - 0
134
- hash: 1024359385876280514
135
137
  required_rubygems_version: !ruby/object:Gem::Requirement
136
- none: false
137
138
  requirements:
138
139
  - - ! '>='
139
140
  - !ruby/object:Gem::Version
140
141
  version: '0'
141
- segments:
142
- - 0
143
- hash: 1024359385876280514
144
142
  requirements: []
145
143
  rubyforge_project:
146
- rubygems_version: 1.8.25
144
+ rubygems_version: 2.1.5
147
145
  signing_key:
148
- specification_version: 3
146
+ specification_version: 4
149
147
  summary: ! '# SocialCount This gem is an incredibly ligh-weight wrapper for finding
150
148
  how many facebook friends and twitter followers someone has. ## Installation gem
151
149
  ''social_count'' # In your Gemfile $ gem install social_count # Install locally ##