class Pronto::Formatter::GithubStatusFormatter::StatusBuilder

Constants

DEFAULT_LEVEL_TO_STATE_MAPPING
NO_ISSUES_DESCRIPTION

Public Class Methods

new(runner, messages) click to toggle source
# File lib/pronto/formatter/github_status_formatter/status_builder.rb, line 7
def initialize(runner, messages)
  @runner = runner
  @messages = messages
end

Public Instance Methods

context() click to toggle source
# File lib/pronto/formatter/github_status_formatter/status_builder.rb, line 21
def context
  "pronto/#{@runner.title}"
end
description() click to toggle source
# File lib/pronto/formatter/github_status_formatter/status_builder.rb, line 12
def description
  desc = map_description
  desc.empty? ? NO_ISSUES_DESCRIPTION : "Found #{desc}."
end
state() click to toggle source
# File lib/pronto/formatter/github_status_formatter/status_builder.rb, line 17
def state
  failure? ? :failure : :success
end

Private Instance Methods

count_issue_types() click to toggle source
# File lib/pronto/formatter/github_status_formatter/status_builder.rb, line 47
def count_issue_types
  counts = @messages.each_with_object(Hash.new(0)) do |message, r|
    r[message.level] += 1
  end
  order_by_severity(counts)
end
failure?() click to toggle source
# File lib/pronto/formatter/github_status_formatter/status_builder.rb, line 27
def failure?
  @messages.any? { |message| failure_message?(message) }
end
failure_message?(message) click to toggle source
# File lib/pronto/formatter/github_status_formatter/status_builder.rb, line 31
def failure_message?(message)
  message_state(message) == :failure
end
map_description() click to toggle source
# File lib/pronto/formatter/github_status_formatter/status_builder.rb, line 39
def map_description
  words = count_issue_types.map do |issue_type, issue_count|
    pluralize(issue_count, issue_type)
  end

  Sentence.new(words).to_s
end
message_state(message) click to toggle source
# File lib/pronto/formatter/github_status_formatter/status_builder.rb, line 35
def message_state(message)
  DEFAULT_LEVEL_TO_STATE_MAPPING[message.level]
end
order_by_severity(counts) click to toggle source
# File lib/pronto/formatter/github_status_formatter/status_builder.rb, line 54
def order_by_severity(counts)
  Hash[counts.sort_by { |k, _v| Pronto::Message::LEVELS.index(k) }]
end
pluralize(count, word) click to toggle source
# File lib/pronto/formatter/github_status_formatter/status_builder.rb, line 58
def pluralize(count, word)
  "#{count} #{word}#{count > 1 ? 's' : ''}"
end