twitter_with_auto_pagination 0.7.1 → 0.8.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d24f8c1ce5b6fe5c34dc42d1fe724eda13cb0114
4
- data.tar.gz: 9529ac4a7d18219ee4c0feb3468389680059747c
3
+ metadata.gz: 842345d2afa01f05557856bde019188e1ffe7183
4
+ data.tar.gz: ea0998abb411f7c0668ed9dbdff054fde3ef7c9a
5
5
  SHA512:
6
- metadata.gz: 450c6bd08a72b983d3662a6382b14ae378013b7b01717b7993292c64f2c6dbe46d92b6a87cff58e962c1eb47f23f64f63fa8ed6ef2d686b07d62272ca1e200dd
7
- data.tar.gz: d3d1c1addec1379d50d1363deedffe7b1ffc049e510ba09a321858af96e9da2e734721929b1b0c02665d4bd407b3d6b20e989b55b41fa528a5572c359b516347
6
+ metadata.gz: f8cff32cee7e020cb481428a24acf78b325464b4064ede0e71066681bd7bec297b305f0c0b7c6ffa2bfb99aaf410db23fb299eed5841ccc2c9b4fea6c4b5bd58
7
+ data.tar.gz: beb7cc9f6678583ce5ba52b6c33f4d1a4d0ff0643a883d30dcee9db105a3caef0a7e8a994ccabd24c63525d5ea47a8fb51f69bc5f7c940a0d17469e71efbcc59
@@ -11,7 +11,7 @@ module TwitterWithAutoPagination
11
11
  args[0] = verify_credentials.id if args.empty?
12
12
  instrument(__method__, nil, options) do
13
13
  fetch_cache_or_call_api(__method__, args[0], options) do
14
- collect_with_max_id(method(__method__).super_method, *args, options)
14
+ collect_with_max_id(method(__method__).super_method, *args, options).map { |s| s.attrs }
15
15
  end
16
16
  end
17
17
  end
@@ -46,11 +46,10 @@ module TwitterWithAutoPagination
46
46
 
47
47
  def _friends_serially(*args)
48
48
  options = {count: 200, include_user_entities: true, cursor: -1}.merge(args.extract_options!)
49
- options[:reduce] = false unless options.has_key?(:reduce)
50
49
  args[0] = verify_credentials.id if args.empty?
51
50
  instrument(__method__, nil, options) do
52
51
  fetch_cache_or_call_api(:friends, args[0], options) do
53
- collect_with_cursor(method(:friends).super_method, *args, options)
52
+ collect_with_cursor(method(:friends).super_method, *args, options).map { |u| u.to_hash }
54
53
  end
55
54
  end
56
55
  end
@@ -74,11 +73,10 @@ module TwitterWithAutoPagination
74
73
 
75
74
  def _followers_serially(*args)
76
75
  options = {count: 200, include_user_entities: true, cursor: -1}.merge(args.extract_options!)
77
- options[:reduce] = false unless options.has_key?(:reduce)
78
76
  args[0] = verify_credentials.id if args.empty?
79
77
  instrument(__method__, nil, options) do
80
78
  fetch_cache_or_call_api(:followers, args[0], options) do
81
- collect_with_cursor(method(:followers).super_method, *args, options)
79
+ collect_with_cursor(method(:followers).super_method, *args, options).map { |u| u.to_hash }
82
80
  end
83
81
  end
84
82
  end
@@ -7,10 +7,9 @@ module TwitterWithAutoPagination
7
7
 
8
8
  def search(*args)
9
9
  options = {count: 100, result_type: :recent, call_limit: 1}.merge(args.extract_options!)
10
- options[:reduce] = false
11
10
  instrument(__method__, nil, options) do
12
11
  fetch_cache_or_call_api(__method__, args[0], options) do
13
- collect_with_max_id(method(__method__).super_method, *args, options) { |response| response.attrs[:statuses] }
12
+ collect_with_max_id(method(__method__).super_method, *args, options) { |response| response.attrs[:statuses] }.map { |s| s.to_hash }
14
13
  end
15
14
  end
16
15
  end
@@ -9,7 +9,7 @@ module TwitterWithAutoPagination
9
9
  options = {count: 200, include_rts: true, call_limit: 3}.merge(args.extract_options!)
10
10
  instrument(__method__, nil, options) do
11
11
  fetch_cache_or_call_api(__method__, verify_credentials.id, options) do
12
- collect_with_max_id(method(__method__).super_method, options)
12
+ collect_with_max_id(method(__method__).super_method, options).map { |s| s.attrs }
13
13
  end
14
14
  end
15
15
  end
@@ -19,7 +19,7 @@ module TwitterWithAutoPagination
19
19
  args[0] = verify_credentials.id if args.empty?
