gravitheque 0.3.0 → 0.4.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/.travis.yml +0 -3
- data/README.md +210 -43
- data/bin/test +2 -0
- data/gravitheque.gemspec +1 -1
- data/lib/calculators/alcohol.rb +41 -28
- data/lib/calculators/calories.rb +63 -45
- data/lib/calculators/hops.rb +146 -76
- data/lib/calculators/mash.rb +54 -23
- data/lib/calculators/yeast.rb +46 -22
- data/test/calculators/test_alcohol.rb +31 -8
- data/test/calculators/test_calories.rb +53 -12
- data/test/calculators/test_hops.rb +46 -27
- data/test/calculators/test_mash.rb +52 -8
- data/test/calculators/test_yeast.rb +89 -18
- data/test/test_helper.rb +2 -2
- metadata +54 -98
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -47,13 +47,35 @@ guard start --clear
|
|
47
47
|
```ruby
|
48
48
|
require "calculators/alcohol"
|
49
49
|
|
50
|
-
Calculate.alcohol_by_volume
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
Calculate.
|
56
|
-
|
50
|
+
Calculate.alcohol_by_volume({
|
51
|
+
original: 12,
|
52
|
+
terminal: 4,
|
53
|
+
})
|
54
|
+
|
55
|
+
Calculate.alcohol_by_volume({
|
56
|
+
original: 1.055,
|
57
|
+
terminal: 1.012
|
58
|
+
}, :specific_gravity)
|
59
|
+
|
60
|
+
Calculate.alcohol_by_volume({
|
61
|
+
original: 16.4,
|
62
|
+
terminal: 8.2
|
63
|
+
}, :brix)
|
64
|
+
|
65
|
+
Calculate.alcohol_by_weight({
|
66
|
+
original: 12,
|
67
|
+
terminal: 4,
|
68
|
+
})
|
69
|
+
|
70
|
+
Calculate.alcohol_by_weight({
|
71
|
+
original: 1.055,
|
72
|
+
terminal: 1.012
|
73
|
+
}, :specific_gravity)
|
74
|
+
|
75
|
+
Calculate.alcohol_by_weight({
|
76
|
+
original: 16.4,
|
77
|
+
terminal: 8.2
|
78
|
+
}, :brix)
|
57
79
|
```
|
58
80
|
|
59
81
|
### Calories
|
@@ -61,17 +83,50 @@ Calculate.alcohol_by_weight 16.4, 8.2, :brix
|
|
61
83
|
```ruby
|
62
84
|
require "calculators/calories"
|
63
85
|
|
64
|
-
Calculate.calories_from_alcohol
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
Calculate.
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
Calculate.
|
86
|
+
Calculate.calories_from_alcohol({
|
87
|
+
original: 12,
|
88
|
+
terminal: 4,
|
89
|
+
})
|
90
|
+
|
91
|
+
Calculate.calories_from_alcohol({
|
92
|
+
original: 1.055,
|
93
|
+
terminal: 1.012
|
94
|
+
}, :specific_gravity)
|
95
|
+
|
96
|
+
Calculate.calories_from_alcohol({
|
97
|
+
original: 16.4,
|
98
|
+
terminal: 8.2
|
99
|
+
}, :brix)
|
100
|
+
|
101
|
+
Calculate.calories_from_extract({
|
102
|
+
original: 12,
|
103
|
+
terminal: 4,
|
104
|
+
})
|
105
|
+
|
106
|
+
Calculate.calories_from_extract({
|
107
|
+
original: 1.055,
|
108
|
+
terminal: 1.012
|
109
|
+
}, :specific_gravity)
|
110
|
+
|
111
|
+
Calculate.calories_from_extract({
|
112
|
+
original: 16.4,
|
113
|
+
terminal: 8.2
|
114
|
+
}, :brix)
|
115
|
+
|
116
|
+
Calculate.calories_per_serving({
|
117
|
+
original: 12,
|
118
|
+
terminal: 4,
|
119
|
+
})
|
120
|
+
|
121
|
+
Calculate.calories_per_serving({
|
122
|
+
original: 1.055,
|
123
|
+
terminal: 1.012
|
124
|
+
}, :specific_gravity)
|
125
|
+
|
126
|
+
Calculate.calories_per_serving({
|
127
|
+
original: 16.4,
|
128
|
+
terminal: 8.2
|
129
|
+
}, :brix)
|
75
130
|
```
|
76
131
|
|
77
132
|
### Hops
|
@@ -79,21 +134,92 @@ Calculate.calories_per_serving 16.4, 8.2, :brix
|
|
79
134
|
```ruby
|
80
135
|
require "calculators/hops"
|
81
136
|
|
82
|
-
Calculate.hop_utilization
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
Calculate.
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
Calculate.
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
137
|
+
Calculate.hop_utilization({
|
138
|
+
extract: 15,
|
139
|
+
at: 45
|
140
|
+
})
|
141
|
+
|
142
|
+
Calculate.hop_utilization({
|
143
|
+
extract: 1.055,
|
144
|
+
at: 60
|
145
|
+
}, :specific_gravity)
|
146
|
+
|
147
|
+
Calculate.hop_utilization({
|
148
|
+
extract: 12,
|
149
|
+
at: 15
|
150
|
+
}, :brix)
|
151
|
+
|
152
|
+
Calculate.hop_mass_required({
|
153
|
+
alpha: 13.5,
|
154
|
+
at: 60,
|
155
|
+
extract: 16,
|
156
|
+
ibus: 25,
|
157
|
+
volume: 20
|
158
|
+
})
|
159
|
+
|
160
|
+
Calculate.hop_mass_required({
|
161
|
+
alpha: 3.2,
|
162
|
+
at: 15,
|
163
|
+
extract: 14.5,
|
164
|
+
ibus: 15,
|
165
|
+
volume: 20
|
166
|
+
}, { extract: :brix })
|
167
|
+
|
168
|
+
Calculate.hop_mass_required({
|
169
|
+
alpha: 12.4,
|
170
|
+
at: 90,
|
171
|
+
extract: 1.05,
|
172
|
+
ibus: 100,
|
173
|
+
volume: 10
|
174
|
+
}, { extract: :specific_gravity, volume: :gallons })
|
175
|
+
|
176
|
+
Calculate.hopshot_required({
|
177
|
+
alpha: 13.5,
|
178
|
+
at: 60,
|
179
|
+
extract: 16,
|
180
|
+
ibus: 25,
|
181
|
+
volume: 20
|
182
|
+
})
|
183
|
+
|
184
|
+
Calculate.hopshot_required({
|
185
|
+
alpha: 3.2,
|
186
|
+
at: 15,
|
187
|
+
extract: 14.5,
|
188
|
+
ibus: 15,
|
189
|
+
volume: 20
|
190
|
+
}, { extract: :brix })
|
191
|
+
|
192
|
+
Calculate.hopshot_required({
|
193
|
+
alpha: 12.4,
|
194
|
+
at: 90,
|
195
|
+
extract: 1.05,
|
196
|
+
ibus: 100,
|
197
|
+
volume: 10
|
198
|
+
}, { extract: :specific_gravity, volume: :gallons })
|
199
|
+
|
200
|
+
Calculate.ibus({
|
201
|
+
alpha: 12.4,
|
202
|
+
at: 90,
|
203
|
+
extract: 15,
|
204
|
+
mass: 56,
|
205
|
+
volume: 20
|
206
|
+
})
|
207
|
+
|
208
|
+
Calculate.ibus({
|
209
|
+
alpha: 6.5,
|
210
|
+
at: 60,
|
211
|
+
extract: 18.5,
|
212
|
+
mass: 30,
|
213
|
+
volume: 40
|
214
|
+
}, { extract: :brix })
|
215
|
+
|
216
|
+
Calculate.ibus({
|
217
|
+
alpha: 8,
|
218
|
+
at: 30,
|
219
|
+
extract: 1.055,
|
220
|
+
mass: 3,
|
221
|
+
volume: 5
|
222
|
+
}, { extract: :specific_gravity, mass: :ounces, volume: :gallons })
|
97
223
|
```
|
98
224
|
|
99
225
|
### Mash
|
@@ -101,11 +227,33 @@ Calculate.ibus({ :extract => 1.055, :at => 60, :alpha => 6.5, :mass => 2, :volum
|
|
101
227
|
```ruby
|
102
228
|
require "calculators/mash"
|
103
229
|
|
104
|
-
Calculate.strike_temperature
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
230
|
+
Calculate.strike_temperature({
|
231
|
+
ratio: 1.5,
|
232
|
+
initial: 20,
|
233
|
+
target: 75
|
234
|
+
})
|
235
|
+
|
236
|
+
Calculate.strike_temperature({
|
237
|
+
ratio: 1.25,
|
238
|
+
initial: 65,
|
239
|
+
target: 154
|
240
|
+
}, :us)
|
241
|
+
|
242
|
+
Calculate.infusion_volume({
|
243
|
+
ratio: 1,
|
244
|
+
initial: 40,
|
245
|
+
target: 60,
|
246
|
+
mass: 3.6,
|
247
|
+
volume: 3.6
|
248
|
+
})
|
249
|
+
|
250
|
+
Calculate.infusion_volume({
|
251
|
+
ratio: 1,
|
252
|
+
initial: 104,
|
253
|
+
target: 140,
|
254
|
+
mass: 8,
|
255
|
+
volume: 8
|
256
|
+
}, :us)
|
109
257
|
```
|
110
258
|
|
111
259
|
### Yeast
|
@@ -113,11 +261,30 @@ Calculate.infusion_volume 1, 104, 140, 8, 8, :us
|
|
113
261
|
```ruby
|
114
262
|
require "calculators/yeast"
|
115
263
|
|
116
|
-
Calculate.yeast_cells_required
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
264
|
+
Calculate.yeast_cells_required({
|
265
|
+
extract: 16.5,
|
266
|
+
volume: 19
|
267
|
+
})
|
268
|
+
|
269
|
+
Calculate.yeast_cells_required({
|
270
|
+
extract: 15.75,
|
271
|
+
volume: 5.25
|
272
|
+
}, { volume: :gallons })
|
273
|
+
|
274
|
+
Calculate.yeast_cells_required({
|
275
|
+
extract: 1.055,
|
276
|
+
volume: 55
|
277
|
+
}, { extract: :specific_gravity })
|
278
|
+
|
279
|
+
Calculate.yeast_cells_required({
|
280
|
+
extract: 18,
|
281
|
+
volume: 20
|
282
|
+
}, { type: :hybrid })
|
283
|
+
|
284
|
+
Calculate.yeast_cells_required({
|
285
|
+
extract: 21.5,
|
286
|
+
volume: 10.5
|
287
|
+
}, { volume: :gallons, extract: :brix, type: :lager })
|
121
288
|
```
|
122
289
|
|
123
290
|
## Conversions
|
data/bin/test
CHANGED
data/gravitheque.gemspec
CHANGED
data/lib/calculators/alcohol.rb
CHANGED
@@ -3,34 +3,41 @@ require "conversions/extract"
|
|
3
3
|
module Calculate
|
4
4
|
|
5
5
|
# Calculates alcohol by weight given original and terminal extract levels.
|
6
|
-
#
|
7
|
-
# Other supported units are `:specific_gravity` and `:brix`.
|
6
|
+
# Supported extract units are `:brix`, `:plato` and `:specific_gravity`. Default: `:plato`
|
8
7
|
#
|
9
8
|
# @example
|
10
|
-
#
|
11
|
-
# Calculate.alcohol_by_weight 1.055, 1.010, :specific_gravity
|
12
|
-
# Calculate.alcohol_by_weight 15.2, 7.8, :brix
|
9
|
+
# Calculate.alcohol_by_weight({ original: 17.5, terminal: 3.2 })
|
13
10
|
#
|
14
|
-
#
|
15
|
-
#
|
11
|
+
# Calculate.alcohol_by_weight({
|
12
|
+
# original: 1.055,
|
13
|
+
# terminal: 1.010
|
14
|
+
# }, :specific_gravity)
|
15
|
+
#
|
16
|
+
# Calculate.alcohol_by_weight({
|
17
|
+
# original: 15.2,
|
18
|
+
# terminal: 7.8
|
19
|
+
# }, :brix)
|
20
|
+
#
|
21
|
+
# @param [Hash] extract the original and terminal extract levels
|
16
22
|
# @param [Symbol] unit the unit used to measure extract
|
17
23
|
# @return [Float] the alcohol content by weight
|
18
|
-
def self.alcohol_by_weight
|
19
|
-
original = original
|
20
|
-
terminal = terminal
|
24
|
+
def self.alcohol_by_weight extract, units = :plato
|
25
|
+
original = extract[:original]
|
26
|
+
terminal = extract[:terminal]
|
21
27
|
|
22
|
-
unless
|
23
|
-
case
|
28
|
+
unless units == :plato
|
29
|
+
case units
|
24
30
|
when :specific_gravity
|
25
|
-
original = Convert.specific_gravity_to_plato
|
26
|
-
terminal = Convert.specific_gravity_to_plato
|
31
|
+
original = Convert.specific_gravity_to_plato(extract[:original])
|
32
|
+
terminal = Convert.specific_gravity_to_plato(extract[:terminal])
|
27
33
|
when :brix
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
34
|
+
original = Convert.specific_gravity_to_plato(
|
35
|
+
Convert.brix_to_specific_gravity(extract[:original]))
|
36
|
+
terminal = Convert.specific_gravity_to_plato(
|
37
|
+
Convert.terminal_brix_to_terminal_gravity(
|
38
|
+
extract[:original], extract[:terminal]))
|
32
39
|
else
|
33
|
-
raise ArgumentError, "#{
|
40
|
+
raise ArgumentError, "#{units} is an unknown unit of extract. Use :brix, :plato or :specific_gravity"
|
34
41
|
end
|
35
42
|
end
|
36
43
|
|
@@ -39,20 +46,26 @@ module Calculate
|
|
39
46
|
end
|
40
47
|
|
41
48
|
# Calculates alcohol by volume given original and terminal extract levels.
|
42
|
-
#
|
43
|
-
# Other supported units are `:specific_gravity` and `:brix`.
|
49
|
+
# Supported extract units are `:brix`, `:plato` and `:specific_gravity`. Default: `:plato`
|
44
50
|
#
|
45
51
|
# @example
|
46
|
-
#
|
47
|
-
#
|
48
|
-
#
|
52
|
+
# Calculate.alcohol_by_volume({ original: 17.5, terminal: 3.2 })
|
53
|
+
#
|
54
|
+
# Calculate.alcohol_by_volume({
|
55
|
+
# original: 1.055,
|
56
|
+
# terminal: 1.010
|
57
|
+
# }, :specific_gravity)
|
58
|
+
#
|
59
|
+
# Calculate.alcohol_by_volume({
|
60
|
+
# original: 15.2,
|
61
|
+
# terminal: 7.8
|
62
|
+
# }, :brix)
|
49
63
|
#
|
50
|
-
# @param [
|
51
|
-
# @param [Float] terminal the terminal extract level
|
64
|
+
# @param [Hash] extract the original and terminal extract levels
|
52
65
|
# @param [Symbol] unit the unit used to measure extract
|
53
66
|
# @return [Float] the alcohol content by volume
|
54
|
-
def self.alcohol_by_volume
|
55
|
-
((alcohol_by_weight
|
67
|
+
def self.alcohol_by_volume extract, units = :plato
|
68
|
+
((alcohol_by_weight extract, units) / 0.793573).round 1
|
56
69
|
end
|
57
70
|
|
58
71
|
end
|
data/lib/calculators/calories.rb
CHANGED
@@ -3,32 +3,38 @@ require "conversions/extract"
|
|
3
3
|
module Calculate
|
4
4
|
|
5
5
|
# Calculates calories derived from alcohol content.
|
6
|
-
#
|
7
|
-
# Other supported units are `:specific_gravity` and `:brix`.
|
6
|
+
# Supported extract units are `:brix`, `:plato` and `:specific_gravity`. Default: `:plato`
|
8
7
|
#
|
9
8
|
# @example
|
10
|
-
# Calculate.calories_from_alcohol 17.5, 3.2
|
11
|
-
# Calculate.calories_from_alcohol 1.055, 1.010, :specific_gravity
|
12
|
-
# Calculate.calories_from_alcohol 15.2, 7.8, :brix
|
9
|
+
# Calculate.calories_from_alcohol({ original: 17.5, terminal: 3.2 })
|
13
10
|
#
|
14
|
-
#
|
15
|
-
#
|
11
|
+
# Calculate.calories_from_alcohol({
|
12
|
+
# original: 1.055,
|
13
|
+
# terminal: 1.010
|
14
|
+
# }, :specific_gravity)
|
15
|
+
#
|
16
|
+
# Calculate.calories_from_alcohol({
|
17
|
+
# original: 15.2,
|
18
|
+
# terminal: 7.8
|
19
|
+
# }, :brix)
|
20
|
+
#
|
21
|
+
# @param [Hash] extract the original and terminal extract levels
|
16
22
|
# @param [Symbol] unit the unit used to measure extract
|
17
23
|
# @return [Fixnum] the total calories from alcohol per 500ml
|
18
|
-
def self.calories_from_alcohol
|
19
|
-
original = original
|
20
|
-
terminal = terminal
|
24
|
+
def self.calories_from_alcohol extract, units = :plato
|
25
|
+
original = extract[:original]
|
26
|
+
terminal = extract[:terminal]
|
21
27
|
|
22
|
-
unless
|
23
|
-
case
|
28
|
+
unless units == :specific_gravity
|
29
|
+
case units
|
24
30
|
when :brix
|
25
|
-
original = Convert.brix_to_specific_gravity original
|
26
|
-
terminal = Convert.terminal_brix_to_terminal_gravity original, terminal
|
31
|
+
original = Convert.brix_to_specific_gravity extract[:original]
|
32
|
+
terminal = Convert.terminal_brix_to_terminal_gravity extract[:original], extract[:terminal]
|
27
33
|
when :plato
|
28
|
-
original = Convert.plato_to_specific_gravity original
|
29
|
-
terminal = Convert.plato_to_specific_gravity terminal
|
34
|
+
original = Convert.plato_to_specific_gravity extract[:original]
|
35
|
+
terminal = Convert.plato_to_specific_gravity extract[:terminal]
|
30
36
|
else
|
31
|
-
raise ArgumentError, "#{
|
37
|
+
raise ArgumentError, "#{units} is an unknown unit of extract. Use :brix, :plato or :specific_gravity"
|
32
38
|
end
|
33
39
|
end
|
34
40
|
|
@@ -40,32 +46,38 @@ module Calculate
|
|
40
46
|
end
|
41
47
|
|
42
48
|
# Calculates calories derived from extract.
|
43
|
-
#
|
44
|
-
# Other supported units are `:specific_gravity` and `:brix`.
|
49
|
+
# Supported extract units are `:brix`, `:plato` and `:specific_gravity`. Default: `:plato`
|
45
50
|
#
|
46
51
|
# @example
|
47
|
-
#
|
48
|
-
#
|
49
|
-
#
|
52
|
+
# Calculate.calories_from_extract({ original: 17.5, terminal: 3.2 })
|
53
|
+
#
|
54
|
+
# Calculate.calories_from_extract({
|
55
|
+
# original: 1.055,
|
56
|
+
# terminal: 1.010
|
57
|
+
# }, :specific_gravity)
|
50
58
|
#
|
51
|
-
#
|
52
|
-
#
|
59
|
+
# Calculate.calories_from_extract({
|
60
|
+
# original: 15.2,
|
61
|
+
# terminal: 7.8
|
62
|
+
# }, :brix)
|
63
|
+
#
|
64
|
+
# @param [Hash] extract the original and terminal extract levels
|
53
65
|
# @param [Symbol] unit the unit used to measure extract
|
54
66
|
# @return [Fixnum] the total calories from extract per 500ml
|
55
|
-
def self.calories_from_extract
|
56
|
-
original = original
|
57
|
-
terminal = terminal
|
67
|
+
def self.calories_from_extract extract, units = :plato
|
68
|
+
original = extract[:original]
|
69
|
+
terminal = extract[:terminal]
|
58
70
|
|
59
|
-
unless
|
60
|
-
case
|
71
|
+
unless units == :specific_gravity
|
72
|
+
case units
|
61
73
|
when :brix
|
62
|
-
original = Convert.brix_to_specific_gravity original
|
63
|
-
terminal = Convert.terminal_brix_to_terminal_gravity original, terminal
|
74
|
+
original = Convert.brix_to_specific_gravity extract[:original]
|
75
|
+
terminal = Convert.terminal_brix_to_terminal_gravity extract[:original], extract[:terminal]
|
64
76
|
when :plato
|
65
|
-
original = Convert.plato_to_specific_gravity original
|
66
|
-
terminal = Convert.plato_to_specific_gravity terminal
|
77
|
+
original = Convert.plato_to_specific_gravity extract[:original]
|
78
|
+
terminal = Convert.plato_to_specific_gravity extract[:terminal]
|
67
79
|
else
|
68
|
-
raise ArgumentError, "#{
|
80
|
+
raise ArgumentError, "#{units} is an unknown unit of extract. Use :brix, :plato or :specific_gravity"
|
69
81
|
end
|
70
82
|
end
|
71
83
|
|
@@ -76,22 +88,28 @@ module Calculate
|
|
76
88
|
(calories + (calories * 0.33)).round
|
77
89
|
end
|
78
90
|
|
79
|
-
# Calculates
|
80
|
-
#
|
81
|
-
# Other supported units are `:specific_gravity` and `:brix`.
|
91
|
+
# Calculates calories per serving.
|
92
|
+
# Supported extract units are `:brix`, `:plato` and `:specific_gravity`. Default: `:plato`
|
82
93
|
#
|
83
94
|
# @example
|
84
|
-
#
|
85
|
-
#
|
86
|
-
#
|
95
|
+
# Calculate.calories_per_serving({ original: 17.5, terminal: 3.2 })
|
96
|
+
#
|
97
|
+
# Calculate.calories_per_serving({
|
98
|
+
# original: 1.055,
|
99
|
+
# terminal: 1.010
|
100
|
+
# }, :specific_gravity)
|
101
|
+
#
|
102
|
+
# Calculate.calories_per_serving({
|
103
|
+
# original: 15.2,
|
104
|
+
# terminal: 7.8
|
105
|
+
# }, :brix)
|
87
106
|
#
|
88
|
-
# @param [
|
89
|
-
# @param [Float] terminal the terminal extract level
|
107
|
+
# @param [Hash] extract the original and terminal extract levels
|
90
108
|
# @param [Symbol] unit the unit used to measure extract
|
91
109
|
# @return [Fixnum] the total calories per 500ml
|
92
|
-
def self.calories_per_serving
|
93
|
-
(calories_from_alcohol
|
94
|
-
(calories_from_extract
|
110
|
+
def self.calories_per_serving extract, units = :plato
|
111
|
+
(calories_from_alcohol extract, units) +
|
112
|
+
(calories_from_extract extract, units)
|
95
113
|
end
|
96
114
|
|
97
115
|
end
|