share_counts 0.1.1 → 0.1.2
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.rdoc +0 -5
- data/lib/share_counts.rb +1 -1
- data/lib/share_counts/common.rb +4 -0
- data/lib/share_counts/reddit.rb +1 -1
- data/share_counts.gemspec +1 -1
- data/test/test_helper.rb +4 -0
- data/test/test_reddit_module.rb +2 -2
- data/test/test_share_counts.rb +28 -29
- metadata +39 -2
- data/lib/share_counts/array.rb +0 -5
data/README.rdoc
CHANGED
@@ -169,11 +169,6 @@ And, if needed, your can clear the cached values:
|
|
169
169
|
|
170
170
|
However the gem will namespace all the keys as you can see, in case you also use Redis for something else in the same app.
|
171
171
|
|
172
|
-
== TODO
|
173
|
-
|
174
|
-
* specs
|
175
|
-
|
176
|
-
|
177
172
|
== Authors
|
178
173
|
|
179
174
|
* Vito Botta ( http://vitobotta.com )
|
data/lib/share_counts.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
%w( rubygems rest_client json nokogiri redis ).each{ |lib| require lib }
|
2
|
-
%w(
|
2
|
+
%w( caching common reddit ).each{ |file| load File.expand_path( File.join( File.dirname( __FILE__ ), "share_counts", "#{file}.rb" ) ) } # TODO: replace load with require
|
3
3
|
|
4
4
|
module ShareCounts
|
5
5
|
|
data/lib/share_counts/common.rb
CHANGED
data/lib/share_counts/reddit.rb
CHANGED
@@ -6,7 +6,7 @@ module ShareCounts
|
|
6
6
|
def self.info_for url, raise_exceptions = false
|
7
7
|
try("reddit-details", url, raise_exceptions) {
|
8
8
|
data = extract_info from_json( "http://www.reddit.com/api/info.json", :url => url ), :selector => "data/children/data"
|
9
|
-
data.select{|k, v| ["permalink", "score"].include? k }.map{|x| { x[0] => x[1] } }
|
9
|
+
ShareCounts.to_merged_hash(data.select{|k, v| ["permalink", "score"].include? k }.map{|x| { x[0] => x[1] } })
|
10
10
|
}
|
11
11
|
end
|
12
12
|
|
data/share_counts.gemspec
CHANGED
data/test/test_helper.rb
CHANGED
data/test/test_reddit_module.rb
CHANGED
@@ -2,12 +2,12 @@ require File.expand_path(File.join(File.dirname(__FILE__), "test_helper"))
|
|
2
2
|
|
3
3
|
class RedditModuleTest < ActiveSupport::TestCase
|
4
4
|
test ".info_for should return a hash with score and permalink for the given url" do
|
5
|
-
stub_request(:get, Reddit.api).with(:query => Reddit.params
|
5
|
+
stub_request(:get, Reddit.api).with(:query => to_merged_hash(Reddit.params)).to_return(:body => Reddit.url_info_json)
|
6
6
|
assert_equal({ "permalink" => "/r/ruby/comments/ffik5/geeky_cv_d/", "score" => 30}, ShareCounts::Reddit.info_for(SOME_URL))
|
7
7
|
end
|
8
8
|
|
9
9
|
test ".info_for with raise_exceptions=true should raise exception" do
|
10
|
-
stub_request(:get, Reddit.api).with(:query => Reddit.params
|
10
|
+
stub_request(:get, Reddit.api).with(:query => to_merged_hash(Reddit.params)).to_raise(Exception)
|
11
11
|
assert_raise(Exception) { ShareCounts::Reddit.info_for(SOME_URL, true) }
|
12
12
|
end
|
13
13
|
|
data/test/test_share_counts.rb
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
require File.expand_path(File.join(File.dirname(__FILE__), "test_helper"))
|
2
2
|
|
3
3
|
class ShareCountsTest < ActiveSupport::TestCase
|
4
|
-
|
5
4
|
def stub_all
|
6
|
-
stub_request(:get, Reddit.api).with(:query => Reddit.params
|
7
|
-
stub_request(:get, Digg.api).with(:query => Digg.params
|
8
|
-
stub_request(:get, Facebook.api).with(:query => Facebook.params
|
9
|
-
stub_request(:get, Twitter.api).with(:query => Twitter.params
|
10
|
-
stub_request(:get, Linkedin.api).with(:query => Linkedin.params
|
11
|
-
stub_request(:get, GoogleBuzz.api).with(:query => GoogleBuzz.params
|
12
|
-
stub_request(:get, StumbleUpon.api).with(:query => StumbleUpon.params
|
5
|
+
stub_request(:get, Reddit.api).with(:query => to_merged_hash(Reddit.params)).to_return(:body => Reddit.json)
|
6
|
+
stub_request(:get, Digg.api).with(:query => to_merged_hash(Digg.params)).to_return(:body => Digg.json)
|
7
|
+
stub_request(:get, Facebook.api).with(:query => to_merged_hash(Facebook.params)).to_return(:body => Facebook.json)
|
8
|
+
stub_request(:get, Twitter.api).with(:query => to_merged_hash(Twitter.params)).to_return(:body => Twitter.json)
|
9
|
+
stub_request(:get, Linkedin.api).with(:query => to_merged_hash(Linkedin.params)).to_return(:body => Linkedin.json)
|
10
|
+
stub_request(:get, GoogleBuzz.api).with(:query => to_merged_hash(GoogleBuzz.params)).to_return(:body => GoogleBuzz.json)
|
11
|
+
stub_request(:get, StumbleUpon.api).with(:query => to_merged_hash(StumbleUpon.params)).to_return(:body => StumbleUpon.html)
|
13
12
|
end
|
14
13
|
|
15
14
|
test ".supported_networks returns the supported networks" do
|
@@ -17,7 +16,7 @@ class ShareCountsTest < ActiveSupport::TestCase
|
|
17
16
|
end
|
18
17
|
|
19
18
|
test ".make_request makes a request to a remove service and returns the response" do
|
20
|
-
stub_request(:get, SOME_URL).with(:query => SOME_PARAMS
|
19
|
+
stub_request(:get, SOME_URL).with(:query => to_merged_hash(SOME_PARAMS)).to_return(:body => "---RESPONSE---")
|
21
20
|
|
22
21
|
assert_equal("---RESPONSE---", ShareCounts.send(:make_request, SOME_URL, *SOME_PARAMS ))
|
23
22
|
assert_equal(0, @stdout.string.split("\n").size)
|
@@ -56,7 +55,7 @@ class ShareCountsTest < ActiveSupport::TestCase
|
|
56
55
|
end
|
57
56
|
|
58
57
|
test ".make_request should strip the callback call from the JSON response if a callback has been specified" do
|
59
|
-
stub_request(:get, SOME_URL).with(:query => SOME_PARAMS
|
58
|
+
stub_request(:get, SOME_URL).with(:query => to_merged_hash(SOME_PARAMS)).
|
60
59
|
to_return(:body => "myCallback(JSON_DATA);").then.
|
61
60
|
to_return(:body => "myCallback(JSON_DATA)")
|
62
61
|
|
@@ -68,7 +67,7 @@ class ShareCountsTest < ActiveSupport::TestCase
|
|
68
67
|
|
69
68
|
test ".from_json parses the JSON response returned by a remote service" do
|
70
69
|
stub_request(:get, SOME_URL).to_return(:body => "{\"a\":1,\"b\":2}").then.to_return(:body => "[\"a\", \"b\", 1, 2]")
|
71
|
-
stub_request(:get, SOME_URL).with(:query => SOME_PARAMS
|
70
|
+
stub_request(:get, SOME_URL).with(:query => to_merged_hash(SOME_PARAMS)).to_return(:body => "myCallback({\"a\":1,\"b\":2})")
|
72
71
|
|
73
72
|
assert_equal({ "a" => 1, "b" => 2 }, ShareCounts.send(:from_json, SOME_URL))
|
74
73
|
assert_equal(["a", "b", 1, 2], ShareCounts.send(:from_json, SOME_URL))
|
@@ -89,82 +88,82 @@ class ShareCountsTest < ActiveSupport::TestCase
|
|
89
88
|
end
|
90
89
|
|
91
90
|
test ".reddit should return the reddit score" do
|
92
|
-
stub_request(:get, Reddit.api).with(:query => Reddit.params
|
91
|
+
stub_request(:get, Reddit.api).with(:query => to_merged_hash(Reddit.params)).to_return(:body => Reddit.json)
|
93
92
|
assert_equal(31, ShareCounts.reddit(SOME_URL))
|
94
93
|
end
|
95
94
|
|
96
95
|
test ".reddit with raise_exceptions=true should raise exception" do
|
97
|
-
stub_request(:get, Reddit.api).with(:query => Reddit.params
|
96
|
+
stub_request(:get, Reddit.api).with(:query => to_merged_hash(Reddit.params)).to_raise(Exception)
|
98
97
|
assert_raise(Exception) { ShareCounts.reddit(SOME_URL, true) }
|
99
98
|
end
|
100
99
|
|
101
100
|
test ".digg should return the digg score" do
|
102
|
-
stub_request(:get, Digg.api).with(:query => Digg.params
|
101
|
+
stub_request(:get, Digg.api).with(:query => to_merged_hash(Digg.params)).to_return(:body => Digg.json)
|
103
102
|
assert_equal(1, ShareCounts.digg(SOME_URL))
|
104
103
|
end
|
105
104
|
|
106
105
|
test ".digg with raise_exceptions=true should raise exception" do
|
107
|
-
stub_request(:get, Digg.api).with(:query => Digg.params
|
106
|
+
stub_request(:get, Digg.api).with(:query => to_merged_hash(Digg.params)).to_raise(Exception)
|
108
107
|
assert_raise(Exception) { ShareCounts.digg(SOME_URL, true) }
|
109
108
|
end
|
110
109
|
|
111
110
|
test ".twitter should return the twitter score" do
|
112
|
-
stub_request(:get, Twitter.api).with(:query => Twitter.params
|
111
|
+
stub_request(:get, Twitter.api).with(:query => to_merged_hash(Twitter.params)).to_return(:body => Twitter.json)
|
113
112
|
assert_equal(35, ShareCounts.twitter(SOME_URL))
|
114
113
|
end
|
115
114
|
|
116
115
|
test ".twitter with raise_exceptions=true should raise exception" do
|
117
|
-
stub_request(:get, Twitter.api).with(:query => Twitter.params
|
116
|
+
stub_request(:get, Twitter.api).with(:query => to_merged_hash(Twitter.params)).to_raise(Exception)
|
118
117
|
assert_raise(Exception) { ShareCounts.twitter(SOME_URL, true) }
|
119
118
|
end
|
120
119
|
|
121
120
|
test ".facebook should return the facebook score" do
|
122
|
-
stub_request(:get, Facebook.api).with(:query => Facebook.params
|
121
|
+
stub_request(:get, Facebook.api).with(:query => to_merged_hash(Facebook.params)).to_return(:body => Facebook.json)
|
123
122
|
assert_equal(23, ShareCounts.facebook(SOME_URL))
|
124
123
|
end
|
125
124
|
|
126
125
|
test ".facebook with raise_exceptions=true should raise exception" do
|
127
|
-
stub_request(:get, Facebook.api).with(:query => Facebook.params
|
126
|
+
stub_request(:get, Facebook.api).with(:query => to_merged_hash(Facebook.params)).to_raise(Exception)
|
128
127
|
assert_raise(Exception) { ShareCounts.facebook(SOME_URL, true) }
|
129
128
|
end
|
130
129
|
|
131
130
|
test ".linkedin should return the linkedin score" do
|
132
|
-
stub_request(:get, Linkedin.api).with(:query => Linkedin.params
|
131
|
+
stub_request(:get, Linkedin.api).with(:query => to_merged_hash(Linkedin.params)).to_return(:body => Linkedin.json)
|
133
132
|
assert_equal(23, ShareCounts.linkedin(SOME_URL))
|
134
133
|
end
|
135
134
|
|
136
135
|
test ".linkedin with raise_exceptions=true should raise exception" do
|
137
|
-
stub_request(:get, Linkedin.api).with(:query => Linkedin.params
|
136
|
+
stub_request(:get, Linkedin.api).with(:query => to_merged_hash(Linkedin.params)).to_raise(Exception)
|
138
137
|
assert_raise(Exception) { ShareCounts.linkedin(SOME_URL, true) }
|
139
138
|
end
|
140
139
|
|
141
140
|
test ".googlebuzz should return the googlebuzz score" do
|
142
|
-
stub_request(:get, GoogleBuzz.api).with(:query => GoogleBuzz.params
|
141
|
+
stub_request(:get, GoogleBuzz.api).with(:query => to_merged_hash(GoogleBuzz.params)).to_return(:body => GoogleBuzz.json)
|
143
142
|
assert_equal(1, ShareCounts.googlebuzz(SOME_URL))
|
144
143
|
end
|
145
144
|
|
146
145
|
test ".googlebuzz with raise_exceptions=true should raise exception" do
|
147
|
-
stub_request(:get, GoogleBuzz.api).with(:query => GoogleBuzz.params
|
146
|
+
stub_request(:get, GoogleBuzz.api).with(:query => to_merged_hash(GoogleBuzz.params)).to_raise(Exception)
|
148
147
|
assert_raise(Exception) { ShareCounts.googlebuzz(SOME_URL, true) }
|
149
148
|
end
|
150
149
|
|
151
150
|
test ".stumbleupon should return the stumbleupon score" do
|
152
|
-
stub_request(:get, StumbleUpon.api).with(:query => StumbleUpon.params
|
151
|
+
stub_request(:get, StumbleUpon.api).with(:query => to_merged_hash(StumbleUpon.params)).to_return(:body => StumbleUpon.html)
|
153
152
|
assert_equal(6, ShareCounts.stumbleupon(SOME_URL))
|
154
153
|
end
|
155
154
|
|
156
155
|
test ".stumbleupon with raise_exceptions=true should raise exception" do
|
157
|
-
stub_request(:get, StumbleUpon.api).with(:query => StumbleUpon.params
|
156
|
+
stub_request(:get, StumbleUpon.api).with(:query => to_merged_hash(StumbleUpon.params)).to_raise(Exception)
|
158
157
|
assert_raise(Exception) { ShareCounts.stumbleupon(SOME_URL, true) }
|
159
158
|
end
|
160
159
|
|
161
160
|
test ".reddit_with_permalink should return a hash with Reddit score and permalink" do
|
162
|
-
stub_request(:get, Reddit.api).with(:query => Reddit.params
|
161
|
+
stub_request(:get, Reddit.api).with(:query => to_merged_hash(Reddit.params)).to_return(:body => Reddit.json)
|
163
162
|
assert_equal({ "permalink" => "/r/ruby/comments/ffik5/geeky_cv_d/", "score" => 31 }, ShareCounts.reddit_with_permalink(SOME_URL))
|
164
163
|
end
|
165
164
|
|
166
165
|
test ".reddit_with_permalink with raise_exceptions=true should raise exception" do
|
167
|
-
stub_request(:get, Reddit.api).with(:query => Reddit.params
|
166
|
+
stub_request(:get, Reddit.api).with(:query => to_merged_hash(Reddit.params)).to_raise(Exception)
|
168
167
|
assert_raise(Exception) { ShareCounts.reddit_with_permalink(SOME_URL, true) }
|
169
168
|
end
|
170
169
|
|
@@ -174,8 +173,8 @@ class ShareCountsTest < ActiveSupport::TestCase
|
|
174
173
|
end
|
175
174
|
|
176
175
|
test ".selected should only return scores for the networks specified" do
|
177
|
-
stub_request(:get, Twitter.api).with(:query => Twitter.params
|
178
|
-
stub_request(:get, Linkedin.api).with(:query => Linkedin.params
|
176
|
+
stub_request(:get, Twitter.api).with(:query => to_merged_hash(Twitter.params)).to_return(:body => Twitter.json)
|
177
|
+
stub_request(:get, Linkedin.api).with(:query => to_merged_hash(Linkedin.params)).to_return(:body => Linkedin.json)
|
179
178
|
|
180
179
|
assert_equal({ :twitter => 35, :linkedin => 23 }, ShareCounts.selected(SOME_URL, ["twitter", "linkedin"]))
|
181
180
|
end
|
metadata
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: share_counts
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 31
|
4
5
|
prerelease:
|
5
|
-
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 2
|
10
|
+
version: 0.1.2
|
6
11
|
platform: ruby
|
7
12
|
authors:
|
8
13
|
- Vito Botta
|
@@ -21,6 +26,9 @@ dependencies:
|
|
21
26
|
requirements:
|
22
27
|
- - ">="
|
23
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
24
32
|
version: "0"
|
25
33
|
type: :runtime
|
26
34
|
version_requirements: *id001
|
@@ -32,6 +40,9 @@ dependencies:
|
|
32
40
|
requirements:
|
33
41
|
- - ">="
|
34
42
|
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
44
|
+
segments:
|
45
|
+
- 0
|
35
46
|
version: "0"
|
36
47
|
type: :runtime
|
37
48
|
version_requirements: *id002
|
@@ -43,6 +54,9 @@ dependencies:
|
|
43
54
|
requirements:
|
44
55
|
- - ">="
|
45
56
|
- !ruby/object:Gem::Version
|
57
|
+
hash: 3
|
58
|
+
segments:
|
59
|
+
- 0
|
46
60
|
version: "0"
|
47
61
|
type: :runtime
|
48
62
|
version_requirements: *id003
|
@@ -54,6 +68,9 @@ dependencies:
|
|
54
68
|
requirements:
|
55
69
|
- - ">="
|
56
70
|
- !ruby/object:Gem::Version
|
71
|
+
hash: 3
|
72
|
+
segments:
|
73
|
+
- 0
|
57
74
|
version: "0"
|
58
75
|
type: :runtime
|
59
76
|
version_requirements: *id004
|
@@ -65,6 +82,9 @@ dependencies:
|
|
65
82
|
requirements:
|
66
83
|
- - ">="
|
67
84
|
- !ruby/object:Gem::Version
|
85
|
+
hash: 3
|
86
|
+
segments:
|
87
|
+
- 0
|
68
88
|
version: "0"
|
69
89
|
type: :development
|
70
90
|
version_requirements: *id005
|
@@ -76,6 +96,9 @@ dependencies:
|
|
76
96
|
requirements:
|
77
97
|
- - ">="
|
78
98
|
- !ruby/object:Gem::Version
|
99
|
+
hash: 3
|
100
|
+
segments:
|
101
|
+
- 0
|
79
102
|
version: "0"
|
80
103
|
type: :development
|
81
104
|
version_requirements: *id006
|
@@ -87,6 +110,9 @@ dependencies:
|
|
87
110
|
requirements:
|
88
111
|
- - ">="
|
89
112
|
- !ruby/object:Gem::Version
|
113
|
+
hash: 3
|
114
|
+
segments:
|
115
|
+
- 0
|
90
116
|
version: "0"
|
91
117
|
type: :development
|
92
118
|
version_requirements: *id007
|
@@ -98,6 +124,9 @@ dependencies:
|
|
98
124
|
requirements:
|
99
125
|
- - ">="
|
100
126
|
- !ruby/object:Gem::Version
|
127
|
+
hash: 3
|
128
|
+
segments:
|
129
|
+
- 0
|
101
130
|
version: "0"
|
102
131
|
type: :development
|
103
132
|
version_requirements: *id008
|
@@ -109,6 +138,9 @@ dependencies:
|
|
109
138
|
requirements:
|
110
139
|
- - ">="
|
111
140
|
- !ruby/object:Gem::Version
|
141
|
+
hash: 3
|
142
|
+
segments:
|
143
|
+
- 0
|
112
144
|
version: "0"
|
113
145
|
type: :development
|
114
146
|
version_requirements: *id009
|
@@ -131,7 +163,6 @@ files:
|
|
131
163
|
- autotest/discover.rb
|
132
164
|
- autotest/rules.rb
|
133
165
|
- lib/share_counts.rb
|
134
|
-
- lib/share_counts/array.rb
|
135
166
|
- lib/share_counts/caching.rb
|
136
167
|
- lib/share_counts/common.rb
|
137
168
|
- lib/share_counts/reddit.rb
|
@@ -162,12 +193,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
162
193
|
requirements:
|
163
194
|
- - ">="
|
164
195
|
- !ruby/object:Gem::Version
|
196
|
+
hash: 3
|
197
|
+
segments:
|
198
|
+
- 0
|
165
199
|
version: "0"
|
166
200
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
167
201
|
none: false
|
168
202
|
requirements:
|
169
203
|
- - ">="
|
170
204
|
- !ruby/object:Gem::Version
|
205
|
+
hash: 3
|
206
|
+
segments:
|
207
|
+
- 0
|
171
208
|
version: "0"
|
172
209
|
requirements: []
|
173
210
|
|