2011-10-08 17:36:38 -04:00
|
|
|
require "grit"
|
|
|
|
|
|
|
|
class Project < ActiveRecord::Base
|
2011-10-09 15:36:57 -04:00
|
|
|
belongs_to :owner, :class_name => "User"
|
|
|
|
|
2012-03-28 03:44:51 -04:00
|
|
|
does "project/validations"
|
|
|
|
does "project/repository"
|
|
|
|
does "project/permissions"
|
|
|
|
does "project/hooks"
|
|
|
|
|
2012-03-04 08:35:15 -05:00
|
|
|
has_many :users, :through => :users_projects
|
|
|
|
has_many :events, :dependent => :destroy
|
2011-11-28 02:39:43 -05:00
|
|
|
has_many :merge_requests, :dependent => :destroy
|
2012-03-04 08:35:15 -05:00
|
|
|
has_many :issues, :dependent => :destroy, :order => "position"
|
2011-10-08 17:36:38 -04:00
|
|
|
has_many :users_projects, :dependent => :destroy
|
2012-03-04 08:35:15 -05:00
|
|
|
has_many :notes, :dependent => :destroy
|
|
|
|
has_many :snippets, :dependent => :destroy
|
|
|
|
has_many :deploy_keys, :dependent => :destroy, :foreign_key => "project_id", :class_name => "Key"
|
|
|
|
has_many :web_hooks, :dependent => :destroy
|
|
|
|
has_many :wikis, :dependent => :destroy
|
2012-02-15 15:02:33 -05:00
|
|
|
has_many :protected_branches, :dependent => :destroy
|
2011-11-04 03:42:36 -04:00
|
|
|
|
2011-10-09 07:05:31 -04:00
|
|
|
attr_protected :private_flag, :owner_id
|
2011-10-08 17:36:38 -04:00
|
|
|
|
|
|
|
scope :public_only, where(:private_flag => false)
|
2012-02-11 12:56:18 -05:00
|
|
|
scope :without_user, lambda { |user| where("id not in (:ids)", :ids => user.projects.map(&:id) ) }
|
2011-10-08 17:36:38 -04:00
|
|
|
|
2011-12-20 01:24:14 -05:00
|
|
|
def self.active
|
|
|
|
joins(:issues, :notes, :merge_requests).order("issues.created_at, notes.created_at, merge_requests.created_at DESC")
|
|
|
|
end
|
2011-12-06 18:27:07 -05:00
|
|
|
|
|
|
|
def self.access_options
|
2012-02-16 02:03:55 -05:00
|
|
|
UsersProject.access_roles
|
2011-12-06 18:27:07 -05:00
|
|
|
end
|
|
|
|
|
2012-03-15 19:14:39 -04:00
|
|
|
def self.search query
|
|
|
|
where("name like :query or code like :query or path like :query", :query => "%#{query}%")
|
|
|
|
end
|
|
|
|
|
2011-10-08 17:36:38 -04:00
|
|
|
def to_param
|
|
|
|
code
|
|
|
|
end
|
|
|
|
|
2011-12-14 11:38:52 -05:00
|
|
|
def web_url
|
|
|
|
[GIT_HOST['host'], code].join("/")
|
|
|
|
end
|
|
|
|
|
2011-11-06 15:38:08 -05:00
|
|
|
def team_member_by_name_or_email(email = nil, name = nil)
|
|
|
|
user = users.where("email like ? or name like ?", email, name).first
|
|
|
|
users_projects.find_by_user_id(user.id) if user
|
|
|
|
end
|
|
|
|
|
2011-12-13 16:24:31 -05:00
|
|
|
def team_member_by_id(user_id)
|
|
|
|
users_projects.find_by_user_id(user_id)
|
|
|
|
end
|
|
|
|
|
2011-10-08 17:36:38 -04:00
|
|
|
def common_notes
|
2011-11-15 04:09:07 -05:00
|
|
|
notes.where(:noteable_type => ["", nil]).inc_author_project
|
2011-10-08 17:36:38 -04:00
|
|
|
end
|
|
|
|
|
2011-11-10 18:28:26 -05:00
|
|
|
def build_commit_note(commit)
|
|
|
|
notes.new(:noteable_id => commit.id, :noteable_type => "Commit")
|
2011-10-08 17:36:38 -04:00
|
|
|
end
|
2011-10-26 09:46:25 -04:00
|
|
|
|
2011-11-10 18:28:26 -05:00
|
|
|
def commit_notes(commit)
|
2012-01-10 15:08:46 -05:00
|
|
|
notes.where(:noteable_id => commit.id, :noteable_type => "Commit", :line_code => nil)
|
|
|
|
end
|
|
|
|
|
|
|
|
def commit_line_notes(commit)
|
2012-01-19 14:44:10 -05:00
|
|
|
notes.where(:noteable_id => commit.id, :noteable_type => "Commit").where("line_code is not null")
|
2011-10-08 17:36:38 -04:00
|
|
|
end
|
2011-10-26 09:46:25 -04:00
|
|
|
|
2011-10-08 17:36:38 -04:00
|
|
|
def public?
|
|
|
|
!private_flag
|
|
|
|
end
|
|
|
|
|
|
|
|
def private?
|
|
|
|
private_flag
|
|
|
|
end
|
|
|
|
|
2011-11-15 03:34:30 -05:00
|
|
|
def last_activity
|
2012-03-04 08:35:15 -05:00
|
|
|
events.last || nil
|
2011-10-31 16:57:16 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def last_activity_date
|
2012-03-01 13:40:32 -05:00
|
|
|
if events.last
|
|
|
|
events.last.created_at
|
2011-12-20 01:24:14 -05:00
|
|
|
else
|
2012-03-01 13:40:32 -05:00
|
|
|
updated_at
|
2011-12-20 01:24:14 -05:00
|
|
|
end
|
2012-03-01 13:40:32 -05:00
|
|
|
end
|
2011-12-20 01:24:14 -05:00
|
|
|
|
2012-03-05 17:26:40 -05:00
|
|
|
def project_id
|
|
|
|
self.id
|
|
|
|
end
|
2011-10-08 17:36:38 -04:00
|
|
|
end
|
2012-03-05 17:26:40 -05:00
|
|
|
|
2011-10-08 17:36:38 -04:00
|
|
|
# == Schema Information
|
|
|
|
#
|
|
|
|
# Table name: projects
|
|
|
|
#
|
2012-02-15 15:02:33 -05:00
|
|
|
# id :integer not null, primary key
|
|
|
|
# name :string(255)
|
|
|
|
# path :string(255)
|
|
|
|
# description :text
|
|
|
|
# created_at :datetime
|
|
|
|
# updated_at :datetime
|
|
|
|
# private_flag :boolean default(TRUE), not null
|
|
|
|
# code :string(255)
|
|
|
|
# owner_id :integer
|
|
|
|
# default_branch :string(255) default("master"), not null
|
|
|
|
# issues_enabled :boolean default(TRUE), not null
|
|
|
|
# wall_enabled :boolean default(TRUE), not null
|
|
|
|
# merge_requests_enabled :boolean default(TRUE), not null
|
2012-02-28 08:09:23 -05:00
|
|
|
# wiki_enabled :boolean default(TRUE), not null
|
2011-10-08 17:36:38 -04:00
|
|
|
#
|
|
|
|
|