liquery 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.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.rspec +3 -0
- data/.travis.yml +7 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +49 -0
- data/LICENSE.txt +21 -0
- data/LiquerY.gemspec +48 -0
- data/NOTES.md +5 -0
- data/README.md +43 -0
- data/Rakefile +6 -0
- data/bin/LiquerY +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/config/environment.rb +23 -0
- data/lib/LiquerY/CLI.rb +414 -0
- data/lib/LiquerY/DrinkAPI.rb +17 -0
- data/lib/LiquerY/User.rb +58 -0
- data/lib/LiquerY/database.rb +3 -0
- data/lib/LiquerY/drink.rb +129 -0
- data/lib/LiquerY/version.rb +3 -0
- data/lib/LiquerY.rb +11 -0
- metadata +164 -0
@@ -0,0 +1,129 @@
|
|
1
|
+
class Drink
|
2
|
+
attr_accessor :idDrink, :strDrink, :all_ingredients, :strIngredient1, :strIngredient2, :strIngredient3, :strIngredient4, :strIngredient5, :strIngredient6, :strIngredient7, :strIngredient8, :strIngredient9, :strMeasure1, :strMeasure2, :strMeasure3, :strMeasure4, :strMeasure5, :strMeasure6, :strMeasure7, :strMeasure8, :strInstructions, :palate
|
3
|
+
|
4
|
+
TEST_DRINKS = ["Boulevardier", "Cosmopolitan", "Dirty Martini", "Espresso Martini", "French Negroni", "Gimlet", "Gin Rickey", "Greyhound", "Lemon Drop", "Manhattan", "Martini", "Mojito", "Old Fashioned", "Pisco Sour", "The Last Word"]
|
5
|
+
DUMMY_DRINK = Drink.new.tap {|d| d.all_ingredients = ["a single bogus and insane ingredient that won't match anything"]}
|
6
|
+
|
7
|
+
@@all = []
|
8
|
+
|
9
|
+
def self.all
|
10
|
+
@@all.empty? ? Drink.new_from_hash : @@all
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.new_from_hash(hash = DrinkAPI.new.make_hash)
|
14
|
+
hash.each do |id, drink_array|
|
15
|
+
drink = self.new
|
16
|
+
drink.all_ingredients = []
|
17
|
+
|
18
|
+
correct_and_set_data(drink, drink_array)
|
19
|
+
|
20
|
+
concat_ingredients(drink)
|
21
|
+
|
22
|
+
filter_and_set_by_palate(drink)
|
23
|
+
|
24
|
+
@@all << drink unless drink.idDrink == "14133" #To filter out "Cosmopolitan Martini, which for some reason is included in the database twice under different spellings."
|
25
|
+
end
|
26
|
+
@@all
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.select_for_test
|
30
|
+
self.all.select {|d| TEST_DRINKS.include?(d.strDrink)}
|
31
|
+
end
|
32
|
+
|
33
|
+
def print_ingredients
|
34
|
+
self.all_ingredients.each.with_object("") do |ing, string|
|
35
|
+
if ing == self.all_ingredients[-1]
|
36
|
+
string << "and #{ing}."
|
37
|
+
else
|
38
|
+
string << "#{ing}, "
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.search_by_drink_name(name)
|
44
|
+
name_match = FuzzyMatch.new(Drink.all.map{|d| d.strDrink}).find("#{name}")
|
45
|
+
if Drink.all.find {|d| d.strDrink == name}
|
46
|
+
Drink.all.find {|d| d.strDrink == name}
|
47
|
+
elsif name_match
|
48
|
+
Drink.all.find {|d| d.strDrink == name_match }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.search_by_alcohol_name(name)
|
53
|
+
name_match = FuzzyMatch.new(Drink.all.map{|d| d.all_ingredients}.flatten).find("#{name}")
|
54
|
+
if Drink.all.map {|d| d.all_ingredients}.flatten.include?(name)
|
55
|
+
Drink.all.select {|d| d.all_ingredients.include?(name)}
|
56
|
+
elsif name_match
|
57
|
+
Drink.all.select {|d| d.all_ingredients.include?(name_match)}
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.find_ingredients_by_drink_name(name)
|
62
|
+
drink = self.search_by_drink_name(name)
|
63
|
+
system "clear"
|
64
|
+
puts "Drink Ingredients:".light_blue
|
65
|
+
puts "\n#{drink.strDrink} --".cyan
|
66
|
+
puts "#{drink.print_ingredients}".cyan
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.find_recipe_by_drink_name(name)
|
70
|
+
drink = self.search_by_drink_name(name)
|
71
|
+
system "clear"
|
72
|
+
puts "Drink Recipe:".light_blue
|
73
|
+
puts "\n#{drink.strDrink} --".cyan
|
74
|
+
puts "Ingredients: ".cyan + "#{drink.print_ingredients}".light_blue
|
75
|
+
puts "#{drink.strInstructions}".cyan
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.search_by_palate(palate)
|
79
|
+
Drink.all.select {|d| d.palate == palate}
|
80
|
+
end
|
81
|
+
|
82
|
+
private
|
83
|
+
|
84
|
+
def self.correct_and_set_data(drink, drink_array)
|
85
|
+
drink_array.each do |method, arg| ###REMOVE THIS ZERO WHEN YOU PULL FROM API!!!
|
86
|
+
if !(["strDrink", "strInstructions"].include?(method))
|
87
|
+
if drink.respond_to?("#{method}") && arg.is_a?(String) && arg.include?("Absolut")
|
88
|
+
drink.send("#{method}=", "Vodka") #Had to hardcode this in
|
89
|
+
#because for almost every drink they list a generic liquor
|
90
|
+
#as an ingredient, except for, frustratingly, certain vodka
|
91
|
+
#drinks, for which they give a brand name Absolut variety
|
92
|
+
#that messes up my algorithm
|
93
|
+
elsif drink.respond_to?("#{method}") && arg.is_a?(String) && (arg.include?("lemon") || arg.include?("Lemon"))
|
94
|
+
drink.send("#{method}=", "Lemon Juice")
|
95
|
+
drink.send("strIngredient9=", "Simple Syrup")
|
96
|
+
elsif drink.respond_to?("#{method}") && arg.is_a?(String) && (arg.include?("Sugar") || arg.include?("Simple"))
|
97
|
+
drink.send("#{method}=", "Simple Syrup")
|
98
|
+
elsif drink.respond_to?("#{method}") && arg.is_a?(String) && arg.include?("Lime")
|
99
|
+
drink.send("#{method}=", "Lime Juice")
|
100
|
+
elsif drink.respond_to?("#{method}") && arg != " " && arg != ""
|
101
|
+
drink.send("#{method}=", arg)
|
102
|
+
end
|
103
|
+
elsif drink.respond_to?("#{method}") && arg != " " && arg != ""
|
104
|
+
drink.send("#{method}=", arg)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def self.filter_and_set_by_palate(drink)
|
110
|
+
if (drink.all_ingredients.map {|d|d.downcase} & ["cream", "milk", "kahlua", "bailey", "bailey\'s irish cream", "creme de cacao", "white creme de menthe", "hot chocolate", "coffee liqueur", "chocolate liqueur", "pina colada mix"]).any?
|
111
|
+
drink.palate = "creamy"
|
112
|
+
elsif (drink.all_ingredients.map {|d|d.downcase} & ["lime juice", "lemon juice"]).any? && !(drink.all_ingredients.map {|d|d.downcase}.include?("simple syrup")) || (drink.all_ingredients.map {|d|d.downcase} & ["sour mix", "sweet and sour", "pisco"]).any?
|
113
|
+
drink.palate = "bright"
|
114
|
+
elsif (drink.all_ingredients.map {|d|d.downcase} & ["simple syrup", "grenadine", "creme de cassis", "apple juice", "cranberry juice", "pineapple juice", "maraschino cherry", "maraschino liqueur", "grape soda", "kool-aid"]).any?
|
115
|
+
drink.palate = "sweet"
|
116
|
+
else
|
117
|
+
drink.palate = "dry"
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def self.concat_ingredients(drink)
|
122
|
+
drink.instance_variables.map{|v|v.to_s.tr('@', '')}.select{|v| v.match(/^strIng/)}.each do |v|
|
123
|
+
unless (drink.send("#{v}") == nil || drink.all_ingredients.include?(drink.send("#{v}")))
|
124
|
+
drink.all_ingredients << drink.send("#{v}")
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
data/lib/LiquerY.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require "bundler/setup"
|
2
|
+
require_relative "../config/environment"
|
3
|
+
#
|
4
|
+
# module LiquerY
|
5
|
+
# class Error < StandardError; end
|
6
|
+
# # Your code goes here...
|
7
|
+
# end
|
8
|
+
|
9
|
+
#################################
|
10
|
+
## Moved to config/environment ##
|
11
|
+
#################################
|
metadata
ADDED
@@ -0,0 +1,164 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: liquery
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Andrew Johnson
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-01-17 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.17'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.17'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
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'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: tty-spinner
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: colorize
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: fuzzy_match
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description: App to offer drink recommendations for users
|
112
|
+
email:
|
113
|
+
- ajohnson.uva@gmail.com
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- ".gitignore"
|
119
|
+
- ".rspec"
|
120
|
+
- ".travis.yml"
|
121
|
+
- CODE_OF_CONDUCT.md
|
122
|
+
- Gemfile
|
123
|
+
- Gemfile.lock
|
124
|
+
- LICENSE.txt
|
125
|
+
- LiquerY.gemspec
|
126
|
+
- NOTES.md
|
127
|
+
- README.md
|
128
|
+
- Rakefile
|
129
|
+
- bin/LiquerY
|
130
|
+
- bin/console
|
131
|
+
- bin/setup
|
132
|
+
- config/environment.rb
|
133
|
+
- lib/LiquerY.rb
|
134
|
+
- lib/LiquerY/CLI.rb
|
135
|
+
- lib/LiquerY/DrinkAPI.rb
|
136
|
+
- lib/LiquerY/User.rb
|
137
|
+
- lib/LiquerY/database.rb
|
138
|
+
- lib/LiquerY/drink.rb
|
139
|
+
- lib/LiquerY/version.rb
|
140
|
+
homepage: https://github.com/aaj3f/LiquerY
|
141
|
+
licenses:
|
142
|
+
- MIT
|
143
|
+
metadata: {}
|
144
|
+
post_install_message:
|
145
|
+
rdoc_options: []
|
146
|
+
require_paths:
|
147
|
+
- lib
|
148
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
|
+
requirements:
|
155
|
+
- - ">="
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
requirements: []
|
159
|
+
rubyforge_project:
|
160
|
+
rubygems_version: 2.7.8
|
161
|
+
signing_key:
|
162
|
+
specification_version: 4
|
163
|
+
summary: CLI app interfacing with thecocktaildb API
|
164
|
+
test_files: []
|