class Danger::MessageAggregator

Public Class Methods

aggregate(*args, **kwargs) click to toggle source
# File lib/danger/danger_core/message_aggregator.rb, line 8
def self.aggregate(*args, **kwargs)
  new(*args, **kwargs).aggregate
end
new(warnings: [], errors: [], messages: [], markdowns: [], danger_id: "danger") click to toggle source
# File lib/danger/danger_core/message_aggregator.rb, line 12
def initialize(warnings: [],
               errors: [],
               messages: [],
               markdowns: [],
               danger_id: "danger")
  @messages = warnings + errors + messages + markdowns
  @danger_id = danger_id
end

Public Instance Methods

aggregate() click to toggle source

aggregates the messages into an array of MessageGroups @return [[MessageGroup]]

# File lib/danger/danger_core/message_aggregator.rb, line 23
def aggregate
  # oookay I took some shortcuts with this one.
  # first, sort messages by file and line
  @messages.sort! { |a, b| a.compare_by_file_and_line(b) }

  # now create an initial empty message group
  first_group = MessageGroup.new(file: nil,
                                 line: nil)
  @message_groups = @messages.reduce([first_group]) do |groups, msg|
    # We get to take a shortcut because we sorted the messages earlier - only
    # have to see if we can append msg to the last group in the list
    if groups.last << msg
      # we appended it, so return groups unchanged
      groups
    else
      # have to create a new group since msg wasn't appended to the other
      # group
      new_group = MessageGroup.new(file: msg.file,
                                   line: msg.line)
      new_group << msg
      groups << new_group
    end
  end

  @message_groups.extend(Helpers::MessageGroupsArrayHelper)
end