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,31 +54,22 @@ class AppsController < InheritedResources::Base | ||
| 54 | @apps ||= begin | 54 | @apps ||= begin |
| 55 | apps = end_of_association_chain.all | 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 | @unresolved_counts[app.id] ||= app.problems.unresolved.count | 59 | @unresolved_counts[app.id] ||= app.problems.unresolved.count |
| 62 | @problem_counts[app.id] ||= app.problems.count | 60 | @problem_counts[app.id] ||= app.problems.count |
| 63 | end | 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 | apps | 69 | apps |
| 66 | end | 70 | end |
| 67 | end | 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 | def initialize_subclassed_issue_tracker | 73 | def initialize_subclassed_issue_tracker |
| 83 | if params[:app][:issue_tracker_attributes] && tracker_type = params[:app][:issue_tracker_attributes][:type] | 74 | if params[:app][:issue_tracker_attributes] && tracker_type = params[:app][:issue_tracker_attributes][:type] |
| 84 | if IssueTracker.subclasses.map(&:name).concat(["IssueTracker"]).include?(tracker_type) | 75 | if IssueTracker.subclasses.map(&:name).concat(["IssueTracker"]).include?(tracker_type) |