summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Lopez <james@jameslopez.es>2016-11-15 13:23:17 +0100
committerJames Lopez <james@jameslopez.es>2016-11-17 08:22:58 +0100
commit73e9ec631995d5ed91a3eb5e8416c924e7d7c5ad (patch)
tree5048fdf732a43ed0ea0a51fc64e354df4e6177df
parent8743e59f78cd8f8701460796dcc06854281f3f73 (diff)
downloadgitlab-ce-73e9ec631995d5ed91a3eb5e8416c924e7d7c5ad.tar.gz
serialize all the things!
-rw-r--r--app/serializers/analytics_commit_entity.rb14
-rw-r--r--app/serializers/analytics_commit_serializer.rb3
-rw-r--r--lib/gitlab/cycle_analytics/events.rb31
-rw-r--r--spec/lib/gitlab/cycle_analytics/events_spec.rb8
4 files changed, 34 insertions, 22 deletions
diff --git a/app/serializers/analytics_commit_entity.rb b/app/serializers/analytics_commit_entity.rb
new file mode 100644
index 00000000000..a932d612e0f
--- /dev/null
+++ b/app/serializers/analytics_commit_entity.rb
@@ -0,0 +1,14 @@
+class AnalyticsCommitEntity < CommitEntity
+ include RequestAwareEntity
+ include EntityDateHelper
+
+ expose :short_id, as: :short_sha
+
+ expose :total_time do |commit|
+ distance_of_time_in_words(request.total_time.to_f)
+ end
+
+ unexpose :author_name
+ unexpose :author_email
+ unexpose :message
+end
diff --git a/app/serializers/analytics_commit_serializer.rb b/app/serializers/analytics_commit_serializer.rb
new file mode 100644
index 00000000000..cdbfecf2b70
--- /dev/null
+++ b/app/serializers/analytics_commit_serializer.rb
@@ -0,0 +1,3 @@
+class AnalyticsCommitSerializer < BaseSerializer
+ entity AnalyticsCommitEntity
+end
diff --git a/lib/gitlab/cycle_analytics/events.rb b/lib/gitlab/cycle_analytics/events.rb
index 69688a2a0ca..d3c7d6fe1aa 100644
--- a/lib/gitlab/cycle_analytics/events.rb
+++ b/lib/gitlab/cycle_analytics/events.rb
@@ -7,55 +7,46 @@ module Gitlab
end
def issue_events
- @fetcher.fetch(stage: :issue).map { |event| parse_event(event) }
+ @fetcher.fetch(stage: :issue).map { |event| serialize_event(event) }
end
def plan_events
- @fetcher.fetch(stage: :plan).each do |event|
- event['total_time'] = distance_of_time_in_words(event['total_time'].to_f)
+ @fetcher.fetch(stage: :plan).map do |event|
commit = first_time_reference_commit(event.delete('commits'), event)
- event['title'] = commit.title
- event['url'] = Gitlab::LightUrlBuilder.build(entity: :commit, project: @project, id: commit.id)
- event['sha'] = commit.short_id
- event['author_name'] = commit.author.name
- event['author_profile_url'] = Gitlab::LightUrlBuilder.build(entity: :user, id: commit.author.username)
- event['author_avatar_url'] = Gitlab::LightUrlBuilder.build(entity: :user_avatar, id: commit.author.id)
+
+ AnalyticsCommitSerializer.new(project: @project, total_time: event['total_time']).represent(commit).as_json
end
end
def code_events
- @fetcher.fetch(stage: :code).map { |event| parse_event(event, entity: :merge_request) }
+ @fetcher.fetch(stage: :code).map { |event| serialize_event(event, entity: :merge_request) }
end
def test_events
- @fetcher.fetch(stage: :test).map do |event|
- parse_build_event(event)
- end
+ @fetcher.fetch(stage: :test).map { |event| serialize_build_event(event) }
end
def review_events
- @fetcher.fetch(stage: :review).map { |event| parse_event(event, entity: :merge_request) }
+ @fetcher.fetch(stage: :review).map { |event| serialize_event(event, entity: :merge_request) }
end
def staging_events
- @fetcher.fetch(stage: :staging).map do |event|
- parse_build_event(event)
- end
+ @fetcher.fetch(stage: :staging).map { |event| serialize_build_event(event) }
end
def production_events
- @fetcher.fetch(stage: :production).map { |event| parse_event(event) }
+ @fetcher.fetch(stage: :production).map { |event| serialize_event(event) }
end
private
- def parse_event(event, entity: :issue)
+ def serialize_event(event, entity: :issue)
event['author'] = User.find(event.delete('author_id'))
AnalyticsGenericSerializer.new(project: @project, entity: entity).represent(event).as_json
end
- def parse_build_event(event)
+ def serialize_build_event(event)
build = ::Ci::Build.find(event['id'])
AnalyticsBuildSerializer.new.represent(build).as_json
diff --git a/spec/lib/gitlab/cycle_analytics/events_spec.rb b/spec/lib/gitlab/cycle_analytics/events_spec.rb
index 55ab28e2af8..d46e70e9ba2 100644
--- a/spec/lib/gitlab/cycle_analytics/events_spec.rb
+++ b/spec/lib/gitlab/cycle_analytics/events_spec.rb
@@ -52,7 +52,11 @@ describe Gitlab::CycleAnalytics::Events do
end
it 'has a sha short ID' do
- expect(subject.plan_events.first[:sha]).not_to be_nil
+ expect(subject.plan_events.first[:short_sha]).not_to be_nil
+ end
+
+ it 'has the URL' do
+ expect(subject.plan_events.first[:commit_url]).not_to be_nil
end
it 'has the total time' do
@@ -68,7 +72,7 @@ describe Gitlab::CycleAnalytics::Events do
end
it "has the author's name" do
- expect(subject.plan_events.first[:author][:name]).to eq(context.author.name)
+ expect(subject.plan_events.first[:author][:name]).not_to be_nil
end
end