File: merge_message.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 (83 lines) | stat: -rw-r--r-- 2,047 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
71
72
73
74
75
76
77
78
79
80
81
82
83
# frozen_string_literal: true

module Integrations
  module ChatMessage
    class MergeMessage < BaseMessage
      attr_reader :merge_request_iid
      attr_reader :source_branch
      attr_reader :target_branch
      attr_reader :action
      attr_reader :state
      attr_reader :title

      def initialize(params)
        super

        obj_attr = params[:object_attributes]
        obj_attr = HashWithIndifferentAccess.new(obj_attr)
        @merge_request_iid = obj_attr[:iid]
        @source_branch = obj_attr[:source_branch]
        @target_branch = obj_attr[:target_branch]
        @action = obj_attr[:action]
        @state = obj_attr[:state]
        @title = format_title(obj_attr[:title])
      end

      def attachments
        []
      end

      def activity
        {
          title: "Merge request #{state_or_action_text} by #{strip_markup(user_combined_name)}",
          subtitle: "in #{project_link}",
          text: merge_request_link,
          image: user_avatar
        }
      end

      private

      def format_title(title)
        '*' + strip_markup(title.lines.first.chomp) + '*'
      end

      def message
        merge_request_message
      end

      def project_link
        link(project_name, project_url)
      end

      def merge_request_message
        "#{strip_markup(user_combined_name)} #{state_or_action_text} merge request #{merge_request_link} in #{project_link}"
      end

      def merge_request_link
        link(merge_request_title, merge_request_url)
      end

      def merge_request_title
        "#{MergeRequest.reference_prefix}#{merge_request_iid} #{strip_markup(title)}"
      end

      def merge_request_url
        "#{project_url}/-/merge_requests/#{merge_request_iid}"
      end

      def state_or_action_text
        case action
        when 'approved', 'unapproved'
          action
        when 'approval'
          'added their approval to'
        when 'unapproval'
          'removed their approval from'
        else
          state
        end
      end
    end
  end
end