group.rb 1.7 KB
Newer Older
D
Dmitriy Zaporozhets 已提交
1 2
# == Schema Information
#
D
Dmitriy Zaporozhets 已提交
3
# Table name: namespaces
D
Dmitriy Zaporozhets 已提交
4
#
A
Andrew8xx8 已提交
5 6 7
#  id          :integer          not null, primary key
#  name        :string(255)      not null
#  path        :string(255)      not null
D
Dmitriy Zaporozhets 已提交
8
#  owner_id    :integer
D
Dmitriy Zaporozhets 已提交
9 10
#  created_at  :datetime
#  updated_at  :datetime
A
Andrew8xx8 已提交
11
#  type        :string(255)
D
Dmitriy Zaporozhets 已提交
12
#  description :string(255)      default(""), not null
D
Dmitriy Zaporozhets 已提交
13
#  avatar      :string(255)
D
Dmitriy Zaporozhets 已提交
14 15
#

S
Steven Thonus 已提交
16 17 18
require 'carrierwave/orm/activerecord'
require 'file_size_validator'

19
class Group < Namespace
20 21
  has_many :users_groups, dependent: :destroy
  has_many :users, through: :users_groups
A
Andrey Kumanyaev 已提交
22

S
Steven Thonus 已提交
23 24 25 26 27 28
  attr_accessible :avatar

  validate :avatar_type, if: ->(user) { user.avatar_changed? }
  validates :avatar, file_size: { maximum: 100.kilobytes.to_i }

  mount_uploader :avatar, AttachmentUploader
29

30 31 32
  def human_name
    name
  end
33

34
  def owners
35
    @owners ||= users_groups.owners.map(&:user)
36
  end
37 38 39

  def add_users(user_ids, group_access)
    user_ids.compact.each do |user_id|
40
      user = self.users_groups.find_or_initialize_by(user_id: user_id)
41
      user.update_attributes(group_access: group_access)
42 43 44
    end
  end

45 46 47 48
  def add_user(user, group_access)
    self.users_groups.create(user_id: user.id, group_access: group_access)
  end

49 50 51
  def add_owner(user)
    self.add_user(user, UsersGroup::OWNER)
  end
52

53 54
  def has_owner?(user)
    owners.include?(user)
55 56
  end

57 58 59 60
  def has_master?(user)
    members.masters.where(user_id: user).any?
  end

61 62 63
  def last_owner?(user)
    has_owner?(user) && owners.size == 1
  end
64

65 66
  def members
    users_groups
67
  end
S
Steven Thonus 已提交
68 69 70 71 72 73

  def avatar_type
    unless self.avatar.image?
      self.errors.add :avatar, "only images allowed"
    end
  end
74 75 76 77

  def public_profile?
    projects.public_only.any?
  end
78
end