Sha256: 50516a37ed8c4733d32cdc9cf0e48e51636d8a225ca7ef1733e4d927a284937d

Contents?: true

Size: 1.3 KB

Versions: 4

Compression:

Stored size: 1.3 KB

Contents

# frozen_string_literal: true

require "descriptive_statistics/safe"
require "fileutils"
require "forwardable"
require "launchy"
require "tilt"

module Attractor
  # base reporter
  class BaseReporter
    extend Forwardable
    attr_accessor :file_prefix
    attr_reader :types
    attr_writer :values
    def_delegator :@watcher, :watch

    def initialize(calculators:, file_prefix: "", ignores: "", open_browser: true)
      @file_prefix = file_prefix || ""
      @calculators = calculators
      @open_browser = open_browser
      @values = @calculators.first.last.calculate
      @suggester = Suggester.new(values)

      @watcher = Watcher.new(@file_prefix, ignores, lambda do
        report
      end)
    rescue NoMethodError => _e
      raise "There was a problem gathering churn changes"
    end

    def suggestions(quantile:, type: "rb")
      @suggester.values = values(type: type)
      @suggestions = @suggester.suggest(quantile)
      @suggestions
    end

    def report
      @suggestions = @suggester.suggest
      @types = Hash[@calculators.map { |calc| [calc.first, calc.last.type] }]
    end

    def render
      "Attractor"
    end

    def values(type: "rb")
      @values = @calculators[type].calculate
      @values
    rescue NoMethodError => _e
      puts "No calculator for type #{type}"
    end
  end
end

Version data entries

4 entries across 3 versions & 1 rubygems

Version Path
attractor-2.3.0 lib/attractor/reporters/base_reporter.rb~
attractor-2.2.0 lib/attractor/reporters/base_reporter.rb
attractor-2.2.0 lib/attractor/reporters/base_reporter.rb~
attractor-2.1.0 lib/attractor/reporters/base_reporter.rb