Sha256: e6ac9768f1d6ebdf532ad781c05c39a0ff68b140d6ef64b6fabd36de269ce1fb

Contents?: true

Size: 1.13 KB

Versions: 2

Compression:

Stored size: 1.13 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.map{ |f| resolve_formatter(f).new(suite_name) }
      @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.camelize}Formatter")
    end

    def output_from(line)
      json = JSON.parse(line)
      return false unless json["_teabag"] && json["type"]
      result = Teabag::Result.build_from_json(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

2 entries across 2 versions & 1 rubygems

Version Path
teabag-0.7.0 lib/teabag/runner.rb
teabag-0.6.0 lib/teabag/runner.rb