Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarin Jankovski <marin@gitlab.com>2014-06-27 12:14:57 +0400
committerMarin Jankovski <marin@gitlab.com>2014-06-30 11:45:16 +0400
commitc223fb1a9677ae00285426090618f5762de9f40e (patch)
treeb09d63edbd4982066daf2f25203e12b8e0655b3a /app/models/group_milestone.rb
parentb6425f33bc0b0547058e96e5ab99a7892d9297f2 (diff)
Start building group milestone show page.
Diffstat (limited to 'app/models/group_milestone.rb')
-rw-r--r--app/models/group_milestone.rb69
1 files changed, 68 insertions, 1 deletions
diff --git a/app/models/group_milestone.rb b/app/models/group_milestone.rb
index 567e0c2b9fb..0faff39ae7a 100644
--- a/app/models/group_milestone.rb
+++ b/app/models/group_milestone.rb
@@ -9,6 +9,10 @@ class GroupMilestone
@title
end
+ def safe_title
+ @title.gsub(".", "-")
+ end
+
def milestones
@milestones
end
@@ -25,6 +29,10 @@ class GroupMilestone
milestones.map{ |milestone| milestone.merge_requests.count }.sum
end
+ def open_items_count
+ milestones.map{ |milestone| milestone.open_items_count }.sum
+ end
+
def closed_items_count
milestones.map{ |milestone| milestone.closed_items_count }.sum
end
@@ -42,10 +50,69 @@ class GroupMilestone
def state
state = milestones.map{ |milestone| milestone.state }
- if state.count("active") == state.size
+ if state.count('active') == state.size
'active'
else
'closed'
end
end
+
+ def active?
+ state == 'active'
+ end
+
+ def closed?
+ state == 'closed'
+ end
+
+ def opened_unassigned_issues
+ milestones.map{ |milestone| milestone.issues.opened.unassigned }
+ end
+
+ def opened_assigned_issues
+ milestones.map{ |milestone| milestone.issues.opened.assigned }
+ end
+
+ def closed_issues
+ milestones.map{ |milestone| milestone.issues.closed }
+ end
+
+ def participants
+ milestones.map{ |milestone| milestone.participants.uniq }.reject(&:empty?).flatten
+ end
+
+ def filter_by(filter, entity)
+ if entity
+ milestones = self.milestones.sort_by(&:project_id)
+ entities = {}
+ milestones.each do |project_milestone|
+ next unless project_milestone.send(entity).any?
+ project_name = project_milestone.project.name
+ entities_by_state = state_filter(filter, project_milestone.send(entity))
+ entities.store(project_name, entities_by_state)
+ end
+ entities
+ else
+ {}
+ end
+ end
+
+ def state_filter(filter, entities)
+ if entities.present?
+ sorted_entities = entities.sort_by(&:position)
+ entities_by_state = case filter
+ when 'active'; sorted_entities.group_by(&:state)['opened']
+ when 'closed'; sorted_entities.group_by(&:state)['closed']
+ else sorted_entities
+ end
+ if entities_by_state.blank?
+ []
+ else
+ entities_by_state
+ end
+ else
+ []
+ end
+ end
+
end