bin/pester
#!/usr/bin/env ruby
require "date"
require "dotenv"
require "logger"
require "optparse"
require_relative "../lib/pester"
Dotenv.load(File.expand_path("../../prod.env", __FILE__))
options = {}
opt_parser = OptionParser.new do |opt|
opt.banner = "Usage: pester [OPTIONS]"
opt.separator ""
opt.separator "Options:"
opt.on("-f", "--file FILENAME", "name of CSV file containing employee email addresses and phone numbers") do |filename|
options[:filename] = filename
end
opt.on("-h", "--help", "show help") do
puts opt
exit
end
end
begin
opt_parser.parse!
raise OptionParser::MissingArgument.new("--file") unless options[:filename]
raise "Unable to find employee file named #{options[:filename]}" unless File.exist?(options[:filename])
%w[FROM_PHONE TWILIO_ACCOUNT_SID TWILIO_AUTH_TOKEN HARVEST_SUBDOMAIN HARVEST_USERNAME HARVEST_PASSWORD].each do |env|
raise "#{env} has not been set" unless ENV[env]
end
Pester.adapters[:employees] = Pester::Adapters::EmployeeCsvMapper.new(options[:filename])
Pester.adapters[:log] = Logger.new(STDOUT)
Pester.adapters[:messages] = Pester::Adapters::Twilio.new(ENV["TWILIO_ACCOUNT_SID"], ENV["TWILIO_AUTH_TOKEN"])
Pester.adapters[:time_source] = Pester::Adapters::Harvest.new(ENV["HARVEST_SUBDOMAIN"], ENV["HARVEST_USERNAME"], ENV["HARVEST_PASSWORD"])
Pester::SendMessage.call(Date.today)
rescue OptionParser::InvalidOption, OptionParser::MissingArgument
puts $!.to_s
puts ""
puts opt_parser
exit
end