Sha256: 672c2e1150c4f1a3a004bf52f08d19c6839b6528e6c2305203e988231ee7d90e

Contents?: true

Size: 1.22 KB

Versions: 1

Compression:

Stored size: 1.22 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

1 entries across 1 versions & 1 rubygems

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