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 @@ |
| 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 @@ |
| 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 | -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 @@ |
| 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 | 2 | layout "admin" |
| 3 | 3 | before_filter :authenticate_user! |
| 4 | 4 | before_filter :authenticate_admin! |
| 5 | + before_filter :admin_project, :only => [:edit, :show, :update, :destroy, :team_update] | |
| 5 | 6 | |
| 6 | 7 | def index |
| 7 | 8 | @admin_projects = Project.scoped |
| ... | ... | @@ -10,13 +11,9 @@ class Admin::ProjectsController < ApplicationController |
| 10 | 11 | end |
| 11 | 12 | |
| 12 | 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 | 17 | end |
| 21 | 18 | |
| 22 | 19 | def new |
| ... | ... | @@ -24,19 +21,10 @@ class Admin::ProjectsController < ApplicationController |
| 24 | 21 | end |
| 25 | 22 | |
| 26 | 23 | def edit |
| 27 | - @admin_project = Project.find_by_code(params[:id]) | |
| 28 | 24 | end |
| 29 | 25 | |
| 30 | 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 | 29 | redirect_to [:admin, @admin_project], notice: 'Project was successfully updated.' |
| 42 | 30 | end |
| ... | ... | @@ -53,8 +41,6 @@ class Admin::ProjectsController < ApplicationController |
| 53 | 41 | end |
| 54 | 42 | |
| 55 | 43 | def update |
| 56 | - @admin_project = Project.find_by_code(params[:id]) | |
| 57 | - | |
| 58 | 44 | owner_id = params[:project].delete(:owner_id) |
| 59 | 45 | |
| 60 | 46 | if owner_id |
| ... | ... | @@ -69,9 +55,14 @@ class Admin::ProjectsController < ApplicationController |
| 69 | 55 | end |
| 70 | 56 | |
| 71 | 57 | def destroy |
| 72 | - @admin_project = Project.find_by_code(params[:id]) | |
| 73 | 58 | @admin_project.destroy |
| 74 | 59 | |
| 75 | 60 | redirect_to admin_projects_url, notice: 'Project was successfully deleted.' |
| 76 | 61 | end |
| 62 | + | |
| 63 | + private | |
| 64 | + | |
| 65 | + def admin_project | |
| 66 | + @admin_project = Project.find_by_code(params[:id]) | |
| 67 | + end | |
| 77 | 68 | end | ... | ... |
app/controllers/hooks_controller.rb
| ... | ... | @@ -28,10 +28,7 @@ class HooksController < ApplicationController |
| 28 | 28 | end |
| 29 | 29 | |
| 30 | 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 | 33 | redirect_to :back |
| 37 | 34 | end | ... | ... |
app/controllers/notes_controller.rb
| ... | ... | @@ -15,11 +15,7 @@ class NotesController < ApplicationController |
| 15 | 15 | end |
| 16 | 16 | |
| 17 | 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 | 20 | respond_to do |format| |
| 25 | 21 | format.html {redirect_to :back} |
| ... | ... | @@ -40,6 +36,6 @@ class NotesController < ApplicationController |
| 40 | 36 | protected |
| 41 | 37 | |
| 42 | 38 | def notes |
| 43 | - @notes = NotesLoad.new(project, current_user, params).execute | |
| 39 | + @notes = Notes::LoadContext.new(project, current_user, params).execute | |
| 44 | 40 | end |
| 45 | 41 | end | ... | ... |
app/controllers/profile_controller.rb
| 1 | 1 | class ProfileController < ApplicationController |
| 2 | 2 | layout "profile" |
| 3 | + before_filter :user | |
| 4 | + | |
| 3 | 5 | def show |
| 4 | - @user = current_user | |
| 5 | 6 | end |
| 6 | 7 | |
| 7 | 8 | def design |
| 8 | - @user = current_user | |
| 9 | 9 | end |
| 10 | 10 | |
| 11 | 11 | def update |
| 12 | - @user = current_user | |
| 13 | 12 | @user.update_attributes(params[:user]) |
| 14 | 13 | redirect_to :back |
| 15 | 14 | end |
| 16 | 15 | |
| 17 | 16 | def token |
| 18 | - @user = current_user | |
| 19 | 17 | end |
| 20 | 18 | |
| 21 | 19 | def password |
| 22 | - @user = current_user | |
| 23 | 20 | end |
| 24 | 21 | |
| 25 | 22 | def password_update |
| 26 | 23 | params[:user].reject!{ |k, v| k != "password" && k != "password_confirmation"} |
| 27 | - @user = current_user | |
| 28 | 24 | |
| 29 | 25 | if @user.update_attributes(params[:user]) |
| 30 | 26 | flash[:notice] = "Password was successfully updated. Please login with it" |
| ... | ... | @@ -38,4 +34,10 @@ class ProfileController < ApplicationController |
| 38 | 34 | current_user.reset_authentication_token! |
| 39 | 35 | redirect_to profile_token_path |
| 40 | 36 | end |
| 37 | + | |
| 38 | + private | |
| 39 | + | |
| 40 | + def user | |
| 41 | + @user = current_user | |
| 42 | + end | |
| 41 | 43 | end | ... | ... |
app/controllers/search_controller.rb
| 1 | 1 | class SearchController < ApplicationController |
| 2 | 2 | def show |
| 3 | 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 | 10 | @projects = current_user.projects.search(query).limit(10) |
| 10 | 11 | @merge_requests = MergeRequest.where(:project_id => current_user.project_ids).search(query).limit(10) |
| 11 | 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 | 4 | users_projects.find_by_user_id(user.id) if user |
| 5 | 5 | end |
| 6 | 6 | |
| 7 | + # Get Team Member record by user id | |
| 7 | 8 | def team_member_by_id(user_id) |
| 8 | 9 | users_projects.find_by_user_id(user_id) |
| 9 | 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 | 39 | end | ... | ... |
spec/models/project_spec.rb
| ... | ... | @@ -22,21 +22,56 @@ describe Project do |
| 22 | 22 | end |
| 23 | 23 | |
| 24 | 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 | 25 | it { should respond_to(:public?) } |
| 31 | 26 | it { should respond_to(:private?) } |
| 32 | 27 | it { should respond_to(:url_to_repo) } |
| 33 | 28 | it { should respond_to(:path_to_repo) } |
| 34 | 29 | it { should respond_to(:valid_repo?) } |
| 35 | 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 | 35 | it { should respond_to(:repo) } |
| 37 | 36 | it { should respond_to(:tags) } |
| 38 | 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 | 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 | 75 | end |
| 41 | 76 | |
| 42 | 77 | it "should not allow 'gitolite-admin' as repo name" do | ... | ... |