meal_budget_planner 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3ee203ce6266945af356a5dff933ae74f926f578d34dd48152571429641cc071
4
- data.tar.gz: 9d8155d21e80d1c9f2ee6bd7915e3f816dba0b706b1eefae9ec6cbf220667d81
3
+ metadata.gz: 6c6604ce10bc7e33669607231e3c07226e8bd0cf4334e81f429183c7aa3d6f4e
4
+ data.tar.gz: d6ba4421adfbb8cbb8980fe920e5ed705b3e1ba780b219de1eea4170acfb7207
5
5
  SHA512:
6
- metadata.gz: a97972d6787c153650d037282e3fbbaa10b8bd6a001da3d704819b49e824b22092af1e4cf4cb2933a8b3e7819df473bfa0541126bc6f0a7428b136e4cbe8affa
7
- data.tar.gz: 3c68dcad30597af69c4f974e9243d6e9ad46f99ce10ce3f0a107a148ced750c3200fe7fa64e797810756213c1500590cab29e5b2fd3a27b547592c38107218e2
6
+ metadata.gz: 6cf64a4a57b1e02ed193ffa68c737d994ed13abe015d690d17d630dee12b8daa066c2dc79edc050e0bcbf794c6de48bd795766bc5d7916d6a49f31e479b28b4e
7
+ data.tar.gz: 270e3587cd01d305690a6e7c3977c6875137896374c6cde81f85922ef95bac1b912079431f520ca8aa11e5b021dd42a785a773349d6f9f813e1cbec3aa653877
data/lib/daily_plan.rb CHANGED
@@ -1,39 +1,15 @@
1
- class DailyPlan
1
+ require 'plan'
2
2
 
3
- attr_accessor :budget
3
+ class DailyPlan < Plan
4
4
 
5
- def initialize(user,menu,budget)
6
- @user = user
7
- @menu = menu
8
- @budget = budget.amount
9
- @BREAKFAST_PERCENT = 25
10
- @LUNCH_PERCENT = 40
11
- @DINNER_PERCENT = 35
12
- @BREAKFAST_IDENTIFIER = 1
13
- @LUNCH_IDENTIFIER = 2
14
- @DINNER_IDENTIFIER = 3
15
- @VEGAN = 1
16
- @VEGETERIAN = 2
17
- @NONVEGAN = 3
18
- end
19
-
20
- def budget
21
- @budget
22
- end
23
-
24
- def get_price(percent)
25
- return (budget * percent) / 100
26
- end
27
-
28
- def get_user_menu(price, menu_category_id)
29
- return @menu.select {|menu| menu["price"] <= price && menu["menu_category_id"] == menu_category_id && menu["menu_type_id"] == @user.menu_type_id }
30
- end
31
-
32
- def generate_meal_plan
5
+ def generate_meal_plan(context)
6
+ @user = context.user
7
+ @menu = context.menu
8
+ @budget = context.budget
33
9
  return {
34
- :breakfast => get_user_menu(get_price(@BREAKFAST_PERCENT), @BREAKFAST_IDENTIFIER).sample,
35
- :lunch => get_user_menu(get_price(@LUNCH_PERCENT), @LUNCH_IDENTIFIER).sample,
36
- :dinner => get_user_menu(get_price(@DINNER_PERCENT), @DINNER_IDENTIFIER).sample
10
+ :breakfast => get_user_menu(get_price(context.BREAKFAST_PERCENT), context.BREAKFAST_IDENTIFIER).sample,
11
+ :lunch => get_user_menu(get_price(context.LUNCH_PERCENT), context.LUNCH_IDENTIFIER).sample,
12
+ :dinner => get_user_menu(get_price(context.DINNER_PERCENT), context.DINNER_IDENTIFIER).sample
37
13
  }
38
14
  end
39
15
  end
data/lib/meal_plan.rb ADDED
@@ -0,0 +1,28 @@
1
+ require 'daily_plan'
2
+ require 'weekly_plan'
3
+ require 'monthly_plan'
4
+
5
+ class MealPlan
6
+ attr_reader :user, :menu, :budget, :BREAKFAST_PERCENT, :LUNCH_PERCENT, :DINNER_PERCENT, :BREAKFAST_IDENTIFIER, :LUNCH_IDENTIFIER, :DINNER_IDENTIFIER, :VEGAN, :VEGETERIAN, :NONVEGAN
7
+ attr_accessor :plan_type
8
+
9
+ def initialize(plan_type,user,menu,budget)
10
+ @plan_type = plan_type
11
+ @user = user
12
+ @menu = menu
13
+ @budget = budget.amount
14
+ @BREAKFAST_PERCENT = 25
15
+ @LUNCH_PERCENT = 40
16
+ @DINNER_PERCENT = 35
17
+ @BREAKFAST_IDENTIFIER = 1
18
+ @LUNCH_IDENTIFIER = 2
19
+ @DINNER_IDENTIFIER = 3
20
+ @VEGAN = 1
21
+ @VEGETERIAN = 2
22
+ @NONVEGAN = 3
23
+ end
24
+
25
+ def generate
26
+ @plan_type.generate_meal_plan(self)
27
+ end
28
+ end
data/lib/monthly_plan.rb CHANGED
@@ -1,19 +1,18 @@
1
- require 'daily_plan_decorator'
1
+ require 'plan'
2
2
 
3
- class MonthlyPlan < DailyPlanDecorator
3
+ class MonthlyPlan < Plan
4
4
 
5
- def initialize(daily_plan)
6
- super(daily_plan)
7
- end
8
-
9
- def budget
10
- @daily_plan / 31
11
- end
12
-
13
- def generate_meal_plan
5
+ def generate_meal_plan(context)
6
+ @user = context.user
7
+ @menu = context.menu
8
+ @budget = context.budget
14
9
  meal_plan = Array.new
15
10
  31.times do |n|
16
- meal_plan.push(@daily_plan.generate_meal_plan)
11
+ meal_plan.push({
12
+ :breakfast => get_user_menu(get_price(context.BREAKFAST_PERCENT), context.BREAKFAST_IDENTIFIER).sample,
13
+ :lunch => get_user_menu(get_price(context.LUNCH_PERCENT), context.LUNCH_IDENTIFIER).sample,
14
+ :dinner => get_user_menu(get_price(context.DINNER_PERCENT), context.DINNER_IDENTIFIER).sample
15
+ })
17
16
  end
18
17
  return meal_plan
19
18
  end
data/lib/plan.rb ADDED
@@ -0,0 +1,19 @@
1
+ class Plan
2
+
3
+ def generate_meal_plan
4
+ raise NotImplementedError, 'Cannot directly call abstract class'
5
+ end
6
+
7
+ def budget
8
+ @budget
9
+ end
10
+
11
+ def get_price(percent)
12
+ return (budget * percent) / 100
13
+ end
14
+
15
+ def get_user_menu(price, menu_category_id)
16
+ return @menu.select {|menu| menu["price"] <= price && menu["menu_category_id"] == menu_category_id && menu["menu_type_id"] == @user.menu_type_id }
17
+ end
18
+
19
+ end
data/lib/weekly_plan.rb CHANGED
@@ -1,19 +1,18 @@
1
- require 'daily_plan_decorator'
1
+ require 'plan'
2
2
 
3
- class WeeklyPlan < DailyPlanDecorator
3
+ class WeeklyPlan < Plan
4
4
 
5
- def initialize(daily_plan)
6
- super(daily_plan)
7
- end
8
-
9
- def budget
10
- @daily_plan / 7
11
- end
12
-
13
- def generate_meal_plan
5
+ def generate_meal_plan(context)
6
+ @user = context.user
7
+ @menu = context.menu
8
+ @budget = context.budget
14
9
  meal_plan = Array.new
15
10
  7.times do |n|
16
- meal_plan.push(@daily_plan.generate_meal_plan)
11
+ meal_plan.push({
12
+ :breakfast => get_user_menu(get_price(context.BREAKFAST_PERCENT), context.BREAKFAST_IDENTIFIER).sample,
13
+ :lunch => get_user_menu(get_price(context.LUNCH_PERCENT), context.LUNCH_IDENTIFIER).sample,
14
+ :dinner => get_user_menu(get_price(context.DINNER_PERCENT), context.DINNER_IDENTIFIER).sample
15
+ })
17
16
  end
18
17
  return meal_plan
19
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: meal_budget_planner
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Onyeka Onwochei
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-01 00:00:00.000000000 Z
11
+ date: 2019-12-06 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Meal Budgeting based on Meal Type (vegan, vegeterians and none) and Budget
14
14
  plan(daily weekly or monthly)
@@ -18,12 +18,12 @@ extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
20
  - lib/daily_plan.rb
21
- - lib/daily_plan_decorator.rb
22
- - lib/meal_planner.rb
21
+ - lib/meal_plan.rb
23
22
  - lib/mock/menu.rb
24
23
  - lib/model/user.rb
25
24
  - lib/model/user_budget.rb
26
25
  - lib/monthly_plan.rb
26
+ - lib/plan.rb
27
27
  - lib/weekly_plan.rb
28
28
  homepage: http://rubygems.org/gems/meal_budget_planner
29
29
  licenses: []
@@ -1,11 +0,0 @@
1
- class DailyPlanDecorator
2
-
3
- def initialize(daily_plan)
4
- @daily_plan = daily_plan
5
- end
6
-
7
- def generate_meal_plan
8
- @daily_plan.generate_meal_plan
9
- end
10
-
11
- end
data/lib/meal_planner.rb DELETED
@@ -1,66 +0,0 @@
1
- class MealPlanner
2
- #weights to break down user budget
3
-
4
- def initialize(user,menu,budget)
5
- @user = user
6
- @menu = menu
7
- @budget = budget.amount
8
- @BREAKFAST_PERCENT = 25
9
- @LUNCH_PERCENT = 40
10
- @DINNER_PERCENT = 35
11
- @BREAKFAST_IDENTIFIER = 1
12
- @LUNCH_IDENTIFIER = 2
13
- @DINNER_IDENTIFIER = 3
14
- @VEGAN = 1
15
- @VEGETERIAN = 2
16
- @NONE = 3
17
- end
18
-
19
- # getting meal plan
20
- def generate_meal_plan
21
- if budget.budget_type == "daily"
22
- return generate_daily_meal_plan
23
- elsif budget.budget_type == "weekly"
24
- return generate_weekly_meal_plan
25
- elsif budget.budget_type == "monthly"
26
- return generate_monthly_meal_plan
27
- end
28
- end
29
-
30
- # calculation for breakfast
31
- def get_price(percent)
32
- return (@budget * percent) / 100
33
- end
34
-
35
- # breakfast filtering
36
- def get_user_menu(price, menu_category_id)
37
- return @menu.select {|menu| menu["price"] <= price && menu["menu_category_id"] == menu_category_id && menu["menu_type_id"] == @user.menu_type_id }
38
- end
39
-
40
- #generating meal plans for monthly weekly and daily
41
- def generate_daily_meal_plan
42
- return {
43
- :breakfast => get_user_menu(get_price(@BREAKFAST_PERCENT), @BREAKFAST_IDENTIFIER).sample,
44
- :lunch => get_user_menu(get_price(@LUNCH_PERCENT), @LUNCH_IDENTIFIER).sample,
45
- :dinner => get_user_menu(get_price(@DINNER_PERCENT), @DINNER_IDENTIFIER).sample
46
- }
47
- end
48
-
49
- def generate_weekly_meal_plan
50
- @budget = @budget / 7 # get daily budget
51
- meal_plan = Array.new
52
- 7.times do |n|
53
- meal_plan.push(generate_daily_meal_plan)
54
- end
55
- return meal_plan
56
- end
57
-
58
- def generate_monthly_meal_plan
59
- @budget = @budget / 31 # from daily budget
60
- meal_plan = Array.new
61
- 31.times do |n|
62
- meal_plan.push(generate_daily_meal_plan)
63
- end
64
- return meal_plan
65
- end
66
- end