diaspora/app/presenters/person_presenter.rb
Florian Staudacher 9a16560d8d * rename profile header view to make name more accurate
* include 'js-routes' for rails routes in javascript
  (TODO: config options?)
* add handlebars helper for rails routes
2014-09-15 01:37:23 +02:00

79 lines
1.8 KiB
Ruby

class PersonPresenter < BasePresenter
def base_hash
{ id: id,
guid: guid,
name: name,
diaspora_id: diaspora_handle
}
end
def full_hash
base_hash.merge({
relationship: relationship,
block: is_blocked? ? BlockPresenter.new(current_user_person_block).base_hash : false,
contact: { id: current_user_person_contact.id },
is_own_profile: own_profile?
})
end
def full_hash_with_avatar
full_hash.merge({avatar: AvatarPresenter.new(profile).base_hash})
end
def full_hash_with_profile
full_hash.merge({profile: ProfilePresenter.new(profile).full_hash})
end
def as_json(options={})
attrs = full_hash_with_avatar
if own_profile? || person_is_following_current_user
attrs.merge!({
:location => @presentable.location,
:birthday => @presentable.formatted_birthday,
:bio => @presentable.bio
})
end
attrs
end
protected
def own_profile?
current_user.try(:person) == @presentable
end
def relationship
contact = current_user_person_contact
is_mutual = contact ? contact.mutual? : false
is_sharing = contact ? contact.sharing? : false
is_receiving = contact ? contact.receiving? : false
if is_blocked? then :blocked
elsif is_mutual then :mutual
elsif is_sharing then :sharing
elsif is_receiving then :receiving
else :not_sharing
end
end
def person_is_following_current_user
@presentable.shares_with(current_user)
end
private
def current_user_person_block
@block ||= current_user.blocks.where(person_id: id).limit(1).first
end
def current_user_person_contact
@contact ||= current_user.contact_for(@presentable)
end
def is_blocked?
current_user_person_block.present?
end
end