Sha256: ac59a1815ef617559b44da88b79e98fa25bf294b73ec5842355de45391267f5d

Contents?: true

Size: 1.11 KB

Versions: 1

Compression:

Stored size: 1.11 KB

Contents

# frozen_string_literal: true

require "flex_station_data/concerns/presenter"
require "flex_station_data/services/sample_quality"
require "flex_station_data/presenters/sample_regression_hash"

module FlexStationData
  module Presenters
    class SampleHash
      include Concerns::Presenter

      attr_reader :times, :sample, :quality_control, :options

      def initialize(times, sample, **options)
        @times = times
        @sample = sample
        @options = options
      end

      def errors
        @errors ||= SampleQuality.call(sample, **options).reject(&:good?)
      end

      def errors?
        errors.present?
      end

      def errors_hash
        { "error" => errors.first&.to_s }
      end

      def wells_hash
        { "wells" => sample.wells.join(", ") }
      end

      def regression_hash
        return SampleRegressionHash.headers.zip([]).to_h if errors?

        SampleRegressionHash.present(times, sample.mean, **options).transform_values(&:first)
      end

      def present
        { "sample" => sample.label }.merge(wells_hash).merge(errors_hash).merge(regression_hash)
      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_hash.rb