summaryrefslogtreecommitdiff
path: root/lib/event_filter.rb
blob: 8cb0b1441df69c433a707c214632fb8b37b0a8cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# frozen_string_literal: true

class EventFilter
  attr_accessor :filter

  ALL = 'all'
  PUSH = 'push'
  MERGED = 'merged'
  ISSUE = 'issue'
  COMMENTS = 'comments'
  TEAM = 'team'
  WIKI = 'wiki'

  def initialize(filter)
    # Split using comma to maintain backward compatibility Ex/ "filter1,filter2"
    filter = filter.to_s.split(',')[0].to_s
    @filter = filters.include?(filter) ? filter : ALL
  end

  def active?(key)
    filter == key.to_s
  end

  # rubocop: disable CodeReuse/ActiveRecord
  def apply_filter(events)
    events = apply_feature_flags(events)

    case filter
    when PUSH
      events.where(action: Event::PUSHED)
    when MERGED
      events.where(action: Event::MERGED)
    when COMMENTS
      events.where(action: Event::COMMENTED)
    when TEAM
      events.where(action: [Event::JOINED, Event::LEFT, Event::EXPIRED])
    when ISSUE
      events.where(action: [Event::CREATED, Event::UPDATED, Event::CLOSED, Event::REOPENED], target_type: 'Issue')
    when WIKI
      wiki_events(events)
    else
      events
    end
  end
  # rubocop: enable CodeReuse/ActiveRecord

  private

  def apply_feature_flags(events)
    return events.not_wiki_page unless Feature.enabled?(:wiki_events)

    events
  end

  def wiki_events(events)
    return events unless Feature.enabled?(:wiki_events)

    events.for_wiki_page
  end

  def filters
    [ALL, PUSH, MERGED, ISSUE, COMMENTS, TEAM, WIKI]
  end
end

EventFilter.prepend_if_ee('EE::EventFilter')