Class: Tailor::Reporter

Inherits:
Object
  • Object
show all
Defined in:
lib/tailor/reporter.rb

Overview

Objects of this type are responsible for sending the right data to report formatters.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*formats) ⇒ Reporter

For each in formats, it creates a new Tailor::Formatter::#{formatter.capitalize} object and adds it to @formatters.

Parameters:

  • formats (Array)

    A list of formatters to use for generating reports.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/tailor/reporter.rb', line 12

def initialize(*formats)
  formats = %w(text) if formats.nil? || formats.empty?

  @formatters = formats.flatten.map do |formatter|
    retried = false

    begin
      Tailor::Formatters.const_get(formatter.capitalize).new
    rescue NameError
      require_relative "formatters/#{formatter}"

      if retried
        next
      else
        retried = true
        retry
      end
    end
  end.uniq

  @formatters.compact!
end

Instance Attribute Details

#formattersObject (readonly)

Returns the value of attribute formatters.



5
6
7
# File 'lib/tailor/reporter.rb', line 5

def formatters
  @formatters
end

Instance Method Details

#file_report(file_problems, label) ⇒ Object

Sends the data to each @formatters to generate the report of problems for the file that was just critiqued. A problem is in the format:

{ 'path/to/file.rb' => [Problem1, Problem2, etc.]}

…where Problem1 and Problem2 are of type Problem.

Parameters:

  • file_problems (Hash)
  • label (Symbol, String)

    The label of the file_set that defines the problems in file_problems.



45
46
47
48
49
# File 'lib/tailor/reporter.rb', line 45

def file_report(file_problems, label)
  @formatters.each do |formatter|
    formatter.file_report(file_problems, label)
  end
end

#summary_report(all_problems, opts = {}) ⇒ Object

Sends the data to each @formatters to generate the reports of problems for all files that were just critiqued.

Parameters:

  • all_problems (Hash)


55
56
57
58
59
60
61
62
63
64
# File 'lib/tailor/reporter.rb', line 55

def summary_report(all_problems, opts={})
  @formatters.each do |formatter|
    summary = formatter.summary_report(all_problems)
    if formatter.respond_to?(:accepts_output_file) &&
      formatter.accepts_output_file &&
      !opts[:output_file].empty?
      File.open(opts[:output_file], 'w') { |f| f.puts summary }
    end
  end
end