Sha256: fd6984888827792ee3c12d2b725ab4d2947969a9d051027ff9cccc32b00ff074

Contents?: true

Size: 1.14 KB

Versions: 3

Compression:

Stored size: 1.14 KB

Contents

require "json"
require "teabag/result"

module Teabag
  class Runner

    attr_accessor :formatters
    attr_reader   :failure_count

    def initialize(suite_name = :default)
      @suite_name = suite_name
      @formatters = Teabag.configuration.formatters.split(',').map {|f| resolve_formatter(f).new }
      @failure_count = 0
    end

    def process(line)
      return if output_from(line)
      log line unless Teabag.configuration.suppress_log
    end

    private

    def resolve_formatter(formatter)
      Teabag::Formatters.const_get("#{formatter.to_s.capitalize}Formatter")
    end

    def output_from(line)
      json = JSON.parse(line)
      return false unless json["_teabag"] && json["type"]
      result = Teabag::Result.build_from_json(@suite_name, json)
      notify_formatters result
      @failure_count += 1 if result.failing?
      return true
    rescue JSON::ParserError
      false
    end

    def notify_formatters(result)
      @formatters.each do |formatter|
        event = result.type
        formatter.send(event, result) if formatter.respond_to?(event)
      end
    end

    def log(msg)
      STDOUT.print msg
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
teabag-0.3.2 lib/teabag/runner.rb
teabag-0.3.1 lib/teabag/runner.rb
teabag-0.3.0 lib/teabag/runner.rb