Sha256: 026ee0b5312ac0a438974d636690693d5baab9b11bf4c99da275355f0bd394ab

Contents?: true

Size: 1.79 KB

Versions: 3

Compression:

Stored size: 1.79 KB

Contents

class Tailor

  # Objects of this type are responsible for sending the right data to report
  # formatters.
  class Reporter
    attr_reader :formatters

    # For each in +formats+, it creates a new
    # +Tailor::Formatter::#{formatter.capitalize}+ object and adds it to
    # +@formatters+.
    #
    # @param [Array] formats A list of formatters to use for generating reports.
    def initialize(*formats)
      @formatters = []
      formats = %w[text] if formats.nil? || formats.empty?

      formats.flatten.each do |formatter|
        require_relative "formatters/#{formatter}"
        @formatters << eval("Tailor::Formatters::#{formatter.capitalize}.new")
      end
    end

    # 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 {Tailor::Problem}.
    #
    # @param [Hash] file_problems
    # @param [Symbol,String] label The label of the file_set that defines the
    #   problems in +file_problems+.
    def file_report(file_problems, label)
      @formatters.each do |formatter|
        formatter.file_report(file_problems, label)
      end
    end

    # Sends the data to each +@formatters+ to generate the reports of problems
    # for all files that were just critiqued.
    #
    # @param [Hash] all_problems
    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
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
tailor-1.4.0 lib/tailor/reporter.rb
tailor-1.3.1 lib/tailor/reporter.rb
tailor-1.3.0 lib/tailor/reporter.rb