Sha256: 1b1c2df9b1a750cc5b2689109c5ab0b95550458a31356f550d6b61f170e70f9b

Contents?: true

Size: 1.42 KB

Versions: 3

Compression:

Stored size: 1.42 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 suppress_logs?
      return @suppress_logs unless @suppress_logs.nil?
      @suppress_logs = Teabag.configuration.suppress_log
      return true if @suppress_logs
      for formatter in @formatters
        return @suppress_logs = true if formatter.suppress_logs?
      end
      @suppress_logs = false
    end

    def process(line)
      return if output_from(line)
      log line unless suppress_logs?
    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

3 entries across 3 versions & 1 rubygems

Version Path
teabag-0.7.3 lib/teabag/runner.rb
teabag-0.7.2 lib/teabag/runner.rb
teabag-0.7.1 lib/teabag/runner.rb