Commit 9267cb04b0b3fdf127899c4b7e636dc27fac06d3

Authored by Dmitriy Zaporozhets
2 parents 79120843 3063af5a

Merge branch 'refactoring_controllers' of dev.gitlabhq.com:gitlabhq

app/contexts/base_context.rb 0 → 100644
@@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
  1 +class BaseContext
  2 + attr_accessor :project, :current_user, :params
  3 +
  4 + def initialize(project, user, params)
  5 + @project, @current_user, @params = project, user, params.dup
  6 + end
  7 +end
  8 +
app/contexts/commit_load.rb 0 → 100644
@@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
  1 +class CommitLoad < BaseContext
  2 + def execute
  3 + result = {
  4 + :commit => nil,
  5 + :suppress_diff => false,
  6 + :line_notes => [],
  7 + :notes_count => 0,
  8 + :note => nil
  9 + }
  10 +
  11 + commit = project.commit(params[:id])
  12 +
  13 + if commit
  14 + commit = CommitDecorator.decorate(commit)
  15 + line_notes = project.commit_line_notes(commit)
  16 +
  17 + result[:suppress_diff] = true if commit.diffs.size > 200 && !params[:force_show_diff]
  18 + result[:commit] = commit
  19 + result[:note] = project.build_commit_note(commit)
  20 + result[:line_notes] = line_notes
  21 + result[:notes_count] = line_notes.count + project.commit_notes(commit).count
  22 + end
  23 +
  24 + result
  25 + end
  26 +end
app/contexts/merge_requests_load.rb 0 → 100644
@@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
  1 +class MergeRequestsLoad < BaseContext
  2 + def execute
  3 + type = params[:f].to_i
  4 +
  5 + merge_requests = project.merge_requests
  6 +
  7 + merge_requests = case type
  8 + when 1 then merge_requests
  9 + when 2 then merge_requests.closed
  10 + when 3 then merge_requests.opened.assigned(current_user)
  11 + else merge_requests.opened
  12 + end.page(params[:page]).per(20)
  13 +
  14 + merge_requests.includes(:author, :project).order("closed, created_at desc")
  15 + end
  16 +end
app/contexts/notes_load.rb 0 → 100644
@@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
  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 + end
  21 +
  22 + @notes = if last_id
  23 + @notes.where("id > ?", last_id)
  24 + elsif first_id
  25 + @notes.where("id < ?", first_id)
  26 + else
  27 + @notes
  28 + end
  29 + end
  30 +end
app/controllers/commits_controller.rb
@@ -26,43 +26,31 @@ class CommitsController &lt; ApplicationController @@ -26,43 +26,31 @@ class CommitsController &lt; ApplicationController
26 end 26 end
27 27
28 def show 28 def show
29 - @commit = project.commit(params[:id])  
30 -  
31 - git_not_found! and return unless @commit  
32 -  
33 - @commit = CommitDecorator.decorate(@commit)  
34 -  
35 - @note = @project.build_commit_note(@commit)  
36 - @comments_allowed = true  
37 - @line_notes = project.commit_line_notes(@commit)  
38 -  
39 - @notes_count = @line_notes.count + project.commit_notes(@commit).count  
40 -  
41 - if @commit.diffs.size > 200 && !params[:force_show_diff]  
42 - @suppress_diff = true 29 + result = CommitLoad.new(project, current_user, params).execute
  30 +
  31 + @commit = result[:commit]
  32 +
  33 + if @commit
  34 + @suppress_diff = result[:suppress_diff]
  35 + @note = result[:note]
  36 + @line_notes = result[:line_notes]
  37 + @notes_count = result[:notes_count]
  38 + @comments_allowed = true
  39 + else
  40 + return git_not_found!
43 end 41 end
  42 +
44 rescue Grit::Git::GitTimeout 43 rescue Grit::Git::GitTimeout
45 render "huge_commit" 44 render "huge_commit"
46 end 45 end
47 46
48 def compare 47 def compare
49 - first = project.commit(params[:to].try(:strip))  
50 - last = project.commit(params[:from].try(:strip)) 48 + result = Commit.compare(project, params[:from], params[:to])
51 49
52 - @diffs = []  
53 - @commits = [] 50 + @commits = result[:commits]
  51 + @commit = result[:commit]
  52 + @diffs = result[:diffs]
54 @line_notes = [] 53 @line_notes = []
55 -  
56 - if first && last  
57 - commits = [first, last].sort_by(&:created_at)  
58 - younger = commits.first  
59 - older = commits.last  
60 -  
61 -  
62 - @commits = project.repo.commits_between(younger.id, older.id).map {|c| Commit.new(c)}  
63 - @diffs = project.repo.diff(younger.id, older.id) rescue []  
64 - @commit = Commit.new(older)  
65 - end  
66 end 54 end
67 55
68 def patch 56 def patch
app/controllers/dashboard_controller.rb
@@ -2,11 +2,8 @@ class DashboardController &lt; ApplicationController @@ -2,11 +2,8 @@ class DashboardController &lt; ApplicationController
2 respond_to :html 2 respond_to :html
3 3
4 def index 4 def index
5 - @projects = current_user.projects.includes(:events).order("events.created_at DESC")  
6 - @projects = @projects.page(params[:page]).per(40)  
7 -  
8 - @events = Event.where(:project_id => current_user.projects.map(&:id)).recent.limit(20)  
9 - 5 + @projects = current_user.projects_with_events.page(params[:page]).per(40)
  6 + @events = Event.recent_for_user(current_user).limit(20)
