Project has now correct owner and creator. Increased test coverage
This commit is contained in:
parent
91995909d9
commit
00a1f5bc2c
15 changed files with 241 additions and 113 deletions
|
@ -32,7 +32,7 @@ class Project < ActiveRecord::Base
|
|||
attr_accessible :name, :path, :description, :default_branch, :issues_enabled,
|
||||
:wall_enabled, :merge_requests_enabled, :wiki_enabled, as: [:default, :admin]
|
||||
|
||||
attr_accessible :namespace_id, :owner_id, as: :admin
|
||||
attr_accessible :namespace_id, :creator_id, as: :admin
|
||||
|
||||
attr_accessor :error_code
|
||||
|
||||
|
@ -40,10 +40,10 @@ class Project < ActiveRecord::Base
|
|||
belongs_to :group, foreign_key: "namespace_id", conditions: "type = 'Group'"
|
||||
belongs_to :namespace
|
||||
|
||||
# TODO: replace owner with creator.
|
||||
# With namespaces a project owner will be a namespace owner
|
||||
# so this field makes sense only for global projects
|
||||
belongs_to :owner, class_name: "User"
|
||||
belongs_to :creator,
|
||||
class_name: "User",
|
||||
foreign_key: "creator_id"
|
||||
|
||||
has_many :users, through: :users_projects
|
||||
has_many :events, dependent: :destroy
|
||||
has_many :merge_requests, dependent: :destroy
|
||||
|
@ -62,7 +62,7 @@ class Project < ActiveRecord::Base
|
|||
delegate :name, to: :owner, allow_nil: true, prefix: true
|
||||
|
||||
# Validations
|
||||
validates :owner, presence: true
|
||||
validates :creator, presence: true
|
||||
validates :description, length: { within: 0..2000 }
|
||||
validates :name, presence: true, length: { within: 0..255 },
|
||||
format: { with: Gitlab::Regex.project_name_regex,
|
||||
|
@ -89,8 +89,7 @@ class Project < ActiveRecord::Base
|
|||
|
||||
class << self
|
||||
def authorized_for user
|
||||
projects = includes(:users_projects, :namespace)
|
||||
projects = projects.where("users_projects.user_id = :user_id or projects.owner_id = :user_id or namespaces.owner_id = :user_id", user_id: user.id)
|
||||
raise "DERECATED"
|
||||
end
|
||||
|
||||
def active
|
||||
|
@ -104,8 +103,10 @@ class Project < ActiveRecord::Base
|
|||
def find_with_namespace(id)
|
||||
if id.include?("/")
|
||||
id = id.split("/")
|
||||
namespace_id = Namespace.find_by_path(id.first).id
|
||||
where(namespace_id: namespace_id).find_by_path(id.second)
|
||||
namespace = Namespace.find_by_path(id.first)
|
||||
return nil unless namespace
|
||||
|
||||
where(namespace_id: namespace.id).find_by_path(id.second)
|
||||
else
|
||||
where(path: id, namespace_id: nil).last
|
||||
end
|
||||
|
@ -125,7 +126,7 @@ class Project < ActiveRecord::Base
|
|||
#
|
||||
project.path = project.name.dup.parameterize
|
||||
|
||||
project.owner = user
|
||||
project.creator = user
|
||||
|
||||
# Apply namespace if user has access to it
|
||||
# else fallback to user namespace
|
||||
|
@ -174,8 +175,8 @@ class Project < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def check_limit
|
||||
unless owner.can_create_project?
|
||||
errors[:base] << ("Your own projects limit is #{owner.projects_limit}! Please contact administrator to increase it")
|
||||
unless creator.can_create_project?
|
||||
errors[:base] << ("Your own projects limit is #{creator.projects_limit}! Please contact administrator to increase it")
|
||||
end
|
||||
rescue
|
||||
errors[:base] << ("Can't check your ability to create project")
|
||||
|
@ -268,4 +269,12 @@ class Project < ActiveRecord::Base
|
|||
Notify.project_was_moved_email(member.id).deliver
|
||||
end
|
||||
end
|
||||
|
||||
def owner
|
||||
if namespace
|
||||
namespace_owner
|
||||
else
|
||||
creator
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -51,7 +51,6 @@ class User < ActiveRecord::Base
|
|||
has_many :groups, class_name: "Group", foreign_key: :owner_id
|
||||
|
||||
has_many :keys, dependent: :destroy
|
||||
has_many :projects, through: :users_projects
|
||||
has_many :users_projects, dependent: :destroy
|
||||
has_many :issues, foreign_key: :author_id, dependent: :destroy
|
||||
has_many :notes, foreign_key: :author_id, dependent: :destroy
|
||||
|
@ -82,6 +81,9 @@ class User < ActiveRecord::Base
|
|||
scope :active, where(blocked: false)
|
||||
scope :alphabetically, order('name ASC')
|
||||
|
||||
#
|
||||
# Class methods
|
||||
#
|
||||
class << self
|
||||
def filter filter_name
|
||||
case filter_name
|
||||
|
@ -126,9 +128,63 @@ class User < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
#
|
||||
# Instance methods
|
||||
#
|
||||
def generate_password
|
||||
if self.force_random_password
|
||||
self.password = self.password_confirmation = Devise.friendly_token.first(8)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
# Namespaces user has access to
|
||||
def namespaces
|
||||
namespaces = []
|
||||
|
||||
# Add user account namespace
|
||||
namespaces << self.namespace if self.namespace
|
||||
|
||||
# Add groups you can manage
|
||||
namespaces += if admin
|
||||
Group.all
|
||||
else
|
||||
groups.all
|
||||
end
|
||||
namespaces
|
||||
end
|
||||
|
||||
# Groups where user is an owner
|
||||
def owned_groups
|
||||
groups
|
||||
end
|
||||
|
||||
# Groups user has access to
|
||||
def authorized_groups
|
||||
@authorized_groups ||= begin
|
||||
groups = Group.where(id: self.authorized_projects.pluck(:namespace_id)).all
|
||||
groups = groups + self.groups
|
||||
groups.uniq
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
# Projects user has access to
|
||||
def authorized_projects
|
||||
project_ids = users_projects.pluck(:project_id)
|
||||
project_ids = project_ids | owned_projects.pluck(:id)
|
||||
Project.where(id: project_ids)
|
||||
end
|
||||
|
||||
# Projects in user namespace
|
||||
def personal_projects
|
||||
Project.personal(self)
|
||||
end
|
||||
|
||||
# Projects where user is an owner
|
||||
def owned_projects
|
||||
Project.where("(projects.namespace_id IN (:namespaces)) OR
|
||||
(projects.namespace_id IS NULL AND projects.creator_id = :user_id)",
|
||||
namespaces: namespaces.map(&:id), user_id: self.id)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue