From 19777004dfd91c1afed404ec37c007fcecb84f9f Mon Sep 17 00:00:00 2001 From: Neethan Balaventhan Date: Mon, 9 Mar 2026 23:13:39 -0400 Subject: [PATCH] feat: add Measured::Temperature unit type Add Temperature as an opt-in unit type with Celsius, Kelvin, and Fahrenheit. Not included in the default require - users opt in with: gem 'measured', require: ['measured', 'measured/temperature'] Or manually: require 'measured/temperature' --- lib/measured/all.rb | 4 ++++ lib/measured/temperature.rb | 3 +++ lib/measured/units/temperature.rb | 14 ++++++++++++++ test/test_helper.rb | 2 +- test/units/temperature_test.rb | 16 +--------------- 5 files changed, 23 insertions(+), 16 deletions(-) create mode 100644 lib/measured/all.rb create mode 100644 lib/measured/temperature.rb create mode 100644 lib/measured/units/temperature.rb diff --git a/lib/measured/all.rb b/lib/measured/all.rb new file mode 100644 index 0000000..33f5d4d --- /dev/null +++ b/lib/measured/all.rb @@ -0,0 +1,4 @@ +# frozen_string_literal: true +require "measured" + +require "measured/units/temperature" diff --git a/lib/measured/temperature.rb b/lib/measured/temperature.rb new file mode 100644 index 0000000..ecb52c2 --- /dev/null +++ b/lib/measured/temperature.rb @@ -0,0 +1,3 @@ +# frozen_string_literal: true +require "measured/base" +require "measured/units/temperature" diff --git a/lib/measured/units/temperature.rb b/lib/measured/units/temperature.rb new file mode 100644 index 0000000..0f48157 --- /dev/null +++ b/lib/measured/units/temperature.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +Measured::Temperature = Measured.build do + unit :C, aliases: [:celsius] + + unit :K, aliases: [:kelvin], convert_to: "C", + forward: ->(k) { k - BigDecimal("273.15") }, + backward: ->(c) { c + BigDecimal("273.15") }, + description: "celsius + 273.15" + + unit :F, aliases: [:fahrenheit], convert_to: "C", + forward: ->(f) { (f - 32) * Rational(5, 9) }, + backward: ->(c) { c * Rational(9, 5) + 32 }, + description: "celsius * 9/5 + 32" +end diff --git a/test/test_helper.rb b/test/test_helper.rb index 3dc727f..6bdd749 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -4,7 +4,7 @@ require "combustion" Combustion.path = "test/internal" Combustion.initialize! :active_record, :active_model -require "measured" +require "measured/all" require "minitest/reporters" require "minitest/autorun" require "mocha/minitest" diff --git a/test/units/temperature_test.rb b/test/units/temperature_test.rb index 1544503..4591683 100644 --- a/test/units/temperature_test.rb +++ b/test/units/temperature_test.rb @@ -2,20 +2,6 @@ require "test_helper" -Measured::Temperature = Measured.build do - unit :C, aliases: [:c, :celsius] - - unit :K, aliases: [:k, :kelvin], convert_to: "C", - forward: ->(k) { k - BigDecimal("273.15") }, - backward: ->(c) { c + BigDecimal("273.15") }, - description: "celsius + 273.15" - - unit :F, aliases: [:f, :fahrenheit], convert_to: "C", - forward: ->(f) { (f - 32) * Rational(5, 9) }, - backward: ->(c) { c * Rational(9, 5) + 32 }, - description: "celsius * 9/5 + 32" -end - class Measured::TemperatureTest < ActiveSupport::TestCase test ".unit_names should be the list of base unit names" do assert_equal %w(C F K), Measured::Temperature.unit_names @@ -84,7 +70,7 @@ class Measured::TemperatureTest < ActiveSupport::TestCase end test ".unit_names_with_aliases includes all aliases" do - expected = %w(C F K c celsius f fahrenheit k kelvin).sort + expected = %w(C F K celsius fahrenheit kelvin).sort assert_equal expected, Measured::Temperature.unit_names_with_aliases end