gitlabhq/app/models/project.rb

118 lines
3.2 KiB
Ruby
Raw Normal View History

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