59 lines
1.6 KiB
Ruby
59 lines
1.6 KiB
Ruby
class User < ActiveRecord::Base
|
|
devise :database_authenticatable, :registerable, :confirmable,
|
|
:recoverable, :rememberable, :trackable, :validatable
|
|
|
|
acts_as_voter
|
|
|
|
validates :first_name, presence: true, if: :use_first_name?
|
|
validates :last_name, presence: true, if: :use_last_name?
|
|
validates :nickname, presence: true, if: :use_nickname?
|
|
|
|
scope :organizations, -> { where("users.organization_name IS NOT NULL AND users.organization_name <> ''") }
|
|
|
|
def name
|
|
return nickname if use_nickname?
|
|
return organization_name if organization?
|
|
"#{first_name} #{last_name}"
|
|
end
|
|
|
|
def votes_on_debates(debates_ids = [])
|
|
debates_ids = debates_ids.flatten.compact.uniq
|
|
return {} if debates_ids.empty?
|
|
|
|
voted = votes.where("votable_type = ? AND votable_id IN (?)", "Debate", debates_ids)
|
|
voted.each_with_object({}){ |v,_| _[v.votable_id] = v.vote_flag }
|
|
end
|
|
|
|
def administrator?
|
|
@is_administrator ||= Administrator.where(user_id: id).exists?
|
|
end
|
|
|
|
def moderator?
|
|
@is_moderator ||= Moderator.where(user_id: id).exists?
|
|
end
|
|
|
|
def organization?
|
|
organization_name.present?
|
|
end
|
|
|
|
def verified_organization?
|
|
organization_verified_at.present? &&
|
|
(organization_rejected_at.blank? || organization_rejected_at < organization_verified_at)
|
|
end
|
|
|
|
def rejected_organization?
|
|
organization_rejected_at.present? &&
|
|
(organization_verified_at.blank? || organization_verified_at < organization_rejected_at)
|
|
end
|
|
|
|
private
|
|
def use_first_name?
|
|
!use_nickname? && !organization?
|
|
end
|
|
|
|
def use_last_name?
|
|
use_first_name?
|
|
end
|
|
|
|
end
|