nutrition_calculator 1.0.4 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/run_calorie_budgeter +13 -10
- data/features/step_definitions/calorie_budgeter_steps.rb +2 -1
- data/lib/nutrition_calculator/calorie_budgeter.rb +30 -21
- data/lib/nutrition_calculator/data_summarizer.rb +10 -18
- data/lib/nutrition_calculator/diet_period.rb +81 -0
- data/lib/nutrition_calculator/version.rb +1 -1
- data/spec/nutrition_calculator/calorie_budgeter_spec.rb +7 -7
- data/spec/nutrition_calculator/data_summarizer_spec.rb +15 -21
- data/spec/nutrition_calculator/diet_period_spec.rb +138 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6bea8053da1b46ce8fa17fcec9d5b1a26bc76aed
|
4
|
+
data.tar.gz: b267488d45929aca0494205317222a5e3337d967
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 790daa540bea0f2c0589ed225234d242085ca89191bccee879f66ab49b70c7ad57ccd0de69bdd796fe944be2b328e0e65d2b008924160d5e079f472236c2931b
|
7
|
+
data.tar.gz: a495afdf1964d806e1ebb928fc54ed7267046fa72fc2370140a1728dcd112298075104a6b2d99a83fe916dd0e6292f5a14b9561547c0e4b4194688e270c4a457
|
data/bin/run_calorie_budgeter
CHANGED
@@ -55,25 +55,28 @@ $:.unshift(File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib')))
|
|
55
55
|
|
56
56
|
require 'nutrition_calculator/calorie_budgeter'
|
57
57
|
require 'nutrition_calculator/data_summarizer'
|
58
|
+
require 'nutrition_calculator/diet_period'
|
58
59
|
require 'yaml'
|
59
60
|
|
60
61
|
def data
|
61
62
|
@data ||= YAML.load_file(ARGV.first)
|
62
63
|
end
|
63
64
|
|
64
|
-
|
65
|
-
|
65
|
+
diet_period = NutritionCalculator::DietPeriod.new(
|
66
|
+
start_date: data['start_date'],
|
67
|
+
length: data['period_length'],
|
68
|
+
resting_metabolic_rate: data['resting_metabolic_rate'],
|
69
|
+
weight_loss_goal_in_kg: data['weight_loss_goal_in_kg']
|
70
|
+
)
|
71
|
+
|
72
|
+
summarizer = NutritionCalculator::DataSummarizer.new(source_data: data,
|
73
|
+
diet_period: diet_period)
|
74
|
+
|
75
|
+
cb = NutritionCalculator::CalorieBudgeter.new(diet_period: diet_period,
|
76
|
+
source_data: summarizer)
|
66
77
|
|
67
78
|
# require 'logger'
|
68
79
|
# cb.logger = Logger.new(STDERR)
|
69
|
-
#
|
70
|
-
cb.resting_metabolic_rate = data['resting_metabolic_rate']
|
71
|
-
cb.weekly_calorie_goal = data['weekly_calorie_goal']
|
72
|
-
|
73
|
-
cb.current_day_of_week = summarizer.current_day
|
74
|
-
cb.prior_days_calories = summarizer.prior_days_net_calories
|
75
|
-
cb.calories_burned = summarizer.calories_burned_today
|
76
|
-
cb.calories_consumed = summarizer.calories_consumed_today
|
77
80
|
|
78
81
|
puts "You have consumed #{cb.calories_consumed} calories today."
|
79
82
|
puts "You have burned #{cb.calories_burned} calories today."
|
@@ -11,7 +11,8 @@ Given(/^I have consumed (\d+) net calories on prior days this week$/) do |cals|
|
|
11
11
|
end
|
12
12
|
|
13
13
|
Given(/^it is the (\d+)(st|nd|rd|th) day of the week$/) do |day, _|
|
14
|
-
|
14
|
+
day = day.to_i
|
15
|
+
inputs.num_days_to_budget = 8 - day
|
15
16
|
end
|
16
17
|
|
17
18
|
Given(/^I have consumed (\d+) calories today$/) do |cals|
|
@@ -16,9 +16,14 @@ module NutritionCalculator
|
|
16
16
|
# cb = NutritionCalculator::CalorieBudgeter.new
|
17
17
|
#
|
18
18
|
# cb.resting_metabolic_rate = 2_000 # calories per day
|
19
|
-
#
|
20
|
-
# cb.
|
21
|
-
#
|
19
|
+
#
|
20
|
+
# cb.weekly_calorie_goal = 10_500 # creates an average deficit of 500
|
21
|
+
# # calories/day
|
22
|
+
#
|
23
|
+
# cb.num_days_to_budget = 5 # The number of days remaining in the
|
24
|
+
# # week, including the current day
|
25
|
+
#
|
26
|
+
# cb.prior_days_calories = 3_524 # net calories from days 1 and 2
|
22
27
|
#
|
23
28
|
# cb.calories_consumed = 0
|
24
29
|
# cb.calories_burned = 0
|
@@ -40,6 +45,23 @@ module NutritionCalculator
|
|
40
45
|
class CalorieBudgeter
|
41
46
|
extend CachedOutputsWithRecalculation
|
42
47
|
|
48
|
+
def initialize(diet_period: nil, source_data: nil)
|
49
|
+
self.diet_period = diet_period if diet_period
|
50
|
+
self.source_data = source_data if source_data
|
51
|
+
end
|
52
|
+
|
53
|
+
def diet_period=(diet_period)
|
54
|
+
self.resting_metabolic_rate = diet_period.resting_metabolic_rate
|
55
|
+
self.weekly_calorie_goal = diet_period.net_calorie_goal
|
56
|
+
self.num_days_to_budget = diet_period.days_remaining
|
57
|
+
end
|
58
|
+
|
59
|
+
def source_data=(source_data)
|
60
|
+
self.prior_days_calories = source_data.prior_days_net_calories
|
61
|
+
self.calories_consumed = source_data.calories_consumed_today
|
62
|
+
self.calories_burned = source_data.calories_burned_today
|
63
|
+
end
|
64
|
+
|
43
65
|
# @!group Inputs
|
44
66
|
|
45
67
|
# @!attribute
|
@@ -70,16 +92,10 @@ module NutritionCalculator
|
|
70
92
|
}
|
71
93
|
|
72
94
|
# @!attribute
|
73
|
-
# @return [Integer] The number of
|
74
|
-
#
|
75
|
-
#
|
76
|
-
|
77
|
-
# 3 - Wednesday
|
78
|
-
# 4 - Thursday
|
79
|
-
# 5 - Friday
|
80
|
-
# 6 - Saturday
|
81
|
-
# 7 - Sunday
|
82
|
-
def_input :current_day_of_week, validate_with: ->(value) {
|
95
|
+
# @return [Integer] The number of days across which to budget the remaining
|
96
|
+
# net calorie goal for the week. This includes the current
|
97
|
+
# day.
|
98
|
+
def_input :num_days_to_budget, validate_with: ->(value) {
|
83
99
|
(1..7).include?(value)
|
84
100
|
}
|
85
101
|
|
@@ -152,7 +168,7 @@ module NutritionCalculator
|
|
152
168
|
# @return [Integer] The number of net calories that should be consumed today
|
153
169
|
# to meet the weekly calorie goal
|
154
170
|
def_output :daily_calorie_goal do
|
155
|
-
(remaining_calories_this_week.to_f /
|
171
|
+
(remaining_calories_this_week.to_f / num_days_to_budget).round
|
156
172
|
end
|
157
173
|
|
158
174
|
# @!attribute [r]
|
@@ -162,12 +178,5 @@ module NutritionCalculator
|
|
162
178
|
def_output :remaining_calories_this_week do
|
163
179
|
weekly_calorie_goal - prior_days_calories
|
164
180
|
end
|
165
|
-
|
166
|
-
# @!attribute [r]
|
167
|
-
# @return [Integer] The number of days remaining in the week, including the
|
168
|
-
# current day
|
169
|
-
def_output :remaining_days_of_week do
|
170
|
-
8 - current_day_of_week
|
171
|
-
end
|
172
181
|
end
|
173
182
|
end
|
@@ -1,18 +1,15 @@
|
|
1
|
-
require 'date'
|
2
|
-
|
3
1
|
module NutritionCalculator
|
4
2
|
class DataSummarizer
|
5
|
-
|
6
|
-
MONDAY = 1
|
7
|
-
|
8
|
-
def initialize(source_data:, calendar: Date)
|
3
|
+
def initialize(source_data:, diet_period:)
|
9
4
|
self.source_data = source_data
|
10
|
-
self.
|
5
|
+
self.diet_period = diet_period
|
11
6
|
end
|
12
7
|
|
13
8
|
def prior_days_net_calories
|
14
|
-
return 0 if current_day ==
|
15
|
-
values = (
|
9
|
+
return 0 if current_day == 0
|
10
|
+
values = (0...current_day).map { |day|
|
11
|
+
net_calories_for_day(day)
|
12
|
+
}
|
16
13
|
values.reduce { |weekly_net, daily_net| weekly_net + daily_net }
|
17
14
|
end
|
18
15
|
|
@@ -24,18 +21,13 @@ module NutritionCalculator
|
|
24
21
|
source_data_for_day(current_day)['calories_burned']
|
25
22
|
end
|
26
23
|
|
27
|
-
|
28
|
-
|
29
|
-
|
24
|
+
private
|
25
|
+
attr_accessor :source_data, :diet_period
|
26
|
+
|
30
27
|
def current_day
|
31
|
-
|
32
|
-
day = SUNDAY if day < MONDAY
|
33
|
-
day
|
28
|
+
diet_period.current_day
|
34
29
|
end
|
35
30
|
|
36
|
-
private
|
37
|
-
attr_accessor :source_data, :calendar
|
38
|
-
|
39
31
|
def net_calories_for_day(day)
|
40
32
|
data = source_data_for_day(day)
|
41
33
|
data['calories_consumed'] - data['calories_burned']
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'date'
|
2
|
+
require 'nutrition_calculator/cached_outputs_with_recalculation'
|
3
|
+
|
4
|
+
module NutritionCalculator
|
5
|
+
class DietPeriod
|
6
|
+
extend CachedOutputsWithRecalculation
|
7
|
+
include Comparable
|
8
|
+
|
9
|
+
CALORIES_PER_KG = 7_500
|
10
|
+
|
11
|
+
def initialize(length:, start_date:, resting_metabolic_rate:,
|
12
|
+
weight_loss_goal_in_kg:, calendar: Date)
|
13
|
+
self.length = length
|
14
|
+
self.start_date = start_date
|
15
|
+
self.resting_metabolic_rate = resting_metabolic_rate
|
16
|
+
self.weight_loss_goal_in_kg = weight_loss_goal_in_kg
|
17
|
+
self.calendar = calendar
|
18
|
+
end
|
19
|
+
|
20
|
+
def_input :length, validate_with: ->(value) {
|
21
|
+
value.kind_of?(Integer) \
|
22
|
+
&& value > 0
|
23
|
+
}
|
24
|
+
|
25
|
+
def_input :start_date, validate_with: ->(value) {
|
26
|
+
value.kind_of?(Date)
|
27
|
+
}
|
28
|
+
alias_method :to_date, :start_date
|
29
|
+
|
30
|
+
def_input :resting_metabolic_rate, validate_with: ->(value) {
|
31
|
+
value.kind_of?(Integer) \
|
32
|
+
&& value > 0
|
33
|
+
}
|
34
|
+
|
35
|
+
def_input :weight_loss_goal_in_kg, validate_with: ->(value) {
|
36
|
+
value.kind_of?(Numeric)
|
37
|
+
}
|
38
|
+
|
39
|
+
def_output :current_day do
|
40
|
+
(calendar.today - current_cycle_start_date).to_i
|
41
|
+
end
|
42
|
+
|
43
|
+
def_output :days_remaining do
|
44
|
+
length - current_day
|
45
|
+
end
|
46
|
+
|
47
|
+
def_output :net_calorie_goal do
|
48
|
+
rmr_for_period - planned_calorie_deficit
|
49
|
+
end
|
50
|
+
|
51
|
+
def succ
|
52
|
+
self.clone.tap do |period|
|
53
|
+
period.start_date = start_date + length
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def <=>(other)
|
58
|
+
start_date <=> other.to_date
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
attr_accessor :calendar
|
64
|
+
|
65
|
+
def current_cycle_start_date
|
66
|
+
current_cycle.start_date
|
67
|
+
end
|
68
|
+
|
69
|
+
def current_cycle
|
70
|
+
(self..calendar.today).to_a.last
|
71
|
+
end
|
72
|
+
|
73
|
+
def rmr_for_period
|
74
|
+
resting_metabolic_rate * length
|
75
|
+
end
|
76
|
+
|
77
|
+
def planned_calorie_deficit
|
78
|
+
(weight_loss_goal_in_kg * CALORIES_PER_KG).ceil
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -23,18 +23,18 @@ describe NutritionCalculator::CalorieBudgeter do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
describe '#daily_calorie_goal' do
|
26
|
-
let(:days_left) { 8 - day }
|
27
26
|
let(:weekly_goal) { 10_000 }
|
27
|
+
let(:days_left_in_week) { 8 - day }
|
28
28
|
|
29
29
|
before(:each) do
|
30
|
-
subject.
|
30
|
+
subject.num_days_to_budget = days_left_in_week
|
31
31
|
subject.weekly_calorie_goal = weekly_goal
|
32
32
|
subject.prior_days_calories = weekly_consumed
|
33
33
|
end
|
34
34
|
|
35
35
|
shared_examples_for 'it calculates the daily calorie goal' do
|
36
36
|
it 'is the number of calories remaining for the week divided by the remaining days in the week' do
|
37
|
-
expected = ((weekly_goal - weekly_consumed).to_f /
|
37
|
+
expected = ((weekly_goal - weekly_consumed).to_f / days_left_in_week).round
|
38
38
|
expect(subject.daily_calorie_goal).to eq expected
|
39
39
|
end
|
40
40
|
end
|
@@ -50,7 +50,7 @@ describe NutritionCalculator::CalorieBudgeter do
|
|
50
50
|
|
51
51
|
describe '#target_daily_calorie_consumption' do
|
52
52
|
before(:each) do
|
53
|
-
subject.
|
53
|
+
subject.num_days_to_budget = 7
|
54
54
|
subject.prior_days_calories = 0
|
55
55
|
subject.resting_metabolic_rate = 2_000
|
56
56
|
end
|
@@ -158,7 +158,7 @@ describe NutritionCalculator::CalorieBudgeter do
|
|
158
158
|
before(:each) do
|
159
159
|
subject.resting_metabolic_rate = 2_000
|
160
160
|
subject.weekly_calorie_goal = 14_000
|
161
|
-
subject.
|
161
|
+
subject.num_days_to_budget = 7
|
162
162
|
subject.prior_days_calories = 0
|
163
163
|
subject.calories_burned = 0
|
164
164
|
end
|
@@ -178,7 +178,7 @@ describe NutritionCalculator::CalorieBudgeter do
|
|
178
178
|
before(:each) do
|
179
179
|
subject.resting_metabolic_rate = 2_000
|
180
180
|
subject.weekly_calorie_goal = 14_000
|
181
|
-
subject.
|
181
|
+
subject.num_days_to_budget = 7
|
182
182
|
subject.prior_days_calories = 0
|
183
183
|
subject.calories_burned = 0
|
184
184
|
end
|
@@ -196,7 +196,7 @@ describe NutritionCalculator::CalorieBudgeter do
|
|
196
196
|
|
197
197
|
describe '#predicted_calorie_consumption' do
|
198
198
|
before(:each) do
|
199
|
-
subject.
|
199
|
+
subject.num_days_to_budget = 7
|
200
200
|
subject.prior_days_calories = 0
|
201
201
|
subject.resting_metabolic_rate = 2_000
|
202
202
|
subject.weekly_calorie_goal = 14_000
|
@@ -3,42 +3,44 @@ require 'nutrition_calculator/data_summarizer'
|
|
3
3
|
|
4
4
|
describe NutritionCalculator::DataSummarizer do
|
5
5
|
let(:source_data) {{
|
6
|
-
|
6
|
+
0 => {
|
7
7
|
'calories_consumed' => 1000,
|
8
8
|
'calories_burned' => 500
|
9
9
|
},
|
10
|
-
|
10
|
+
1 => {
|
11
11
|
'calories_consumed' => 1001,
|
12
12
|
'calories_burned' => 500
|
13
13
|
},
|
14
|
-
|
14
|
+
2 => {
|
15
15
|
'calories_consumed' => 1000,
|
16
16
|
'calories_burned' => 501
|
17
17
|
},
|
18
|
-
|
18
|
+
3 => {
|
19
19
|
'calories_consumed' => 1002,
|
20
20
|
'calories_burned' => 500
|
21
21
|
},
|
22
|
-
|
22
|
+
4 => {
|
23
23
|
'calories_consumed' => 1000,
|
24
24
|
'calories_burned' => 502
|
25
25
|
},
|
26
|
-
|
26
|
+
5 => {
|
27
27
|
'calories_consumed' => 1003,
|
28
28
|
'calories_burned' => 500
|
29
29
|
},
|
30
|
-
|
30
|
+
6 => {
|
31
31
|
'calories_consumed' => 1000,
|
32
32
|
'calories_burned' => 503
|
33
33
|
},
|
34
34
|
}}
|
35
35
|
|
36
|
-
let(:
|
36
|
+
let(:diet_period) { double(:diet_period, current_day: current_day) }
|
37
37
|
|
38
|
-
subject {
|
38
|
+
subject {
|
39
|
+
described_class.new(source_data: source_data, diet_period: diet_period)
|
40
|
+
}
|
39
41
|
|
40
|
-
context "on day
|
41
|
-
let(:
|
42
|
+
context "on day 0" do
|
43
|
+
let(:current_day) { 0 }
|
42
44
|
|
43
45
|
it 'reports prior_days_net_calories as 0' do
|
44
46
|
expect(subject.prior_days_net_calories).to eq 0
|
@@ -51,14 +53,10 @@ describe NutritionCalculator::DataSummarizer do
|
|
51
53
|
it 'reports calories consumed today' do
|
52
54
|
expect(subject.calories_consumed_today).to eq 1000
|
53
55
|
end
|
54
|
-
|
55
|
-
it 'reports that the current day number is 1' do
|
56
|
-
expect(subject.current_day).to eq 1
|
57
|
-
end
|
58
56
|
end
|
59
57
|
|
60
|
-
context "on day
|
61
|
-
let(:
|
58
|
+
context "on day 6" do
|
59
|
+
let(:current_day) { 6 }
|
62
60
|
|
63
61
|
it 'reports prior_days_net_calories as the sum of calories consumed less the sum of calories burned' do
|
64
62
|
expect(subject.prior_days_net_calories).to eq 3_003
|
@@ -71,9 +69,5 @@ describe NutritionCalculator::DataSummarizer do
|
|
71
69
|
it 'reports calories consumed today' do
|
72
70
|
expect(subject.calories_consumed_today).to eq 1000
|
73
71
|
end
|
74
|
-
|
75
|
-
it 'reports that the current day number is 7' do
|
76
|
-
expect(subject.current_day).to eq 7
|
77
|
-
end
|
78
72
|
end
|
79
73
|
end
|
@@ -0,0 +1,138 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'nutrition_calculator/diet_period'
|
3
|
+
|
4
|
+
describe NutritionCalculator::DietPeriod do
|
5
|
+
CALORIES_PER_KG = 7_500
|
6
|
+
|
7
|
+
subject {
|
8
|
+
described_class.new(length: period_length, start_date: start_date,
|
9
|
+
resting_metabolic_rate: rmr,
|
10
|
+
weight_loss_goal_in_kg: loss_goal,
|
11
|
+
calendar: calendar)
|
12
|
+
}
|
13
|
+
|
14
|
+
let(:calendar) { double(:calendar, today: current_date) }
|
15
|
+
|
16
|
+
let(:rmr) { 2000 }
|
17
|
+
|
18
|
+
let(:expected_net_calorie_goal) {
|
19
|
+
(rmr * period_length) - (loss_goal * CALORIES_PER_KG)
|
20
|
+
}
|
21
|
+
|
22
|
+
let(:start_date) { Date.new(2015,2,16) }
|
23
|
+
let(:current_date) { Date.new(2015,2,16) }
|
24
|
+
|
25
|
+
context 'when the period is 7 days long' do
|
26
|
+
let(:period_length) { 7 }
|
27
|
+
let(:loss_goal) { 0.5 }
|
28
|
+
|
29
|
+
it 'calculates the calorie budget for the entire period' do
|
30
|
+
expect(subject.net_calorie_goal).to eq expected_net_calorie_goal
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'it is the first day of the first cycle of the period' do
|
34
|
+
let(:current_date) { Date.new(2015,2,16) }
|
35
|
+
|
36
|
+
it 'reports that today is the 0th day of the period' do
|
37
|
+
expect(subject.current_day).to eq 0
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'reports that there are 7 days remaining in the period' do
|
41
|
+
expect(subject.days_remaining).to eq 7
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'it is the last day of the first cycle of the period' do
|
46
|
+
let(:current_date) { Date.new(2015,2,22) }
|
47
|
+
|
48
|
+
it 'reports that today is the 6th day of the period' do
|
49
|
+
expect(subject.current_day).to eq 6
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'reports that there is 1 day remaining in the period' do
|
53
|
+
expect(subject.days_remaining).to eq 1
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'it is the first day of the third cycle of the period' do
|
58
|
+
let(:current_date) { Date.new(2015,3,2) }
|
59
|
+
|
60
|
+
it 'reports that today is the 0th day of the period' do
|
61
|
+
expect(subject.current_day).to eq 0
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'reports that there are 7 days remaining in the period' do
|
65
|
+
expect(subject.days_remaining).to eq 7
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context 'it is the last day of the first cycle of the period' do
|
70
|
+
let(:current_date) { Date.new(2015,3,8) }
|
71
|
+
|
72
|
+
it 'reports that today is the 6th day of the period' do
|
73
|
+
expect(subject.current_day).to eq 6
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'reports that there is 1 day remaining in the period' do
|
77
|
+
expect(subject.days_remaining).to eq 1
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context 'when the period is 10 days long' do
|
83
|
+
let(:period_length) { 10 }
|
84
|
+
let(:loss_goal) { 0.5 }
|
85
|
+
|
86
|
+
it 'calculates the calorie budget for the entire period' do
|
87
|
+
expect(subject.net_calorie_goal).to eq expected_net_calorie_goal
|
88
|
+
end
|
89
|
+
|
90
|
+
context 'it is the first day of the first cycle of the period' do
|
91
|
+
let(:current_date) { Date.new(2015,2,16) }
|
92
|
+
|
93
|
+
it 'reports that today is the 0th day of the period' do
|
94
|
+
expect(subject.current_day).to eq 0
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'reports that there are 10 days remaining in the period' do
|
98
|
+
expect(subject.days_remaining).to eq 10
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
context 'it is the last day of the first cycle of the period' do
|
103
|
+
let(:current_date) { Date.new(2015,2,25) }
|
104
|
+
|
105
|
+
it 'reports that today is the 9th day of the period' do
|
106
|
+
expect(subject.current_day).to eq 9
|
107
|
+
end
|
108
|
+
|
109
|
+
it 'reports that there is 1 day remaining in the period' do
|
110
|
+
expect(subject.days_remaining).to eq 1
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
context 'it is the first day of the third cycle of the period' do
|
115
|
+
let(:current_date) { Date.new(2015,3,8) }
|
116
|
+
|
117
|
+
it 'reports that today is the 0th day of the period' do
|
118
|
+
expect(subject.current_day).to eq 0
|
119
|
+
end
|
120
|
+
|
121
|
+
it 'reports that there are 7 days remaining in the period' do
|
122
|
+
expect(subject.days_remaining).to eq 10
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
context 'it is the last day of the third cycle of the period' do
|
127
|
+
let(:current_date) { Date.new(2015,3,17) }
|
128
|
+
|
129
|
+
it 'reports that today is the 6th day of the period' do
|
130
|
+
expect(subject.current_day).to eq 9
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'reports that there is 1 day remaining in the period' do
|
134
|
+
expect(subject.days_remaining).to eq 1
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nutrition_calculator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Wilger
|
@@ -122,12 +122,14 @@ files:
|
|
122
122
|
- lib/nutrition_calculator/cached_outputs_with_recalculation.rb
|
123
123
|
- lib/nutrition_calculator/calorie_budgeter.rb
|
124
124
|
- lib/nutrition_calculator/data_summarizer.rb
|
125
|
+
- lib/nutrition_calculator/diet_period.rb
|
125
126
|
- lib/nutrition_calculator/has_logging.rb
|
126
127
|
- lib/nutrition_calculator/version.rb
|
127
128
|
- nutrition_calculator.gemspec
|
128
129
|
- spec/nutrition_calculator/cached_outputs_with_recalculation_spec.rb
|
129
130
|
- spec/nutrition_calculator/calorie_budgeter_spec.rb
|
130
131
|
- spec/nutrition_calculator/data_summarizer_spec.rb
|
132
|
+
- spec/nutrition_calculator/diet_period_spec.rb
|
131
133
|
- spec/nutrition_calculator_spec.rb
|
132
134
|
- spec/spec_helper.rb
|
133
135
|
homepage: ''
|
@@ -163,6 +165,7 @@ test_files:
|
|
163
165
|
- spec/nutrition_calculator/cached_outputs_with_recalculation_spec.rb
|
164
166
|
- spec/nutrition_calculator/calorie_budgeter_spec.rb
|
165
167
|
- spec/nutrition_calculator/data_summarizer_spec.rb
|
168
|
+
- spec/nutrition_calculator/diet_period_spec.rb
|
166
169
|
- spec/nutrition_calculator_spec.rb
|
167
170
|
- spec/spec_helper.rb
|
168
171
|
has_rdoc:
|