lib/twitter_friendly/rest/collector.rb in twitter_friendly-1.2.1 vs lib/twitter_friendly/rest/collector.rb in twitter_friendly-1.2.2
- old
+ new
@@ -9,60 +9,50 @@
options[:count] = [max_count, total_count].min
collect_options = {call_count: call_count, total_count: total_count}
collect_with_max_id([], nil, collect_options) do |max_id|
options[:max_id] = max_id unless max_id.nil?
- result = send(method_name, *args)
-
- if method_name == :search
- result.attrs[:statuses]
- else
- if result.is_a?(Array) && result[0].respond_to?(:attrs)
- result.map(&:attrs)
- else
- result
- end
- end
+ send(method_name, *args)
end
end
- # @param method_name [Symbol]
- # @param user [Integer, String, nil]
- #
- # @option options [Integer] :count
def fetch_resources_with_cursor(method_name, *args)
options = args.dup.extract_options!
collect_with_cursor([], -1) do |next_cursor|
options[:cursor] = next_cursor unless next_cursor.nil?
send(method_name, *args)
end
end
+ private
+
def collect_with_max_id(collection, max_id, collect_options, &block)
tweets = yield(max_id)
- return collection if tweets.nil?
- collection.concat tweets
- if tweets.empty? || (collect_options[:call_count] -= 1) < 1
+ if tweets.nil? || tweets.empty? || (collect_options[:call_count] -= 1) < 1
collection.flatten
else
+ collection.concat(tweets)
collect_with_max_id(collection, tweets.last[:id] - 1, collect_options, &block)
end
end
- # @param user [Integer, String, nil]
- # @param collection [Array]
- # @param cursor [Integer]
- #
- # @option options [Integer] :count
def collect_with_cursor(collection, cursor, &block)
response = yield(cursor)
return collection if response.nil?
# Notice: If you call response.to_a, it automatically fetch all results and the results are not cached.
- collection.concat (response[:ids] || response[:users] || response[:lists])
- response[:next_cursor].zero? ? collection.flatten : collect_with_cursor(collection, response[:next_cursor], &block)
+
+ # cursor でリクエストするメソッドは cursor ごとキャッシュに保存するので、このメソッドで
+ # ids, users または lists でリソースを取得する必要がある。
+ collection.concat(response[:ids] || response[:users] || response[:lists])
+
+ if response[:next_cursor].zero?
+ collection.flatten
+ else
+ collect_with_cursor(collection, response[:next_cursor], &block)
+ end
end
end
end
end
\ No newline at end of file