class MailReceiver::Receiver
Public Class Methods
new(message, opts = {})
click to toggle source
# File lib/mail-receiver/receiver.rb, line 5 def initialize(message, opts = {}) @message = message @logger = opts[:logger] end
Public Instance Methods
body()
click to toggle source
# File lib/mail-receiver/receiver.rb, line 30 def body return @body if defined?(@body) @body = self.extract @body end
current_user()
click to toggle source
# File lib/mail-receiver/receiver.rb, line 121 def current_user @current_user ||= User.find_by_any_email(from) end
from()
click to toggle source
# File lib/mail-receiver/receiver.rb, line 40 def from @from ||= @message.from.is_a?(Array) ? @message.from.first : @message.from end
hash_data()
click to toggle source
foo+p=chair/chair&id=123 => { p: chair/chair, id: 123 }
# File lib/mail-receiver/receiver.rb, line 50 def hash_data return @hash_data if defined?(@hash_data) return {} if not prefix.include?('+') @hash_data = Encoder.decode(prefix.split('+').last) return @hash_data end
inspect()
click to toggle source
# File lib/mail-receiver/receiver.rb, line 57 def inspect { project_slug: project_slug, issue_id: issue_id, target_id: target_id, merge_request: merge_request?, to: to, body: body} end
issue_id()
click to toggle source
# File lib/mail-receiver/receiver.rb, line 18 def issue_id hash_data[:id] end
logger()
click to toggle source
# File lib/mail-receiver/receiver.rb, line 125 def logger @logger ||= Logger.new($stdout) end
mail()
click to toggle source
# File lib/mail-receiver/receiver.rb, line 10 def mail @message end
merge_request?()
click to toggle source
# File lib/mail-receiver/receiver.rb, line 26 def merge_request? @merge_request ||= (hash_data[:t] || 'i').downcase == 'm' end
prefix()
click to toggle source
foo@gmail.com => foo
# File lib/mail-receiver/receiver.rb, line 45 def prefix @prefix ||= to.split('@').first end
process!()
click to toggle source
# File lib/mail-receiver/receiver.rb, line 68 def process! if current_user.blank? logger.warn "Reply user: #{from} not found user in GitLab." return end if project.blank? logger.warn "Project #{project_slug} is not found." return end note_params = merge_request? ? process_mr! : process_issue! return if note_params.blank? note_params[:project_id] = project.id # relation to target Note if target_id target_note = project.notes.find_by_id(target_id) if target_note note_params[:commit_id] = target_note.commit_id note_params[:line_code] = target_note.line_code end end note_params[:note] = body @note = Notes::CreateService.new(project, current_user, note_params).execute logger.info "Note #{@note.id} created." end
process_issue!()
click to toggle source
# File lib/mail-receiver/receiver.rb, line 110 def process_issue! @issue = project.issues.find_by(iid: self.issue_id) if @issue.blank? logger.warn "Issue #{self.issue_id} not found." return nil end logger.info "Found issue: #{@issue.id}" { noteable_type: 'Issue', noteable_id: @issue.id } end
process_mr!()
click to toggle source
# File lib/mail-receiver/receiver.rb, line 99 def process_mr! @mr = project.merge_requests.find_by(iid: self.issue_id) if @mr.blank? logger.warn "MergeRequest #{self.issue_id} not found." return nil end logger.info "Found MergeRequest: #{@mr.id}" { noteable_type: 'MergeRequest', noteable_id: @mr.id } end
project()
click to toggle source
# File lib/mail-receiver/receiver.rb, line 61 def project @project ||= Project.find_with_namespace(project_slug) rescue => e logger.warn "Project: #{project_slug} record not found." nil end
project_slug()
click to toggle source
# File lib/mail-receiver/receiver.rb, line 14 def project_slug hash_data[:p] end
target_id()
click to toggle source
# File lib/mail-receiver/receiver.rb, line 22 def target_id hash_data[:n] end
to()
click to toggle source
# File lib/mail-receiver/receiver.rb, line 36 def to @to ||= @message.to.is_a?(Array) ? @message.to.first : @message.to end