20
20
  instrument(__method__, nil, options) do
21
21
  fetch_cache_or_call_api(__method__, args[0], options) do
22
- collect_with_max_id(method(__method__).super_method, *args, options)
22
+ collect_with_max_id(method(__method__).super_method, *args, options).map { |s| s.attrs }
23
23
  end
24
24
  end
25
25
  end
@@ -28,7 +28,7 @@ module TwitterWithAutoPagination
28
28
  options = {count: 200, include_rts: true, call_limit: 1}.merge(args.extract_options!)
29
29
  instrument(__method__, nil, options) do
30
30
  fetch_cache_or_call_api(__method__, verify_credentials.id, options) do
31
- collect_with_max_id(method(__method__).super_method, options)
31
+ collect_with_max_id(method(__method__).super_method, options).map { |s| s.attrs }
32
32
  end
33
33
  end
34
34
  end
@@ -10,7 +10,7 @@ module TwitterWithAutoPagination
10
10
  options = {skip_status: true}.merge(args.extract_options!)
11
11
  instrument(__method__, nil, options) do
12
12
  fetch_cache_or_call_api(__method__, args) do
13
- call_api(method(__method__).super_method, *args, options)
13
+ call_api(method(__method__).super_method, *args, options).to_hash
14
14
  end
15
15
  end
16
16
  end
@@ -30,7 +30,7 @@ module TwitterWithAutoPagination
30
30
  args[0] = verify_credentials.id if args.empty?
31
31
  instrument(__method__, nil, options) do
32
32
  fetch_cache_or_call_api(__method__, args[0], options) do
33
- call_api(method(__method__).super_method, *args, options)
33
+ call_api(method(__method__).super_method, *args, options).to_hash
34
34
  end
35
35
  end
36
36
  end
@@ -48,7 +48,7 @@ module TwitterWithAutoPagination
48
48
  instrument(__method__, nil, options) do
49
49
  Parallel.each_with_index(users_per_workers, in_threads: thread_size) do |users_per_worker, i|
50
50
  _users = fetch_cache_or_call_api(__method__, users_per_worker, options) do
51
- call_api(method(__method__).super_method, users_per_worker, options)
51
+ call_api(method(__method__).super_method, users_per_worker, options).map { |u| u.to_hash }
52
52
  end
53
53
 
54
54
  processed_users << {i: i, users: _users}
@@ -132,7 +132,8 @@ module TwitterWithAutoPagination
132
132
  "#{options[:super_operation]}-ids#{delim}#{Digest::MD5.hexdigest(user.join(','))}"
133
133
  when user.kind_of?(Array) && user.first.kind_of?(String)
134
134
  "#{options[:super_operation]}-sns#{delim}#{Digest::MD5.hexdigest(user.join(','))}"
135
- else raise "#{method_name.inspect} #{user.inspect}"
135
+ else
136
+ raise "#{method_name.inspect} #{user.inspect}"
136
137
  end
137
138
  when user.kind_of?(Integer)
138
139
  "id#{delim}#{user.to_s}"
@@ -144,7 +145,8 @@ module TwitterWithAutoPagination
144
145
  "sn#{delim}#{user}"
145
146
  when user.kind_of?(Twitter::User)
146
147
  "user#{delim}#{user.id.to_s}"
147
- else raise "#{method_name.inspect} #{user.inspect}"
148
+ else
149
+ raise "#{method_name.inspect} #{user.inspect}"
148
150
  end
149
151
 
150
152
  "#{method_name}#{delim}#{identifier}"
@@ -154,132 +156,25 @@ module TwitterWithAutoPagination
154
156
  file_cache_key(method_name, user, options)
155
157
  end
156
158
 
157
- PROFILE_SAVE_KEYS = %i(
158
- id
159
- name
160
- screen_name
161
- location
162
- description
163
- url
164
- protected
165
- followers_count
166
- friends_count
167
- listed_count
168
- favourites_count
169
- utc_offset
170
- time_zone
171
- geo_enabled
172
- verified
173
- statuses_count
174
- lang
175
- status
176
- profile_image_url_https
177
- profile_banner_url
178
- profile_link_color
179
- suspended
180
- verified
181
- entities
182
- created_at
183
- )
159
+ CODER = JSON
184
160
 
