tempura 0.0.1 → 0.1.0

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.
data/README.md CHANGED
@@ -1,25 +1,31 @@
1
1
  # Tempura
2
2
 
3
- Tempura is a library for temperature math and conversion.
3
+ Tempura is a library for temperature arithmetic, comparison, and conversion. Currently supported scales are Fahrenheit, Celsius, Kelvin, Delisle, Newton, Rankine, Réaumer, and Rømer.
4
4
 
5
- ## Installation
5
+ Temperature objects may be instantiated directly, e.g. `Tempura::Celsius.new(100)`, or by using the methods defined on `Numeric`, e.g., `212.degrees_fahrenheit`
6
6
 
7
- Add this line to your application's Gemfile:
7
+ ## Usage
8
8
 
9
- gem 'tempura'
9
+ ### Instantiation
10
10
 
11
- And then execute:
11
+ Direct instantiation:
12
12
 
13
- $ bundle
13
+ Tempura::Fahrenheit.new(212)
14
14
 
15
- Or install it yourself as:
15
+ Via Numeric:
16
16
 
17
- $ gem install tempura
17
+ 100.degrees_celsius
18
18
 
19
- ## Usage
19
+ ### Conversion
20
+
21
+ `Tempura::Temperature` (each scales parent object) implements `#to`, which returns a `Tempura::Conversion`, which then may receive the name of a scale to convert to:
22
+
23
+ 212.degrees_fahrenheit.to.celsius #=> <Tempura::Celsius...
20
24
 
21
25
  ### Arithmetic
22
26
 
27
+ Subtract other temperatures of any scale, or native degrees:
28
+
23
29
  it 'subtracts another temperature' do
24
30
  fahrenheit = Tempura::Fahrenheit.new(212)
25
31
  celsius = Tempura::Celsius.new(0)
@@ -35,6 +41,8 @@ Or install it yourself as:
35
41
  expect(result).to be_a(Tempura::Fahrenheit)
36
42
  end
37
43
 
44
+ Add temperatures of any scale, or native degrees:
45
+
38
46
  it 'adds another temperature' do
39
47
  fahrenheit = Tempura::Fahrenheit.new(212)
40
48
  celsius = Tempura::Celsius.new(0)
@@ -50,6 +58,8 @@ Or install it yourself as:
50
58
  expect(result).to be_a(Tempura::Fahrenheit)
51
59
  end
52
60
 
61
+ Divide a temperature by a numeric:
62
+
53
63
  it 'divides by a Numeric' do
54
64
  fahrenheit = Tempura::Fahrenheit.new(212)
55
65
  result = fahrenheit / 2
@@ -57,13 +67,6 @@ Or install it yourself as:
57
67
  expect(result).to be_a(Tempura::Fahrenheit)
58
68
  end
59
69
 
60
- it 'multiplies by a Numeric' do
61
- fahrenheit = Tempura::Fahrenheit.new(212)
62
- result = fahrenheit * 2
63
- expect(result).to eq(424)
64
- expect(result).to be_a(Tempura::Fahrenheit)
65
- end
66
-
67
70
  it 'can average an array of temperatures' do
68
71
  f = Tempura::Fahrenheit.new(212)
69
72
  c = Tempura::Celsius.new(100)
@@ -74,68 +77,61 @@ Or install it yourself as:
74
77
  expect(result).to be_a(Tempura::Delisle)
75
78
  end
76
79
 
80
+ Multiply a temperature by a numeric:
81
+
82
+ it 'multiplies by a Numeric' do
83
+ fahrenheit = Tempura::Fahrenheit.new(212)
84
+ result = fahrenheit * 2
85
+ expect(result).to eq(424)
86
+ expect(result).to be_a(Tempura::Fahrenheit)
87
+ end
88
+
77
89
  ### Comparison
78
90
 
