measured 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +7 -0
- data/lib/measured/measurable.rb +13 -3
- data/lib/measured/version.rb +1 -1
- data/repodb.yml +3 -0
- data/test/measurable_test.rb +38 -6
- data/test/units/length_test.rb +4 -0
- data/test/units/weight_test.rb +4 -0
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 81c1e2494e3547676ef4d146737363a2fbd34f84
|
|
4
|
+
data.tar.gz: 13dc02fd3f8f64a2e3efe86ec6c93d4c3e6530fe
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: dba3840951fee6ac5bbe8bb42ca8ae4371d722b16acd48ca03f03c06dc68094d66d78b6cd659513bec5a8fa5c11c17048ca5789df09a634c6211bf76f9437050
|
|
7
|
+
data.tar.gz: 463f44d4a37facac37d45b1382d91ac176234500a4f1fdcc1bfb3420ee4672e29b014dbe78d6f40b052e118bebffb0745a6d653238d3d33512a7bd50ce19d492
|
data/README.md
CHANGED
|
@@ -85,6 +85,13 @@ Measured::Weight.new(3, :g) * 2
|
|
|
85
85
|
> #<Measured::Weight 6 g>
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
+
Converts units only as needed for equality comparison:
|
|
89
|
+
|
|
90
|
+
```ruby
|
|
91
|
+
> Measured::Weight.new(1000, :g) == Measured::Weight.new(1, :kg)
|
|
92
|
+
true
|
|
93
|
+
```
|
|
94
|
+
|
|
88
95
|
Extract the unit and the value:
|
|
89
96
|
|
|
90
97
|
```ruby
|
data/lib/measured/measurable.rb
CHANGED
|
@@ -23,6 +23,8 @@ class Measured::Measurable
|
|
|
23
23
|
|
|
24
24
|
def convert_to(new_unit)
|
|
25
25
|
new_unit_name = self.class.conversion.to_unit_name(new_unit)
|
|
26
|
+
return self if new_unit_name == self.class.conversion.to_unit_name(unit)
|
|
27
|
+
|
|
26
28
|
value = self.class.conversion.convert(@value, from: @unit, to: new_unit_name)
|
|
27
29
|
|
|
28
30
|
self.class.new(value, new_unit)
|
|
@@ -46,13 +48,17 @@ class Measured::Measurable
|
|
|
46
48
|
end
|
|
47
49
|
|
|
48
50
|
def <=>(other)
|
|
49
|
-
if other.is_a?(self.class)
|
|
50
|
-
|
|
51
|
+
if other.is_a?(self.class)
|
|
52
|
+
other_converted = other.convert_to(unit)
|
|
53
|
+
value <=> other_converted.value
|
|
51
54
|
end
|
|
52
55
|
end
|
|
53
56
|
|
|
54
57
|
def ==(other)
|
|
55
|
-
|
|
58
|
+
return false unless other.is_a?(self.class)
|
|
59
|
+
|
|
60
|
+
other_converted = other.convert_to(unit)
|
|
61
|
+
value == other_converted.value
|
|
56
62
|
end
|
|
57
63
|
|
|
58
64
|
alias_method :eql?, :==
|
|
@@ -75,5 +81,9 @@ class Measured::Measurable
|
|
|
75
81
|
conversion.unit_names_with_aliases
|
|
76
82
|
end
|
|
77
83
|
|
|
84
|
+
def name
|
|
85
|
+
to_s.split("::").last.underscore.humanize.downcase
|
|
86
|
+
end
|
|
87
|
+
|
|
78
88
|
end
|
|
79
89
|
end
|
data/lib/measured/version.rb
CHANGED
data/repodb.yml
ADDED
data/test/measurable_test.rb
CHANGED
|
@@ -77,6 +77,16 @@ class Measured::MeasurableTest < ActiveSupport::TestCase
|
|
|
77
77
|
refute Magic.valid_unit?("junk")
|
|
78
78
|
end
|
|
79
79
|
|
|
80
|
+
test ".name looks at the class name" do
|
|
81
|
+
module Example
|
|
82
|
+
class VeryComplexThing < Measured::Measurable ; end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
assert_equal "magic", Magic.name
|
|
86
|
+
assert_equal "measurable", Measured::Measurable.name
|
|
87
|
+
assert_equal "very complex thing", Example::VeryComplexThing.name
|
|
88
|
+
end
|
|
89
|
+
|
|
80
90
|
test "#convert_to raises on an invalid unit" do
|
|
81
91
|
assert_raises Measured::UnitError do
|
|
82
92
|
@magic.convert_to(:punch)
|
|
@@ -86,13 +96,19 @@ class Measured::MeasurableTest < ActiveSupport::TestCase
|
|
|
86
96
|
test "#convert_to returns a new object of the same type in the new unit" do
|
|
87
97
|
converted = @magic.convert_to(:arcane)
|
|
88
98
|
|
|
89
|
-
|
|
99
|
+
assert_equal converted, @magic
|
|
100
|
+
refute_equal converted.object_id, @magic.object_id
|
|
90
101
|
assert_equal BigDecimal(10), @magic.value
|
|
91
102
|
assert_equal "magic_missile", @magic.unit
|
|
92
103
|
assert_equal BigDecimal(1), converted.value
|
|
93
104
|
assert_equal "arcane", converted.unit
|
|
94
105
|
end
|
|
95
106
|
|
|
107
|
+
test "#convert_to from and to the same unit returns the same object" do
|
|
108
|
+
converted = @magic.convert_to(@magic.unit)
|
|
109
|
+
assert_equal converted.object_id, @magic.object_id
|
|
110
|
+
end
|
|
111
|
+
|
|
96
112
|
test "#convert_to! replaces the existing object with a new version in the new unit" do
|
|
97
113
|
converted = @magic.convert_to!(:arcane)
|
|
98
114
|
|
|
@@ -113,8 +129,8 @@ class Measured::MeasurableTest < ActiveSupport::TestCase
|
|
|
113
129
|
assert_equal "#<Magic: 0.1234E1 magic_missile>", Magic.new(1.234, :magic_missile).inspect
|
|
114
130
|
end
|
|
115
131
|
|
|
116
|
-
test "#<=> compares
|
|
117
|
-
|
|
132
|
+
test "#<=> compares regardless of the unit" do
|
|
133
|
+
assert_equal -1, @magic <=> Magic.new(10, :fire)
|
|
118
134
|
assert_equal 1, @magic <=> Magic.new(9, :magic_missile)
|
|
119
135
|
assert_equal 0, @magic <=> Magic.new(10, :magic_missile)
|
|
120
136
|
assert_equal -1, @magic <=> Magic.new(11, :magic_missile)
|
|
@@ -123,13 +139,29 @@ class Measured::MeasurableTest < ActiveSupport::TestCase
|
|
|
123
139
|
test "#== should be the same if the classes, unit, and amount match" do
|
|
124
140
|
assert @magic == @magic
|
|
125
141
|
assert Magic.new(10, :magic_missile) == Magic.new("10", "magic_missile")
|
|
126
|
-
|
|
142
|
+
assert Magic.new(1, :arcane) == Magic.new(10, :magic_missile)
|
|
143
|
+
refute Magic.new(1, :arcane) == Magic.new(10.1, :magic_missile)
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
test "#== should be the same if the classes and amount match but the unit does not so they convert" do
|
|
147
|
+
assert Magic.new(2, :magic_missile) == Magic.new("1", "ice")
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
test "#> and #< should compare measurements" do
|
|
151
|
+
assert Magic.new(10, :magic_missile) < Magic.new(20, :magic_missile)
|
|
152
|
+
refute Magic.new(10, :magic_missile) > Magic.new(20, :magic_missile)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
test "#> and #< should compare measurements of different units" do
|
|
156
|
+
assert Magic.new(10, :magic_missile) < Magic.new(100, :ice)
|
|
157
|
+
refute Magic.new(10, :magic_missile) > Magic.new(100, :ice)
|
|
127
158
|
end
|
|
128
159
|
|
|
129
|
-
test "#eql? should be the same if the classes
|
|
160
|
+
test "#eql? should be the same if the classes and amount match, and unit is converted" do
|
|
130
161
|
assert @magic == @magic
|
|
131
162
|
assert Magic.new(10, :magic_missile) == Magic.new("10", "magic_missile")
|
|
132
|
-
|
|
163
|
+
assert Magic.new(1, :arcane) == Magic.new(10, :magic_missile)
|
|
164
|
+
refute Magic.new(1, :arcane) == Magic.new(10.1, :magic_missile)
|
|
133
165
|
end
|
|
134
166
|
|
|
135
167
|
end
|
data/test/units/length_test.rb
CHANGED
|
@@ -9,6 +9,10 @@ class Measured::LengthTest < ActiveSupport::TestCase
|
|
|
9
9
|
assert_equal ["cm", "ft", "in", "m", "mm", "yd"], Measured::Length.units
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
+
test ".name" do
|
|
13
|
+
assert_equal "length", Measured::Length.name
|
|
14
|
+
end
|
|
15
|
+
|
|
12
16
|
test ".convert_to from cm to cm" do
|
|
13
17
|
assert_conversion Measured::Length, "2000 cm", "2000 cm"
|
|
14
18
|
end
|
data/test/units/weight_test.rb
CHANGED
|
@@ -13,6 +13,10 @@ class Measured::WeightTest < ActiveSupport::TestCase
|
|
|
13
13
|
assert_equal ["g", "kg", "lb", "oz"], Measured::Weight.units
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
+
test ".name" do
|
|
17
|
+
assert_equal "weight", Measured::Weight.name
|
|
18
|
+
end
|
|
19
|
+
|
|
16
20
|
test ".convert_to from g to g" do
|
|
17
21
|
assert_conversion Measured::Weight, "2000 g", "2000 g"
|
|
18
22
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: measured
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Kevin McPhillips
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-
|
|
11
|
+
date: 2015-05-13 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -119,6 +119,7 @@ files:
|
|
|
119
119
|
- lib/measured/units/weight.rb
|
|
120
120
|
- lib/measured/version.rb
|
|
121
121
|
- measured.gemspec
|
|
122
|
+
- repodb.yml
|
|
122
123
|
- test/arithmetic_test.rb
|
|
123
124
|
- test/conversion_table_test.rb
|
|
124
125
|
- test/conversion_test.rb
|