create a default repository when creating a project
[gitorious:mainline.git] / app / models / project.rb
1 class Project < ActiveRecord::Base
2   belongs_to  :user
3   has_many    :repositories
4   has_one     :mainline_repository, :conditions => ["mainline = ?", true], 
5     :class_name => "Repository"
6   has_many    :branch_repositories, :conditions => ["mainline = ?", false],
7     :class_name => "Repository"
8     
9   URL_FORMAT_RE = /^(http|https|nntp):\/\//.freeze
10   
11   validates_presence_of :title, :user_id, :slug
12   validates_format_of :slug, :with => /^[a-z0-9_\-]+$/i, 
13     :message => "must match something in the range of [a-z0-9_\-]"
14   validates_format_of :home_url, :with => URL_FORMAT_RE, 
15     :if => proc{|record| !record.home_url.blank? },
16     :message => "Must begin with http(s)"
17   validates_format_of :mailinglist_url, :with => URL_FORMAT_RE,
18     :if => proc{|record| !record.mailinglist_url.blank? },
19     :message => "Must begin with http(s)"
20   validates_format_of :bugtracker_url, :with => URL_FORMAT_RE, 
21     :if => proc{|record| !record.bugtracker_url.blank? },
22     :message => "Must begin with http(s)"
23     
24   before_validation do |record|
25     record.slug.downcase! if record.slug
26   end
27   after_create :create_mainline_repository
28   
29   LICENSES = [
30     'MIT License',
31     'BSD License',
32     'Ruby License',
33     'GNU General Public License version 2(GPLv2)',
34     'GNU General Public License version 3 (GPLv3)',
35     'GNU Library Public License (LGPL)',
36     'Mozilla Public License 1.0 (MPL)',
37     'Mozilla Public License 1.1 (MPL 1.1)',
38     'Qt Public License (QPL)',
39     'Python License',
40     'zlib/libpng License',
41     'Apache Software License',
42     'Apple Public Source License',
43     'Public Domain',
44     'Other/Proprietary License',
45     'Microsoft Permissive License (Ms-PL)',
46     'None',
47   ]
48   
49   protected
50     def create_mainline_repository
51       self.repositories.create!(:user => self.user, :name => self.slug)
52     end
53   
54 end