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
2 changes: 2 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,5 @@ gem "sinatra-activerecord", "~> 2.0"
gem "rake", "~> 13.0"
gem "sqlite3", "~> 1.4"
gem "require_all", "~> 3.0"
gem 'tty-prompt'
gem 'tty-progressbar'
28 changes: 27 additions & 1 deletion Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,16 @@ GEM
zeitwerk (~> 2.2)
coderay (1.1.2)
concurrent-ruby (1.1.5)
equatable (0.6.1)
i18n (1.7.0)
concurrent-ruby (~> 1.0)
method_source (0.9.2)
minitest (5.13.0)
mustermann (1.0.3)
necromancer (0.5.1)
pastel (0.7.4)
equatable (~> 0.6)
tty-color (~> 0.5)
pry (0.12.2)
coderay (~> 1.1.0)
method_source (~> 0.9.0)
Expand All @@ -36,10 +41,29 @@ GEM
activerecord (>= 3.2)
sinatra (>= 1.0)
sqlite3 (1.4.1)
strings-ansi (0.1.0)
thread_safe (0.3.6)
tilt (2.0.10)
tty-color (0.5.1)
tty-cursor (0.7.1)
tty-progressbar (0.17.0)
strings-ansi (~> 0.1.0)
tty-cursor (~> 0.7)
tty-screen (~> 0.7)
unicode-display_width (~> 1.6)
tty-prompt (0.21.0)
necromancer (~> 0.5.0)
pastel (~> 0.7.0)
tty-reader (~> 0.7.0)
tty-reader (0.7.0)
tty-cursor (~> 0.7)
tty-screen (~> 0.7)
wisper (~> 2.0.0)
tty-screen (0.8.0)
tzinfo (1.2.5)
thread_safe (~> 0.1)
unicode-display_width (1.7.0)
wisper (2.0.1)
zeitwerk (2.2.2)

PLATFORMS
Expand All @@ -52,6 +76,8 @@ DEPENDENCIES
require_all (~> 3.0)
sinatra-activerecord (~> 2.0)
sqlite3 (~> 1.4)
tty-progressbar
tty-prompt

BUNDLED WITH
2.0.2
2.1.4
7 changes: 6 additions & 1 deletion Rakefile
Original file line number Diff line number Diff line change
@@ -1,2 +1,7 @@
require_relative 'config/environment'
require 'sinatra/activerecord/rake'
require 'sinatra/activerecord/rake'

desc "start console"
task :console do
Pry.start
end
2 changes: 1 addition & 1 deletion config/database.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
development:
adapter: sqlite3
database: db/cats.sqlite3
database: db/GitFit_db.sqlite3
5 changes: 4 additions & 1 deletion config/environment.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
require 'bundler/setup'
Bundler.require

require_all 'lib'
require 'active_record'
require_all 'lib'
require_relative '../db/seeds'
ActiveRecord::Base.logger = nil
9 changes: 9 additions & 0 deletions db/migrate/001_create_members.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
class CreateMembers < ActiveRecord::Migration[6.0]

def change
create_table :members do |t|
t.string :name
t.string :goal
end
end
end
9 changes: 9 additions & 0 deletions db/migrate/002_create_gym_sessions.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
class CreateGymSessions < ActiveRecord::Migration[6.0]

def change
create_table :gym_sessions do |t|
t.references :member
t.references :workout
end
end
end
8 changes: 8 additions & 0 deletions db/migrate/003_create_workouts.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
class CreateWorkouts < ActiveRecord::Migration[6.0]

def change
create_table :workouts do |t|
t.string :body_part
end
end
end
31 changes: 31 additions & 0 deletions db/schema.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# 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 `rails
# db:schema:load`. When creating a new database, `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: 3) do

create_table "gym_sessions", force: :cascade do |t|
t.integer "member_id"
t.integer "workout_id"
t.index ["member_id"], name: "index_gym_sessions_on_member_id"
t.index ["workout_id"], name: "index_gym_sessions_on_workout_id"
end

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

create_table "workouts", force: :cascade do |t|
t.string "body_part"
end

end
27 changes: 27 additions & 0 deletions db/seeds.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Workout.destroy_all
# Member.destroy_all
# GymSession.destroy_all

