Sha256: c10b36dd9e7f7f5f2b57e9112a319c2486193c577be37e3989fdf280e6065f10

Contents?: true

Size: 1.16 KB

Versions: 1

Compression:

Stored size: 1.16 KB

Contents

require "singleton"
require "active_support/core_ext"

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)
      @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.2.0 lib/flex_station_data/services/value_quality.rb