Commit 135597648fd2fd2051be8cf8a55a520c0801dc64
1 parent
ca3640b8
Exists in
master
and in
1 other branch
Separate count caching and sorting to simplify code in AppsController#collection.
Showing
1 changed file
with
8 additions
and
17 deletions
Show diff stats
app/controllers/apps_controller.rb
| ... | ... | @@ -54,31 +54,22 @@ class AppsController < InheritedResources::Base |
| 54 | 54 | @apps ||= begin |
| 55 | 55 | apps = end_of_association_chain.all |
| 56 | 56 | |
| 57 | - if apps.count > 1 | |
| 58 | - apps = sort_by_unresolved_errs(apps) | |
| 59 | - elsif apps.count > 0 | |
| 60 | - app = apps.first | |
| 57 | + # Cache counts for unresolved errs and problems | |
| 58 | + apps.each do |app| | |
| 61 | 59 | @unresolved_counts[app.id] ||= app.problems.unresolved.count |
| 62 | 60 | @problem_counts[app.id] ||= app.problems.count |
| 63 | 61 | end |
| 64 | 62 | |
| 63 | + # Sort apps by number of unresolved errs, then problem counts. | |
| 64 | + apps.sort! do |a,b| | |
| 65 | + unresolved = @unresolved_counts[b.id] <=> @unresolved_counts[a.id] | |
| 66 | + unresolved != 0 ? unresolved : @problem_counts[b.id] <=> @problem_counts[a.id] | |
| 67 | + end | |
| 68 | + | |
| 65 | 69 | apps |
| 66 | 70 | end |
| 67 | 71 | end |
| 68 | 72 | |
| 69 | - # Sort apps by number of unresolved errs, descending. | |
| 70 | - # Caches the unresolved err counts while performing the sort. | |
| 71 | - def sort_by_unresolved_errs(apps) | |
| 72 | - apps.sort{|a,b| | |
| 73 | - [a,b].each do |app| | |
| 74 | - @unresolved_counts[app.id] ||= app.problems.unresolved.count | |
| 75 | - @problem_counts[app.id] ||= app.problems.count | |
| 76 | - end | |
| 77 | - unresolved = @unresolved_counts[b.id] <=> @unresolved_counts[a.id] | |
| 78 | - unresolved != 0 ? unresolved : @problem_counts[b.id] <=> @problem_counts[a.id] | |
| 79 | - } | |
| 80 | - end | |
| 81 | - | |
| 82 | 73 | def initialize_subclassed_issue_tracker |
| 83 | 74 | if params[:app][:issue_tracker_attributes] && tracker_type = params[:app][:issue_tracker_attributes][:type] |
| 84 | 75 | if IssueTracker.subclasses.map(&:name).concat(["IssueTracker"]).include?(tracker_type) | ... | ... |