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