class Harvest::CredentialsManager

Constants

BASE_PATHNAME
CONFIG_FILENAME

Attributes

credentials[R]
current_project[R]

Public Class Methods

new(current_project) click to toggle source
# File lib/harvest/credentials_manager.rb, line 11
def initialize(current_project)
  @current_project = current_project
end

Public Instance Methods

read() click to toggle source
# File lib/harvest/credentials_manager.rb, line 65
def read
  return {} unless File.file?(credentials_path)

  credentials = File.read(credentials_path)
  return {} if credentials.nil?
  
  JSON.parse(credentials)
end
request() click to toggle source
# File lib/harvest/credentials_manager.rb, line 15
def request
  say "========== JIRA Integration =============", Thor::Shell::Color::GREEN
  say 'Fetch or create JIRA API credentials at https://id.atlassian.com/manage/api-tokens', Thor::Shell::Color::GREEN
  
  project_code = ask "Enter JIRA Project code (eg. ABC): ", Thor::Shell::Color::RED, :bold
  project_url = ask "Enter JIRA project Base URL (eg. https://XXXXXXX.atlassian.net): ", Thor::Shell::Color::RED, :bold
  email = ask "Enter JIRA email: ", Thor::Shell::Color::RED, :bold
  access_token = ask "Enter JIRA access token: ", Thor::Shell::Color::RED, :bolds
    
  say "========== Harvest Integration =============", Thor::Shell::Color::GREEN
  say 'Fetch or create Harvest API credentials at https://id.getharvest.com/developers', Thor::Shell::Color::GREEN
  
  account_id = ask "Enter Harvest Account ID: ", Thor::Shell::Color::RED, :bold
  harvest_access_token = ask "Enter Harvest Access Token: ", Thor::Shell::Color::RED, :bold
    
  harvest_config = {
    'access_token' => harvest_access_token,
    'account_id' => account_id
  }
  
  projects = Harvest::TimeLogger.new(harvest_config).projects
    
  selected_project = ask 'Select Project', limited_to: projects.collect { |x| x[:name] }
  project_id = projects.select {|x| x[:name] == selected_project }[0][:id]
    
  @credentials = {
    jira: {
      project_code: project_code,
      project_url: project_url,
      username: email,
      access_token: access_token
    },
    harvest: {
      account_id: account_id,
      project_id: project_id,
      access_token: harvest_access_token
    }
  }
end
save() click to toggle source
# File lib/harvest/credentials_manager.rb, line 55
def save
  dirname = File.join(Dir.home, BASE_PATHNAME)
  FileUtils.mkdir_p(dirname) unless File.directory?(dirname)
  
  current_credentials = self.read
  current_credentials[current_project] = credentials
  
  File.open(credentials_path, 'w+') { |f| f.write(current_credentials.to_json) }
end

Private Instance Methods

credentials_path() click to toggle source
# File lib/harvest/credentials_manager.rb, line 77
def credentials_path
  File.join(Dir.home, BASE_PATHNAME, CONFIG_FILENAME)
end