80 lines
1.6 KiB
Ruby
80 lines
1.6 KiB
Ruby
class UserPagePresenter
|
|
|
|
PER_PAGE = 15
|
|
|
|
attr_reader :user, :current_user, :policy, :page, :per_page
|
|
|
|
def self.build(user, current_user, page = nil, per_page = nil)
|
|
policy = Pundit.policy(current_user, user)
|
|
new(user.decorate, current_user, policy, page || 1, per_page || PER_PAGE)
|
|
end
|
|
|
|
def initialize(user, current_user, policy, page, per_page)
|
|
@user = user
|
|
@current_user = current_user
|
|
@policy = policy
|
|
@page = page
|
|
@per_page = per_page
|
|
end
|
|
|
|
def title
|
|
"#{user.display_name}'s profile".html_safe
|
|
end
|
|
|
|
def user_full_name
|
|
user.full_name
|
|
end
|
|
|
|
def user_joined_at
|
|
user.joined_at
|
|
end
|
|
|
|
def user_avatar_image_tag
|
|
user.avatar_image_tag
|
|
end
|
|
|
|
def show_settings?
|
|
policy.update?
|
|
end
|
|
|
|
def asciicast_count_text(h)
|
|
if current_users_profile?
|
|
count = user.asciicast_count
|
|
if count > 0
|
|
count = h.pluralize(count, 'asciicast')
|
|
"You have recorded #{count}"
|
|
else
|
|
"Record your first asciicast"
|
|
end
|
|
else
|
|
count = user.public_asciicast_count
|
|
if count > 0
|
|
count = h.pluralize(count, 'public asciicast')
|
|
"#{count} by #{user.display_name}"
|
|
else
|
|
"#{user.display_name} has no public asciicasts"
|
|
end
|
|
end
|
|
end
|
|
|
|
def user_username
|
|
user.username
|
|
end
|
|
|
|
def asciicasts
|
|
@asciicasts ||= get_asciicasts
|
|
end
|
|
|
|
def current_users_profile?
|
|
current_user && current_user == user
|
|
end
|
|
|
|
private
|
|
|
|
def get_asciicasts
|
|
asciicasts = user.paged_asciicasts(page, per_page, current_users_profile?)
|
|
PaginatingDecorator.new(asciicasts)
|
|
end
|
|
|
|
end
|