class Trackington::Project

Attributes

description[R]
id[R]
public[R]
sprints[R]
title[R]

Public Class Methods

new(id, title, description, public) click to toggle source
# File lib/trackington/app/projects.rb, line 55
def initialize(id, title, description, public)
  @id = id
  @title = title
  @description = description
  @public = public
  @sprints = SprintRepository.new(@id)
end

Public Instance Methods

add_user(project_user, user_to_add, type = nil) click to toggle source
# File lib/trackington/app/projects.rb, line 63
def add_user(project_user, user_to_add, type = nil)
  check_user_role(project_user, 'owner')

  type ||= 'contributor'

  existing = Models::ProjectRole.where(user_id: user_to_add,
                                       project_id: @id).first

  return unless existing.nil?

  new_role = Models::ProjectRole.new(user_id: user_to_add,
                                     project_id: @id,
                                     role_type: type)

  new_role.save
end
backlog(project_user) click to toggle source
# File lib/trackington/app/projects.rb, line 137
def backlog(project_user)
  check_user_role project_user

  @sprints.backlog
end
complete_sprint(project_user) click to toggle source
# File lib/trackington/app/projects.rb, line 131
def complete_sprint(project_user)
  check_user_role(project_user, 'owner')

  @sprints.complete_sprint
end
create_sprint(project_user, data) click to toggle source
# File lib/trackington/app/projects.rb, line 119
def create_sprint(project_user, data)
  check_user_role(project_user, 'owner')

  @sprints.create(data)
end
current_sprint(project_user) click to toggle source
# File lib/trackington/app/projects.rb, line 113
def current_sprint(project_user)
  check_user_role project_user

  @sprints.current
end
remove_user(project_user, user_to_remove) click to toggle source
# File lib/trackington/app/projects.rb, line 80
def remove_user(project_user, user_to_remove)
  check_user_role(project_user, 'owner')

  Models::ProjectRole.destroy_all(project_id: @id,
                                  user_id: user_to_remove)

  nil
end
start_sprint(project_user) click to toggle source
# File lib/trackington/app/projects.rb, line 125
def start_sprint(project_user)
  check_user_role(project_user, 'owner')

  @sprints.start_sprint
end
update(project_user, data) click to toggle source
# File lib/trackington/app/projects.rb, line 99
def update(project_user, data)
  check_user_role(project_user, 'owner')

  @title = data[:title]
  @description = data[:description]
  @public = data[:public]

  db_project = Models::Project.find(@id)
  db_project.title = @title
  db_project.description = @description
  db_project.public = @public
  db_project.save
end
update_user(project_user, user, new_type) click to toggle source
# File lib/trackington/app/projects.rb, line 89
def update_user(project_user, user, new_type)
  check_user_role(project_user, 'owner')

  role = Models::ProjectRole.where(project_id: @id, user_id: user).first

  role.role_type = new_type

  role.save
end
user_is?(user_id, type) click to toggle source
# File lib/trackington/app/projects.rb, line 143
def user_is?(user_id, type)
  role = Models::ProjectRole.where(project_id: @id, user_id: user_id).first

  return false if role.nil?

  return true if role.role_type == 'owner'

  role.role_type == type
end
users() click to toggle source
# File lib/trackington/app/projects.rb, line 153
def users
  Models::Project.find(@id).project_roles.map do |role|
    ProjectRole.new(role)
  end
end

Private Instance Methods

check_user_role(user_id, type = 'spectator') click to toggle source
# File lib/trackington/app/projects.rb, line 161
def check_user_role(user_id, type = 'spectator')
  fail 'User not in role.' unless user_is?(user_id, type)
end