Sha256: abfccfeaa0d05047f7495f7d4b17f92692256145ab1d364470e4f57e522ef63d

Contents?: true

Size: 1.08 KB

Versions: 1

Compression:

Stored size: 1.08 KB

Contents

# frozen_string_literal: true

require "flex_station_data/concerns/presenter"
require "flex_station_data/linear_regression"

module FlexStationData
  module Presenters
    class SampleRegressionHash
      include Concerns::Presenter

      PRODUCTS = {
        slope:     "slope",
        intercept: "intercept",
        r_squared: "R²",
        quality:   "quality"
      }.freeze

      attr_reader :times, :sample_values, :min_r_squared, :options

      def initialize(times, *sample_values, min_r_squared: nil, **options)
        @times = times
        @sample_values = sample_values
        @min_r_squared = min_r_squared
        @options = options
      end

      def sample_regressions
        @sample_regressions ||= sample_values.map do |values|
          FlexStationData::LinearRegression.new(times, values, min_r_squared: min_r_squared)
        end
      end

      def present
        PRODUCTS.each_with_object({}) do |(method, label), memo|
          memo[label] = sample_regressions.map(&method)
        end
      end

      def self.headers
        PRODUCTS.values
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
flex-station-data-1.0.2 lib/flex_station_data/presenters/sample_regression_hash.rb