tempura 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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