twitter_with_auto_pagination 0.9.4 → 0.9.5
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 +4 -4
- data/lib/twitter_with_auto_pagination/collector.rb +3 -1
- data/lib/twitter_with_auto_pagination/rest/friends_and_followers.rb +1 -1
- data/lib/twitter_with_auto_pagination/rest/lists.rb +2 -2
- data/spec/twitter_with_auto_pagination/rest/friends_and_followers_spec.rb +45 -3
- data/twitter_with_auto_pagination.gemspec +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: adeef994e42b9c1f9918c03e3bbb9fc01bc9589b
|
4
|
+
data.tar.gz: 8632de6d1cb4862d10993a393e29a929ff4512ca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e13248d55c2f853622545a24e49b8803f08d21cb8fb0dee51e82d84ba8c775519fd1e32b3f9b309b6ce453eee70bfa0d7dfdd7ba338e8cb7759be5b028aab11a
|
7
|
+
data.tar.gz: a894177e7ae82b9c4f808f5643a931553b0be253dcc33848f28ba4a906deece0aa388e4c741e04515ce226fb7bf1078578ea5e8a81f78918b4f499936a99f0ff
|
@@ -11,7 +11,9 @@ module TwitterWithAutoPagination
|
|
11
11
|
def collect_with_cursor(collection = [], cursor = nil, &block)
|
12
12
|
response = yield(cursor)
|
13
13
|
return collection if response.nil?
|
14
|
-
|
14
|
+
|
15
|
+
# Notice: If you call response.to_a, it automatically fetch all results and the results are not cached.
|
16
|
+
collection += (response.attrs[:ids] || response.attrs[:users] || response.attrs[:lists])
|
15
17
|
response.attrs[:next_cursor].zero? ? collection.flatten : collect_with_cursor(collection, response.attrs[:next_cursor], &block)
|
16
18
|
end
|
17
19
|
end
|
@@ -16,7 +16,7 @@ module TwitterWithAutoPagination
|
|
16
16
|
options = {count: MAX_IDS_PER_REQUEST, cursor: -1}.merge(args.extract_options!)
|
17
17
|
|
18
18
|
collect_with_cursor do |next_cursor|
|
19
|
-
options[:
|
19
|
+
options[:cursor] = next_cursor unless next_cursor.nil?
|
20
20
|
twitter.send(name, *args, options)
|
21
21
|
end
|
22
22
|
end
|
@@ -10,7 +10,7 @@ module TwitterWithAutoPagination
|
|
10
10
|
options = {count: 1000, cursor: -1}.merge(args.extract_options!)
|
11
11
|
|
12
12
|
collect_with_cursor do |next_cursor|
|
13
|
-
options[:
|
13
|
+
options[:cursor] = next_cursor unless next_cursor.nil?
|
14
14
|
twitter.send(:memberships, *args, options)
|
15
15
|
end
|
16
16
|
end
|
@@ -20,7 +20,7 @@ module TwitterWithAutoPagination
|
|
20
20
|
options = {count: 5000, skip_status: 1, cursor: -1}.merge(args.extract_options!)
|
21
21
|
|
22
22
|
collect_with_cursor do |next_cursor|
|
23
|
-
options[:
|
23
|
+
options[:cursor] = next_cursor unless next_cursor.nil?
|
24
24
|
twitter.send(:list_members, *args, options)
|
25
25
|
end
|
26
26
|
end
|
@@ -19,6 +19,15 @@ describe TwitterWithAutoPagination::REST::FriendsAndFollowers do
|
|
19
19
|
}
|
20
20
|
end
|
21
21
|
|
22
|
+
let(:config3) do
|
23
|
+
{
|
24
|
+
consumer_key: ENV['CK3'],
|
25
|
+
consumer_secret: ENV['CS3'],
|
26
|
+
access_token: ENV['AT3'],
|
27
|
+
access_token_secret: ENV['ATS3']
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
22
31
|
let(:client) { TwitterWithAutoPagination::Client.new(config) }
|
23
32
|
let(:client2) { TwitterWithAutoPagination::Client.new(config2) }
|
24
33
|
|
@@ -28,7 +37,7 @@ describe TwitterWithAutoPagination::REST::FriendsAndFollowers do
|
|
28
37
|
before do
|
29
38
|
client.cache.clear
|
30
39
|
client.twitter.send(:user_id) # Call verify_credentials
|
31
|
-
client2.twitter.send(:user_id)
|
40
|
+
client2.twitter.send(:user_id)
|
32
41
|
$fetch_called = $request_called = false
|
33
42
|
$fetch_count = $request_count = 0
|
34
43
|
end
|
@@ -58,6 +67,10 @@ describe TwitterWithAutoPagination::REST::FriendsAndFollowers do
|
|
58
67
|
describe '#friend_ids' do
|
59
68
|
let(:name) { :friend_ids }
|
60
69
|
|
70
|
+
it 'matches original one' do
|
71
|
+
expect(client.friend_ids).to match_twitter(client.twitter.friend_ids.attrs[:ids])
|
72
|
+
end
|
73
|
+
|
61
74
|
context 'with one param' do
|
62
75
|
let(:params) { [id] }
|
63
76
|
let(:params2) { [id2] }
|
@@ -88,6 +101,27 @@ describe TwitterWithAutoPagination::REST::FriendsAndFollowers do
|
|
88
101
|
describe '#follower_ids' do
|
89
102
|
let(:name) { :follower_ids }
|
90
103
|
|
104
|
+
it 'matches original one' do
|
105
|
+
expect(client.follower_ids).to match_twitter(client.twitter.follower_ids.attrs[:ids])
|
106
|
+
end
|
107
|
+
|
108
|
+
context 'a user who has too many followers is specified' do
|
109
|
+
let(:client) { TwitterWithAutoPagination::Client.new(config3) }
|
110
|
+
let(:id) { 187385226 }
|
111
|
+
let!(:followers_count) { client.user(id)[:followers_count] }
|
112
|
+
|
113
|
+
before do
|
114
|
+
client.twitter.send(:user_id)
|
115
|
+
$fetch_called = $request_called = false
|
116
|
+
$fetch_count = $request_count = 0
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'automatically fetches all followers' do
|
120
|
+
request_count = followers_count / 5000 + (followers_count % 5000 == 0 ? 0 : 1)
|
121
|
+
expect { client.follower_ids(id) }.to fetch & request.exactly(request_count).times
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
91
125
|
context 'with one param' do
|
92
126
|
let(:params) { [id] }
|
93
127
|
let(:params2) { [id2] }
|
@@ -149,13 +183,21 @@ describe TwitterWithAutoPagination::REST::FriendsAndFollowers do
|
|
149
183
|
it 'calls #friend_ids_and_follower_ids with unique ids' do
|
150
184
|
expect(client).to receive(:friend_ids_and_follower_ids).with(id, any_args).and_return([[id], [id]])
|
151
185
|
allow(client).to receive(:users_internal).with([id], any_args).and_return([{id: id}])
|
152
|
-
|
186
|
+
|
187
|
+
friends, followers = client.friends_and_followers(id)
|
188
|
+
|
189
|
+
expect(friends).to match_twitter([{id: id}])
|
190
|
+
expect(followers).to match_twitter([{id: id}])
|
153
191
|
end
|
154
192
|
|
155
193
|
it 'calls #users_internal with unique ids' do
|
156
194
|
allow(client).to receive(:friend_ids_and_follower_ids).with(id, any_args).and_return([[id], [id]])
|
157
195
|
expect(client).to receive(:users_internal).with([id], any_args).and_return([{id: id}])
|
158
|
-
|
196
|
+
|
197
|
+
friends, followers = client.friends_and_followers(id)
|
198
|
+
|
199
|
+
expect(friends).to match_twitter([{id: id}])
|
200
|
+
expect(followers).to match_twitter([{id: id}])
|
159
201
|
end
|
160
202
|
end
|
161
203
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: twitter_with_auto_pagination
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shinohara Teruki
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: twitter
|