Sha256: a367b94e191b7271febc3e7699259b7140696fa79f02041d0e88069855783613

Contents?: true

Size: 1.21 KB

Versions: 3

Compression:

Stored size: 1.21 KB

Contents

# frozen_string_literal: true

module Lite
  module Measurements
    class Temperature < Lite::Measurements::Base

      C_FREEZING_POINT ||= 5.0 / 9.0
      C_INVERSED_POINT ||= 9.0 / 5.0
      F_FREEZING_POINT ||= 32.0
      K_FREEZING_POINT ||= 273.15

      VALID_KEYS ||= %i[
        celsius fahrenheit kelvin
      ].freeze

      def convert(from:, to:)
        assert_all_valid_keys!(from, to, VALID_KEYS)

        case to
        when from then amount
        when :celsius then send("celsius_from_#{from}")
        when :fahrenheit then send("fahrenheit_from_#{from}")
        when :kelvin then send("kelvin_from_#{from}")
        end
      end

      private

      def celsius_from_fahrenheit
        (amount - F_FREEZING_POINT) * C_FREEZING_POINT
      end

      def celsius_from_kelvin
        amount - K_FREEZING_POINT
      end

      def fahrenheit_from_celsius
        (amount * C_INVERSED_POINT) + F_FREEZING_POINT
      end

      def fahrenheit_from_kelvin
        celsius_from_kelvin * C_INVERSED_POINT + F_FREEZING_POINT
      end

      def kelvin_from_celsius
        amount + K_FREEZING_POINT
      end

      def kelvin_from_fahrenheit
        celsius_from_fahrenheit + K_FREEZING_POINT
      end

    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
lite-measurements-1.0.2 lib/lite/measurements/temperature.rb
lite-measurements-1.0.1 lib/lite/measurements/temperature.rb
lite-measurements-1.0.0 lib/lite/measurements/temperature.rb