You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.5 KiB
Ruby
77 lines
1.5 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?
|
|
if user.asciicast_count > 0
|
|
count = h.pluralize(user.asciicast_count, 'asciicast')
|
|
"You have recorded #{count}"
|
|
else
|
|
"Record your first asciicast"
|
|
end
|
|
else
|
|
if user.asciicast_count > 0
|
|
count = h.pluralize(user.asciicast_count, 'asciicast')
|
|
"#{count} by #{user.display_name}"
|
|
else
|
|
"#{user.display_name} hasn't recorded anything yet"
|
|
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
|
|
PaginatingDecorator.new(user.paged_asciicasts(page, per_page))
|
|
end
|
|
|
|
end
|