35 lines
651 B
Ruby
35 lines
651 B
Ruby
class UserSimilarityPresenter
|
|
attr_reader :report, :user_ids, :not_ready
|
|
|
|
def initialize(report)
|
|
@report = report
|
|
fetch
|
|
end
|
|
|
|
def not_ready?
|
|
not_ready
|
|
end
|
|
|
|
def insufficient_data?
|
|
report.user.favorite_count < 500
|
|
end
|
|
|
|
def fetch
|
|
user_ids = report.fetch_similar_user_ids
|
|
|
|
if user_ids == "not ready"
|
|
@not_ready = true
|
|
else
|
|
@user_ids = user_ids.scan(/\d+/).slice(0, 10)
|
|
end
|
|
end
|
|
|
|
def each_user(&block)
|
|
User.where(id: user_ids).each(&block)
|
|
end
|
|
|
|
def each_favorite_for(user, &block)
|
|
user.favorites.limit(6).joins(:post).reorder("favorites.id desc").map(&:post).each(&block)
|
|
end
|
|
end
|