Remove referenced read access when teams are removed
[gitorious:thomas-mainline.git] / app / models / group_behavior.rb
1
2 module GroupBehavior
3   NAME_FORMAT = /[a-z0-9\-]+/.freeze
4
5   def self.extended(klass)
6     klass.belongs_to :creator, :class_name => "User", :foreign_key => "user_id"
7     klass.has_many(:repositories, :as => :owner, :conditions => ["kind NOT IN (?)",
8                                                                  Repository::KINDS_INTERNAL_REPO],
9       :dependent => :destroy)
10     klass.has_many(:cloneable_repositories, :as => :owner, :class_name => "Repository",
11       :conditions => ["kind != ?", Repository::KIND_TRACKING_REPO])
12     klass.has_many(:projects, :as => :owner)
13     klass.validates_presence_of(:name)
14     klass.validates_uniqueness_of(:name)
15     klass.validates_format_of(:name, :with => /^#{NAME_FORMAT}$/,
16       :message => "Must be alphanumeric, and optional dash")
17
18     klass.before_validation :downcase_name
19     klass.has_many :committerships, :as => :committer, :dependent => :destroy
20     klass.has_many :participated_repositories, :through => :committerships,
21     :source => :repository, :class_name => 'Repository'
22     klass.has_many :content_memberships, :as => :member, :dependent => :destroy
23
24
25     def klass.find_fuzzy(query)
26       find(:all,
27         :conditions => ["LOWER(name) LIKE ?", "%" + query.downcase + "%"],
28         :limit => 10)
29     end
30   end
31
32
33   module InstanceMethods
34     def to_param_with_prefix
35       "+#{to_param}"
36     end
37     
38     def downcase_name
39       name.downcase! if name
40     end
41   end
42 end