79
- it 'has >' do
80
- fahrenheit = Tempura::Fahrenheit.new(212)
81
- celsius = Tempura::Celsius.new(99)
82
- expect(fahrenheit > celsius).to be_true
83
- end
84
-
85
- it 'has <' do
86
- fahrenheit = Tempura::Fahrenheit.new(212)
87
- celsius = Tempura::Celsius.new(101)
88
- expect(fahrenheit < celsius).to be_true
89
- end
90
-
91
- it 'has <=' do
92
- fahrenheit = Tempura::Fahrenheit.new(212)
93
- celsius = Tempura::Celsius.new(101)
94
- expect(fahrenheit <= celsius).to be_true
95
- end
96
-
97
- it 'has >=' do
98
- fahrenheit = Tempura::Fahrenheit.new(212)
99
- celsius = Tempura::Celsius.new(99)
100
- expect(fahrenheit >= celsius).to be_true
101
- end
102
-
103
- it 'has ==' do
104
- c = Tempura::Celsius.new(100)
105
- d = Tempura::Delisle.new(0)
106
- f = Tempura::Fahrenheit.new(212)
107
- n = Tempura::Newton.new(33)
108
- ra = Tempura::Rankine.new(671.67)
109
- ré = Tempura::Réaumur.new(80)
110
- rø = Tempura::Rømer.new(60)
111
-
112
- scales = [c, d, f, n, ra, ré, rø]
113
- scales.each { |s1|
114
- scales.each { |s2|
115
- expect(s1 == s2).to be_true
116
- }
91
+ `>`, `<`, `<=`, `>=`, `<=>`, and `==` are supported. Temperatures of the same or different scales may be compared, or a temperature may be compared with native degrees.
92
+
93
+ Tempura::Fahrenheit.new(212) > Tempura::Celsius.new(99)
94
+ Tempura::Fahrenheit.new(212) < Tempura::Celsius.new(101)
95
+ Tempura::Fahrenheit.new(212) >= Tempura::Celsius.new(99)
96
+ Tempura::Fahrenheit.new(212) <= Tempura::Celsius.new(101)
97
+
98
+ scales = [
99
+ Tempura::Celsius.new(100),
100
+ Tempura::Delisle.new(0),
101
+ Tempura::Fahrenheit.new(212),
102
+ Tempura::Newton.new(33),
103
+ Tempura::Rankine.new(671.67),
104
+ Tempura::Réaumur.new(80),
105
+ Tempura::Rømer.new(60),
106
+ ]
107
+
108
+ scales.all? { |s1|
109
+ scales.each { |s2|
110
+ s1 == s2
117
111
  }
118
- end
112
+ }
113
+
114
+ #=> true
119
115
 
120
116
  ### Casting
121
117
 
122
- it 'casts to_f' do
123
- temp = Tempura::Fahrenheit.new(212)
124
- expect(temp.to_f).to eq(212.0)
125
- expect(temp.to_f).to be_a(Float)
126
- end
118
+ Tempura::Fahrenheit.new(212).to_f
119
+ Tempura::Kelvin.new(373.15).to_i
120
+ Tempura::Celsius.new(100).to_d
127
121
 
128
- it 'casts to_i' do
129
- temp = Tempura::Kelvin.new(373.15)
130
- expect(temp.to_i).to eq(373)
131
- expect(temp.to_i).to be_a(Integer)
132
- end
122
+ ## Installation
133
123
 
134
- it 'casts to_d' do
135
- temp = Tempura::Celsius.new(100)
136
- expect(temp.to_d).to eq(100.0)
137
- expect(temp.to_d).to be_a(BigDecimal)
138
- end
124
+ Add this line to your application's Gemfile:
125
+
126
+ gem 'tempura'
127
+
128
+ And then execute:
129
+
130
+ $ bundle
131
+
132
+ Or install it yourself as:
133
+
134
+ $ gem install tempura
139
135
 
140
136
  ## Contributing
141
137
 
@@ -11,6 +11,8 @@ require 'tempura/newton'
11
11
  require 'tempura/rankine'
12
12
  require 'tempura/réaumur'
13
13
  require 'tempura/rømer'
14
+ require 'tempura/core_ext/numeric'
15
+ require 'tempura/conversion'
14
16
 
15
17
  module Tempura
16
18
  end
@@ -1 +1,11 @@
1
- class Tempura::Celsius < Tempura::Temperature; end
1
+ class Tempura::Celsius < Tempura::Temperature
2
+
3
+ def from_native(given)
4
+ given + BigDecimal("273.15")
5
+ end
6
+
7
+ def self.as_native(k)
8
+ k - BigDecimal("273.15")
9
+ end
10
+
11
+ end
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+
3
+ class Tempura::Conversion
4
+
5
+ def initialize(klass)
6
+ @klass = klass
7
+ end
8
+
9
+ def celsius
10
+ Tempura::Celsius.new(klass)
11
+ end
12
+
13
+ def delisle
14
+ Tempura::Delisle.new(klass)
15
+ end
16
+
17
+ def fahrenheit
18
+ Tempura::Fahrenheit.new(klass)
19
+ end
20
+
21
+ def kelvin
22
+ Tempura::Kelvin.new(klass)
23
+ end
24
+
25
+ def newton
26
+ Tempura::Newton.new(klass)
27
+ end
28
+
29
+ def rankine
30
+ Tempura::Rankine.new(klass)
31
+ end
32
+
33
+ def réaumur
34
+ Tempura::Réaumur.new(klass)
35
+ end
36
+ alias :reaumur :réaumur
37
+
38
+ def rømer
39
+ Tempura::Rømer.new(klass)
40
+ end
41
+ alias :romer :rømer
42
+
43
+ private
44
+
45
+ attr_reader :klass
46
+
47
+ end
@@ -0,0 +1,39 @@
1
+ # encoding: utf-8
2
+
3
+ class Numeric
4
+
5
+ def degrees_celsius
6
+ Tempura::Celsius.new(self)
7
+ end
8
+
9
+ def degrees_delisle
10
+ Tempura::Delisle.new(self)
11
+ end
12
+
13
+ def degrees_fahrenheit
14
+ Tempura::Fahrenheit.new(self)
15
+ end
16
+
17
+ def degrees_kelvin
18
+ Tempura::Kelvin.new(self)
19
+ end
20
+
21
+ def degrees_newton
22
+ Tempura::Newton.new(self)
23
+ end
24
+
25
+ def degrees_rankine
26
+ Tempura::Rankine.new(self)
27
+ end
28
+
29
+ def degrees_réaumur
30
+ Tempura::Réaumur.new(self)
31
+ end
32
+ alias :degrees_reaumur :degrees_réaumur
33
+
34
+ def degrees_rømer
35
+ Tempura::Rømer.new(self)
36
+ end
37
+ alias :degrees_romer :degrees_rømer
38
+
39
+ end
@@ -1 +1,11 @@
1
- class Tempura::Delisle < Tempura::Temperature; end
1
+ class Tempura::Delisle < Tempura::Temperature
2
+
3
+ def from_native(given)
4
+ BigDecimal("373.15") - ((given * 2) / 3)
5
+ end
6
+
7
+ def self.as_native(k)
8
+ ((BigDecimal("373.15") - k) * 3) / 2
9
+ end
10
+
11
+ end
@@ -1 +1,11 @@
1
- class Tempura::Fahrenheit < Tempura::Temperature; end
1
+ class Tempura::Fahrenheit < Tempura::Temperature
2
+
3
+ def from_native(given)
4
+ ((given + BigDecimal("459.67")) * 5) / 9
5
+ end
6
+
7
+ def self.as_native(k)
8
+ ((k * 9)/5) - BigDecimal("459.67")
9
+ end
10
+
11
+ end
@@ -1 +1,11 @@
1
- class Tempura::Kelvin < Tempura::Temperature; end
1
+ class Tempura::Kelvin < Tempura::Temperature
2
+
3
+ def from_native(given)
4
+ given
5
+ end
6
+
7
+ def self.as_native(k)
8
+ k
9
+ end
10
+
11
+ end
@@ -1 +1,11 @@
1
- class Tempura::Newton < Tempura::Temperature; end
1
+ class Tempura::Newton < Tempura::Temperature
2
+
3
+ def from_native(given)
4
+ ((given * 100) / 33) + BigDecimal("273.15")
5
+ end
6
+
7
+ def self.as_native
8
+ ((k - BigDecimal("273.15")) * 33) / 100
9
+ end
10
+
11
+ end
@@ -1 +1,11 @@
1
- class Tempura::Rankine < Tempura::Temperature; end
1
+ class Tempura::Rankine < Tempura::Temperature
2
+
3
+ def from_native(given)
4
+ (given * 5) / 9
5
+ end
6
+
7
+ def self.as_native(k)
8
+ (k * 9) / 5
9
+ end
10
+
11
+ end
@@ -1,2 +1,12 @@
1
1
  # encoding: utf-8
2
- class Tempura::Réaumur < Tempura::Temperature; end
2
+ class Tempura::Réaumur < Tempura::Temperature
3
+
4
+ def from_native(given)
5
+ ((given * 5) / 4) + BigDecimal("273.15")
6
+ end
7
+
8
+ def self.as_native(k)
9
+ ((k - BigDecimal("273.15")) * 4) / 5
10
+ end
11
+
12
+ end
@@ -1,2 +1,12 @@
1
1
  # encoding: utf-8
2
- class Tempura::Rømer < Tempura::Temperature; end
2
+ class Tempura::Rømer < Tempura::Temperature
3
+
4
+ def from_native(given)
5
+ (((given - BigDecimal("7.5")) * 40) / 21) + BigDecimal("273.15")
6
+ end
7
+
8
+ def self.as_native(k)
9
+ (((k - BigDecimal("273.15")) * 21) / 40) + BigDecimal("7.5")
10
+ end
11
+
12
+ end
@@ -1,14 +1,20 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'bigdecimal'
4
-
3
+ # Parent class of all +Temperature+ objects in +Tempura+, inherited by +Tempura::Celsius+, etc.
5
4
  class Tempura::Temperature
6
5
  include Comparable
7
6
 
8
- def initialize(value)
9
- @common = to_common(value)
7
+ def initialize(temp)
8
+ if temp.is_a?(Tempura::Temperature)
9
+ @common = temp.send(:common)
10
+ else
11
+ @common = to_common(temp)
12
+ end
10
13
  end
11
14
 
15
+ # Compares against a +Temperature+ of any scale, or a numeric representation of the same scale as the receiver.
16
+ #
17
+ # @param temp [Tempura::Temperature, Numeric]
12
18
  def <=>(temp)
13
19
  if temp.is_a?(Tempura::Temperature)
14
20
  @common <=> temp.send(:common)
@@ -17,20 +23,23 @@ class Tempura::Temperature
17
23
  end
18
24
  end
19
25
 
26
+ # Subtracts a +Temperature+ of any scale, or a numeric representation of the same scale as the receiver.
27
+ #
28
+ # @param temp [Tempura::Temperature, Numeric]
20
29
  def -(temp)
21
- if temp.is_a?(Tempura::Temperature)
22
- temp = to_native(temp)
23
- end
24
- self.class.new(in_native - temp)
30
+ self.class.new(in_native - numericalize(temp))
25
31
  end
26
32
 
33
+ # Adds a +Temperature+ of any scale, or a numeric representation of the same scale as the receiver.
34
+ #
35
+ # @param temp [Tempura::Temperature, Numeric]
27
36
  def +(temp)
28
- if temp.is_a?(Tempura::Temperature)
29
- temp = to_native(temp)
30
- end
31
- self.class.new(in_native + temp)
37
+ self.class.new(in_native + numericalize(temp))
32
38
  end
33
39
 
40
+ # Divides by +Numeric+.
41
+ #
42
+ # @param temp [Numeric]
34
43
  def /(temp)
35
44
  if temp.is_a?(Tempura::Temperature)
36
45
  raise ArgumentError, "cannot divide by a Tempura::Temperature, only a Numeric"
@@ -38,6 +47,9 @@ class Tempura::Temperature
38
47
  self.class.new(in_native.div(temp))
39
48
  end
40
49
 
50
+ # Multiplies by +Numeric+.
51
+ #
52
+ # @param temp [Numeric]
41
53
  def *(temp)
42
54
  if temp.is_a?(Tempura::Temperature)
43
55
  raise ArgumentError, "cannot multiply by a Tempura::Temperature, only a Numeric"
@@ -45,131 +57,51 @@ class Tempura::Temperature
45
57
  self.class.new(in_native * temp)
46
58
  end
47
59
 
60
+ # Returns {Tempura::Conversion} for the receiver, which recieves the name of the scale to convert to. E.g.,
61
+ #
62
+ # c = Tempura::Celsius.new(100)
63
+ # c.to.fahrenheit #=> <Tempura::Fahrenheit ...
64
+ #
65
+ def to
66
+ Tempura::Conversion.new(self)
67
+ end
68
+
69
+ # Float representation of receiver
48
70
  def to_f
49
71
  in_native.to_f
50
72
  end
51
73
 
74
+ # Integer representation of receiver
52
75
  def to_i
53
76
  in_native.to_i
54
77
  end
55
78
 
79
+ # BigDecimal representation of receiver
56
80
  def to_d
57
81
  in_native
58
82
  end
59
83
 
60
- def to_native(temp)
61
- temp.send("in_#{self.class.name.split('::').last.downcase}")
62
- end
63
-
64
- def from_celsius(given)
65
- given + BigDecimal("273.15")
66
- end
67
-
68
- def in_celsius
69
- common - BigDecimal("273.15")
70
- end
71
-
72
- def to_celsius
73
- Tempura::Celsius.new(in_celsius)
74
- end
75
-
76
- def from_delisle(given)
77
- BigDecimal("373.15") - ((given * 2) / 3)
78
- end
79
-
80
- def in_delisle
81
- ((BigDecimal("373.15") - common) * 3) / 2
82
- end
83
-
84
- def to_delisle
85
- Tempura::Delisle.new(in_delisle)
86
- end
87
-
88
- def from_fahrenheit(given)
89
- ((given + BigDecimal("459.67")) * 5) / 9
90
- end
91
-
92
- def in_fahrenheit
93
- ((common * 9)/5) - BigDecimal("459.67")
94
- end
95
-
96
- def to_fahrenheit
97
- Tempura::Fahrenheit.new(in_fahrenheit)
98
- end
99
-
100
- def from_kelvin(given)
101
- given
102
- end
103
-
104
- def in_kelvin
105
- common
106
- end
107
-
108
- def to_kelvin
109
- Tempura::Kelvin.new(in_kelvin)
110
- end
111
-
112
- def from_newton(given)
113
- ((given * 100) / 33) + BigDecimal("273.15")
114
- end
115
-
116
- def in_newton
117
- ((common - BigDecimal("273.15")) * 33) / 100
118
- end
119
-
120
- def to_newton
121
- Tempura::Newton.new(in_newton)
122
- end
123
-
124
- def from_rankine(given)
125
- (given * 5) / 9
126
- end
127
-
128
- def in_rankine
129
- (common * 9) / 5
130
- end
131
-
132
- def to_rankine
133
- Tempura::Rankine.new(in_rankine)
134
- end
135
-
136
- def from_réaumur(given)
137
- ((given * 5) / 4) + BigDecimal("273.15")
138
- end
139
-
140
- def in_réaumur
141
- ((common - BigDecimal("273.15")) * 4) / 5
142
- end
143
- alias :in_reaumur :in_réaumur
144
-
145
- def to_réaumur
146
- Tempura::Réaumur.new(in_réaumur)
147
- end
148
- alias :to_reaumur :to_réaumur
149
-
150
- def from_rømer(given)
151
- (((given - BigDecimal("7.5")) * 40) / 21) + BigDecimal("273.15")
152
- end
153
-
154
- def in_rømer
155
- (((common - BigDecimal("273.15")) * 21) / 40) + BigDecimal("7.5")
156
- end
157
- alias :in_romer :in_rømer
158
-
159
- def to_rømer
160
- Tempura::Rømer.new(in_rømer)
161
- end
162
- alias :to_romer :to_rømer
163
-
164
84
  private
165
85
 
166
86
  attr_reader :common
167
87
 
168
88
  def to_common(given)
169
- self.send("from_#{self.class.name.split('::').last.downcase}", BigDecimal(given.to_s))
89
+ self.from_native(BigDecimal(given.to_s))
170
90
  end
171
91
 
172
92
  def in_native
173
93
  to_native(self)
174
94
  end
95
+
96
+ def to_native(temp)
97
+ self.class.as_native(temp.send(:common))
98
+ end
99
+
100
+ def numericalize(temp)
101
+ if temp.is_a?(Tempura::Temperature)
102
+ to_native(temp)
103
+ else
104
+ temp
105
+ end
106
+ end
175
107
  end
@@ -1,3 +1,3 @@
1
1
  module Tempura
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -4,46 +4,46 @@ require 'tempura'
4
4
 
5
5
  shared_examples_for '373.15 K' do
6
6
  it 'is expressable in Celsius (C)' do
7
- expect(subject.to_celsius).to eq(100)
8
- expect(subject.to_celsius).to be_a(Tempura::Celsius)
7
+ expect(subject.to.celsius).to eq(100)
8
+ expect(subject.to.celsius).to be_a(Tempura::Celsius)
9
9
  end
10
10
 
11
11
  it 'is expressable in Delisle (De)' do
12
- expect(subject.to_delisle).to eq(0)
13
- expect(subject.to_delisle).to be_a(Tempura::Delisle)
12
+ expect(subject.to.delisle).to eq(0)
13
+ expect(subject.to.delisle).to be_a(Tempura::Delisle)
14
14
  end
15
15
 
16
16
  it 'is expressable in Fahrenheit (F)' do
17
- expect(subject.to_fahrenheit).to eq(212)
18
- expect(subject.to_fahrenheit).to be_a(Tempura::Fahrenheit)
17
+ expect(subject.to.fahrenheit).to eq(212)
18
+ expect(subject.to.fahrenheit).to be_a(Tempura::Fahrenheit)
19
19
  end
20
20
 
21
21
  it 'is expressable in Kelvin (K)' do
22
- expect(subject.to_kelvin).to eq(373.15)
23
- expect(subject.to_kelvin).to be_a(Tempura::Kelvin)
22
+ expect(subject.to.kelvin).to eq(373.15)
23
+ expect(subject.to.kelvin).to be_a(Tempura::Kelvin)
24
24
  end
25
25
 
26
26
  it 'is expressable in Newton (N)' do
27
- expect(subject.to_newton).to eq(33)
28
- expect(subject.to_newton).to be_a(Tempura::Newton)
27
+ expect(subject.to.newton).to eq(33)
28
+ expect(subject.to.newton).to be_a(Tempura::Newton)
29
29
  end
30
30
 
31
31
  it 'is expressable in Rankine (R)' do
32
- expect(subject.to_rankine).to eq(671.67)
33
- expect(subject.to_rankine).to be_a(Tempura::Rankine)
32
+ expect(subject.to.rankine).to eq(671.67)
33
+ expect(subject.to.rankine).to be_a(Tempura::Rankine)
34
34
  end
35
35
 
36
36
  it 'is expressable in Réaumur (Ré)' do
37
- expect(subject.to_réaumur).to eq(80)
38
- expect(subject.to_réaumur).to be_a(Tempura::Réaumur)
39
- expect(subject.to_reaumur).to eq(80)
40
- expect(subject.to_reaumur).to be_a(Tempura::Réaumur)
37
+ expect(subject.to.réaumur).to eq(80)
38
+ expect(subject.to.réaumur).to be_a(Tempura::Réaumur)
39
+ expect(subject.to.reaumur).to eq(80)
40
+ expect(subject.to.reaumur).to be_a(Tempura::Réaumur)
41
41
  end
42
42
 
43
43
  it 'is expressable in Rømer (Rø)' do
44
- expect(subject.to_rømer).to eq(60)
45
- expect(subject.to_rømer).to be_a(Tempura::Rømer)
46
- expect(subject.to_romer).to eq(60)
47
- expect(subject.to_rømer).to be_a(Tempura::Rømer)
44
+ expect(subject.to.rømer).to eq(60)
45
+ expect(subject.to.rømer).to be_a(Tempura::Rømer)
46
+ expect(subject.to.romer).to eq(60)
47
+ expect(subject.to.rømer).to be_a(Tempura::Rømer)
48
48
  end
49
49
  end
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Tempura::Conversion do
6
+ let(:c) { 100.degrees_celsius }
7
+ let(:d) { 0.degrees_delisle }
8
+ let(:f) { 212.degrees_fahrenheit }
9
+ let(:n) { 33.degrees_newton }
10
+ let(:ra) { 671.67.degrees_rankine }
11
+ let(:ré) { 80.degrees_réaumur }
12
+ let(:rø) { 60.degrees_rømer }
13
+
14
+ it 'provides a common interface' do
15
+ [c, d, f, n, ra, ré, rø].each do |t|
16
+ expect(t.to).to be_a(Tempura::Conversion)
17
+ end
18
+ end
19
+
20
+ describe 'converting to temps' do
21
+
22
+ it 'converts to a scale' do
23
+ c2f = c.to.fahrenheit
24
+ expect(c2f).to be_a(Tempura::Fahrenheit)
25
+ expect(c2f).to eq(f)
26
+ end
27
+
28
+ it 'converts to an aliased scale' do
29
+ n2ro = n.to.romer
30
+ expect(n2ro).to be_a(Tempura::Rømer)
31
+ expect(n2ro).to eq(rø)
32
+ end
33
+
34
+ end
35
+ end
@@ -0,0 +1,58 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Numeric do
6
+
7
+ describe 'converting to temps' do
8
+ let(:c) { 100.degrees_celsius }
9
+ let(:d) { 0.degrees_delisle }
10
+ let(:f) { 212.degrees_fahrenheit }
11
+ let(:n) { 33.degrees_newton }
12
+ let(:ra) { 671.67.degrees_rankine }
13
+ let(:ré) { 80.degrees_réaumur }
14
+ let(:re) { 80.degrees_reaumur }
15
+ let(:rø) { 60.degrees_rømer }
16
+ let(:ro) { 60.degrees_romer }
17
+
18
+ it 'converts to celsius' do
19
+ expect(c).to be_a(Tempura::Celsius)
20
+ end
21
+
22
+ it 'converts to delisle' do
23
+ expect(d).to be_a(Tempura::Delisle)
24
+ end
25
+
26
+ it 'converts to fahrenheit' do
27
+ expect(f).to be_a(Tempura::Fahrenheit)
28
+ end
29
+
30
+ it 'converts to newton' do
31
+ expect(n).to be_a(Tempura::Newton)
32
+ end
33
+
34
+ it 'converts to rankine' do
35
+ expect(ra).to be_a(Tempura::Rankine)
36
+ end
37
+
38
+ it 'converts to réaumur' do
39
+ expect(ré).to be_a(Tempura::Réaumur)
40
+ expect(re).to be_a(Tempura::Réaumur)
41
+ end
42
+
43
+ it 'converts to rømer' do
44
+ expect(rø).to be_a(Tempura::Rømer)
45
+ expect(ro).to be_a(Tempura::Rømer)
46
+ end
47
+
48
+ it 'correctly converted them all' do
49
+ scales = [c, d, f, n, ra, ré, re, rø, ro]
50
+ scales.each { |s1|
51
+ scales.each { |s2|
52
+ expect(s1 == s2).to be_true
53
+ }
54
+ }
55
+ end
56
+ end
57
+
58
+ end
@@ -54,7 +54,7 @@ describe Tempura::Temperature do
54
54
  c = Tempura::Celsius.new(100)
55
55
  r = Tempura::Rømer.new(60)
56
56
  k = Tempura::Kelvin.new(373.15)
57
- result = ((f + c + r + k) / 4 ).to_delisle
57
+ result = ((f + c + r + k) / 4 ).to.delisle
58
58
  expect(result).to eq(0)
59
59
  expect(result).to be_a(Tempura::Delisle)
60
60
  end
@@ -64,8 +64,8 @@ describe Tempura::Temperature do
64
64
  it 'compares internal value' do
65
65
  fahrenheit = Tempura::Fahrenheit.new(212)
66
66
  celsius = Tempura::Celsius.new(101)
67
- leg = fahrenheit <=> celsius
68
- expect(leg).to eq(-1)
67
+ comp = fahrenheit <=> celsius
68
+ expect(comp).to eq(-1)
69
69
  end
70
70
 
71
71
  describe 'comparison operators' do
@@ -18,7 +18,9 @@ Gem::Specification.new do |gem|
18
18
  README.md
19
19
  Rakefile
20
20
  lib/tempura.rb
21
+ lib/tempura/core_ext/numeric.rb
21
22
  lib/tempura/celsius.rb
23
+ lib/tempura/conversion.rb
22
24
  lib/tempura/delisle.rb
23
25
  lib/tempura/fahrenheit.rb
24
26
  lib/tempura/kelvin.rb
@@ -30,6 +32,8 @@ Gem::Specification.new do |gem|
30
32
  lib/tempura/version.rb
31
33
  spec/spec_helper.rb
32
34
  spec/tempura/celsius_spec.rb
35
+ spec/tempura/conversion_spec.rb
36
+ spec/tempura/core_ext_spec.rb
33
37
  spec/tempura/delisle_spec.rb
34
38
  spec/tempura/fahrenheit_spec.rb
35
39
  spec/tempura/kelvin_spec.rb
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tempura
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-23 00:00:00.000000000 Z
12
+ date: 2013-02-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -41,7 +41,9 @@ files:
41
41
  - README.md
42
42
  - Rakefile
43
43
  - lib/tempura.rb
44
+ - lib/tempura/core_ext/numeric.rb
44
45
  - lib/tempura/celsius.rb
46
+ - lib/tempura/conversion.rb
45
47
  - lib/tempura/delisle.rb
46
48
  - lib/tempura/fahrenheit.rb
47
49
  - lib/tempura/kelvin.rb
@@ -53,6 +55,8 @@ files:
53
55
  - lib/tempura/version.rb
54
56
  - spec/spec_helper.rb
55
57
  - spec/tempura/celsius_spec.rb
58
+ - spec/tempura/conversion_spec.rb
59
+ - spec/tempura/core_ext_spec.rb
56
60
  - spec/tempura/delisle_spec.rb
57
61
  - spec/tempura/fahrenheit_spec.rb
58
62
  - spec/tempura/kelvin_spec.rb
@@ -76,7 +80,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
76
80
  version: '0'
77
81
  segments:
78
82
  - 0
79
- hash: -301657800019721027
83
+ hash: 2341544860719829605
80
84
  required_rubygems_version: !ruby/object:Gem::Requirement
81
85
  none: false
82
86
  requirements:
@@ -85,7 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
89
  version: '0'
86
90
  segments:
87
91
  - 0
88
- hash: -301657800019721027
92
+ hash: 2341544860719829605
89
93
  requirements: []
90
94
  rubyforge_project:
91
95
  rubygems_version: 1.8.23
@@ -95,6 +99,8 @@ summary: Tempura is a library for temperature math and conversion.
95
99
  test_files:
96
100
  - spec/spec_helper.rb
97
101
  - spec/tempura/celsius_spec.rb
102
+ - spec/tempura/conversion_spec.rb
103
+ - spec/tempura/core_ext_spec.rb
98
104
  - spec/tempura/delisle_spec.rb
99
105
  - spec/tempura/fahrenheit_spec.rb
100
106
  - spec/tempura/kelvin_spec.rb