diff options
author | Marin Jankovski <marin@gitlab.com> | 2014-06-26 10:57:36 +0200 |
---|---|---|
committer | Marin Jankovski <marin@gitlab.com> | 2014-06-30 09:44:30 +0200 |
commit | 0723bf1afaaf13ddcb58c211161389052d18e501 (patch) | |
tree | e9bcbbe629ade11a0c8eec61b4023a7531da05ad /app | |
parent | 8e8c074205f4c85238309f4e21e80748f09d0ec8 (diff) | |
download | gitlab-ce-0723bf1afaaf13ddcb58c211161389052d18e501.tar.gz |
Move group milestone processing from service to model.
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/groups/milestones_controller.rb | 3 | ||||
-rw-r--r-- | app/models/group_milestone.rb | 41 | ||||
-rw-r--r-- | app/services/milestones/group_service.rb | 67 | ||||
-rw-r--r-- | app/views/groups/milestones/index.html.haml | 19 |
4 files changed, 53 insertions, 77 deletions
diff --git a/app/controllers/groups/milestones_controller.rb b/app/controllers/groups/milestones_controller.rb index e85ef3ff25f..cb5fed0bc3e 100644 --- a/app/controllers/groups/milestones_controller.rb +++ b/app/controllers/groups/milestones_controller.rb @@ -5,8 +5,7 @@ class Groups::MilestonesController < ApplicationController @group = Group.find_by(path: params[:group_id]) project_ids = @group.projects project_milestones = Milestone.where(project_id: project_ids) - @milestones = project_milestones - @group_milestones = Milestones::GroupService.new(@group, current_user, project_milestones) + @group_milestones = Milestones::GroupService.new(project_milestones).execute end end diff --git a/app/models/group_milestone.rb b/app/models/group_milestone.rb new file mode 100644 index 00000000000..c2fb3a5edee --- /dev/null +++ b/app/models/group_milestone.rb @@ -0,0 +1,41 @@ +class GroupMilestone + + def initialize(title, milestones) + @title = title + @milestones = milestones + end + + def title + @title + end + + def milestones + @milestones + end + + def project_names + milestones.map{ |milestone| milestone.project.name } + end + + def issue_count + milestones.map{ |milestone| milestone.issues.count }.sum + end + + def merge_requests_count + milestones.map{ |milestone| milestone.merge_requests.count }.sum + end + + def closed_items_count + milestones.map{ |milestone| milestone.closed_items_count }.sum + end + + def total_items_count + milestones.map{ |milestone| milestone.total_items_count }.sum + end + + def percent_complete + ((closed_items_count * 100) / total_items_count).abs + rescue ZeroDivisionError + 100 + end +end diff --git a/app/services/milestones/group_service.rb b/app/services/milestones/group_service.rb index 74bf126652e..3a7e092a77a 100644 --- a/app/services/milestones/group_service.rb +++ b/app/services/milestones/group_service.rb @@ -1,72 +1,11 @@ module Milestones class GroupService < Milestones::BaseService - def initialize(group, user, project_milestones) - @group = group - @user = user + def initialize(project_milestones) @project_milestones = project_milestones.group_by(&:title) end - def titles - @project_milestones.map{ |title, milestone| title } - end - - def project_names - names = {} - @project_milestones.map do |title, milestone| - projects = milestone.map{|m| m.project.name } - names.store(title, projects) - end - names - end - - def issue_count - @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.issues.count }.sum } - end - - def mr_count - @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.merge_requests.count }.sum } - end - - def open_issues_count - @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.issues.opened.count }.sum } - end - - def closed_issues_count - @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.issues.closed.count }.sum } - end - - def open_mr_count - @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.merge_requests.opened.count }.sum } - end - - def close_mr_count - @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.merge_requests.closed.count }.sum } - end - - def open_items_count - @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.open_items_count }.sum } - end - - def closed_items_count - @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.closed_items_count }.sum } - end - - def total_items_count - issue_count.merge(mr_count){ |title,issue,mr| issue + mr } - end - - def percent_complete - percentage_per_milestone = {} - closed_items_count.map do |title, closed_items| - total_items = total_items_count[title] - percentage = begin - ((closed_items * 100) / total_items).abs - rescue ZeroDivisionError - 100 - end - percentage_per_milestone.store(title, percentage) - end - percentage_per_milestone + def execute + @project_milestones.map{ |title, milestone| GroupMilestone.new(title, milestone) } end end diff --git a/app/views/groups/milestones/index.html.haml b/app/views/groups/milestones/index.html.haml index 2e51d74ca88..97cc88db522 100644 --- a/app/views/groups/milestones/index.html.haml +++ b/app/views/groups/milestones/index.html.haml @@ -1,6 +1,6 @@ %h3.page-title Milestones - %span.pull-right #{@group_milestones.titles.count} milestones + %span.pull-right #{@group_milestones.count} milestones %p.light Only milestones from @@ -21,31 +21,28 @@ %li .nothing-here-block No milestones to show - else - - @group_milestones.titles.each do |title| + - @group_milestones.each do |milestone| %li{class: "milestone milestone-open", id: 1 } .pull-right - = link_to root_path, class: "btn btn-small edit-milestone-link btn-grouped" do - %i.icon-edit - Edit = link_to 'Close Milestone', root_path, method: :put, remote: true, class: "btn btn-small btn-remove" %h4 - = link_to_gfm truncate(title, length: 100), root_path + = link_to_gfm truncate(milestone.title, length: 100), root_path - if false %span.muted Empty - else %div %div = link_to root_path do - = pluralize @group_milestones.issue_count[title], 'Issue' + = pluralize milestone.issue_count, 'Issue' = link_to root_path do - = pluralize @group_milestones.mr_count[title], 'Merge Request' + = pluralize milestone.merge_requests_count, 'Merge Request' - %span.light #{@group_milestones.percent_complete[title]}% complete + %span.light #{milestone.percent_complete}% complete .progress.progress-info - .progress-bar{style: "width: #{@group_milestones.percent_complete[title]}%;"} + .progress-bar{style: "width: #{milestone.percent_complete}%;"} %div %br - - @group_milestones.project_names[title].each do |name| + - milestone.project_names.each do |name| %span.label.label-default = name |