summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLin Jen-Shin <godfat@godfat.org>2016-05-21 09:40:08 -0700
committerLin Jen-Shin <godfat@godfat.org>2016-05-21 09:40:08 -0700
commit75415663f84ac006c5a4d5a6896ece50c299c03e (patch)
treee263b7dc9aca0200eeb14e079e7dda69e7aad3c8
parentee548b6ed0e8f885cdd7dfcc104ea1471ad62bd0 (diff)
downloadgitlab-ce-75415663f84ac006c5a4d5a6896ece50c299c03e.tar.gz
Rename handlers and introduce Handler.for
-rw-r--r--lib/gitlab/email/handler.rb57
-rw-r--r--lib/gitlab/email/handler/base_handler.rb57
-rw-r--r--lib/gitlab/email/handler/create_issue_handler.rb (renamed from lib/gitlab/email/handler/create_issue.rb)6
-rw-r--r--lib/gitlab/email/handler/create_note_handler.rb (renamed from lib/gitlab/email/handler/create_note.rb)6
-rw-r--r--lib/gitlab/email/receiver.rb12
5 files changed, 74 insertions, 64 deletions
diff --git a/lib/gitlab/email/handler.rb b/lib/gitlab/email/handler.rb
index 56d848cdd7b..b9221f1210c 100644
--- a/lib/gitlab/email/handler.rb
+++ b/lib/gitlab/email/handler.rb
@@ -1,54 +1,15 @@
+require 'gitlab/email/handler/create_note_handler'
+require 'gitlab/email/handler/create_issue_handler'
+
module Gitlab
module Email
- class Handler
- attr_reader :mail, :mail_key
-
- def initialize(mail, mail_key)
- @mail = mail
- @mail_key = mail_key
- end
-
- def message
- @message ||= process_message
- end
-
- def author
- raise NotImplementedError
- end
-
- def project
- raise NotImplementedError
- end
-
- private
- def validate_permission!(permission)
- raise UserNotFoundError unless author
- raise UserBlockedError if author.blocked?
- raise ProjectNotFound unless author.can?(:read_project, project)
- raise UserNotAuthorizedError unless author.can?(permission, project)
- end
-
- def process_message
- add_attachments(ReplyParser.new(mail).execute.strip)
- end
-
- def add_attachments(reply)
- attachments = Email::AttachmentUploader.new(mail).execute(project)
-
- reply + attachments.map do |link|
- "\n\n#{link[:markdown]}"
- end.join
- end
-
- def verify_record(record, exception, error_title)
- return if record.persisted?
-
- msg = error_title + record.errors.full_messages.map do |error|
- "\n\n- #{error}"
- end.join
-
- raise exception, msg
+ module Handler
+ def self.for(mail, mail_key)
+ [CreateNoteHandler, CreateIssueHandler].find do |klass|
+ handler = klass.new(mail, mail_key)
+ break handler if handler.can_handle?
+ end
end
end
end
diff --git a/lib/gitlab/email/handler/base_handler.rb b/lib/gitlab/email/handler/base_handler.rb
new file mode 100644
index 00000000000..230d13feea9
--- /dev/null
+++ b/lib/gitlab/email/handler/base_handler.rb
@@ -0,0 +1,57 @@
+
+module Gitlab
+ module Email
+ module Handler
+ class BaseHandler
+ attr_reader :mail, :mail_key
+
+ def initialize(mail, mail_key)
+ @mail = mail
+ @mail_key = mail_key
+ end
+
+ def message
+ @message ||= process_message
+ end
+
+ def author
+ raise NotImplementedError
+ end
+
+ def project
+ raise NotImplementedError
+ end
+
+ private
+ def validate_permission!(permission)
+ raise UserNotFoundError unless author
+ raise UserBlockedError if author.blocked?
+ raise ProjectNotFound unless author.can?(:read_project, project)
+ raise UserNotAuthorizedError unless author.can?(permission, project)
+ end
+
+ def process_message
+ add_attachments(ReplyParser.new(mail).execute.strip)
+ end
+
+ def add_attachments(reply)
+ attachments = Email::AttachmentUploader.new(mail).execute(project)
+
+ reply + attachments.map do |link|
+ "\n\n#{link[:markdown]}"
+ end.join
+ end
+
+ def verify_record(record, exception, error_title)
+ return if record.persisted?
+
+ msg = error_title + record.errors.full_messages.map do |error|
+ "\n\n- #{error}"
+ end.join
+
+ raise exception, msg
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/email/handler/create_issue.rb b/lib/gitlab/email/handler/create_issue_handler.rb
index 72d49ec6c96..259d74a83bf 100644
--- a/lib/gitlab/email/handler/create_issue.rb
+++ b/lib/gitlab/email/handler/create_issue_handler.rb
@@ -1,10 +1,10 @@
-require 'gitlab/email/handler'
+require 'gitlab/email/handler/base_handler'
module Gitlab
module Email
- class Handler
- class CreateIssue < Handler
+ module Handler
+ class CreateIssueHandler < BaseHandler
def can_handle?
!!project
end
diff --git a/lib/gitlab/email/handler/create_note.rb b/lib/gitlab/email/handler/create_note_handler.rb
index 32deb5a311e..7252906fd48 100644
--- a/lib/gitlab/email/handler/create_note.rb
+++ b/lib/gitlab/email/handler/create_note_handler.rb
@@ -1,10 +1,10 @@
-require 'gitlab/email/handler'
+require 'gitlab/email/handler/base_handler'
module Gitlab
module Email
- class Handler
- class CreateNote < Handler
+ module Handler
+ class CreateNoteHandler < BaseHandler
def can_handle?
!!sent_notification
end
diff --git a/lib/gitlab/email/receiver.rb b/lib/gitlab/email/receiver.rb
index da4299ebcb3..7038346192b 100644
--- a/lib/gitlab/email/receiver.rb
+++ b/lib/gitlab/email/receiver.rb
@@ -1,6 +1,5 @@
-require 'gitlab/email/handler/create_note'
-require 'gitlab/email/handler/create_issue'
+require 'gitlab/email/handler'
# Inspired in great part by Discourse's Email::Receiver
module Gitlab
@@ -31,7 +30,7 @@ module Gitlab
raise SentNotificationNotFoundError unless mail_key
- if handler = find_handler(mail, mail_key)
+ if handler = Handler.for(mail, mail_key)
handler.execute
elsif mail_key =~ %r{/|\+}
# Sent Notification mail_key would not have / or +
@@ -65,13 +64,6 @@ module Gitlab
break key if key
end
end
-
- def find_handler(mail, mail_key)
- [Handler::CreateNote, Handler::CreateIssue].find do |klass|
- handler = klass.new(mail, mail_key)
- break handler if handler.can_handle?
- end
- end
end
end
end