ManageIQ/miq_bot

View on GitHub
lib/offense_message/entry.rb

Summary

Maintainability
A
0 mins
Test Coverage
class OffenseMessage
  class Entry
    attr_reader :severity
    attr_reader :message
    attr_reader :group
    attr_reader :locator

    SEVERITY = {
      :error   => ":bomb: :boom: :fire: :fire_engine:",
      :warn    => ":warning:",
      :high    => ":exclamation:",
      :low     => ":grey_exclamation:",
      :unknown => ":grey_question:",
    }.freeze

    def initialize(severity, message, group = nil, locator = nil)
      raise ArgumentError, "severity must be one of #{SEVERITY.keys.join(", ")}" unless SEVERITY.key?(severity)
      raise ArgumentError, "message is required"  if message.blank?
      @severity = severity
      @message  = message
      @group    = group
      @locator  = locator
    end

    def <=>(other_line)
      sort_attributes <=> other_line.sort_attributes
    end

    def to_s
      ["- [ ] #{SEVERITY[severity]}", locator, message].compact.join(" - ")
    end

    protected

    def sort_attributes
      [group.to_s, order_severity, locator.to_s, message.to_s]
    end

    private

    def order_severity
      SEVERITY.keys.index(severity)
    end
  end
end