summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2012-11-23 07:11:09 +0300
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2012-11-23 07:11:09 +0300
commit2b683b0d0bf90c84b33ec4ed5c70e3bc787094e2 (patch)
tree041bad694cd0013d52d64e5fd89e32f962b35952
parent96105e214f0517d38a4dd1b2140993e03caa1e66 (diff)
downloadgitlab-ce-2b683b0d0bf90c84b33ec4ed5c70e3bc787094e2.tar.gz
Ability to create project with namespace
-rw-r--r--app/helpers/application_helper.rb12
-rw-r--r--app/models/group.rb4
-rw-r--r--app/models/namespace.rb4
-rw-r--r--app/models/project.rb3
-rw-r--r--app/models/user.rb12
-rw-r--r--app/views/profile/account.html.haml21
-rw-r--r--app/views/projects/_new_form.html.haml6
-rw-r--r--config/routes.rb2
-rw-r--r--db/schema.rb3
-rw-r--r--spec/models/user_spec.rb1
10 files changed, 62 insertions, 6 deletions
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index cba34c963a0..8f206609a2f 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -74,6 +74,18 @@ module ApplicationHelper
grouped_options_for_select(options, @ref || @project.default_branch)
end
+ def namespaces_options
+ groups = current_user.namespaces.select {|n| n.type == 'Group'}
+ users = current_user.namespaces.reject {|n| n.type == 'Group'}
+
+ options = [
+ ["Groups", groups.map {|g| [g.human_name, g.id]} ],
+ [ "Users", users.map {|u| [u.human_name, u.id]} ]
+ ]
+
+ grouped_options_for_select(options, current_user.namespace.id)
+ end
+
def search_autocomplete_source
projects = current_user.projects.map{ |p| { label: p.name, url: project_path(p) } }
diff --git a/app/models/group.rb b/app/models/group.rb
index 683606fa706..ab7b1b8983f 100644
--- a/app/models/group.rb
+++ b/app/models/group.rb
@@ -14,4 +14,8 @@ class Group < Namespace
def users
User.joins(:users_projects).where(users_projects: {project_id: project_ids}).uniq
end
+
+ def human_name
+ name
+ end
end
diff --git a/app/models/namespace.rb b/app/models/namespace.rb
index bdf624efffc..2fa8b06d924 100644
--- a/app/models/namespace.rb
+++ b/app/models/namespace.rb
@@ -17,4 +17,8 @@ class Namespace < ActiveRecord::Base
def to_param
code
end
+
+ def human_name
+ owner_name
+ end
end
diff --git a/app/models/project.rb b/app/models/project.rb
index 479a2ac863a..eb3b1b3d113 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -81,10 +81,13 @@ class Project < ActiveRecord::Base
end
def create_by_user(params, user)
+ namespace_id = params.delete(:namespace_id) || namespace.try(:id)
+
project = Project.new params
Project.transaction do
project.owner = user
+ project.namespace_id = namespace_id
project.save!
# Add user as project master
diff --git a/app/models/user.rb b/app/models/user.rb
index 6d539c1f498..cd1dd205569 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -38,13 +38,16 @@ class User < ActiveRecord::Base
devise :database_authenticatable, :token_authenticatable, :lockable,
:recoverable, :rememberable, :trackable, :validatable, :omniauthable
- attr_accessible :email, :password, :password_confirmation, :remember_me, :bio, :name,
+ attr_accessible :email, :password, :password_confirmation, :remember_me, :bio, :name, :username,
:skype, :linkedin, :twitter, :dark_scheme, :theme_id, :force_random_password,
:extern_uid, :provider, :as => [:default, :admin]
attr_accessible :projects_limit, :as => :admin
attr_accessor :force_random_password
+ # Namespace for personal projects
+ has_one :namespace, class_name: "Namespace", foreign_key: :owner_id, conditions: 'type IS NULL', dependent: :destroy
+
has_many :keys, dependent: :destroy
has_many :projects, through: :users_projects
has_many :users_projects, dependent: :destroy
@@ -112,4 +115,11 @@ class User < ActiveRecord::Base
self.password = self.password_confirmation = Devise.friendly_token.first(8)
end
end
+
+ def namespaces
+ namespaces = []
+ namespaces << self.namespace
+ namespaces = namespaces + Group.all if admin
+ namespaces
+ end
end
diff --git a/app/views/profile/account.html.haml b/app/views/profile/account.html.haml
index 1e3a8b1a0d4..21a5f5a24be 100644
--- a/app/views/profile/account.html.haml
+++ b/app/views/profile/account.html.haml
@@ -8,6 +8,7 @@
= link_to authbutton(provider, 32), omniauth_authorize_path(User, provider)
+
%fieldset
%legend
Private token
@@ -44,11 +45,25 @@
.input= f.password_field :password
.clearfix
= f.label :password_confirmation
- .input= f.password_field :password_confirmation
- .actions
- = f.submit 'Save', class: "btn save-btn"
+ .input
+ = f.password_field :password_confirmation
+ .clearfix
+ .input
+ = f.submit 'Save password', class: "btn save-btn"
+%fieldset
+ %legend
+ Username
+ %small.right
+ Changing your username can have unintended side effects!
+ = form_for @user, url: profile_update_path, method: :put do |f|
+ .padded
+ = f.label :username
+ .input
+ = f.text_field :username
+ .input
+ = f.submit 'Save username', class: "btn save-btn"
diff --git a/app/views/projects/_new_form.html.haml b/app/views/projects/_new_form.html.haml
index e6d5e93fca7..978352e7da2 100644
--- a/app/views/projects/_new_form.html.haml
+++ b/app/views/projects/_new_form.html.haml
@@ -12,6 +12,12 @@
%hr
%div.adv_settings
%h6 Advanced settings:
+ - if current_user.namespaces.size > 1
+ .clearfix
+ = f.label :namespace_id do
+ Namespace
+ .input
+ = f.select :namespace_id, namespaces_options, {}, {class: 'chosen'}
.clearfix
= f.label :path do
Git Clone
diff --git a/config/routes.rb b/config/routes.rb
index 42de89dd1df..192f48828b2 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -49,7 +49,7 @@ Gitlab::Application.routes.draw do
delete :remove_project
end
end
- resources :projects, constraints: { id: /[^\/]+/ } do
+ resources :projects, constraints: { id: /[a-zA-Z.\/0-9_\-]+/ } do
member do
get :team
put :team_update
diff --git a/db/schema.rb b/db/schema.rb
index 90b027d412b..8ce3df0d65a 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 20121122150932) do
+ActiveRecord::Schema.define(:version => 20121123104937) do
create_table "events", :force => true do |t|
t.string "target_type"
@@ -195,6 +195,7 @@ ActiveRecord::Schema.define(:version => 20121122150932) do
t.datetime "locked_at"
t.string "extern_uid"
t.string "provider"
+ t.string "username"
end
add_index "users", ["email"], :name => "index_users_on_email", :unique => true
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 4ac699b1c45..3a87499ba22 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -36,6 +36,7 @@ require 'spec_helper'
describe User do
describe "Associations" do
+ it { should have_one(:namespace) }
it { should have_many(:users_projects).dependent(:destroy) }
it { should have_many(:projects) }
it { should have_many(:my_own_projects).class_name('Project') }