Sha256: fd327cdaa4feafac79ab4b76903489f5b21d002259510e4857dcc8b1322034b4

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-2.0.0 lib/lite/measurements/temperature.rb
lite-measurements-1.1.1 lib/lite/measurements/temperature.rb
lite-measurements-1.1.0 lib/lite/measurements/temperature.rb