LPP_alu0100966589 0.1.1
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 +7 -0
- data/.coveralls.yml +1 -0
- data/.gitignore +12 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/Gemfile +6 -0
- data/Guardfile +82 -0
- data/LICENSE.txt +21 -0
- data/README.md +20 -0
- data/Rakefile +6 -0
- data/TDD.gemspec +41 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/docs/Array.html +355 -0
- data/docs/CarbohydrateRich.html +152 -0
- data/docs/Dll.html +845 -0
- data/docs/DllNode.html +418 -0
- data/docs/EggMilkAndDerivatives.html +152 -0
- data/docs/Fish.html +152 -0
- data/docs/Food.html +1500 -0
- data/docs/Fruits.html +152 -0
- data/docs/MeatAndDerivatives.html +152 -0
- data/docs/OilsAndSweets.html +152 -0
- data/docs/TDD.html +117 -0
- data/docs/Vegetables.html +152 -0
- data/docs/_index.html +229 -0
- data/docs/class_list.html +51 -0
- data/docs/css/common.css +1 -0
- data/docs/css/full_list.css +58 -0
- data/docs/css/style.css +499 -0
- data/docs/file.README.html +109 -0
- data/docs/file_list.html +56 -0
- data/docs/frames.html +17 -0
- data/docs/index.html +109 -0
- data/docs/js/app.js +248 -0
- data/docs/js/full_list.js +216 -0
- data/docs/js/jquery.js +4 -0
- data/docs/method_list.html +251 -0
- data/docs/top-level-namespace.html +112 -0
- data/lib/TDD.rb +12 -0
- data/lib/TDD/Dll.rb +80 -0
- data/lib/TDD/DllNode.rb +3 -0
- data/lib/TDD/Food.rb +110 -0
- data/lib/TDD/FoodPyramidClasses.rb +20 -0
- data/lib/TDD/Plate.rb +124 -0
- data/lib/TDD/sort.rb +35 -0
- data/lib/TDD/version.rb +3 -0
- metadata +203 -0
@@ -0,0 +1,112 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
|
+
<title>
|
7
|
+
Top Level Namespace
|
8
|
+
|
9
|
+
— Documentation by YARD 0.9.12
|
10
|
+
|
11
|
+
</title>
|
12
|
+
|
13
|
+
<link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
|
14
|
+
|
15
|
+
<link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
|
16
|
+
|
17
|
+
<script type="text/javascript" charset="utf-8">
|
18
|
+
pathId = "";
|
19
|
+
relpath = '';
|
20
|
+
</script>
|
21
|
+
|
22
|
+
|
23
|
+
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
|
24
|
+
|
25
|
+
<script type="text/javascript" charset="utf-8" src="js/app.js"></script>
|
26
|
+
|
27
|
+
|
28
|
+
</head>
|
29
|
+
<body>
|
30
|
+
<div class="nav_wrap">
|
31
|
+
<iframe id="nav" src="class_list.html?1"></iframe>
|
32
|
+
<div id="resizer"></div>
|
33
|
+
</div>
|
34
|
+
|
35
|
+
<div id="main" tabindex="-1">
|
36
|
+
<div id="header">
|
37
|
+
<div id="menu">
|
38
|
+
|
39
|
+
<a href="_index.html">Index</a> »
|
40
|
+
|
41
|
+
|
42
|
+
<span class="title">Top Level Namespace</span>
|
43
|
+
|
44
|
+
</div>
|
45
|
+
|
46
|
+
<div id="search">
|
47
|
+
|
48
|
+
<a class="full_list_link" id="class_list_link"
|
49
|
+
href="class_list.html">
|
50
|
+
|
51
|
+
<svg width="24" height="24">
|
52
|
+
<rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
|
53
|
+
<rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
|
54
|
+
<rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
|
55
|
+
</svg>
|
56
|
+
</a>
|
57
|
+
|
58
|
+
</div>
|
59
|
+
<div class="clear"></div>
|
60
|
+
</div>
|
61
|
+
|
62
|
+
<div id="content"><h1>Top Level Namespace
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
</h1>
|
67
|
+
<div class="box_info">
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
</div>
|
80
|
+
|
81
|
+
<h2>Defined Under Namespace</h2>
|
82
|
+
<p class="children">
|
83
|
+
|
84
|
+
|
85
|
+
<strong class="modules">Modules:</strong> <span class='object_link'><a href="TDD.html" title="TDD (module)">TDD</a></span>
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
<strong class="classes">Classes:</strong> <span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span>, <span class='object_link'><a href="CarbohydrateRich.html" title="CarbohydrateRich (class)">CarbohydrateRich</a></span>, <span class='object_link'><a href="Dll.html" title="Dll (class)">Dll</a></span>, <span class='object_link'><a href="DllNode.html" title="DllNode (class)">DllNode</a></span>, <span class='object_link'><a href="EggMilkAndDerivatives.html" title="EggMilkAndDerivatives (class)">EggMilkAndDerivatives</a></span>, <span class='object_link'><a href="Fish.html" title="Fish (class)">Fish</a></span>, <span class='object_link'><a href="Food.html" title="Food (class)">Food</a></span>, <span class='object_link'><a href="Fruits.html" title="Fruits (class)">Fruits</a></span>, <span class='object_link'><a href="MeatAndDerivatives.html" title="MeatAndDerivatives (class)">MeatAndDerivatives</a></span>, <span class='object_link'><a href="OilsAndSweets.html" title="OilsAndSweets (class)">OilsAndSweets</a></span>, <span class='object_link'><a href="Vegetables.html" title="Vegetables (class)">Vegetables</a></span>
|
90
|
+
|
91
|
+
|
92
|
+
</p>
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
|
102
|
+
</div>
|
103
|
+
|
104
|
+
<div id="footer">
|
105
|
+
Generated on Tue Nov 28 21:26:18 2017 by
|
106
|
+
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
107
|
+
0.9.12 (ruby-2.3.0).
|
108
|
+
</div>
|
109
|
+
|
110
|
+
</div>
|
111
|
+
</body>
|
112
|
+
</html>
|
data/lib/TDD.rb
ADDED
data/lib/TDD/Dll.rb
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
class Dll
|
2
|
+
include Enumerable
|
3
|
+
|
4
|
+
# Getter for the head node
|
5
|
+
# @return [DllNode] The first node on the list or nil if there is none
|
6
|
+
attr_reader :head
|
7
|
+
|
8
|
+
# Getter for the tail node
|
9
|
+
# @return [DllNode] The last node on the list or nil if there is none
|
10
|
+
attr_reader :tail
|
11
|
+
|
12
|
+
# Initializes to an empty list
|
13
|
+
def initialize
|
14
|
+
@head = nil
|
15
|
+
@tail = nil
|
16
|
+
end
|
17
|
+
|
18
|
+
# Insert a new value, having it be the first on the list
|
19
|
+
# @param value What you want to be inserted to the list
|
20
|
+
def insert_head(value)
|
21
|
+
if( @head == nil )
|
22
|
+
@head = DllNode.new( nil, value, nil )
|
23
|
+
@tail = @head
|
24
|
+
else
|
25
|
+
aux = DllNode.new( nil, value, @head )
|
26
|
+
@head.prev = aux
|
27
|
+
@head = aux
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# Insert a new value, having it be the last on the list
|
32
|
+
# @param value What you want to be inserted to the list
|
33
|
+
def insert_tail(value)
|
34
|
+
if( @tail == nil )
|
35
|
+
@head = DllNode.new( nil, value, nil )
|
36
|
+
@tail = @head
|
37
|
+
else
|
38
|
+
aux = DllNode.new( @tail, value, nil )
|
39
|
+
@tail.next = aux
|
40
|
+
@tail = aux
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Deletes the first element on the list
|
45
|
+
def extract_head
|
46
|
+
if( @head != nil )
|
47
|
+
if( @head.next == nil )
|
48
|
+
@head = nil
|
49
|
+
@tail = nil
|
50
|
+
else
|
51
|
+
@head = @head.next
|
52
|
+
@head.prev.next = nil
|
53
|
+
@head.prev = nil
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# Deletes the last element on the list
|
59
|
+
def extract_tail
|
60
|
+
if( @tail != nil )
|
61
|
+
if( @tail.prev == nil)
|
62
|
+
@tail = nil
|
63
|
+
@head = nil
|
64
|
+
else
|
65
|
+
@tail = @tail.prev
|
66
|
+
@tail.next.prev = nil
|
67
|
+
@tail.next = nil
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
# Iterates over the list and yields for each item. The yield passes the value of each element to the block
|
73
|
+
def each
|
74
|
+
curr_node = @head
|
75
|
+
while (curr_node != nil)
|
76
|
+
yield curr_node.value
|
77
|
+
curr_node = curr_node.next
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
data/lib/TDD/DllNode.rb
ADDED
data/lib/TDD/Food.rb
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
class Food
|
2
|
+
# Names of the nutrients
|
3
|
+
@@nutrients_name = ['proteins', 'carbohydrates', 'fats']
|
4
|
+
# Energy value (in Kcal) that each nutrient type gives
|
5
|
+
@@nutients_energy_value = [4, 4, 9]
|
6
|
+
|
7
|
+
# Getter for the nutrients name
|
8
|
+
# @return [Array<String>] Array with the names of the nutrients
|
9
|
+
def self.nutrients_name
|
10
|
+
@@nutrients_name
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
include Comparable
|
15
|
+
|
16
|
+
# @return [String] Name of the food
|
17
|
+
attr_reader :name
|
18
|
+
|
19
|
+
# @return [Array<Float>] Quantity in grams of each nutrient
|
20
|
+
attr_reader :nutrient_quantities
|
21
|
+
|
22
|
+
# @return [Float] Total energetic value of the food
|
23
|
+
attr_reader :energetic_value
|
24
|
+
|
25
|
+
# @return [Float | nil] Glycemic index for this food if it is calculated, nil otherwise
|
26
|
+
attr_reader :glycemic_index
|
27
|
+
|
28
|
+
# @param name [String] Name of the food
|
29
|
+
# @param nutrient_quantities [Array<FixNum>] An array with the values for the quantities of nutrients 0:grams of proteins, 1:grams of carbohydrates, 2:grams of fats
|
30
|
+
def initialize( name, nutrient_quantities )
|
31
|
+
raise( ArgumentError, 'Invalid number of nutrients values' ) unless (nutrient_quantities.length == @@nutrients_name.length)
|
32
|
+
@name = name.downcase
|
33
|
+
|
34
|
+
# How much of each nutrient this food has
|
35
|
+
@nutrient_quantities = nutrient_quantities
|
36
|
+
|
37
|
+
# Total energetic value of this food instance
|
38
|
+
@energetic_value = 0
|
39
|
+
@nutrient_quantities.length.times do |i|
|
40
|
+
@energetic_value += @nutrient_quantities[i] * @@nutients_energy_value[i]
|
41
|
+
end
|
42
|
+
|
43
|
+
# Setting the glycemic index to a default value
|
44
|
+
@glycemic_index = nil
|
45
|
+
end
|
46
|
+
|
47
|
+
# Given the name of a nutrient, #quantity_of_nutrient returns the quantity (in grams) of that nutrient
|
48
|
+
# @param n [String] The name of the nutrient. The value has to be one of "proteins", "carbohydrates", "fats"
|
49
|
+
# @return [Float] The quantity (in grams) of the nutrient requested that the food has
|
50
|
+
def quantity_of_nutrient( n )
|
51
|
+
# index method returns nil if the element doesn't exist
|
52
|
+
index = @@nutrients_name.index( n )
|
53
|
+
raise( ArgumentError, 'Invalid nutrient name' ) unless index
|
54
|
+
|
55
|
+
return @nutrient_quantities[ index ]
|
56
|
+
end
|
57
|
+
|
58
|
+
# to_s method
|
59
|
+
# @return [String] The format is "<food_name>: <protein_quantity>g, <carbohydrates_quantity>g, <fat_quantity>g"
|
60
|
+
def to_s
|
61
|
+
result = @name + ': '
|
62
|
+
(@nutrient_quantities.length - 1).times do |i|
|
63
|
+
result += "#{@nutrient_quantities[i]}g of #{@@nutrients_name[i]}, "
|
64
|
+
end
|
65
|
+
result += "#{@nutrient_quantities[-1]}g of #{@@nutrients_name[-1]}"
|
66
|
+
end
|
67
|
+
|
68
|
+
# <=> operator, defined so instances could be comparable
|
69
|
+
# @note We consider two foods to be equal if their energetic value is the samew
|
70
|
+
# @return [Fixnum]
|
71
|
+
def <=>(o)
|
72
|
+
return self.energetic_value <=> o.energetic_value
|
73
|
+
end
|
74
|
+
|
75
|
+
# Time interval between metrics (in minutes)
|
76
|
+
DELTA_TIME = 5.0
|
77
|
+
|
78
|
+
# Calculates the incremental area under the curve for this food given the glucose levels in blood for a person.
|
79
|
+
# @return [Float] Area under the curve of the metrics
|
80
|
+
# @param food_metrics [Array<Float>] Glucose in blood metrics of a person, taken each DELTA_TIME minutes for a given food
|
81
|
+
def iauc(food_metrics)
|
82
|
+
raise ArgumentError.new('Need at least 2 values to calculate the first trapezoid area') unless (food_metrics.length > 1)
|
83
|
+
|
84
|
+
DELTA_TIME/2.0 * (food_metrics.drop(1).reduce(0.0, :+) + food_metrics.take(food_metrics.length - 1).reduce(0.0, :+) - 2.0 * food_metrics[0] * food_metrics.length)
|
85
|
+
end
|
86
|
+
|
87
|
+
# Calculates the glycemic index of a person for the given food
|
88
|
+
# @return [Float] Glycemic index of a person for the given food
|
89
|
+
# @param food_metrics (see #iauc)
|
90
|
+
# @param glucose_metrics [Array<Float>] Glucose in blood metrics of a person, taken each DELTA_TIME minutes for pure glucose
|
91
|
+
def individual_gi(food_metrics, glucose_metrics)
|
92
|
+
raise ArgumentError.new("Sizes don't match") unless food_metrics.length == glucose_metrics.length
|
93
|
+
|
94
|
+
iauc(food_metrics) / iauc(glucose_metrics) * 100.0
|
95
|
+
end
|
96
|
+
|
97
|
+
# Calculates the glycemic index for the food given data of various people
|
98
|
+
# @return [Food] Returns selfs so other methods could be chained
|
99
|
+
# @param [Array<Hash<Symbol, Array<Float>>>] People metrics, each hash in the array is the data for a person, the hash has to have :food_metrics and :glucose_metrics keys which values are the arrays corresponding to the glucose in blood metric after the food and the pure glucose respectively.
|
100
|
+
def gi(people_metrics)
|
101
|
+
people_igs = []
|
102
|
+
people_metrics.each do |person_metrics|
|
103
|
+
people_igs << individual_gi(person_metrics[:food_metrics], person_metrics[:glucose_metrics])
|
104
|
+
end
|
105
|
+
|
106
|
+
@glycemic_index = people_igs.reduce(0.0, :+) / people_igs.length
|
107
|
+
return self
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class EggMilkAndDerivatives < Food
|
2
|
+
end
|
3
|
+
|
4
|
+
class MeatAndDerivatives < Food
|
5
|
+
end
|
6
|
+
|
7
|
+
class Fish < Food
|
8
|
+
end
|
9
|
+
|
10
|
+
class OilsAndSweets < Food
|
11
|
+
end
|
12
|
+
|
13
|
+
class CarbohydrateRich < Food
|
14
|
+
end
|
15
|
+
|
16
|
+
class Vegetables < Food
|
17
|
+
end
|
18
|
+
|
19
|
+
class Fruits < Food
|
20
|
+
end
|
data/lib/TDD/Plate.rb
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
class Plate
|
2
|
+
attr_reader :name, :ingredient_quantities, :ingredients
|
3
|
+
|
4
|
+
@@food = {
|
5
|
+
'fried egg' => EggMilkAndDerivatives.new('fried egg', [14.1, 0.0, 19.5]),
|
6
|
+
'milk' => EggMilkAndDerivatives.new('milk', [3.3, 4.8, 3.2]),
|
7
|
+
'yogurt' => EggMilkAndDerivatives.new('yogurt', [3.8, 4.9, 3.8]),
|
8
|
+
'pork' => MeatAndDerivatives.new('pork', [21.5, 0.0, 6.3]),
|
9
|
+
'beef' => MeatAndDerivatives.new('beef', [21.1, 0.0, 3.1]),
|
10
|
+
'chicken' => MeatAndDerivatives.new('chicken', [20.6, 0.0, 5.6]),
|
11
|
+
'cod' => Fish.new('cod', [17.7, 0.0, 0.4]),
|
12
|
+
'tuna' => Fish.new('tuna', [21.5, 0.0, 15.5]),
|
13
|
+
'salmon' => Fish.new('salmon', [19.9, 0.0, 13.6]),
|
14
|
+
'olive oil' => OilsAndSweets.new('olive oil', [0.0, 0.2, 99.6]),
|
15
|
+
'butter' => OilsAndSweets.new('butter', [0.7, 0.0, 83.2]),
|
16
|
+
'chocolate' => OilsAndSweets.new('chocolate', [5.3, 47.0, 30.0]),
|
17
|
+
'sugar' => CarbohydrateRich.new('sugar', [0.0, 99.8, 0.0]),
|
18
|
+
'rice' => CarbohydrateRich.new('rice', [6.8, 77.7, 0.6]),
|
19
|
+
'lentils' => CarbohydrateRich.new('lentils', [23.5, 52.0, 1.4]),
|
20
|
+
'potatoe' => CarbohydrateRich.new('potatoe', [2.0, 15.4, 0.1]),
|
21
|
+
'tomato' => Vegetables.new('tomato', [1.0, 3.5, 0.2]),
|
22
|
+
'onion' => Vegetables.new('onion', [1.3, 5.8, 0.3]),
|
23
|
+
'pumpkin' => Vegetables.new('pumpkin', [1.1, 4.8, 0.1]),
|
24
|
+
'apple' => Fruits.new('apple', [0.3, 12.4, 0.4]),
|
25
|
+
'banana' => Fruits.new('banana', [1.2, 21.4, 0.2]),
|
26
|
+
'pear' => Fruits.new('pear', [0.5, 12.7, 0.3])
|
27
|
+
}
|
28
|
+
|
29
|
+
# Getter for the food hash
|
30
|
+
# @return [Hash<String, Food>] Hash mapping names to food instances
|
31
|
+
def self.food
|
32
|
+
@@food
|
33
|
+
end
|
34
|
+
|
35
|
+
def initialize(name, &block)
|
36
|
+
@name = name
|
37
|
+
@ingredients = []
|
38
|
+
@ingredient_quantities = []
|
39
|
+
|
40
|
+
if block_given?
|
41
|
+
if block.arity == 1
|
42
|
+
yield self
|
43
|
+
else
|
44
|
+
instance_eval(&block)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def add_ingredient(name, quantity)
|
50
|
+
ingredient = @@food[name.strip.downcase]
|
51
|
+
raise( ArgumentError, "Invalid ingredient: #{name}" ) unless !ingredient.nil?
|
52
|
+
|
53
|
+
# Add the ingredient to the list
|
54
|
+
@ingredients << ingredient
|
55
|
+
|
56
|
+
# Little convenient lambda to not repeat code below
|
57
|
+
# Given a key of quantity, it checks that the value is Numeric.
|
58
|
+
# If it is numeric, its value times the multiplier is added to
|
59
|
+
# the @ingredient_quantities array
|
60
|
+
check_and_add_amount = ->(key, multiplier = 1.0) {
|
61
|
+
amount = quantity[key]
|
62
|
+
raise( ArgumentError, "Invalid amount type: '#{amount}' must be of type Numeric" ) unless amount.is_a? Numeric
|
63
|
+
@ingredient_quantities << amount * multiplier
|
64
|
+
}
|
65
|
+
|
66
|
+
# Check what metric is used for the quantity and add
|
67
|
+
if quantity.has_key?(:grams)
|
68
|
+
check_and_add_amount.call(:grams, 1.0)
|
69
|
+
|
70
|
+
elsif quantity.has_key?(:ounces)
|
71
|
+
check_and_add_amount.call(:ounces, 28.35)
|
72
|
+
|
73
|
+
elsif quantity.has_key?(:liters)
|
74
|
+
check_and_add_amount.call(:liters, 1.0)
|
75
|
+
|
76
|
+
elsif quantity.has_key?(:mililiters)
|
77
|
+
check_and_add_amount.call(:mililiters, 1.0 / 1000.0)
|
78
|
+
|
79
|
+
elsif quantity.has_key?(:portion)
|
80
|
+
# Get the string and convert it to an array
|
81
|
+
value = quantity[:portion].split(" ")
|
82
|
+
|
83
|
+
# Get the quantity and the string
|
84
|
+
amount = value[0].to_f
|
85
|
+
str = value[1..-1].join(" ").downcase
|
86
|
+
|
87
|
+
case str
|
88
|
+
when "cup", "cups"
|
89
|
+
amount *= 1.0
|
90
|
+
when "teaspoon", "teaspoons"
|
91
|
+
amount *= 0.3
|
92
|
+
when "pinch"
|
93
|
+
amount *= 0.1
|
94
|
+
when "piece", "pieces"
|
95
|
+
amount *= 1.0
|
96
|
+
else raise( ArgumentError, "Unknown metric: #{str}" )
|
97
|
+
end
|
98
|
+
|
99
|
+
@ingredient_quantities << amount
|
100
|
+
|
101
|
+
else raise( ArgumentError, "Invalid amount metric in definition of ingredient #{name}" )
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def method_missing(methodName, *args, &block)
|
106
|
+
add_ingredient(*args, &block)
|
107
|
+
end
|
108
|
+
|
109
|
+
def to_s
|
110
|
+
result = "\n#{@name}\n===\nNutritional composition\n"
|
111
|
+
totalEnergeticValue = 0
|
112
|
+
|
113
|
+
@ingredients.length.times do |i|
|
114
|
+
n = @ingredients[i].nutrient_quantities
|
115
|
+
energeticValue = @ingredients[i].energetic_value * @ingredient_quantities[i]
|
116
|
+
|
117
|
+
totalEnergeticValue += energeticValue
|
118
|
+
result += "#{@ingredients[i].name}\t\t\t#{n[0]}\t#{n[1]}\t#{n[2]}\t#{energeticValue}\n"
|
119
|
+
end
|
120
|
+
|
121
|
+
result += "total energetic value\t\t\t\t#{totalEnergeticValue}\n"
|
122
|
+
|
123
|
+
end
|
124
|
+
end
|