Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
source "https://rubygems.org"

gem "sinatra-activerecord"
gem "sqlite3"
gem "sqlite3", "~> 1.4.0"
gem "pry"
gem "require_all"
gem "rest-client"
87 changes: 52 additions & 35 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,56 +1,73 @@
GEM
remote: https://rubygems.org/
specs:
activemodel (6.0.3.1)
activesupport (= 6.0.3.1)
activerecord (6.0.3.1)
activemodel (= 6.0.3.1)
activesupport (= 6.0.3.1)
activesupport (6.0.3.1)
activemodel (6.1.1)
activesupport (= 6.1.1)
activerecord (6.1.1)
activemodel (= 6.1.1)
activesupport (= 6.1.1)
activesupport (6.1.1)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
minitest (~> 5.1)
tzinfo (~> 1.1)
zeitwerk (~> 2.2, >= 2.2.2)
coderay (1.1.1)
concurrent-ruby (1.1.6)
i18n (1.8.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
zeitwerk (~> 2.3)
coderay (1.1.3)
concurrent-ruby (1.1.8)
domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0)
http-accept (1.7.0)
http-cookie (1.0.3)
domain_name (~> 0.5)
i18n (1.8.7)
concurrent-ruby (~> 1.0)
method_source (0.8.2)
minitest (5.14.1)
mustermann (1.0.3)
pry (0.10.4)
coderay (~> 1.1.0)
method_source (~> 0.8.1)
slop (~> 3.4)
method_source (1.0.0)
mime-types (3.3.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2020.1104)
minitest (5.14.3)
mustermann (1.1.1)
ruby2_keywords (~> 0.0.1)
netrc (0.11.0)
pry (0.13.1)
coderay (~> 1.1)
method_source (~> 1.0)
rack (2.2.3)
rack-protection (2.0.7)
rack-protection (2.1.0)
rack
require_all (1.3.3)
sinatra (2.0.7)
require_all (3.0.0)
rest-client (2.1.0)
http-accept (>= 1.7.0, < 2.0)
http-cookie (>= 1.0.2, < 2.0)
mime-types (>= 1.16, < 4.0)
netrc (~> 0.8)
ruby2_keywords (0.0.4)
sinatra (2.1.0)
mustermann (~> 1.0)
rack (~> 2.0)
rack-protection (= 2.0.7)
rack (~> 2.2)
rack-protection (= 2.1.0)
tilt (~> 2.0)
sinatra-activerecord (2.0.12)
activerecord (>= 3.2)
sinatra-activerecord (2.0.22)
activerecord (>= 4.1)
sinatra (>= 1.0)
slop (3.6.0)
sqlite3 (1.3.13)
thread_safe (0.3.6)
sqlite3 (1.4.2)
tilt (2.0.10)
tzinfo (1.2.7)
thread_safe (~> 0.1)
zeitwerk (2.3.0)
tzinfo (2.0.4)
concurrent-ruby (~> 1.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.7.7)
zeitwerk (2.4.2)

PLATFORMS
ruby

DEPENDENCIES
pry
require_all
rest-client
sinatra-activerecord
sqlite3
sqlite3 (~> 1.4.0)

BUNDLED WITH
1.14.6
2.2.3
12 changes: 12 additions & 0 deletions app/models/ingredient.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
class Ingredient < ActiveRecord::Base
has_many :recipes

def self.add__or_create_ingredient(ingredient)
if Ingredient.all.find{|i| i.name == ingredient}
else
Ingredient.create(name: ingredient)
end
Ingredient.all.find{|i| i.name == ingredient}
end

end
12 changes: 12 additions & 0 deletions app/models/ingredient_recipe.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
class IngredientRecipe < ActiveRecord::Base
belongs_to :ingredient
belongs_to :recipe

def self.find_or_create_ingredient_recipe(recipe_id, ingredient_id)
if IngredientRecipe.all.find {|ir| ir.recipe_id == recipe_id && ir.ingredient_id == ingredient_id}
else
IngredientRecipe.create(recipe_id: recipe_id, ingredient_id: ingredient_id)
end
IngredientRecipe.all.find {|ir| ir.recipe_id == recipe_id && ir.ingredient_id == ingredient_id}
end
end
13 changes: 13 additions & 0 deletions app/models/recipe.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
class Recipe < ActiveRecord::Base
has_many :ingredients, through: :ingredient_recipes
has_many :users, through: :user_recipes

def self.find_or_create_recipe(name, instructions)
if Recipe.all.find{|r| r.name == name}
else
Recipe.create(name: name, instructions: instructions)
end
Recipe.all.find{|r| r.name == name}
end
end

5 changes: 5 additions & 0 deletions app/models/user.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class User < ActiveRecord::Base
has_many :recipes
has_many :ingredients, through: :recipes

end
4 changes: 4 additions & 0 deletions app/models/user_recipe.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
class UserRecipe < ActiveRecord::Base
belongs_to :user
belongs_to :recipe
end
38 changes: 38 additions & 0 deletions bin/api_parsing.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
require_relative '../config/environment'
require 'rest-client'
require 'json'
require 'pry'


