bnadlerjr/pester

View on GitHub
bin/pester

Summary

Maintainability
Test Coverage
#!/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