class Dug::MessageProcessor

@private

Attributes

message[R]
servicer[R]

Public Class Methods

new(message_id, servicer) click to toggle source
# File lib/dug/message_processor.rb, line 6
def initialize(message_id, servicer)
  @servicer = servicer
  @message  = NotificationDecorator.new(servicer.get_user_message('me', message_id))
end

Public Instance Methods

execute() click to toggle source
# File lib/dug/message_processor.rb, line 11
def execute
  %w(organization repository reason).each do |type|
    if message_data = message.public_send(type)
      opts = type == 'repository' ? { remote: message.public_send(:organization) } : {}
      label = Dug.configuration.label_for(type, message_data, opts)
      labels_to_add << label if label
    end
  end

  %w(merged closed).each do |state|
    if message.public_send("indicates_#{state}?")
      label = Dug.configuration.label_for(:state, state)
      labels_to_add << label if label
    end
  end

  if message.indicates_reopened?
    label = Dug.configuration.label_for(:state, 'closed')
    reopened_label = Dug.configuration.label_for(:state, 'reopened')
    labels_to_remove << label if label
    labels_to_add << reopened_label if reopened_label
  end

  info = "Processing message:"
  info << "\n    ID: #{message.id}"
  %w(Date From Subject).each do |header|
    info << "\n    #{header}: #{message.headers[header]}"
  end
  info << "\n    * Applying labels: #{labels_to_add.join(' | ')} *"
  info << "\n    * Removing labels: #{labels_to_remove.join(' | ')} *"
  log(info)

  servicer.add_labels_by_name(message, labels_to_add)
  servicer.remove_labels_by_name(message,
                                 labels_to_remove,
                                 entire_thread: modify_entire_thread?)
end

Private Instance Methods

labels_to_add() click to toggle source
# File lib/dug/message_processor.rb, line 54
def labels_to_add
  @labels_to_add ||= [Dug.configuration.processed_label_name]
end
labels_to_remove() click to toggle source
# File lib/dug/message_processor.rb, line 58
def labels_to_remove
  @labels_to_remove ||= [Dug.configuration.unprocessed_label_name]
  if @labels_to_remove.size > 1
    @modify_entire_thread = true
  end
  @labels_to_remove
end
modify_entire_thread?() click to toggle source
# File lib/dug/message_processor.rb, line 66
def modify_entire_thread?
  !!@modify_entire_thread
end