File: event.rb

package info (click to toggle)
gitlab 17.6.5-19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 629,368 kB
  • sloc: ruby: 1,915,304; javascript: 557,307; sql: 60,639; xml: 6,509; sh: 4,567; makefile: 1,239; python: 406
file content (70 lines) | stat: -rwxr-xr-x 1,391 bytes parent folder | download
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
67
68
69
70
# frozen_string_literal: true

module InternalEventsCli
  NEW_EVENT_FIELDS = [
    :description,
    :internal_events,
    :category,
    :action,
    :value_type,
    :extra_properties,
    :identifiers,
    :additional_properties,
    :product_group,
    :milestone,
    :introduced_by_url,
    :distributions,
    :tiers
  ].freeze

  EVENT_DEFAULTS = {
    internal_events: true,
    product_group: nil,
    introduced_by_url: 'TODO'
  }.freeze

  ExistingEvent = Struct.new(*NEW_EVENT_FIELDS, :file_path, keyword_init: true) do
    def identifiers
      self[:identifiers] || []
    end

    def available_filters
      additional_properties&.keys || []
    end
  end

  NewEvent = Struct.new(*NEW_EVENT_FIELDS, keyword_init: true) do
    def formatted_output
      EVENT_DEFAULTS
        .merge(to_h.compact)
        .slice(*NEW_EVENT_FIELDS)
        .transform_keys(&:to_s)
        .to_yaml(line_width: 150)
    end

    def file_path
      File.join(
        *[
          ('ee' unless distributions.include?('ce')),
          'config',
          'events',
          "#{action}.yml"
        ].compact
      )
    end

    def bulk_assign(key_value_pairs)
      key_value_pairs.each { |key, value| self[key] = value }
    end
  end

  class Event
    def self.parse(**args)
      ExistingEvent.new(**args)
    end

    def self.new(**args)
      NewEvent.new(**args)
    end
  end
end