diff options
author | James Lopez <james@jameslopez.es> | 2016-11-15 13:23:17 +0100 |
---|---|---|
committer | James Lopez <james@jameslopez.es> | 2016-11-17 08:22:58 +0100 |
commit | 73e9ec631995d5ed91a3eb5e8416c924e7d7c5ad (patch) | |
tree | 5048fdf732a43ed0ea0a51fc64e354df4e6177df | |
parent | 8743e59f78cd8f8701460796dcc06854281f3f73 (diff) | |
download | gitlab-ce-73e9ec631995d5ed91a3eb5e8416c924e7d7c5ad.tar.gz |
serialize all the things!
-rw-r--r-- | app/serializers/analytics_commit_entity.rb | 14 | ||||
-rw-r--r-- | app/serializers/analytics_commit_serializer.rb | 3 | ||||
-rw-r--r-- | lib/gitlab/cycle_analytics/events.rb | 31 | ||||
-rw-r--r-- | spec/lib/gitlab/cycle_analytics/events_spec.rb | 8 |
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 |