diff options
author | James Lopez <james@jameslopez.es> | 2016-12-02 17:09:29 +0100 |
---|---|---|
committer | James Lopez <james@jameslopez.es> | 2017-01-17 11:32:55 +0100 |
commit | b214be493d9f179d4a929ee32d94a336da7b38f1 (patch) | |
tree | f669ed4d895e4e97cb050e22e210fe90cb57ba0d /lib/gitlab/cycle_analytics/base_event_fetcher.rb | |
parent | daa4f3ded718f4144877b7f0402bd495151c28de (diff) | |
download | gitlab-ce-b214be493d9f179d4a929ee32d94a336da7b38f1.tar.gz |
big refactor based on MR feedback
Diffstat (limited to 'lib/gitlab/cycle_analytics/base_event_fetcher.rb')
-rw-r--r-- | lib/gitlab/cycle_analytics/base_event_fetcher.rb | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/lib/gitlab/cycle_analytics/base_event_fetcher.rb b/lib/gitlab/cycle_analytics/base_event_fetcher.rb new file mode 100644 index 00000000000..0d851f81b1d --- /dev/null +++ b/lib/gitlab/cycle_analytics/base_event_fetcher.rb @@ -0,0 +1,58 @@ +module Gitlab + module CycleAnalytics + class BaseEventFetcher + include MetricsTables + + attr_reader :projections, :query, :stage + + def initialize(fetcher:, options:, stage:) + @fetcher = fetcher + @project = fetcher.project + @options = options + @stage = stage + end + + def fetch + update_author! + + event_result.map do |event| + serialize(event) if has_permission?(event['id']) + end.compact + end + + def custom_query(_base_query); end + + def order + @order || @start_time_attrs + end + + private + + def update_author! + return unless event_result.any? && event_result.first['author_id'] + + Updater.update!(event_result, from: 'author_id', to: 'author', klass: User) + end + + def event_result + @event_result ||= @fetcher.events(self).to_a + end + + def serialize(_event) + raise NotImplementedError.new("Expected #{self.name} to implement serialize(event)") + end + + def has_permission?(id) + allowed_ids.nil? || allowed_ids.include?(id.to_i) + end + + def allowed_ids + nil + end + + def event_result_ids + event_result.map { |event| event['id'] } + end + end + end +end |