def get_data(name)


url = "https://www.thecocktaildb.com/api/json/v1/1/search.php?s=#{name}"
response = RestClient.get(url)
result = JSON.parse(response)

while result["drinks"] == nil
puts "Drink not found. Please input another recipe name."
name = gets.chomp
url = "https://www.thecocktaildb.com/api/json/v1/1/search.php?s=#{name}"
response = RestClient.get(url)
result = JSON.parse(response)
end

drink_name = result["drinks"][0]["strDrink"]
drink_instructions = result["drinks"][0]["strInstructions"]
current_ingr_num = 1
current_recipe = Recipe.find_or_create_recipe(drink_name, drink_instructions)

while result["drinks"][0]["strIngredient#{current_ingr_num}"]
current_ingredient = Ingredient.add__or_create_ingredient(result["drinks"][0]["strIngredient#{current_ingr_num}"])
IngredientRecipe.find_or_create_ingredient_recipe(current_recipe.id, current_ingredient.id)
current_ingr_num += 1
end





end

33 changes: 32 additions & 1 deletion bin/run.rb
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,5 +1,36 @@
require_relative '../config/environment'
require_relative 'api_parsing'



puts "Welcome to the Cocktail Recipe Interface"
puts "Please enter your username"
user_name = gets.chomp #call find_or_create_by_name method in user.rb
puts "What would you like to do?"
puts "1. Find a random recipe by ingredient"
#call suggest_random_recipe using find_recipe_by_ingredient method and then
#picking a random array element in recipe.rb
#be sure to prompt_user_for_rating
puts "2. Show my favorite recipes"
#traverse through user_recipe table to find highest ratings and return as an array
puts "3. Suggest a new recipe"
#traverse through recipes and spit out random one
#be sure to prompt_user_for_rating
puts "4. Look up a recipe by recipe name"

puts "HELLO WORLD"
#call find_recipe_by_name
puts "5. List all recipes with a certain ingredient"
#call find_recipe_by_ingredient method and return an array of choices
puts "6. Import a recipe from the database"
choice = gets.chomp
choice = choice.to_i
if choice == 6
puts "Enter the recipe name you are looking for"
name = gets.chomp
get_data(name)
end
#if choice == 1 do blah blah blah etc.

#make method prompt_user_for_rating which will ask for a rating
#then store it with the recipe in the user_recipe table
#make method update_rating ?
2 changes: 1 addition & 1 deletion config/environment.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
Bundler.require

ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: 'db/development.db')
require_all 'lib'
require_all 'app'
8 changes: 8 additions & 0 deletions db/migrate/001_create_recipes.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
class CreateRecipes < ActiveRecord::Migration[5.1]
def change
create_table :recipes do |t|
t.string :name
t.text :instructions
end
end
end
8 changes: 8 additions & 0 deletions db/migrate/002_create_ingredients.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
class CreateIngredients < ActiveRecord::Migration[5.1]
def change
create_table :ingredients do |t|
t.string :name
t.string :type
end
end
end
7 changes: 7 additions & 0 deletions db/migrate/003_create_users.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
class CreateUsers < ActiveRecord::Migration[5.1]
def change
create_table :users do |t|
t.string :name
end
end
end
8 changes: 8 additions & 0 deletions db/migrate/004_create_ingredient_recipes.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
class CreateIngredientRecipes < ActiveRecord::Migration[5.1]
def change
create_table :ingredient_recipes do |t|
t.integer :ingredient_id
t.integer :recipe_id
end
end
end
9 changes: 9 additions & 0 deletions db/migrate/005_create_user_recipes.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
class CreateUserRecipes < ActiveRecord::Migration[5.1]
def change
create_table :user_recipes do |t|
t.integer :user_id
t.integer :recipe_id
t.integer :rating
end
end
end
40 changes: 40 additions & 0 deletions db/schema.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# This file is auto-generated from the current state of the database. Instead
# of editing this file, please use the migrations feature of Active Record to
# incrementally modify your database, and then regenerate this schema definition.
#
# This file is the source Rails uses to define your schema when running `bin/rails
# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
# be faster and is potentially less error prone than running all of your
# migrations from scratch. Old migrations may fail to apply correctly if those
# migrations use external dependencies or application code.
#
# It's strongly recommended that you check this file into your version control system.

ActiveRecord::Schema.define(version: 5) do

create_table "ingredient_recipes", force: :cascade do |t|
t.integer "ingredient_id"
t.integer "recipe_id"
end

create_table "ingredients", force: :cascade do |t|
t.string "name"
t.string "type"
end

create_table "recipes", force: :cascade do |t|
t.string "name"
t.text "instructions"
end

create_table "user_recipes", force: :cascade do |t|
t.integer "user_id"
t.integer "recipe_id"
t.integer "rating"
end

create_table "users", force: :cascade do |t|
t.string "name"
end

end