liquery 0.8.6 → 0.8.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0677a9fc850822572a868555203a15c5d072079124af8f46b4edd663b49cdb7f
4
- data.tar.gz: 4063d9b0ed11c2b7574d1adfe5b94c753da2fe4dbfd9577679428c5b372a87e1
3
+ metadata.gz: b64a9be0b8c33a8c4de89049079cb63841ee80fafd971cf4fd9e3bd6e5753bee
4
+ data.tar.gz: b0dab2bfc79660b28029c89187cacb7e4c13603864cd083fcc22abd44d346882
5
5
  SHA512:
6
- metadata.gz: 647e49b66d6e27b77bfa5077e3f3ea2fbbfec94a2dcdb3cd69f475cd9cbbd067ae119fc6b77ea1b8599708356094d855258f712d40fb40b05ab28107dd643c9a
7
- data.tar.gz: e461d0c438fb4ee4a65269b156118d3ec4763affc3eaf095a6a960ac2e29848834edaae56ab86225e3397a0a2cfc15740bfb1e91232a211e5e22e3854dc9b655
6
+ metadata.gz: c7cf0ad09d958b96524dcc0c8d59662040ec47e38d4ecbe1a3d728e10c908cdada6bb8b8d4ca591eaa2c8045f77e78a0a33922422e0ffe29c1181819f9219711
7
+ data.tar.gz: 0d61c184c2a4d825d59abae64d662160216bdd25fd08ff0db162faab808e38038269ab9599a810342930bbbb6636ee73a290498bdf88b3e8ba649f6e4e773c6e
@@ -1,5 +1,4 @@
1
1
  require_relative "../lib/LiquerY/CLI"
2
- require_relative "../lib/LiquerY/database"
3
2
  require_relative "../lib/LiquerY/drink"
4
3
  require_relative "../lib/LiquerY/DrinkAPI"
5
4
  require_relative "../lib/LiquerY/User"
@@ -0,0 +1,17 @@
1
+ class DrinkAPI
2
+ attr_reader :id_array
3
+ def initialize
4
+ data = open("https://www.thecocktaildb.com/api/json/v1/1/filter.php?c=Cocktail").read
5
+ doc = JSON.parse(data)
6
+ #key is ["drinks"] value is array of ingredients
7
+ @id_array = doc.first.last.each.with_object([]) do |id_hash, array|
8
+ array << id_hash["idDrink"]
9
+ end
10
+ end
11
+
12
+ def make_hash
13
+ self.id_array.each.with_object({}) do |id, drink_hash|
14
+ drink_hash[id] = JSON.parse(open("https://www.thecocktaildb.com/api/json/v1/1/lookup.php?i=#{id}").read).values.first[0]
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,58 @@
1
+ class User
2
+ attr_accessor :liked_drinks, :liked_ingredients, :disliked_drinks, :quiz_results, :okay_drinks, :great_drinks
3
+
4
+ @@all = []
5
+
6
+ def initialize
7
+ self.liked_drinks = []
8
+ self.liked_ingredients = []
9
+ self.disliked_drinks = []
10
+ @@all << self
11
+ end
12
+
13
+ def self.all
14
+ @@all
15
+ end
16
+
17
+ def self.current_user
18
+ @@all[-1]
19
+ end
20
+
21
+ def list_liked_drinks
22
+ puts "Drinks you like:".cyan
23
+ puts "\n\t#{self.print_list(self.liked_drinks.uniq)}".light_blue
24
+ puts "\nDrinks we've recommended:".cyan
25
+ puts "\n\t#{self.print_list(self.quiz_results)}".light_blue
26
+ end
27
+
28
+ def list_disliked_drinks
29
+ "Drinks you dislike: #{self.names(disliked_drinks)}."
30
+ end
31
+
32
+ def print_list(array)
33
+ array.each.with_object("") do |drink, string|
34
+ if array.size == 1
35
+ string << drink.strDrink
36
+ elsif array.size == 2 && drink == array[0]
37
+ string << "#{drink.strDrink} "
38
+ elsif drink == array[-1]
39
+ string << "and #{drink.strDrink}"
40
+ else
41
+ string << "#{drink.strDrink}, "
42
+ end
43
+ end
44
+ end
45
+
46
+ def names(drink_array)
47
+ drink_array.map {|drink| drink.strDrink}
48
+ end
49
+
50
+ def recent_choice
51
+ self.liked_drinks[-1]
52
+ end
53
+
54
+ def add_to_liked_ingredients
55
+ @liked_ingredients.concat((self.liked_drinks.map {|d| d.all_ingredients}).flatten.uniq)
56
+ end
57
+
58
+ end
@@ -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
@@ -0,0 +1,3 @@
1
+ module Liquery
2
+ VERSION = "0.8.8"
3
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: liquery
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.6
4
+ version: 0.8.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Johnson
@@ -119,6 +119,10 @@ files:
119
119
  - bin/liquery
120
120
  - config/environment.rb
121
121
  - lib/LiquerY/CLI.rb
122
+ - lib/LiquerY/DrinkAPI.rb
123
+ - lib/LiquerY/User.rb
124
+ - lib/LiquerY/drink.rb
125
+ - lib/LiquerY/version.rb
122
126
  - lib/liquery.rb
123
127
  homepage: https://github.com/aaj3f/LiquerY
124
128
  licenses: