Sha256: 85c3c22f9942da1fe045df44428dc5483999a363725760b0bca6384ad59201b7

Contents?: true

Size: 1.75 KB

Versions: 12

Compression:

Stored size: 1.75 KB

Contents

require_relative 'sentence'

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
          "pronto/#{@runner.title}"
        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

12 entries across 12 versions & 1 rubygems

Version Path
pronto-0.11.1 lib/pronto/formatter/github_status_formatter/status_builder.rb
pronto-0.11.0 lib/pronto/formatter/github_status_formatter/status_builder.rb
pronto-0.10.0 lib/pronto/formatter/github_status_formatter/status_builder.rb
pronto-0.9.5 lib/pronto/formatter/github_status_formatter/status_builder.rb
pronto-0.9.4 lib/pronto/formatter/github_status_formatter/status_builder.rb
pronto-0.9.3 lib/pronto/formatter/github_status_formatter/status_builder.rb
pronto-0.9.2 lib/pronto/formatter/github_status_formatter/status_builder.rb
pronto-0.9.1 lib/pronto/formatter/github_status_formatter/status_builder.rb
pronto-0.9.0 lib/pronto/formatter/github_status_formatter/status_builder.rb
pronto-0.8.2 lib/pronto/formatter/github_status_formatter/status_builder.rb
pronto-0.8.1 lib/pronto/formatter/github_status_formatter/status_builder.rb
pronto-0.8.0 lib/pronto/formatter/github_status_formatter/status_builder.rb