Class: Gitlab::Email::Handler::CreateIssueHandler
- Inherits:
-
BaseHandler
- Object
- BaseHandler
- Gitlab::Email::Handler::CreateIssueHandler
- Includes:
- ReplyProcessing
- Defined in:
- lib/gitlab/email/handler/create_issue_handler.rb
Constant Summary collapse
- HANDLER_REGEX =
/\A#{HANDLER_ACTION_BASE_REGEX}-(?<incoming_email_token>.+)-issue\z/
- HANDLER_REGEX_LEGACY =
/\A(?<project_path>[^\+]*)\+(?<incoming_email_token>.*)\z/
Constants inherited from BaseHandler
BaseHandler::HANDLER_ACTION_BASE_REGEX
Instance Attribute Summary
Attributes inherited from BaseHandler
Instance Method Summary collapse
-
#author ⇒ Object
rubocop: disable CodeReuse/ActiveRecord.
- #can_handle? ⇒ Boolean
- #execute ⇒ Object
-
#initialize(mail, mail_key) ⇒ CreateIssueHandler
constructor
A new instance of CreateIssueHandler.
-
#metrics_event ⇒ Object
rubocop: enable CodeReuse/ActiveRecord.
Methods included from ReplyProcessing
Methods inherited from BaseHandler
Constructor Details
#initialize(mail, mail_key) ⇒ CreateIssueHandler
Returns a new instance of CreateIssueHandler.
17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/gitlab/email/handler/create_issue_handler.rb', line 17 def initialize(mail, mail_key) super(mail, mail_key) if !mail_key&.include?('/') && (matched = HANDLER_REGEX.match(mail_key.to_s)) @project_slug = matched[:project_slug] @project_id = matched[:project_id]&.to_i @incoming_email_token = matched[:incoming_email_token] elsif matched = HANDLER_REGEX_LEGACY.match(mail_key.to_s) @project_path = matched[:project_path] @incoming_email_token = matched[:incoming_email_token] end end |
Instance Method Details
#author ⇒ Object
rubocop: disable CodeReuse/ActiveRecord
52 53 54 |
# File 'lib/gitlab/email/handler/create_issue_handler.rb', line 52 def @author ||= User.find_by(incoming_email_token: incoming_email_token) end |
#can_handle? ⇒ Boolean
30 31 32 |
# File 'lib/gitlab/email/handler/create_issue_handler.rb', line 30 def can_handle? incoming_email_token && (project_id || can_handle_legacy_format?) end |
#execute ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/gitlab/email/handler/create_issue_handler.rb', line 34 def execute raise ProjectNotFound unless project (:create_issue) result = create_issue issue = result[:issue] # issue won't be present only on unrecoverable errors raise InvalidIssueError, result.errors.join(', ') if result.error? && issue.blank? verify_record!( record: issue, invalid_exception: InvalidIssueError, record_name: 'issue') end |
#metrics_event ⇒ Object
rubocop: enable CodeReuse/ActiveRecord
57 58 59 |
# File 'lib/gitlab/email/handler/create_issue_handler.rb', line 57 def metrics_event :receive_email_create_issue end |