Skip to content

Commit 3b545ad

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 1631f10 commit 3b545ad

5 files changed

Lines changed: 22 additions & 15 deletions

File tree

lib/measured/all.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"
3+
require "measured/units/temperature"

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/test_helper.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
Combustion.path = "test/internal"
66
Combustion.initialize! :active_record, :active_model
77
require "measured"
8+
require "measured/units/temperature"
89
require "minitest/reporters"
910
require "minitest/autorun"
1011
require "mocha/minitest"

test/units/temperature_test.rb

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,6 @@
22

33
require "test_helper"
44

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
18-
195
class Measured::TemperatureTest < ActiveSupport::TestCase
206
test ".unit_names should be the list of base unit names" do
217
assert_equal %w(C F K), Measured::Temperature.unit_names
@@ -84,7 +70,7 @@ class Measured::TemperatureTest < ActiveSupport::TestCase
8470
end
8571

8672
test ".unit_names_with_aliases includes all aliases" do
87-
expected = %w(C F K c celsius f fahrenheit k kelvin).sort
73+
expected = %w(C F K celsius fahrenheit kelvin).sort
8874
assert_equal expected, Measured::Temperature.unit_names_with_aliases
8975
end
9076

0 commit comments

Comments
 (0)