# michael = Member.create(:name=>"Michael", :goal=>"strength")
# derek = Member.create(:name=>"Derek", :goal=>"Weight Loss")
# gordo = Member.create(:name=>"Gordo", :goal=>"strength")

# chest_workout = Workout.create(:body_part=>"Chest")
# back_workout = Workout.create(:body_part=>"back")
# arms_workout = Workout.create(:body_part=>"arms")

# session1 = GymSession.create()
# session2 = GymSession.create()
# session3 = GymSession.create()

# session1.member = michael
# session2.member = derek
# session3.member = gordo

# michael.gym_sessions << session1
# gordo.gym_sessions << session3
# derek.gym_sessions << session2

# chest_workout.gym_sessions << session1
# back_workout.gym_sessions << session2
# arms_workout.gym_sessions << session3
62 changes: 62 additions & 0 deletions lib/models/cli.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
require 'tty-prompt'
class Cli

$prompt = TTY::Prompt.new

def welcome
puts "Welcome to GitFit, your personal workout generator!"
end

def new_member
Member.create_new
end

def see_member_profile
Member.see_member_profile
end

def sign_in
Member.sign_in
end

def end_app
puts "See you next time!"
end

def workout
bar = TTY::ProgressBar.new("Work out in progress [:bar]", total: 30)
30.times do
sleep(0.1)
bar.advance(1)
end
puts "Great job! You finished your workout."
end

def main_menu
main_menu = $prompt.select("Main Menu") do |menu|
menu.choice 'Build new profile'
menu.choice 'See member profile'
menu.choice 'Select your workout'
menu.choice 'Exit GitFit'
end
main_menu
end




def select_type_of_workout member
answer = $prompt.select("Choose your workout") do |menu|
menu.choice 'Full Body'
menu.choice 'Chest'
menu.choice 'Back'
menu.choice 'Legs'
menu.choice 'Arms'
end
puts "You have selected a #{answer} workout."
new_session = GymSession.create()
new_workout = Workout.find_or_create_by(:body_part=>answer)
new_workout.gym_sessions << new_session
member.gym_sessions << new_session
end
end
4 changes: 4 additions & 0 deletions lib/models/gym_session.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
class GymSession < ActiveRecord::Base
belongs_to :member
belongs_to :workout
end
45 changes: 45 additions & 0 deletions lib/models/member.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
require 'pry'
require 'tty-prompt'

class Member < ActiveRecord::Base
$prompt = TTY::Prompt.new
has_many :gym_sessions
has_many :workouts, through: :gym_sessions

def self.create_new
puts "What is your name"
name = gets.chomp
goal = $prompt.select("What is your goal") do |menu|
menu.choice 'I want to lose weight'
menu.choice 'I want to gain strength'
end
new_member = Member.create(:name=>name, :goal=>goal)
puts "Nice to meet you #{name}! GitFit is here to help you #{goal.remove("I want to ")}!"
puts "Please note your member ID: #{new_member.id}. You will need it to view your profile and log workouts later!"
end

def self.see_member_profile
member = self.sign_in
puts "Name: #{member[:name]}"
puts "Goal: #{member[:goal]}"
puts "Workouts completed: #{self.get_user_workouts member}"
end

def self.sign_in
puts "Please enter your member ID"
member_id = gets.chomp
found_member = self.find_by id: member_id
found_member
end

def self.get_user_workouts member
workout_array = member.workouts.map do |workout|
workout.body_part
end
hash = {}
workout_array.each do |value|
hash[value] ? hash[value] += 1 : hash[value] = 1
end
hash
end
end
5 changes: 5 additions & 0 deletions lib/models/workout.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class Workout < ActiveRecord::Base
has_many :gym_sessions
has_many :members, through: :gym_sessions

end
23 changes: 20 additions & 3 deletions runner.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,23 @@
require_relative 'config/environment'
require 'pry'
require 'tty-prompt'

Cli.new.start_game


app = Cli.new
app.welcome
loop do
case app.main_menu
when 'Build new profile'
app.new_member
when 'Select your workout'
app.select_type_of_workout app.sign_in
app.workout
when 'See member profile'
app.see_member_profile
when 'Exit GitFit'
app.end_app
break
end
end

# binding.pry
# 0