class RedditApi::Comments
Constants
- DEFAULT_MAX_MISSES
Attributes
client[R]
comment_factory[R]
last_count[RW]
max_misses[R]
misses[RW]
offset[RW]
query_factory[R]
Public Class Methods
new(args = {})
click to toggle source
# File lib/reddit_api/comments.rb, line 9 def initialize(args = {}) @client = args.fetch(:client, RedditApi::Client.new) @comment_factory = RedditApi::Comment @query_factory = RedditApi::Query @offset = nil @max_misses = args.fetch(:max_miss, DEFAULT_MAX_MISSES) @misses = args.fetch(:misses, 0) @last_count = 0 end
Public Instance Methods
most_recent_comments(user, count, offset = nil)
click to toggle source
# File lib/reddit_api/comments.rb, line 30 def most_recent_comments(user, count, offset = nil) comments_data = most_recent_comment_data(user.username, count, offset) build_all_comments(comments_data) end
most_recent_subreddits(user, count)
click to toggle source
# File lib/reddit_api/comments.rb, line 19 def most_recent_subreddits(user, count) subreddits = {} while subreddits.length < count && misses < max_misses comments = most_recent_comments(user, 100, offset) collect_subreddits(comments, count, subreddits) update_progress(comments, subreddits.length) end reset_collection_metrics subreddits.keys end
Private Instance Methods
build_all_comments(comments_data)
click to toggle source
# File lib/reddit_api/comments.rb, line 71 def build_all_comments(comments_data) comments_data.map! do |comment_data| build_comment(comment_data) end end
build_comment(comment_data)
click to toggle source
# File lib/reddit_api/comments.rb, line 77 def build_comment(comment_data) comment_factory.new(comment_data["data"]) end
build_query(username, count, offset)
click to toggle source
# File lib/reddit_api/comments.rb, line 49 def build_query(username, count, offset) endpoint = "user/#{username}/comments.json" query_factory.new(count: count, endpoint: endpoint, resource: :comment, offset: offset) end
collect_subreddits(comments, count, subreddits)
click to toggle source
# File lib/reddit_api/comments.rb, line 81 def collect_subreddits(comments, count, subreddits) comments.each do |comment| subreddits[comment.subreddit_name] = true break if subreddits.length == count end end
most_recent_comment_data(username, count, offset)
click to toggle source
# File lib/reddit_api/comments.rb, line 42 def most_recent_comment_data(username, count, offset) return [] if username == "[deleted]" query = build_query(username, count, offset) client.get(query) query.captured_records end
reset_collection_metrics()
click to toggle source
# File lib/reddit_api/comments.rb, line 66 def reset_collection_metrics self.misses = 0 self.offset = nil end
update_progress(comments, new_count)
click to toggle source
# File lib/reddit_api/comments.rb, line 57 def update_progress(comments, new_count) if comments.empty? || last_count >= new_count self.misses += 1 else self.offset = comments.last.reddit_id self.last_count += new_count end end