gravitheque 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/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ .bundle
2
+ .DS_Store
3
+ .rbenv*
4
+ .rbx
5
+ .rvmrc
6
+ .yardoc
7
+ Gemfile.lock
8
+ *.gem
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ rvm:
2
+ - 1.9.3
3
+ - jruby-19mode
4
+ - rbx-19mode
5
+
6
+ script: bin/test
7
+
8
+ bundler_args: --without development documentation mac
data/.yardopts ADDED
@@ -0,0 +1 @@
1
+ --markup=markdown - LICENSE
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source :rubygems
2
+
3
+ group :development do
4
+ gem "growl"
5
+ gem "guard-minitest"
6
+ end
7
+
8
+ group :documentation do
9
+ gem "github-markup"
10
+ gem "redcarpet", "~> 1.0"
11
+ gem "yard"
12
+ end
13
+
14
+ gem "rb-fsevent", :group => :mac
data/Guardfile ADDED
@@ -0,0 +1,5 @@
1
+ guard "minitest" do
2
+ watch(%r|^test/(.*)\/test_(.*)\.rb|)
3
+ watch(%r|^lib/(.*)\/(.*)\.rb|) { |m| "test/#{m[1]}/test_#{m[2]}.rb" }
4
+ watch(%r|^test/test_helper\.rb|) { "test" }
5
+ end
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright 2012, john muhl
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice, this
8
+ list of conditions and the following disclaimer.
9
+ * Redistributions in binary form must reproduce the above copyright notice, this
10
+ list of conditions and the following disclaimer in the documentation and/or
11
+ other materials provided with the distribution.
12
+
13
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
14
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
17
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,111 @@
1
+ # Gravitheque [![Build Status](https://secure.travis-ci.org/johnmuhl/gravitheque.png)](http://travis-ci.org/johnmuhl/gravitheque)
2
+
3
+ A collection of [open source][oss] tools for brewers. It can be used as
4
+ a [web application][web], interactively through IRB or as a [library][lib] to
5
+ build your own brewing application. For use as a library refer the full
6
+ [documentation][doc].
7
+
8
+ ## Calculators
9
+
10
+ ### Alcohol
11
+
12
+ ```ruby
13
+ require "calculators/alcohol"
14
+
15
+ Calculate.alcohol_by_volume 12, 4
16
+ Calculate.alcohol_by_volume 1.055, 1.012, :specific_gravity
17
+ Calculate.alcohol_by_volume 16.4, 8.2, :brix
18
+
19
+ Calculate.alcohol_by_weight 12, 4
20
+ Calculate.alcohol_by_weight 1.055, 1.012, :specific_gravity
21
+ Calculate.alcohol_by_weight 16.4, 8.2, :brix
22
+ ```
23
+
24
+ ### Calories
25
+
26
+ ```ruby
27
+ require "calculators/calories"
28
+
29
+ Calculate.calories_from_alcohol 12, 4
30
+ Calculate.calories_from_alcohol 1.055, 1.012, :specific_gravity
31
+ Calculate.calories_from_alcohol 16.4, 8.2, :brix
32
+
33
+ Calculate.calories_from_extract 12, 4
34
+ Calculate.calories_from_extract 1.055, 1.012, :specific_gravity
35
+ Calculate.calories_from_extract 16.4, 8.2, :brix
36
+
37
+ Calculate.calories_per_serving 12, 4
38
+ Calculate.calories_per_serving 1.055, 1.012, :specific_gravity
39
+ Calculate.calories_per_serving 16.4, 8.2, :brix
40
+ ```
41
+
42
+ ### Yeast
43
+
44
+ ```ruby
45
+ require "calculators/yeast"
46
+
47
+ Calculate.yeast_cells_required 16.5, 5.25
48
+ Calculate.yeast_cells_required 15.75, 19, { :batch_size => :liters }
49
+ Calculate.yeast_cells_required 1.055, 55, { :extract => :specific_gravity }
50
+ Calculate.yeast_cells_required 18, 10.75, { :type => :hybrid }
51
+ Calculate.yeast_cells_required 21.5, 100, { :batch_size => :liters, :extract => :brix, :type => :lager }
52
+ ```
53
+
54
+ ## Conversions
55
+
56
+ ### Extract
57
+
58
+ ```ruby
59
+ require "conversions/extract"
60
+
61
+ Convert.brix_to_specific_gravity 14.2
62
+
63
+ Convert.terminal_brix_to_terminal_gravity 16.2, 7.8
64
+
65
+ Convert.plato_to_specific_gravity 16
66
+
67
+ Convert.specific_gravity_to_plato 1.055
68
+ ```
69
+
70
+ ### Mass
71
+
72
+ ```ruby
73
+ require "conversions/mass"
74
+
75
+ Convert.grams_to_ounces 30
76
+
77
+ Convert.ounces_to_grams 3
78
+
79
+ Convert.kilograms_to_pounds 15
80
+
81
+ Convert.pounds_to_kilograms 8
82
+ ```
83
+
84
+ ### Temperature
85
+
86
+ ```ruby
87
+ require "conversions/temperature"
88
+
89
+ Convert.celsius_to_fahrenheit 25
90
+
91
+ Convert.farhenheit_to_celsius 154
92
+ ```
93
+
94
+ ### Volumes
95
+
96
+ ```ruby
97
+ require "conversions/volumes"
98
+
99
+ Convert.gallons_to_liters 8
100
+
101
+ Convert.liters_to_gallons 23
102
+
103
+ Convert.liters_to_quarts 5
104
+
105
+ Convert.quarts_to_liters 11
106
+ ```
107
+
108
+ [doc]: http://rubydoc.info/gems/gravitheque
109
+ [lib]: http://rubygems.org/gems/gravitheque
110
+ [oss]: https://github.com/johnmuhl/gravitheque/blob/master/LICENSE
111
+ [web]: http://gravitheque.herokuapp.com/
data/bin/test ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "./test/test_helper"
4
+
5
+ tests = Dir.glob "test/**/*.rb"
6
+ tests.each { |test| require File.expand_path test }
7
+
8
+ MiniTest::Unit.autorun
@@ -0,0 +1,15 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |gem|
4
+ gem.authors = ["john muhl"]
5
+ gem.email = ["git@johnmuhl.com"]
6
+ gem.description = "Tools for brewers."
7
+ gem.summary = "The library that will eventually power the web application of the same name."
8
+ gem.homepage = "http://gravitheque.herokuapp.com/"
9
+
10
+ gem.files = `git ls-files`.split("\n")
11
+ gem.test_files = `git ls-files -- test/*`.split("\n")
12
+ gem.name = "gravitheque"
13
+ gem.require_paths = ["lib"]
14
+ gem.version = "0.1.0"
15
+ end
@@ -0,0 +1,58 @@
1
+ require "conversions/extract"
2
+
3
+ module Calculate
4
+
5
+ # Calculates alcohol by weight given original and terminal extract levels.
6
+ # Set the `unit` option for extract levels that are not degrees Plato.
7
+ # Other supported units are `:specific_gravity` and `:brix`.
8
+ #
9
+ # @example
10
+ # Calculate.alcohol_by_weight 17.5, 3.2
11
+ # Calculate.alcohol_by_weight 1.055, 1.010, :specific_gravity
12
+ # Calculate.alcohol_by_weight 15.2, 7.8, :brix
13
+ #
14
+ # @param [Float] original the original extract level
15
+ # @param [Float] terminal the terminal extract level
16
+ # @param [Symbol] unit the unit used to measure extract
17
+ # @return [Float] the alcohol content by weight
18
+ def self.alcohol_by_weight original, terminal, unit = :plato
19
+ original = original.to_f
20
+ terminal = terminal.to_f
21
+
22
+ unless unit == :plato
23
+ case unit
24
+ when :specific_gravity
25
+ original = Convert.specific_gravity_to_plato original
26
+ terminal = Convert.specific_gravity_to_plato terminal
27
+ when :brix
28
+ og = Convert.brix_to_specific_gravity original
29
+ tg = Convert.terminal_brix_to_terminal_gravity original, terminal
30
+ original = Convert.specific_gravity_to_plato og
31
+ terminal = Convert.specific_gravity_to_plato tg
32
+ else
33
+ raise ArgumentError, "#{unit} is not recogized as a unit of measure"
34
+ end
35
+ end
36
+
37
+ ((original - ((0.1808 * original) + (0.8192 * terminal))) /
38
+ (2.0665 - (0.010665 * original))).round 1
39
+ end
40
+
41
+ # Calculates alcohol by volume given original and terminal extract levels.
42
+ # Set the `unit` option for extract levels that are not degrees Plato.
43
+ # Other supported units are `:specific_gravity` and `:brix`.
44
+ #
45
+ # @example
46
+ # Calculate.alcohol_by_volume 17.5, 3.2
47
+ # Calculate.alcohol_by_volume 1.055, 1.010, :specific_gravity
48
+ # Calculate.alcohol_by_volume 15.2, 7.8, :brix
49
+ #
50
+ # @param [Float] original the original extract level
51
+ # @param [Float] terminal the terminal extract level
52
+ # @param [Symbol] unit the unit used to measure extract
53
+ # @return [Float] the alcohol content by volume
54
+ def self.alcohol_by_volume original, terminal, unit = :plato
55
+ ((alcohol_by_weight original, terminal, unit) / 0.793573).round 1
56
+ end
57
+
58
+ end
@@ -0,0 +1,97 @@
1
+ require "conversions/extract"
2
+
3
+ module Calculate
4
+
5
+ # Calculates calories derived from alcohol content.
6
+ # Set the `unit` option for extract levels that are not degrees Plato.
7
+ # Other supported units are `:specific_gravity` and `:brix`.
8
+ #
9
+ # @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
13
+ #
14
+ # @param [Float] original the original extract level
15
+ # @param [Float] terminal the terminal extract level
16
+ # @param [Symbol] unit the unit used to measure extract
17
+ # @return [Fixnum] the total calories from alcohol per 500ml
18
+ def self.calories_from_alcohol original, terminal, unit = :plato
19
+ original = original.to_f
20
+ terminal = terminal.to_f
21
+
22
+ unless unit == :specific_gravity
23
+ case unit
24
+ when :brix
25
+ original = Convert.brix_to_specific_gravity original
26
+ terminal = Convert.terminal_brix_to_terminal_gravity original, terminal
27
+ when :plato
28
+ original = Convert.plato_to_specific_gravity original
29
+ terminal = Convert.plato_to_specific_gravity terminal
30
+ else
31
+ raise ArgumentError, "#{unit} is not recogized as a unit of measure"
32
+ end
33
+ end
34
+
35
+ calories = (1881.22 * terminal) *
36
+ ((original - terminal) /
37
+ (1.775 - original))
38
+
39
+ (calories + (calories * 0.33)).round
40
+ end
41
+
42
+ # Calculates calories derived from extract.
43
+ # Set the `unit` option for extract levels that are not degrees Plato.
44
+ # Other supported units are `:specific_gravity` and `:brix`.
45
+ #
46
+ # @example
47
+ # Calculate.calories_from_extract 17.5, 3.2
48
+ # Calculate.calories_from_extract 1.055, 1.010, :specific_gravity
49
+ # Calculate.calories_from_extract 15.2, 7.8, :brix
50
+ #
51
+ # @param [Float] original the original extract level
52
+ # @param [Float] terminal the terminal extract level
53
+ # @param [Symbol] unit the unit used to measure extract
54
+ # @return [Fixnum] the total calories from extract per 500ml
55
+ def self.calories_from_extract original, terminal, unit = :plato
56
+ original = original.to_f
57
+ terminal = terminal.to_f
58
+
59
+ unless unit == :specific_gravity
60
+ case unit
61
+ when :brix
62
+ original = Convert.brix_to_specific_gravity original
63
+ terminal = Convert.terminal_brix_to_terminal_gravity original, terminal
64
+ when :plato
65
+ original = Convert.plato_to_specific_gravity original
66
+ terminal = Convert.plato_to_specific_gravity terminal
67
+ else
68
+ raise ArgumentError, "#{unit} is not recogized as a unit of measure"
69
+ end
70
+ end
71
+
72
+ calories = 3550.0 * terminal *
73
+ ((0.1808 * original) +
74
+ (0.8192 * terminal) - 1.0004)
75
+
76
+ (calories + (calories * 0.33)).round
77
+ end
78
+
79
+ # Calculates total calories per serving.
80
+ # Set the `unit` option for extract levels that are not degrees Plato.
81
+ # Other supported units are `:specific_gravity` and `:brix`.
82
+ #
83
+ # @example
84
+ # Calculate.calories_per_serving 17.5, 3.2
85
+ # Calculate.calories_per_serving 1.055, 1.010, :specific_gravity
86
+ # Calculate.calories_per_serving 15.2, 7.8, :brix
87
+ #
88
+ # @param [Float] original the original extract level
89
+ # @param [Float] terminal the terminal extract level
90
+ # @param [Symbol] unit the unit used to measure extract
91
+ # @return [Fixnum] the total calories per 500ml
92
+ def self.calories_per_serving original, terminal, unit = :plato
93
+ (calories_from_alcohol original, terminal, unit) +
94
+ (calories_from_extract original, terminal, unit)
95
+ end
96
+
97
+ end
@@ -0,0 +1,6 @@
1
+ require "calculators/alcohol"
2
+ require "calculators/calories"
3
+
4
+ # Zymological mathematics.
5
+ module Calculate
6
+ end
@@ -0,0 +1,97 @@
1
+ module Convert
2
+
3
+ # Convert specific gravity to degrees Plato.
4
+ #
5
+ # @example
6
+ # Convert.specific_gravity_to_plato 1.055
7
+ #
8
+ # @param [Float] specific_gravity
9
+ # @return [Float] degrees Plato
10
+ def self.specific_gravity_to_plato specific_gravity
11
+ specific_gravity = specific_gravity.to_f
12
+
13
+ (-676.67 + 1286.4 * specific_gravity - 800.47 *
14
+ specific_gravity * specific_gravity + 190.74 *
15
+ specific_gravity * specific_gravity * specific_gravity).round 1
16
+ end
17
+
18
+ # Convert degrees Brix to specific gravity.
19
+ # @note
20
+ # This method is only for converting pre-fermentation degrees Brix to
21
+ # specific gravity. To accurately convert a terminal Brix reading to
22
+ # terminal gravity use the `terminal_brix_to_terminal_gravity` method.
23
+ #
24
+ # @example
25
+ # Convert.brix_to_specific_gravity 14.2
26
+ #
27
+ # @param [Float] specific_gravity
28
+ # @return [Float] degrees Plato
29
+ def self.brix_to_specific_gravity brix
30
+ (1.000898 + 0.003859118 * brix + 0.00001370735 *
31
+ brix * brix + 0.00000003742517 * brix * brix * brix).round 3
32
+ end
33
+
34
+ # Convert terminal Brix to specific gravity.
35
+ #
36
+ # @example
37
+ # Convert.terminal_brix_to_terminal_gravity 14.2, 7.4
38
+ #
39
+ # @param [Float] original the pre-fermentation Brix reading
40
+ # @param [Float] terminal the post-fermentation Brix reading
41
+ # @return [Float] the terminal gravity
42
+ def self.terminal_brix_to_terminal_gravity original, terminal
43
+ (1.001843 - (0.002318474 * original) -
44
+ (0.000007775 * original * original) -
45
+ (0.000000034 * original * original * original) +
46
+ (0.00574 * terminal) +
47
+ (0.00003344 * terminal * terminal) +
48
+ (0.000000086 * terminal * terminal * terminal)).round 3
49
+ end
50
+
51
+ # Convert degrees Plato to specific gravity.
52
+ #
53
+ # @example
54
+ # Convert.plato_to_specific_gravity 18.9
55
+ #
56
+ # @param [Float] degrees Plato
57
+ # @return [Float] specific gravity
58
+ def self.plato_to_specific_gravity plato
59
+ (plato / (258.6 - ((plato / 258.2) * 227.1)) + 1.0).round 3
60
+ end
61
+
62
+ # Calculates the temperature corrected specific gravity.
63
+ # Set the unit option to `:celsius` if your sample temperature is not Farhenheit.
64
+ #
65
+ # @example
66
+ # Calculate.specific_gravity_to_temperature_corrected_gravity 1.013, 34
67
+ # Calculate.specific_gravity_to_temperature_corrected_gravity 1.013, 4, :celsius
68
+ #
69
+ # @param [Float] gravity the measured specific gravity
70
+ # @param [Float] temperature the temperature of the sample
71
+ # @param [Symbol] unit the temperature measure used
72
+ # @return [Float] the temperature corrected specific gravity
73
+ def self.specific_gravity_to_temperature_corrected_gravity gravity, temperature, unit = :farhenheit
74
+ unless unit == :farhenheit
75
+ if unit == :celsius
76
+ temperature = Convert.celsius_to_fahrenheit temperature
77
+ else
78
+ raise ArgumentError, "#{unit} is not recogized as a unit of measure"
79
+ end
80
+ end
81
+
82
+ if temperature < 3.98
83
+ correction = -0.000032692 * temperature - 0.000740644
84
+ elsif temperature < 50
85
+ correction = -0.0008031922 - 0.0000473773 * temperature +
86
+ 0.000007231263 * temperature * temperature -
87
+ 0.00000003078278 * temperature *
88
+ temperature * temperature
89
+ else
90
+ correction = -0.005431719 + 0.0001963596 * temperature +
91
+ 0.000002661056 * temperature * temperature
92
+ end
93
+
94
+ (gravity + correction).round 3
95
+ end
96
+
97
+ end
@@ -0,0 +1,47 @@
1
+ module Convert
2
+
3
+ # Convert grams to ounces.
4
+ #
5
+ # @example
6
+ # Convert.grams_to_ounces 56
7
+ #
8
+ # @param [Float] grams
9
+ # @return [Float] mass in ounces
10
+ def self.grams_to_ounces grams
11
+ (grams * 0.0352739619).round 1
12
+ end
13
+
14
+ # Convert ounces to grams.
15
+ #
16
+ # @example
17
+ # Convert.ounces_to_grams 3
18
+ #
19
+ # @param [Float] ounces
20
+ # @return [Float] mass in grams
21
+ def self.ounces_to_grams ounces
22
+ (ounces * 28.3495231).round 1
23
+ end
24
+
25
+ # Convert kilograms to pounds.
26
+ #
27
+ # @example
28
+ # Convert.kilograms_to_pounds 15
29
+ #
30
+ # @param [Float] kilograms
31
+ # @return [Float] mass in pounds
32
+ def self.kilograms_to_pounds kilograms
33
+ (kilograms * 2.204623).round 1
34
+ end
35
+
36
+ # Convert pounds to kilograms.
37
+ #
38
+ # @example
39
+ # Convert.pounds_to_kilograms 19
40
+ #
41
+ # @param [Float] pounds
42
+ # @return [Float] mass in kilograms
43
+ def self.pounds_to_kilograms pounds
44
+ (pounds * 0.453592).round 1
45
+ end
46
+
47
+ end
@@ -0,0 +1,25 @@
1
+ module Convert
2
+
3
+ # Convert Celsius to Fahrenheit.
4
+ #
5
+ # @example
6
+ # Convert.celsius_to_fahrenheit 24
7
+ #
8
+ # @param [Float] celsius
9
+ # @return [Float] temperature in Fahrenheit
10
+ def self.celsius_to_fahrenheit celsius
11
+ ((celsius * 1.8) + 32).round 1
12
+ end
13
+
14
+ # Convert Fahrenheit to Celsius.
15
+ #
16
+ # @example
17
+ # Convert.fahrenheit_to_celsius 175
18
+ #
19
+ # @param [Float] fahrenheit
20
+ # @return [Float] temperature in Celsius
21
+ def self.fahrenheit_to_celsius fahrenheit
22
+ ((fahrenheit - 32) / 1.8).round 1
23
+ end
24
+
25
+ end
@@ -0,0 +1,47 @@
1
+ module Convert
2
+
3
+ # Convert gallons to liters.
4
+ #
5
+ # @example
6
+ # Convert.gallons_to_liters 52
7
+ #
8
+ # @param [Float] gallons
9
+ # @return [Float] volume in liters
10
+ def self.gallons_to_liters gallons
11
+ (gallons * 3.785412).round 1
12
+ end
13
+
14
+ # Convert liters to gallons.
15
+ #
16
+ # @example
17
+ # Convert.liters_to_gallons 36
18
+ #
19
+ # @param [Float] liters
20
+ # @return [Float] volume in gallons
21
+ def self.liters_to_gallons liters
22
+ (liters * 0.264172052).round 1
23
+ end
24
+
25
+ # Convert liters to quarts.
26
+ #
27
+ # @example
28
+ # Convert.liters_to_quarts 9
29
+ #
30
+ # @param [Float] liters
31
+ # @return [Float] volume in quarts
32
+ def self.liters_to_quarts liters
33
+ (liters * 1.056688).round 1
34
+ end
35
+
36
+ # Convert quarts to liters.
37
+ #
38
+ # @example
39
+ # Convert.quarts_to_liters 23
40
+ #
41
+ # @param [Float] quarts
42
+ # @return [Float] volume in liters
43
+ def self.quarts_to_liters quarts
44
+ (quarts * 0.946353).round 1
45
+ end
46
+
47
+ end
@@ -0,0 +1,8 @@
1
+ require "conversions/extract"
2
+ require "conversions/mass"
3
+ require "conversions/temperature"
4
+ require "conversions/volume"
5
+
6
+ # Convert between different units of things.
7
+ module Convert
8
+ end
@@ -0,0 +1,2 @@
1
+ require_relative "calculators"
2
+ require_relative "conversions"
@@ -0,0 +1,35 @@
1
+ require "./test/test_helper"
2
+ require "calculators/alcohol"
3
+
4
+ describe Calculate do
5
+
6
+ it "must calculate alcohol by weight from original and terminal Plato" do
7
+ (Calculate.alcohol_by_weight 13, 2.5).must_equal 4.5
8
+ end
9
+
10
+ it "must calculate alcohol by weight from original and terminal gravities" do
11
+ (Calculate.alcohol_by_weight 1.055, 1.011, :specific_gravity).must_equal 4.6
12
+ end
13
+
14
+ it "must calculate alcohol by weight from original and terminal Brix" do
15
+ (Calculate.alcohol_by_weight 15.5, 7.2, :brix).must_equal 5.9
16
+ end
17
+
18
+ it "must calculate alcohol by volume from original and terminal Plato" do
19
+ (Calculate.alcohol_by_volume 13, 2.5).must_equal 5.7
20
+ end
21
+
22
+ it "must calculate alcohol by volume from original and terminal gravities" do
23
+ (Calculate.alcohol_by_volume 1.055, 1.011, :specific_gravity).must_equal 5.8
24
+ end
25
+
26
+ it "must calculate alcohol by volume from original and terminal Brix" do
27
+ (Calculate.alcohol_by_volume 15.5, 7.2, :brix).must_equal 7.4
28
+ end
29
+
30
+ it "must raise an exception when the extract unit is unrecognized" do
31
+ lambda { Calculate.alcohol_by_volume 392, 739, :wtf? }.must_raise ArgumentError
32
+ lambda { Calculate.alcohol_by_weight 392, 739, :wtf? }.must_raise ArgumentError
33
+ end
34
+
35
+ end
@@ -0,0 +1,48 @@
1
+ require "./test/test_helper"
2
+ require "calculators/calories"
3
+
4
+ describe Calculate do
5
+
6
+ it "must calculate calories from alcohol using original and terminal Plato" do
7
+ (Calculate.calories_from_alcohol 13, 2.5).must_equal 151
8
+ end
9
+
10
+ it "must calculate calories from alcohol using original and terminal gravities" do
11
+ (Calculate.calories_from_alcohol 1.05, 1.01, :specific_gravity).must_equal 139
12
+ end
13
+
14
+ it "must calculate calories from alcohol using original and terminal Brix" do
15
+ (Calculate.calories_from_alcohol 15.5, 7.2, :brix).must_equal 81
16
+ end
17
+
18
+ it "must calculate calories from extract using original and terminal Plato" do
19
+ (Calculate.calories_from_extract 13, 2.5).must_equal 83
20
+ end
21
+
22
+ it "must calculate calories from extract using original and terminal gravities" do
23
+ (Calculate.calories_from_extract 1.05, 1.01, :specific_gravity).must_equal 80
24
+ end
25
+
26
+ it "must calculate calories from extract using original and terminal Brix" do
27
+ (Calculate.calories_from_extract 15.5, 7.2, :brix).must_equal 224
28
+ end
29
+
30
+ it "must calculate calories per serving using original and terminal Plato" do
31
+ (Calculate.calories_per_serving 13, 2.5).must_equal 234
32
+ end
33
+
34
+ it "must calculate calories per serving using original and terminal gravities" do
35
+ (Calculate.calories_per_serving 1.05, 1.01, :specific_gravity).must_equal 219
36
+ end
37
+
38
+ it "must calculate calories per serving using original and terminal Brix" do
39
+ (Calculate.calories_per_serving 15.5, 7.2, :brix).must_equal 305
40
+ end
41
+
42
+ it "must raise an exception when the extract unit is unrecognized" do
43
+ lambda { Calculate.calories_from_alcohol 392, 739, :wtf? }.must_raise ArgumentError
44
+ lambda { Calculate.calories_from_extract 392, 739, :wtf? }.must_raise ArgumentError
45
+ lambda { Calculate.calories_per_serving 392, 739, :wtf? }.must_raise ArgumentError
46
+ end
47
+
48
+ end
@@ -0,0 +1,26 @@
1
+ require "./test/test_helper"
2
+ require "conversions/extract"
3
+
4
+ describe Convert do
5
+
6
+ it "must convert specific gravity to Plato" do
7
+ (Convert.specific_gravity_to_plato 1.055).must_equal 13.5
8
+ end
9
+
10
+ it "must convert Brix to specific gravity" do
11
+ (Convert.brix_to_specific_gravity 16.2).must_equal 1.067
12
+ end
13
+
14
+ it "must convert terminal Brix to terminal gravity" do
15
+ (Convert.terminal_brix_to_terminal_gravity 16.2, 7.8).must_equal 1.009
16
+ end
17
+
18
+ it "must convert Plato to specific gravity" do
19
+ (Convert.plato_to_specific_gravity 18.9).must_equal 1.078
20
+ end
21
+
22
+ it "must convert specific gravity to temperature corrected specific gravity" do
23
+ (Convert.specific_gravity_to_temperature_corrected_gravity 1.064, 42).must_equal 1.072
24
+ end
25
+
26
+ end
@@ -0,0 +1,22 @@
1
+ require "./test/test_helper"
2
+ require "conversions/mass"
3
+
4
+ describe Convert do
5
+
6
+ it "must convert grams to ounces" do
7
+ (Convert.grams_to_ounces 56).must_equal 2.0
8
+ end
9
+
10
+ it "must convert ounces to grams" do
11
+ (Convert.ounces_to_grams 2).must_equal 56.7
12
+ end
13
+
14
+ it "must convert kilograms to pounds" do
15
+ (Convert.kilograms_to_pounds 10).must_equal 22.0
16
+ end
17
+
18
+ it "must convert pounds to kilograms" do
19
+ (Convert.pounds_to_kilograms 10).must_equal 4.5
20
+ end
21
+
22
+ end
@@ -0,0 +1,18 @@
1
+ require "./test/test_helper"
2
+ require "conversions/temperature"
3
+
4
+ describe Convert do
5
+
6
+ it "must convert Celsius to Fahrenheit" do
7
+ (Convert.celsius_to_fahrenheit 0).must_equal 32.0
8
+ (Convert.celsius_to_fahrenheit 50).must_equal 122.0
9
+ (Convert.celsius_to_fahrenheit 100).must_equal 212.0
10
+ end
11
+
12
+ it "must convert Fahrenheit to Celsius" do
13
+ (Convert.fahrenheit_to_celsius 32).must_equal 0.0
14
+ (Convert.fahrenheit_to_celsius 90).must_equal 32.2
15
+ (Convert.fahrenheit_to_celsius 212).must_equal 100.0
16
+ end
17
+
18
+ end
@@ -0,0 +1,22 @@
1
+ require "./test/test_helper"
2
+ require "conversions/volume"
3
+
4
+ describe Convert do
5
+
6
+ it "must convert gallons to liters" do
7
+ (Convert.gallons_to_liters 5).must_equal 18.9
8
+ end
9
+
10
+ it "must convert liters to gallons" do
11
+ (Convert.liters_to_gallons 19).must_equal 5.0
12
+ end
13
+
14
+ it "must convert liters to quarts" do
15
+ (Convert.liters_to_quarts 19).must_equal 20.1
16
+ end
17
+
18
+ it "must convert quarts to liters" do
19
+ (Convert.quarts_to_liters 20).must_equal 18.9
20
+ end
21
+
22
+ end
@@ -0,0 +1,3 @@
1
+ $:.push File.expand_path "../../lib", __FILE__
2
+
3
+ require "minitest/autorun"
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gravitheque
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.0
6
+ platform: ruby
7
+ authors:
8
+ - john muhl
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-23 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Tools for brewers.
15
+ email:
16
+ - git@johnmuhl.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .gitignore
22
+ - .travis.yml
23
+ - .yardopts
24
+ - Gemfile
25
+ - Guardfile
26
+ - LICENSE
27
+ - README.md
28
+ - bin/test
29
+ - gravitheque.gemspec
30
+ - lib/calculators.rb
31
+ - lib/calculators/alcohol.rb
32
+ - lib/calculators/calories.rb
33
+ - lib/conversions.rb
34
+ - lib/conversions/extract.rb
35
+ - lib/conversions/mass.rb
36
+ - lib/conversions/temperature.rb
37
+ - lib/conversions/volume.rb
38
+ - lib/gravitheque.rb
39
+ - test/calculators/test_alcohol.rb
40
+ - test/calculators/test_calories.rb
41
+ - test/conversions/test_extract.rb
42
+ - test/conversions/test_mass.rb
43
+ - test/conversions/test_temperature.rb
44
+ - test/conversions/test_volume.rb
45
+ - test/test_helper.rb
46
+ homepage: http://gravitheque.herokuapp.com/
47
+ licenses: []
48
+ post_install_message:
49
+ rdoc_options: []
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ none: false
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ none: false
64
+ requirements: []
65
+ rubyforge_project:
66
+ rubygems_version: 1.8.15
67
+ signing_key:
68
+ specification_version: 3
69
+ summary: The library that will eventually power the web application of the same name.
70
+ test_files:
71
+ - test/calculators/test_alcohol.rb
72
+ - test/calculators/test_calories.rb
73
+ - test/conversions/test_extract.rb
74
+ - test/conversions/test_mass.rb
75
+ - test/conversions/test_temperature.rb
76
+ - test/conversions/test_volume.rb
77
+ - test/test_helper.rb
78
+ has_rdoc: