Sha256: 8d3a3630f4c1fd97ebbca7bf2a344768132d10503221a15221224969cccf1577

Contents?: true

Size: 1.21 KB

Versions: 2

Compression:

Stored size: 1.21 KB

Contents

require "singleton"
require "active_support/core_ext"

require "flex_station_data/concerns/service"

module FlexStationData
  class ValueQuality
    include Concerns::Service

    class Good
      include Singleton

      def good?
        true
      end

      def to_s
        "good"
      end
    end

    class Bad
      attr_reader :description

      def initialize(description)
        @description = description
      end

      def good?
        false
      end

      def to_s
        description
      end
    end

    attr_reader :value, :threshold

    def initialize(value, threshold: nil, **_options)
      @value = value
      @threshold = threshold
    end

    def no_data?
      value.blank?
    end

    def saturated?
      value == "#SAT"
    end

    def invalid?
      !(no_data? || saturated? || value.is_a?(Numeric))
    end

    def below_threshold?
      threshold.present? && value.is_a?(Numeric) && value < threshold
    end

    def call
      if no_data?
        Bad.new("No data")
      elsif saturated?
        Bad.new("Saturated")
      elsif invalid?
        Bad.new("Invalid data")
      elsif below_threshold?
        Bad.new("Below threshold")
      else
        Good.instance
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
flex-station-data-1.0.1 lib/flex_station_data/services/value_quality.rb
flex-station-data-1.0.0 lib/flex_station_data/services/value_quality.rb