require 'time_cop/option_parser' require 'highline' require 'active_support/core_ext/date_and_time/calculations' module TimeCop class Runner def self.invoke options_parser = OptionParser.new(ARGV) options = options_parser.parse interactive_hash = {} if (options[:interactive]) cli = HighLine.new username = cli.ask('Harvest Username: ') password = cli.ask('Harvest Password: ') { |q| q.echo = false } interactive_hash[:hours_per_week] = cli.ask('Hours per week? ') { |q| q.default = 32 }.to_i cli.choose do |menu| menu.prompt = 'Which Quarter? ' menu.choice(:Q1) { interactive_hash[:date] = Date.new(Date.today.year, 1, 1)} menu.choice(:Q2) { interactive_hash[:date] = Date.new(Date.today.year, 4, 1)} menu.choice(:Q3) { interactive_hash[:date] = Date.new(Date.today.year, 7, 1)} menu.choice(:Q4) { interactive_hash[:date] = Date.new(Date.today.year, 10, 1)} end end accountability_options = { username: (username.nil? ? options[:username] : username), password: (password.nil? ? options[:password] : password), email: options[:email] } accountability_options = interactive_hash.merge(accountability_options) accountability = Accountability.new( accountability_options ) accountability.print_report rescue Harvest::AuthenticationFailed puts 'Unable to authenticate to Harvest. Check username/password.' rescue Harvest::HTTPError => e puts 'Harvest API Error' puts e.to_s end end end