Class: Gitlab::Email::Handler::ServiceDeskHandler
Constant Summary
collapse
- HANDLER_REGEX =
/\A#{HANDLER_ACTION_BASE_REGEX}-issue-\z/
- HANDLER_REGEX_LEGACY =
/\A(?<project_path>[^\+]*)\z/
- PROJECT_KEY_PATTERN =
/\A(?<slug>.+)-(?<key>[a-z0-9_]+)\z/
Constants inherited
from BaseHandler
BaseHandler::HANDLER_ACTION_BASE_REGEX
Instance Attribute Summary
Attributes inherited from BaseHandler
#mail, #mail_key
Instance Method Summary
collapse
Methods inherited from BaseHandler
#metrics_params
Constructor Details
#initialize(mail, mail_key, service_desk_key: nil) ⇒ ServiceDeskHandler
Returns a new instance of ServiceDeskHandler.
17
18
19
20
21
22
23
24
25
26
|
# File 'lib/gitlab/email/handler/service_desk_handler.rb', line 17
def initialize(mail, mail_key, service_desk_key: nil)
if service_desk_key
mail_key ||= service_desk_key
@service_desk_key = service_desk_key
end
super(mail, mail_key)
match_project_slug || match_legacy_project_slug
end
|
Instance Method Details
#can_handle? ⇒ Boolean
28
29
30
|
# File 'lib/gitlab/email/handler/service_desk_handler.rb', line 28
def can_handle?
::ServiceDesk.supported? && (project_id || can_handle_legacy_format? || service_desk_key)
end
|
#execute ⇒ Object
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/gitlab/email/handler/service_desk_handler.rb', line 32
def execute
raise ProjectNotFound if project.nil?
return if handled_custom_email_address_verification?
create_work_item_or_note
if from_address
add_email_participants
send_thank_you_email unless reply_email?
end
end
|
#match_legacy_project_slug ⇒ Object
54
55
56
57
58
|
# File 'lib/gitlab/email/handler/service_desk_handler.rb', line 54
def match_legacy_project_slug
return unless matched = HANDLER_REGEX_LEGACY.match(mail_key.to_s)
@project_path = matched[:project_path]
end
|
#match_project_slug ⇒ Object
46
47
48
49
50
51
52
|
# File 'lib/gitlab/email/handler/service_desk_handler.rb', line 46
def match_project_slug
return if mail_key&.include?('/')
return unless matched = HANDLER_REGEX.match(mail_key.to_s)
@project_slug = matched[:project_slug]
@project_id = matched[:project_id]&.to_i
end
|
#metrics_event ⇒ Object
60
61
62
|
# File 'lib/gitlab/email/handler/service_desk_handler.rb', line 60
def metrics_event
:receive_email_service_desk
end
|
#project ⇒ Object
64
65
66
67
68
69
70
|
# File 'lib/gitlab/email/handler/service_desk_handler.rb', line 64
def project
strong_memoize(:project) do
project_record = super
project_record ||= project_from_key if service_desk_key
project_record && ::ServiceDesk.enabled?(project_record) ? project_record : nil
end
end
|