fruit-info 0.1.3
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/bin/fruit-info +7 -0
- data/config/environment.rb +10 -0
- data/lib/cli.rb +110 -0
- data/lib/fruit.rb +61 -0
- data/lib/fruityvice_api.rb +14 -0
- metadata +105 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3db4d292fc62ea1974dc4901cd7aa1e38bb4860566d2dc3a62d2eb0d929ffa24
|
4
|
+
data.tar.gz: 34be9484bb85a3c65ae7ed8139d2ccecafb237e67b3d3efd84e6fe47c0f40161
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5cca348edd39f3d9d3eb0490b0bc8e1d6db7d7cd2a1e9dbc61bf19e97f2f937c673aae2d12b4fbf59dc96f898917b40129f19e8e655edb2c3808897d9bdefc80
|
7
|
+
data.tar.gz: e7c64c391cc83b34cac1d1785e4ddc07f521123394d0555031c296ceda4d2cc7c7a3d858a31e2e1f9bc79cf9eb0caf2d3ce2b6eeb1c86b7c265567141deb7b1c
|
data/bin/fruit-info
ADDED
data/lib/cli.rb
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
|
3
|
+
# displays a menu and loops menu until user inputs q
|
4
|
+
class CLI
|
5
|
+
def call
|
6
|
+
FruityviceAPI.new.make_fruits
|
7
|
+
puts 'Welcome to fruit!'
|
8
|
+
input = nil
|
9
|
+
while input != 'q'
|
10
|
+
puts 'Press ' + 'a'.red + ' to see all fruit'
|
11
|
+
puts 'Press ' + 's'.yellow + ' to see all fruit listed with their scientific names'
|
12
|
+
puts 'Press ' + 'n'.light_yellow + ' to see all fruit listed with their nutrional information'
|
13
|
+
puts 'Press ' + 'm'.green + ' to see the fruits with most nutrition'
|
14
|
+
puts 'Press ' + 'l'.cyan + ' to see the fruits with least nutrition'
|
15
|
+
puts 'Type the ' + 'name of a fruit '.blue + 'to see all of its information'
|
16
|
+
puts 'Press ' + 'q'.magenta + " to quit\n"
|
17
|
+
print 'What would you like to do: '
|
18
|
+
input = gets.strip.downcase
|
19
|
+
case input
|
20
|
+
when 'q'
|
21
|
+
return
|
22
|
+
when 'a'
|
23
|
+
display_all_fruit
|
24
|
+
when 's'
|
25
|
+
display_fruits_with_scientific_names
|
26
|
+
when 'n'
|
27
|
+
display_nutrional_info
|
28
|
+
when 'm'
|
29
|
+
display_the_most
|
30
|
+
when 'l'
|
31
|
+
display_the_least
|
32
|
+
else
|
33
|
+
if !Fruit.all.find { |fruit| fruit.name.downcase == input}.nil?
|
34
|
+
display_one_fruit(Fruit.all.find { |fruit| fruit.name.downcase == input })
|
35
|
+
else
|
36
|
+
puts "\nNot a valid option or fruit in database\n".red
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def display_the_least
|
43
|
+
puts "\nThe fruits with the least nutrition per 100g".colorize(:magenta)
|
44
|
+
least_carb = Fruit.min('carbohydrates')
|
45
|
+
least_protein = Fruit.min('protein')
|
46
|
+
least_fat = Fruit.min('fat')
|
47
|
+
least_calories = Fruit.min('calories')
|
48
|
+
least_sugar = Fruit.min('sugar')
|
49
|
+
|
50
|
+
puts "\nLeast carbohydrates: #{least_carb.name} @ #{least_carb.nutritions['carbohydrates']}g".colorize(least_carb.color)
|
51
|
+
puts "Least protein: #{least_protein.name} @ #{least_protein.nutritions['protein']}g".colorize(least_protein.color)
|
52
|
+
puts "Least fat: #{least_fat.name} @ #{least_fat.nutritions['fat']}g".colorize(least_fat.color)
|
53
|
+
puts "Least calories: #{least_calories.name} @ #{least_calories.nutritions['calories']}".colorize(least_calories.color)
|
54
|
+
puts "Least sugar: #{least_sugar.name} @ #{least_sugar.nutritions['sugar']}g\n".colorize(least_sugar.color)
|
55
|
+
end
|
56
|
+
|
57
|
+
def display_the_most
|
58
|
+
puts "\nThe fruits with the most nutrition per 100g".colorize(:cyan)
|
59
|
+
most_carb = Fruit.max('carbohydrates')
|
60
|
+
most_protein = Fruit.max('protein')
|
61
|
+
most_fat = Fruit.max('fat')
|
62
|
+
most_calories = Fruit.max('calories')
|
63
|
+
most_sugar = Fruit.max('sugar')
|
64
|
+
|
65
|
+
puts "\nMost carbohydrates: #{most_carb.name} @ #{most_carb.nutritions['carbohydrates']}g".colorize(most_carb.color)
|
66
|
+
puts "Most protein: #{most_protein.name} @ #{most_protein.nutritions['protein']}g".colorize(most_protein.color)
|
67
|
+
puts "Most fat: #{most_fat.name} @ #{most_fat.nutritions['fat']}g".colorize(most_fat.color)
|
68
|
+
puts "Most calories: #{most_calories.name} @ #{most_calories.nutritions['calories']}".colorize(most_calories.color)
|
69
|
+
puts "Most sugar: #{most_sugar.name} @ #{most_sugar.nutritions['sugar']}g\n".colorize(most_sugar.color)
|
70
|
+
end
|
71
|
+
|
72
|
+
def display_one_fruit(fruit)
|
73
|
+
puts "\n#{fruit.name} - #{fruit.order} #{fruit.family} #{fruit.genus}".colorize(fruit.color)
|
74
|
+
fruit.nutritions.each do |k, v|
|
75
|
+
if k == 'calories'
|
76
|
+
puts "#{k}: #{v}".colorize(color: :black, background: fruit.color)
|
77
|
+
else
|
78
|
+
puts "#{k}: #{v}g".colorize(color: :black, background: fruit.color)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
puts ''
|
82
|
+
end
|
83
|
+
|
84
|
+
def display_all_fruit
|
85
|
+
puts ''
|
86
|
+
Fruit.all.each { |fruit| puts fruit.name.to_s.colorize(fruit.color) }
|
87
|
+
puts ''
|
88
|
+
end
|
89
|
+
|
90
|
+
def display_nutrional_info
|
91
|
+
puts ''
|
92
|
+
Fruit.all.each do |fruit|
|
93
|
+
puts fruit.name.to_s.colorize(fruit.color) + ' per 100g'
|
94
|
+
fruit.nutritions.each do |k, v|
|
95
|
+
if k == 'calories'
|
96
|
+
puts "#{k}: #{v}".colorize(color: :black, background: fruit.color)
|
97
|
+
else
|
98
|
+
puts "#{k}: #{v}g".colorize(color: :black, background: fruit.color)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
puts ''
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def display_fruits_with_scientific_names
|
106
|
+
puts ''
|
107
|
+
Fruit.all.each { |fruit| puts "#{fruit.name}: #{fruit.order} #{fruit.family} #{fruit.genus}".colorize(fruit.color) }
|
108
|
+
puts ''
|
109
|
+
end
|
110
|
+
end
|
data/lib/fruit.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
|
3
|
+
# a class to hold the fruits information inculding a hash of nutritional facts
|
4
|
+
class Fruit
|
5
|
+
attr_accessor :genus, :name, :id, :family, :order, :nutritions, :color
|
6
|
+
@@all = []
|
7
|
+
def initialize(attributes)
|
8
|
+
attributes.each { |k, v| send("#{k}=", v) }
|
9
|
+
add_color
|
10
|
+
@@all << self
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.max(element)
|
14
|
+
all.max { |a, b| a.nutritions[element] <=> b.nutritions[element] }
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.min(element)
|
18
|
+
all.min { |a, b| a.nutritions[element] <=> b.nutritions[element] }
|
19
|
+
end
|
20
|
+
|
21
|
+
def add_color
|
22
|
+
case name
|
23
|
+
when 'Banana'
|
24
|
+
self.color = :light_yellow
|
25
|
+
when 'Blueberry'
|
26
|
+
self.color = :blue
|
27
|
+
when 'Cherry'
|
28
|
+
self.color = :red
|
29
|
+
when 'Apple'
|
30
|
+
self.color = :green
|
31
|
+
when 'Lemon'
|
32
|
+
self.color = :light_yellow
|
33
|
+
when 'Mango'
|
34
|
+
self.color = :yellow
|
35
|
+
when 'Orange'
|
36
|
+
self.color = :yellow
|
37
|
+
when 'Pear'
|
38
|
+
self.color = :green
|
39
|
+
when 'Pineapple'
|
40
|
+
self.color = :light_yellow
|
41
|
+
when 'Raspberry'
|
42
|
+
self.color = :light_red
|
43
|
+
when 'Strawberry'
|
44
|
+
self.color = :red
|
45
|
+
when 'Tomato'
|
46
|
+
self.color = :red
|
47
|
+
when 'Watermelon'
|
48
|
+
self.color = :light_green
|
49
|
+
else
|
50
|
+
self.color = :white
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.all
|
55
|
+
@@all
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.new_from_api(fruits)
|
59
|
+
fruits.each { |fruit| new(fruit) }
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
|
3
|
+
# accesses the fruityvice api, parses it, and calls Fruit class to make fruit from parsed hash
|
4
|
+
class FruityviceAPI
|
5
|
+
BASE_URL = 'https://www.fruityvice.com/api/fruit/all'
|
6
|
+
|
7
|
+
def access_fruityviceapi
|
8
|
+
JSON.parse(HTTParty.get(BASE_URL, verify: false))
|
9
|
+
end
|
10
|
+
|
11
|
+
def make_fruits
|
12
|
+
Fruit.new_from_api(access_fruityviceapi)
|
13
|
+
end
|
14
|
+
end
|
metadata
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: fruit-info
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Samuel Grasse-Haroldsen
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-07-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: colorize
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.8'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.8'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: httparty
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.18'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.18'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: json
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2.1'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.1'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.10'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.10'
|
69
|
+
description: Gives information on the nutrional value of several fruits.
|
70
|
+
email:
|
71
|
+
- sgrasseharoldsen@gmail.com
|
72
|
+
executables:
|
73
|
+
- fruit-info
|
74
|
+
extensions: []
|
75
|
+
extra_rdoc_files: []
|
76
|
+
files:
|
77
|
+
- bin/fruit-info
|
78
|
+
- config/environment.rb
|
79
|
+
- lib/cli.rb
|
80
|
+
- lib/fruit.rb
|
81
|
+
- lib/fruityvice_api.rb
|
82
|
+
homepage: https://github.com/SamG-H/fruit-cli-gem
|
83
|
+
licenses:
|
84
|
+
- MIT
|
85
|
+
metadata: {}
|
86
|
+
post_install_message:
|
87
|
+
rdoc_options: []
|
88
|
+
require_paths:
|
89
|
+
- lib
|
90
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: 2.3.0
|
95
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
requirements: []
|
101
|
+
rubygems_version: 3.0.6
|
102
|
+
signing_key:
|
103
|
+
specification_version: 4
|
104
|
+
summary: A gem utilizing the fruityvice api
|
105
|
+
test_files: []
|