10 @last_push = current_user.recent_push 7 @last_push = current_user.recent_push
11 8
12 respond_to do |format| 9 respond_to do |format|
app/controllers/merge_requests_controller.rb
@@ -24,16 +24,7 @@ class MergeRequestsController &lt; ApplicationController @@ -24,16 +24,7 @@ class MergeRequestsController &lt; ApplicationController
24 24
25 25
26 def index 26 def index
27 - @merge_requests = @project.merge_requests  
28 -  
29 - @merge_requests = case params[:f].to_i  
30 - when 1 then @merge_requests  
31 - when 2 then @merge_requests.closed  
32 - when 3 then @merge_requests.opened.assigned(current_user)  
33 - else @merge_requests.opened  
34 - end.page(params[:page]).per(20)  
35 -  
36 - @merge_requests = @merge_requests.includes(:author, :project).order("closed, created_at desc") 27 + @merge_requests = MergeRequestsLoad.new(project, current_user, params).execute
37 end 28 end
38 29
39 def show 30 def show
app/controllers/notes_controller.rb
@@ -40,25 +40,6 @@ class NotesController &lt; ApplicationController @@ -40,25 +40,6 @@ class NotesController &lt; ApplicationController
40 protected 40 protected
41 41
42 def notes 42 def notes
43 - @notes = case params[:target_type]  
44 - when "commit"  
45 - then project.commit_notes(project.commit((params[:target_id]))).fresh.limit(20)  
46 - when "snippet"  
47 - then project.snippets.find(params[:target_id]).notes  
48 - when "wall"  
49 - then project.common_notes.order("created_at DESC").fresh.limit(50)  
50 - when "issue"  
51 - then project.issues.find(params[:target_id]).notes.inc_author.order("created_at DESC").limit(20)  
52 - when "merge_request"  
53 - then project.merge_requests.find(params[:target_id]).notes.inc_author.order("created_at DESC").limit(20)  
54 - end  
55 -  
56 - @notes = if params[:last_id]  
57 - @notes.where("id > ?", params[:last_id])  
58 - elsif params[:first_id]  
59 - @notes.where("id < ?", params[:first_id])  
60 - else  
61 - @notes  
62 - end 43 + @notes = NotesLoad.new(project, current_user, params).execute
63 end 44 end
64 end 45 end
app/models/commit.rb
@@ -80,6 +80,29 @@ class Commit @@ -80,6 +80,29 @@ class Commit
80 def commits_between(repo, from, to) 80 def commits_between(repo, from, to)
81 repo.commits_between(from, to).map { |c| Commit.new(c) } 81 repo.commits_between(from, to).map { |c| Commit.new(c) }
82 end 82 end
  83 +
  84 + def compare(project, from, to)
  85 + first = project.commit(to.try(:strip))
  86 + last = project.commit(from.try(:strip))
  87 +
  88 + result = {
  89 + :commits => [],
  90 + :diffs => [],
  91 + :commit => nil
  92 + }
  93 +
  94 + if first && last
  95 + commits = [first, last].sort_by(&:created_at)
  96 + younger = commits.first
  97 + older = commits.last
  98 +
  99 + result[:commits] = project.repo.commits_between(younger.id, older.id).map {|c| Commit.new(c)}
  100 + result[:diffs] = project.repo.diff(younger.id, older.id) rescue []
  101 + result[:commit] = Commit.new(older)
  102 + end
  103 +
  104 + result
  105 + end
83 end 106 end
84 107
85 def persisted? 108 def persisted?
app/models/event.rb
@@ -28,6 +28,10 @@ class Event &lt; ActiveRecord::Base @@ -28,6 +28,10 @@ class Event &lt; ActiveRecord::Base
28 end 28 end
29 end 29 end
30 30
  31 + def self.recent_for_user user
  32 + where(:project_id => user.projects.map(&:id)).recent
  33 + end
  34 +
31 # Next events currently enabled for system 35 # Next events currently enabled for system
32 # - push 36 # - push
33 # - new issue 37 # - new issue
app/roles/account.rb
@@ -55,4 +55,8 @@ module Account @@ -55,4 +55,8 @@ module Account
55 # Take only latest one 55 # Take only latest one
56 events = events.recent.limit(1).first 56 events = events.recent.limit(1).first
57 end 57 end
  58 +
  59 + def projects_with_events
  60 + projects.includes(:events).order("events.created_at DESC")
  61 + end
58 end 62 end