Skip to content

Commit 1093f33

Browse files
committed
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'
1 parent 3a53018 commit 1093f33

3 files changed

Lines changed: 19 additions & 15 deletions

File tree

lib/measured/temperature.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# frozen_string_literal: true
2+
require "measured/base"
3+
require "measured/units/temperature"

lib/measured/units/temperature.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# frozen_string_literal: true
2+
Measured::Temperature = Measured.build do
3+
unit :C, aliases: [:celsius]
4+
5+
unit :K, aliases: [:kelvin], convert_to: "C",
6+
forward: ->(k) { k - BigDecimal("273.15") },
7+
backward: ->(c) { c + BigDecimal("273.15") },
8+
description: "celsius + 273.15"
9+
10+
unit :F, aliases: [:fahrenheit], convert_to: "C",
11+
forward: ->(f) { (f - 32) * Rational(5, 9) },
12+
backward: ->(c) { c * Rational(9, 5) + 32 },
13+
description: "celsius * 9/5 + 32"
14+
end

test/units/temperature_test.rb

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,7 @@
11
# frozen_string_literal: true
22

33
require "test_helper"
4-
5-
Measured::Temperature = Measured.build do
6-
unit :C, aliases: [:c, :celsius]
7-
8-
unit :K, aliases: [:k, :kelvin], convert_to: "C",
9-
forward: ->(k) { k - BigDecimal("273.15") },
10-
backward: ->(c) { c + BigDecimal("273.15") },
11-
description: "celsius + 273.15"
12-
13-
unit :F, aliases: [:f, :fahrenheit], convert_to: "C",
14-
forward: ->(f) { (f - 32) * Rational(5, 9) },
15-
backward: ->(c) { c * Rational(9, 5) + 32 },
16-
description: "celsius * 9/5 + 32"
17-
end
4+
require "measured/units/temperature"
185

196
class Measured::TemperatureTest < ActiveSupport::TestCase
207
test ".unit_names should be the list of base unit names" do
@@ -84,7 +71,7 @@ class Measured::TemperatureTest < ActiveSupport::TestCase
8471
end
8572

8673
test ".unit_names_with_aliases includes all aliases" do
87-
expected = %w(C F K c celsius f fahrenheit k kelvin).sort
74+
expected = %w(C F K celsius fahrenheit kelvin).sort
8875
assert_equal expected, Measured::Temperature.unit_names_with_aliases
8976
end
9077

0 commit comments

Comments
 (0)