summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMałgorzata Ksionek <mksionek@gitlab.com>2019-07-05 12:15:39 +0200
committerMałgorzata Ksionek <mksionek@gitlab.com>2019-07-10 14:57:59 +0200
commit04762be29b144cffb51c50a5d8097aaa86c0bee9 (patch)
tree88896d742365a8c44017565c7bcf8d0dc741d49a
parent4bedda29e5787687d86db216ff9c18af7bead159 (diff)
downloadgitlab-ce-04762be29b144cffb51c50a5d8097aaa86c0bee9.tar.gz
Add group serializer
Fix typo Fix typo
-rw-r--r--app/models/cycle_analytics/group_level.rb16
-rw-r--r--app/serializers/group_analytics_stage_entity.rb17
-rw-r--r--app/serializers/group_analytics_stage_serializer.rb5
-rw-r--r--spec/models/cycle_analytics/group_level_spec.rb2
4 files changed, 35 insertions, 5 deletions
diff --git a/app/models/cycle_analytics/group_level.rb b/app/models/cycle_analytics/group_level.rb
index c48919a61ac..3885ce72206 100644
--- a/app/models/cycle_analytics/group_level.rb
+++ b/app/models/cycle_analytics/group_level.rb
@@ -2,21 +2,29 @@
module CycleAnalytics
class GroupLevel < Base
- def initialize(project: nil, projects:, options:)
- @projects = projects
+ def initialize(project: nil, options:)
+ @project = project
@options = options
end
def summary
- @summary ||= ::Gitlab::CycleAnalytics::GroupStageSummary.new(@project,
+ @summary ||= ::Gitlab::CycleAnalytics::GroupStageSummary.new(@options[:group],
from: @options[:from],
current_user: @options[:current_user]).data
end
- def permissions(user:)
+ def permissions(user: nil)
STAGES.each_with_object({}) do |stage, obj|
obj[stage] = true
end
end
+
+ private
+
+ def stats_per_stage
+ STAGES.map do |stage_name|
+ self[stage_name].as_json(serializer: GroupAnalyticsStageSerializer)
+ end
+ end
end
end
diff --git a/app/serializers/group_analytics_stage_entity.rb b/app/serializers/group_analytics_stage_entity.rb
new file mode 100644
index 00000000000..4e649c4f996
--- /dev/null
+++ b/app/serializers/group_analytics_stage_entity.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+class GroupAnalyticsStageEntity < Grape::Entity
+ include EntityDateHelper
+
+ expose :title
+ expose :name
+ expose :legend
+ expose :description
+
+ expose :group_median, as: :value do |stage|
+ # median returns a BatchLoader instance which we first have to unwrap by using to_f
+ # we use to_f to make sure results below 1 are presented to the end-user
+ stage.group_median.to_f.nonzero? ? distance_of_time_in_words(stage.group_median) : nil
+ end
+end
+
diff --git a/app/serializers/group_analytics_stage_serializer.rb b/app/serializers/group_analytics_stage_serializer.rb
new file mode 100644
index 00000000000..ec448dea602
--- /dev/null
+++ b/app/serializers/group_analytics_stage_serializer.rb
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+class GroupAnalyticsStageSerializer < BaseSerializer
+ entity GroupAnalyticsStageEntity
+end
diff --git a/spec/models/cycle_analytics/group_level_spec.rb b/spec/models/cycle_analytics/group_level_spec.rb
index 992cf22efcc..4d72c46f93c 100644
--- a/spec/models/cycle_analytics/group_level_spec.rb
+++ b/spec/models/cycle_analytics/group_level_spec.rb
@@ -40,7 +40,7 @@ describe CycleAnalytics::GroupLevel do
end
it 'returns medians for each stage for a specific group' do
- expect(subject.summary.map { |summary| summary[:value] }).to contain_exactly(1, 0, 1)
+ expect(subject.summary.map { |summary| summary[:value] }).to contain_exactly(1, 1)
end
end
end