class RedditApi::Users
Constants
- DEFAULT_MAX_MISSES
Attributes
last_count[RW]
max_misses[R]
misses[RW]
post_api[R]
user_factory[R]
Public Class Methods
new(args = {})
click to toggle source
# File lib/reddit_api/users.rb, line 8 def initialize(args = {}) @post_api = args.fetch(:posts, RedditApi::Posts.new) @user_factory = RedditApi::User @misses = args.fetch(:misses, 0) @max_misses = args.fetch(:max_miss, DEFAULT_MAX_MISSES) @last_count = 0 end
Public Instance Methods
top_posters(subreddit, count)
click to toggle source
# File lib/reddit_api/users.rb, line 16 def top_posters(subreddit, count) users = {} while users.length < count && misses < max_misses posts = post_api.top(subreddit, count) collect_users(posts, count, users) update_misses(users.length) end reset_collection_metrics users.values end
Private Instance Methods
aggregate_users(new_users, collected_users)
click to toggle source
# File lib/reddit_api/users.rb, line 64 def aggregate_users(new_users, collected_users) self.last_count = collected_users.length new_users.each do |user| collected_users[user.username] = user end end
build_all_users(users_data)
click to toggle source
# File lib/reddit_api/users.rb, line 54 def build_all_users(users_data) users_data.map! do |user_data| build_user(user_data) end end
build_user(user_data)
click to toggle source
# File lib/reddit_api/users.rb, line 60 def build_user(user_data) user_factory.new(user_data) end
collect_users(posts, count, users)
click to toggle source
# File lib/reddit_api/users.rb, line 32 def collect_users(posts, count, users) usernames = get_usernames(posts, count, users) user_data = format_user_data(usernames) new_users = build_all_users(user_data) aggregate_users(new_users, users) end
format_user_data(usernames)
click to toggle source
# File lib/reddit_api/users.rb, line 48 def format_user_data(usernames) usernames.map! do |username| { "username" => username } end end
get_usernames(posts, count, users)
click to toggle source
# File lib/reddit_api/users.rb, line 39 def get_usernames(posts, count, users) usernames = [] posts.each_with_index do |post, i| break if (users.length + i) == count usernames << post.author end usernames end
reset_collection_metrics()
click to toggle source
# File lib/reddit_api/users.rb, line 77 def reset_collection_metrics self.misses = 0 self.last_count = 0 end
update_misses(new_count)
click to toggle source
# File lib/reddit_api/users.rb, line 71 def update_misses(new_count) if (new_count - last_count).zero? self.misses += 1 end end