# frozen_string_literal: true module UserRoles extend ActiveSupport::Concern included do scope :admins, -> { where(admin: true) } scope :moderators, -> { where(moderator: true) } scope :staff, -> { admins.or(moderators) } end def staff? admin? || moderator? end def role if admin? 'admin' elsif moderator? 'moderator' else 'user' end end def role?(role) case role when 'user' true when 'moderator' staff? when 'admin' admin? else false end end def promote! if moderator? update!(moderator: false, admin: true) elsif !admin? update!(moderator: true) end end def demote! if admin? update!(admin: false, moderator: true) elsif moderator? update!(moderator: false) end end end