From 0723bf1afaaf13ddcb58c211161389052d18e501 Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Thu, 26 Jun 2014 10:57:36 +0200 Subject: [PATCH] Move group milestone processing from service to model. --- .../groups/milestones_controller.rb | 3 +- app/models/group_milestone.rb | 41 ++++++++++++ app/services/milestones/group_service.rb | 67 +------------------ app/views/groups/milestones/index.html.haml | 19 +++--- 4 files changed, 53 insertions(+), 77 deletions(-) create mode 100644 app/models/group_milestone.rb 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