Commit 5926bbac12d5831e1ad90964272b96e152a72e34
1 parent
69e41250
Exists in
master
and in
4 other branches
Backend Refactoring
Showing
11 changed files
with
151 additions
and
78 deletions
Show diff stats
| @@ -0,0 +1,12 @@ | @@ -0,0 +1,12 @@ | ||
| 1 | +module Notes | ||
| 2 | + class CreateContext < BaseContext | ||
| 3 | + def execute | ||
| 4 | + note = project.notes.new(params[:note]) | ||
| 5 | + note.author = current_user | ||
| 6 | + note.notify = true if params[:notify] == '1' | ||
| 7 | + note.notify_author = true if params[:notify_author] == '1' | ||
| 8 | + note.save | ||
| 9 | + note | ||
| 10 | + end | ||
| 11 | + end | ||
| 12 | +end |
| @@ -0,0 +1,34 @@ | @@ -0,0 +1,34 @@ | ||
| 1 | +module Notes | ||
| 2 | + class LoadContext < BaseContext | ||
| 3 | + def execute | ||
| 4 | + target_type = params[:target_type] | ||
| 5 | + target_id = params[:target_id] | ||
| 6 | + first_id = params[:first_id] | ||
| 7 | + last_id = params[:last_id] | ||
| 8 | + | ||
| 9 | + | ||
| 10 | + @notes = case target_type | ||
| 11 | + when "commit" | ||
| 12 | + then project.commit_notes(project.commit(target_id)).fresh.limit(20) | ||
| 13 | + when "snippet" | ||
| 14 | + then project.snippets.find(target_id).notes | ||
| 15 | + when "wall" | ||
| 16 | + then project.common_notes.order("created_at DESC").fresh.limit(50) | ||
| 17 | + when "issue" | ||
| 18 | + then project.issues.find(target_id).notes.inc_author.order("created_at DESC").limit(20) | ||
| 19 | + when "merge_request" | ||
| 20 | + then project.merge_requests.find(target_id).notes.inc_author.order("created_at DESC").limit(20) | ||
| 21 | + when "wiki" | ||
| 22 | + then project.wikis.reverse.map {|w| w.notes.fresh }.flatten[0..20] | ||
| 23 | + end | ||
| 24 | + | ||
| 25 | + @notes = if last_id | ||
| 26 | + @notes.where("id > ?", last_id) | ||
| 27 | + elsif first_id | ||
| 28 | + @notes.where("id < ?", first_id) | ||
| 29 | + else | ||
| 30 | + @notes | ||
| 31 | + end | ||
| 32 | + end | ||
| 33 | + end | ||
| 34 | +end |
app/contexts/notes_load.rb
| @@ -1,32 +0,0 @@ | @@ -1,32 +0,0 @@ | ||
| 1 | -class NotesLoad < BaseContext | ||
| 2 | - def execute | ||
| 3 | - target_type = params[:target_type] | ||
| 4 | - target_id = params[:target_id] | ||
| 5 | - first_id = params[:first_id] | ||
| 6 | - last_id = params[:last_id] | ||
| 7 | - | ||
| 8 | - | ||
| 9 | - @notes = case target_type | ||
| 10 | - when "commit" | ||
| 11 | - then project.commit_notes(project.commit(target_id)).fresh.limit(20) | ||
| 12 | - when "snippet" | ||
| 13 | - then project.snippets.find(target_id).notes | ||
| 14 | - when "wall" | ||
| 15 | - then project.common_notes.order("created_at DESC").fresh.limit(50) | ||
| 16 | - when "issue" | ||
| 17 | - then project.issues.find(target_id).notes.inc_author.order("created_at DESC").limit(20) | ||
| 18 | - when "merge_request" | ||
| 19 | - then project.merge_requests.find(target_id).notes.inc_author.order("created_at DESC").limit(20) | ||
| 20 | - when "wiki" | ||
| 21 | - then project.wikis.reverse.map {|w| w.notes.fresh }.flatten[0..20] | ||
| 22 | - end | ||
| 23 | - | ||
| 24 | - @notes = if last_id | ||
| 25 | - @notes.where("id > ?", last_id) | ||
| 26 | - elsif first_id | ||
| 27 | - @notes.where("id < ?", first_id) | ||
| 28 | - else | ||
| 29 | - @notes | ||
| 30 | - end | ||
| 31 | - end | ||
| 32 | -end |
| @@ -0,0 +1,8 @@ | @@ -0,0 +1,8 @@ | ||
| 1 | +class TestHookContext < BaseContext | ||
| 2 | + def execute | ||
| 3 | + hook = project.hooks.find(params[:id]) | ||
| 4 | + commits = project.commits(project.default_branch, nil, 3) | ||
| 5 | + data = project.post_receive_data(commits.last.id, commits.first.id, "refs/heads/#{project.default_branch}", current_user) | ||
| 6 | + hook.execute(data) | ||
| 7 | + end | ||
| 8 | +end |
app/controllers/admin/projects_controller.rb
| @@ -2,6 +2,7 @@ class Admin::ProjectsController < ApplicationController | @@ -2,6 +2,7 @@ class Admin::ProjectsController < ApplicationController | ||
| 2 | layout "admin" | 2 | layout "admin" |
| 3 | before_filter :authenticate_user! | 3 | before_filter :authenticate_user! |
| 4 | before_filter :authenticate_admin! | 4 | before_filter :authenticate_admin! |
| 5 | + before_filter :admin_project, :only => [:edit, :show, :update, :destroy, :team_update] | ||
| 5 | 6 | ||
| 6 | def index | 7 | def index |
| 7 | @admin_projects = Project.scoped | 8 | @admin_projects = Project.scoped |
| @@ -10,13 +11,9 @@ class Admin::ProjectsController < ApplicationController | @@ -10,13 +11,9 @@ class Admin::ProjectsController < ApplicationController | ||
| 10 | end | 11 | end |
| 11 | 12 | ||
| 12 | def show | 13 | def show |
| 13 | - @admin_project = Project.find_by_code(params[:id]) | ||
| 14 | - | ||
| 15 | - @users = if @admin_project.users.empty? | ||
| 16 | - User | ||
| 17 | - else | ||
| 18 | - User.not_in_project(@admin_project) | ||
| 19 | - end.all | 14 | + @users = User.scoped |
| 15 | + @users = @users.not_in_project(@admin_project) if @admin_project.users.present? | ||
| 16 | + @users = @users.all | ||
| 20 | end | 17 | end |
| 21 | 18 | ||
| 22 | def new | 19 | def new |
| @@ -24,19 +21,10 @@ class Admin::ProjectsController < ApplicationController | @@ -24,19 +21,10 @@ class Admin::ProjectsController < ApplicationController | ||
| 24 | end | 21 | end |
| 25 | 22 | ||
| 26 | def edit | 23 | def edit |
| 27 | - @admin_project = Project.find_by_code(params[:id]) | ||
| 28 | end | 24 | end |
| 29 | 25 | ||
| 30 | def team_update | 26 | def team_update |
| 31 | - @admin_project = Project.find_by_code(params[:id]) | ||
| 32 | - | ||
| 33 | - UsersProject.bulk_import( | ||
| 34 | - @admin_project, | ||
| 35 | - params[:user_ids], | ||
| 36 | - params[:project_access] | ||
| 37 | - ) | ||
| 38 | - | ||
| 39 | - @admin_project.update_repository | 27 | + @admin_project.add_users_ids_to_team(params[:user_ids], params[:project_access]) |
| 40 | 28 | ||
| 41 | redirect_to [:admin, @admin_project], notice: 'Project was successfully updated.' | 29 | redirect_to [:admin, @admin_project], notice: 'Project was successfully updated.' |
| 42 | end | 30 | end |
| @@ -53,8 +41,6 @@ class Admin::ProjectsController < ApplicationController | @@ -53,8 +41,6 @@ class Admin::ProjectsController < ApplicationController | ||
| 53 | end | 41 | end |
| 54 | 42 | ||
| 55 | def update | 43 | def update |
| 56 | - @admin_project = Project.find_by_code(params[:id]) | ||
| 57 | - | ||
| 58 | owner_id = params[:project].delete(:owner_id) | 44 | owner_id = params[:project].delete(:owner_id) |
| 59 | 45 | ||
| 60 | if owner_id | 46 | if owner_id |
| @@ -69,9 +55,14 @@ class Admin::ProjectsController < ApplicationController | @@ -69,9 +55,14 @@ class Admin::ProjectsController < ApplicationController | ||
| 69 | end | 55 | end |
| 70 | 56 | ||
| 71 | def destroy | 57 | def destroy |
| 72 | - @admin_project = Project.find_by_code(params[:id]) | ||
| 73 | @admin_project.destroy | 58 | @admin_project.destroy |
| 74 | 59 | ||
| 75 | redirect_to admin_projects_url, notice: 'Project was successfully deleted.' | 60 | redirect_to admin_projects_url, notice: 'Project was successfully deleted.' |
| 76 | end | 61 | end |
| 62 | + | ||
| 63 | + private | ||
| 64 | + | ||
| 65 | + def admin_project | ||
| 66 | + @admin_project = Project.find_by_code(params[:id]) | ||
| 67 | + end | ||
| 77 | end | 68 | end |
app/controllers/hooks_controller.rb
| @@ -28,10 +28,7 @@ class HooksController < ApplicationController | @@ -28,10 +28,7 @@ class HooksController < ApplicationController | ||
| 28 | end | 28 | end |
| 29 | 29 | ||
| 30 | def test | 30 | def test |
| 31 | - @hook = @project.hooks.find(params[:id]) | ||
| 32 | - commits = @project.commits(@project.default_branch, nil, 3) | ||
| 33 | - data = @project.post_receive_data(commits.last.id, commits.first.id, "refs/heads/#{@project.default_branch}", current_user) | ||
| 34 | - @hook.execute(data) | 31 | + TestHookContext.new(project, current_user, params).execute |
| 35 | 32 | ||
| 36 | redirect_to :back | 33 | redirect_to :back |
| 37 | end | 34 | end |
app/controllers/notes_controller.rb
| @@ -15,11 +15,7 @@ class NotesController < ApplicationController | @@ -15,11 +15,7 @@ class NotesController < ApplicationController | ||
| 15 | end | 15 | end |
| 16 | 16 | ||
| 17 | def create | 17 | def create |
| 18 | - @note = @project.notes.new(params[:note]) | ||
| 19 | - @note.author = current_user | ||
| 20 | - @note.notify = true if params[:notify] == '1' | ||
| 21 | - @note.notify_author = true if params[:notify_author] == '1' | ||
| 22 | - @note.save | 18 | + @note = Notes::CreateContext.new(project, current_user, params).execute |
| 23 | 19 | ||
| 24 | respond_to do |format| | 20 | respond_to do |format| |
| 25 | format.html {redirect_to :back} | 21 | format.html {redirect_to :back} |
| @@ -40,6 +36,6 @@ class NotesController < ApplicationController | @@ -40,6 +36,6 @@ class NotesController < ApplicationController | ||
| 40 | protected | 36 | protected |
| 41 | 37 | ||
| 42 | def notes | 38 | def notes |
| 43 | - @notes = NotesLoad.new(project, current_user, params).execute | 39 | + @notes = Notes::LoadContext.new(project, current_user, params).execute |
| 44 | end | 40 | end |
| 45 | end | 41 | end |
app/controllers/profile_controller.rb
| 1 | class ProfileController < ApplicationController | 1 | class ProfileController < ApplicationController |
| 2 | layout "profile" | 2 | layout "profile" |
| 3 | + before_filter :user | ||
| 4 | + | ||
| 3 | def show | 5 | def show |
| 4 | - @user = current_user | ||
| 5 | end | 6 | end |
| 6 | 7 | ||
| 7 | def design | 8 | def design |
| 8 | - @user = current_user | ||
| 9 | end | 9 | end |
| 10 | 10 | ||
| 11 | def update | 11 | def update |
| 12 | - @user = current_user | ||
| 13 | @user.update_attributes(params[:user]) | 12 | @user.update_attributes(params[:user]) |
| 14 | redirect_to :back | 13 | redirect_to :back |
| 15 | end | 14 | end |
| 16 | 15 | ||
| 17 | def token | 16 | def token |
| 18 | - @user = current_user | ||
| 19 | end | 17 | end |
| 20 | 18 | ||
| 21 | def password | 19 | def password |
| 22 | - @user = current_user | ||
| 23 | end | 20 | end |
| 24 | 21 | ||
| 25 | def password_update | 22 | def password_update |
| 26 | params[:user].reject!{ |k, v| k != "password" && k != "password_confirmation"} | 23 | params[:user].reject!{ |k, v| k != "password" && k != "password_confirmation"} |
| 27 | - @user = current_user | ||
| 28 | 24 | ||
| 29 | if @user.update_attributes(params[:user]) | 25 | if @user.update_attributes(params[:user]) |
| 30 | flash[:notice] = "Password was successfully updated. Please login with it" | 26 | flash[:notice] = "Password was successfully updated. Please login with it" |
| @@ -38,4 +34,10 @@ class ProfileController < ApplicationController | @@ -38,4 +34,10 @@ class ProfileController < ApplicationController | ||
| 38 | current_user.reset_authentication_token! | 34 | current_user.reset_authentication_token! |
| 39 | redirect_to profile_token_path | 35 | redirect_to profile_token_path |
| 40 | end | 36 | end |
| 37 | + | ||
| 38 | + private | ||
| 39 | + | ||
| 40 | + def user | ||
| 41 | + @user = current_user | ||
| 42 | + end | ||
| 41 | end | 43 | end |
app/controllers/search_controller.rb
| 1 | class SearchController < ApplicationController | 1 | class SearchController < ApplicationController |
| 2 | def show | 2 | def show |
| 3 | query = params[:search] | 3 | query = params[:search] |
| 4 | - if query.blank? | ||
| 5 | - @projects = [] | ||
| 6 | - @merge_requests = [] | ||
| 7 | - @issues = [] | ||
| 8 | - else | 4 | + |
| 5 | + @projects = [] | ||
| 6 | + @merge_requests = [] | ||
| 7 | + @issues = [] | ||
| 8 | + | ||
| 9 | + if query.present? | ||
| 9 | @projects = current_user.projects.search(query).limit(10) | 10 | @projects = current_user.projects.search(query).limit(10) |
| 10 | @merge_requests = MergeRequest.where(:project_id => current_user.project_ids).search(query).limit(10) | 11 | @merge_requests = MergeRequest.where(:project_id => current_user.project_ids).search(query).limit(10) |
| 11 | @issues = Issue.where(:project_id => current_user.project_ids).search(query).limit(10) | 12 | @issues = Issue.where(:project_id => current_user.project_ids).search(query).limit(10) |
app/roles/team.rb
| @@ -4,7 +4,36 @@ module Team | @@ -4,7 +4,36 @@ module Team | ||
| 4 | users_projects.find_by_user_id(user.id) if user | 4 | users_projects.find_by_user_id(user.id) if user |
| 5 | end | 5 | end |
| 6 | 6 | ||
| 7 | + # Get Team Member record by user id | ||
| 7 | def team_member_by_id(user_id) | 8 | def team_member_by_id(user_id) |
| 8 | users_projects.find_by_user_id(user_id) | 9 | users_projects.find_by_user_id(user_id) |
| 9 | end | 10 | end |
| 11 | + | ||
| 12 | + # Add user to project | ||
| 13 | + # with passed access role | ||
| 14 | + def add_user_to_team(user, access_role) | ||
| 15 | + add_user_id_to_team(user.id, access_role) | ||
| 16 | + end | ||
| 17 | + | ||
| 18 | + # Add multiple users to project | ||
| 19 | + # with same access role | ||
| 20 | + def add_users_to_team(users, access_role) | ||
| 21 | + add_users_ids_to_team(users.map(&:id), access_role) | ||
| 22 | + end | ||
| 23 | + | ||
| 24 | + # Add user to project | ||
| 25 | + # with passed access role by user id | ||
| 26 | + def add_user_id_to_team(user_id, access_role) | ||
| 27 | + users_projects.create( | ||
| 28 | + :user_id => user_id, | ||
| 29 | + :project_access => access_role | ||
| 30 | + ) | ||
| 31 | + end | ||
| 32 | + | ||
| 33 | + # Add multiple users to project | ||
| 34 | + # with same access role by user ids | ||
| 35 | + def add_users_ids_to_team(users_ids, access_role) | ||
| 36 | + UsersProject.bulk_import(self, users_ids, access_role) | ||
| 37 | + self.update_repository | ||
| 38 | + end | ||
| 10 | end | 39 | end |
spec/models/project_spec.rb
| @@ -22,21 +22,56 @@ describe Project do | @@ -22,21 +22,56 @@ describe Project do | ||
| 22 | end | 22 | end |
| 23 | 23 | ||
| 24 | describe "Respond to" do | 24 | describe "Respond to" do |
| 25 | - it { should respond_to(:repository_writers) } | ||
| 26 | - it { should respond_to(:add_access) } | ||
| 27 | - it { should respond_to(:reset_access) } | ||
| 28 | - it { should respond_to(:update_repository) } | ||
| 29 | - it { should respond_to(:destroy_repository) } | ||
| 30 | it { should respond_to(:public?) } | 25 | it { should respond_to(:public?) } |
| 31 | it { should respond_to(:private?) } | 26 | it { should respond_to(:private?) } |
| 32 | it { should respond_to(:url_to_repo) } | 27 | it { should respond_to(:url_to_repo) } |
| 33 | it { should respond_to(:path_to_repo) } | 28 | it { should respond_to(:path_to_repo) } |
| 34 | it { should respond_to(:valid_repo?) } | 29 | it { should respond_to(:valid_repo?) } |
| 35 | it { should respond_to(:repo_exists?) } | 30 | it { should respond_to(:repo_exists?) } |
| 31 | + | ||
| 32 | + # Repository Role | ||
| 33 | + it { should respond_to(:tree) } | ||
| 34 | + it { should respond_to(:root_ref) } | ||
| 36 | it { should respond_to(:repo) } | 35 | it { should respond_to(:repo) } |
| 37 | it { should respond_to(:tags) } | 36 | it { should respond_to(:tags) } |
| 38 | it { should respond_to(:commit) } | 37 | it { should respond_to(:commit) } |
| 38 | + it { should respond_to(:commits) } | ||
| 39 | + it { should respond_to(:commits_between) } | ||
| 40 | + it { should respond_to(:commits_with_refs) } | ||
| 41 | + it { should respond_to(:commits_since) } | ||
| 39 | it { should respond_to(:commits_between) } | 42 | it { should respond_to(:commits_between) } |
| 43 | + it { should respond_to(:write_hooks) } | ||
| 44 | + it { should respond_to(:satellite) } | ||
| 45 | + it { should respond_to(:update_repository) } | ||
| 46 | + it { should respond_to(:destroy_repository) } | ||
| 47 | + it { should respond_to(:archive_repo) } | ||
| 48 | + | ||
| 49 | + # Authority Role | ||
| 50 | + it { should respond_to(:add_access) } | ||
| 51 | + it { should respond_to(:reset_access) } | ||
| 52 | + it { should respond_to(:repository_writers) } | ||
| 53 | + it { should respond_to(:repository_masters) } | ||
| 54 | + it { should respond_to(:repository_readers) } | ||
| 55 | + it { should respond_to(:allow_read_for?) } | ||
| 56 | + it { should respond_to(:guest_access_for?) } | ||
| 57 | + it { should respond_to(:report_access_for?) } | ||
| 58 | + it { should respond_to(:dev_access_for?) } | ||
| 59 | + it { should respond_to(:master_access_for?) } | ||
| 60 | + | ||
| 61 | + # Team Role | ||
| 62 | + it { should respond_to(:team_member_by_name_or_email) } | ||
| 63 | + it { should respond_to(:team_member_by_id) } | ||
| 64 | + it { should respond_to(:add_user_to_team) } | ||
| 65 | + it { should respond_to(:add_users_to_team) } | ||
| 66 | + it { should respond_to(:add_user_id_to_team) } | ||
| 67 | + it { should respond_to(:add_users_ids_to_team) } | ||
| 68 | + | ||
| 69 | + # Project Push Role | ||
| 70 | + it { should respond_to(:observe_push) } | ||
| 71 | + it { should respond_to(:update_merge_requests) } | ||
| 72 | + it { should respond_to(:execute_hooks) } | ||
| 73 | + it { should respond_to(:post_receive_data) } | ||
| 74 | + it { should respond_to(:trigger_post_receive) } | ||
| 40 | end | 75 | end |
| 41 | 76 | ||
| 42 | it "should not allow 'gitolite-admin' as repo name" do | 77 | it "should not allow 'gitolite-admin' as repo name" do |