class AppController
Public Class Methods
add_activity(user)
click to toggle source
# File lib/AppController.rb, line 102 def self.add_activity(user) prompt = TTY::Prompt.new type = prompt.select("Select Activity: ", %w(run bike swim walk/hike)) begin puts "Distance(kms): " distance = gets.chomp.to_f raise "Invalid Input" if distance == 0.0 rescue RuntimeError puts "Please enter a number" retry end begin puts "Duration(mins): " duration = gets.chomp.to_i raise "Invalid Input" if duration == 0 rescue RuntimeError puts "Please enter a number" retry end begin puts "Date: (today or yyyy-mm-dd)" date = gets.chomp if date != "today" Date.parse(date) end rescue Date::Error puts "Invalid date" retry end if date.downcase == "today" date = Date.today.to_s end Model.add_activity(user, type, distance, duration, date) end
check_completed(user)
click to toggle source
# File lib/AppController.rb, line 89 def self.check_completed(user) activities = self.get_activities_by_date(user) activity = self.select_activity(user, activities) activity.completed = true Model.update_activities(user) end
check_user(user_name)
click to toggle source
run at start of program to check if new user either create a file for new user or get activities for returning user
# File lib/AppController.rb, line 12 def self.check_user(user_name) if File.exist?("users/#{user_name}.csv") Model.get_activities(user_name) self.menu(user_name) else Model.add_user(user_name) self.menu(user_name) end end
delete_activity(user)
click to toggle source
# File lib/AppController.rb, line 96 def self.delete_activity(user) activities = self.get_activities_by_date(user) activity = self.select_activity(user, activities) Model.delete_activity(user, activity) end
get_activities_by_date(user)
click to toggle source
looks up activities based on user input date returns an array of activities that match date
# File lib/AppController.rb, line 47 def self.get_activities_by_date(user) begin puts "Activity date: (today or yyyy-mm-dd): " date = gets.chomp if date == "today" date = Date.today.to_s else # run to test for invalid dates Date.parse(date) end activities = Model.search_activities(user, date) raise "No activities on that date" if activities.length == 0 || is_in_future?(date) rescue Date::Error, RuntimeError puts "Invalid date" self.menu(user) end return activities end
get_stats(user)
click to toggle source
# File lib/AppController.rb, line 137 def self.get_stats(user) prompt = TTY::Prompt.new month = prompt.select("Choose an month: ", %w(All January February March April May June July August September October November December)) prompt = TTY::Prompt.new type = prompt.select("Select Activity: ", %w(run bike swim walk/hike)) totals = Model.calculate_totals(user, type, month) records = Model.find_longest(user, type, month) Display.display_records(records[0], records[1]) Display.display_totals(totals[0], totals[1]) end
select_activity(user, activities)
click to toggle source
takes array of activities and generates a drop down menu used for selecting activities to check completed or to delete returns users chosen activity
# File lib/AppController.rb, line 69 def self.select_activity(user, activities) prompt = TTY::Prompt.new options = %w(go-back) activities.each do |activity| options << "#{activity.type}-#{activity.distance}-#{activity.duration}-#{activity.date}" end selected_activity = prompt.select("Select Activity: ", options) if selected_activity == 'go-back' self.menu(user) end # iterates over array of activities, converts to string for comparison with user selection activities.each do |activity| activity_string = "#{activity.type}-#{activity.distance}-#{activity.duration}-#{activity.date}" if activity_string == selected_activity return activity end end end