Sha256: db4aa3231d8a6c4483f91d6a785490fab62019cf16e9db03537986bea2ae56ca

Contents?: true

Size: 1.05 KB

Versions: 1

Compression:

Stored size: 1.05 KB

Contents

# == Schema Information
#
# Table name: project_users
#
#  id         :integer          not null, primary key
#  project_id :integer          not null
#  user_id    :integer          not null
#  role       :string(255)      not null
#  created_at :datetime
#  updated_at :datetime
#

class ProjectUser < ActiveRecord::Base
  ROLES = %w(owner collaborator)

  belongs_to :project
  belongs_to :user

  validates :role, presence: true, inclusion: { in: ROLES }
  validates :project, presence: true
  validates :user, presence: true, uniqueness: { scope: :project }

  validate :one_owner, on: :update, unless: :org_relation?

  def destroy
    raise OnlyProjectOwner if only_owner? && !org_relation?
    super
  end

  private

  def org_relation?
    project.organizations.present?
  end

  def one_owner
    if (role != "owner" && role_was == "owner" && one_owner?)
      raise OnlyProjectOwner
    end
  end

  def only_owner?
   role == "owner" && one_owner?
  end

  def one_owner?
    project.project_users.map(&:role).reject {|r| r != "owner"}.length <= 1
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
self_systeem-0.1.0 test/dummy_app/app/models/project_user.rb