class Pronto::Message

def ==(other)

def ==(other)
  comparison_attributes.all? do |attribute|
    send(attribute) == other.send(attribute)
  end
end

def comparison_attributes

def comparison_attributes
  line ? %i[path msg level line] : %i[path msg level commit_sha]
end

def full_path

def full_path
  repo.path.join(path) if repo
end

def hash

def hash
  comparison_attributes.reduce(0) do |hash, attribute|
    hash ^ send(attribute).hash
  end
end

def initialize(path, line, level, msg, commit_sha = nil, runner = nil)

def initialize(path, line, level, msg, commit_sha = nil, runner = nil)
  unless LEVELS.include?(level)
    raise ::ArgumentError, "level should be set to one of #{LEVELS}"
  end
  @path = path
  @line = line
  @level = level
  @msg = msg
  @runner = runner
  @commit_sha = commit_sha
  @commit_sha ||= line.commit_sha if line
end

def repo

def repo
  line.patch.repo if line
end

def to_h

def to_h
  {
    path: path,
    line: line,
    level: level,
    msg: msg,
    commit_sha: commit_sha,
    runner: @runner && @runner.title
  }
end