185
- STATUS_SAVE_KEYS = %i(
186
- created_at
187
- id
188
- text
189
- source
190
- truncated
191
- coordinates
192
- place
193
- entities
194
- user
195
- contributors
196
- is_quote_status
197
- retweet_count
198
- favorite_count
199
- favorited
200
- retweeted
201
- possibly_sensitive
202
- lang
203
- )
204
-
205
- # encode
206
- def encode_json(obj, caller_name, options = {})
207
- options[:reduce] = true unless options.has_key?(:reduce)
208
- case caller_name
209
- when :user_timeline, :home_timeline, :mentions_timeline, :favorites # Twitter::Tweet
210
- JSON.pretty_generate(obj.map { |o| o.attrs })
211
-
212
- when :search # Hash
213
- data =
214
- if options[:reduce]
215
- obj.map { |o| o.to_hash.slice(*STATUS_SAVE_KEYS) }
216
- else
217
- obj.map { |o| o.to_hash }
218
- end
219
- JSON.pretty_generate(data)
220
-
221
- when :friends, :followers # Hash
222
- data =
223
- if options[:reduce]
224
- obj.map { |o| o.to_hash.slice(*PROFILE_SAVE_KEYS) }
225
- else
226
- obj.map { |o| o.to_hash }
227
- end
228
- JSON.pretty_generate(data)
229
-
230
- when :friend_ids, :follower_ids # Integer
231
- JSON.pretty_generate(obj)
232
-
233
- when :verify_credentials # Twitter::User
234
- JSON.pretty_generate(obj.to_hash.slice(*PROFILE_SAVE_KEYS))
235
-
236
- when :user # Twitter::User
237
- JSON.pretty_generate(obj.to_hash.slice(*PROFILE_SAVE_KEYS))
238
-
239
- when :users, :friends_parallelly, :followers_parallelly # Twitter::User
240
- data =
241
- if options[:reduce]
242
- obj.map { |o| o.to_hash.slice(*PROFILE_SAVE_KEYS) }
243
- else
244
- obj.map { |o| o.to_hash }
245
- end
246
- JSON.pretty_generate(data)
247
-
248
- when :user? # true or false
249
- obj
250
-
251
- when :friendship? # true or false
252
- obj
161
+ def encode(obj)
162
+ obj.in?([true, false]) ? obj : CODER.dump(obj)
163
+ end
253
164
 
254
- else
255
- raise "#{__method__}: caller=#{caller_name} key=#{options[:key]} obj=#{obj.inspect}"
256
- end
165
+ def decode(str)
166
+ obj = str.kind_of?(String) ? CODER.load(str) : str
167
+ _to_mash(obj)
257
168
  end
258
169
 
259
- # decode
260
- def decode_json(json_str, caller_name, options = {})
261
- obj = json_str.kind_of?(String) ? JSON.parse(json_str) : json_str
170
+ def _to_mash(obj)
262
171
  case
263
- when obj.nil?
264
- obj
265
-
266
- when obj.kind_of?(Array) && obj.first.kind_of?(Hash)
267
- obj.map { |o| Hashie::Mash.new(o) }
268
-
269
- when obj.kind_of?(Array) && obj.first.kind_of?(Integer)
270
- obj
271
-
172
+ when obj.kind_of?(Array)
173
+ obj.map { |o| _to_mash(o) }
272
174
  when obj.kind_of?(Hash)
273
- Hashie::Mash.new(obj)
274
-
275
- when obj === true || obj === false
276
- obj
277
-
278
- when obj.kind_of?(Array) && obj.empty?
279
- obj
280
-
175
+ Hashie::Mash.new(obj.map { |k, v| [k, _to_mash(v)] }.to_h)
281
176
  else
282
- raise "#{__method__}: caller=#{caller_name} key=#{options[:key]} obj=#{obj.inspect}"
177
+ obj
283
178
  end
284
179
  end
285
180
 
@@ -292,11 +187,11 @@ module TwitterWithAutoPagination
292
187
  else
293
188
  cache.fetch(key, expires_in: 1.hour, race_condition_ttl: 5.minutes) do
294
189
  block_result = yield
295
- instrument('serialize', key, caller: method_name) { encode_json(block_result, method_name, options) }
190
+ instrument('serialize', key, caller: method_name) { encode(block_result) }
296
191
  end
297
192
  end
298
193
 
299
- instrument('deserialize', key, caller: method_name) { decode_json(fetch_result, method_name, options) }
194
+ instrument('deserialize', key, caller: method_name) { decode(fetch_result) }
300
195
  end
301
196
  end
302
197
  end
@@ -22,5 +22,5 @@ Gem::Specification.new do |spec|
22
22
  spec.required_ruby_version = '>= 2.3'
23
23
  spec.summary = spec.description
24
24
  spec.test_files = Dir.glob('spec/**/*')
25
- spec.version = '0.7.1'
25
+ spec.version = '0.8.0'
26
26
  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.7.1
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shinohara Teruki
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-06 00:00:00.000000000 Z
11
+ date: 2016-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: twitter