Sha256: 8fc54d6638765cec2e5f66dd83a326de073105cdabf094126080dd15e2ed9aa7
Contents?: true
Size: 1.79 KB
Versions: 2
Compression:
Stored size: 1.79 KB
Contents
require_relative 'sentence' require_relative 'inflector' module Pronto module Formatter class GithubStatusFormatter class StatusBuilder def initialize(runner, messages) @runner = runner @messages = messages end def description desc = map_description desc.empty? ? NO_ISSUES_DESCRIPTION : "Found #{desc}." end def state failure? ? :failure : :success end def context Inflector.underscore(@runner.name) end private def failure? @messages.any? { |message| failure_message?(message) } end def failure_message?(message) message_state(message) == :failure end def message_state(message) DEFAULT_LEVEL_TO_STATE_MAPPING[message.level] end 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 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 def order_by_severity(counts) Hash[counts.sort_by { |k, _v| Pronto::Message::LEVELS.index(k) }] end def pluralize(count, word) "#{count} #{word}#{count > 1 ? 's' : ''}" end DEFAULT_LEVEL_TO_STATE_MAPPING = { info: :success, warning: :failure, error: :failure, fatal: :failure }.freeze NO_ISSUES_DESCRIPTION = 'Coast is clear!'.freeze private_constant :DEFAULT_LEVEL_TO_STATE_MAPPING, :NO_ISSUES_DESCRIPTION end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
pronto-0.7.1 | lib/pronto/formatter/github_status_formatter/status_builder.rb |
pronto-0.7.0 | lib/pronto/formatter/github_status_formatter/status_builder.rb |