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 | ... | ... |