class Monotes::CLI::Application

Public Instance Methods

create(repository_name, title) click to toggle source
# File lib/monotes/cli/application.rb, line 73
def create(repository_name, title)
  text = Monotes::BodyText.new(title)
  issue = text.create_issue
  repository = Monotes::IssueRepository.build(repository: repository_name)
  repository.append(issue)
end
download(repository) click to toggle source
# File lib/monotes/cli/application.rb, line 47
def download(repository)
  STDOUT.puts "Downloading issues for #{repository}..."
  downloader = Monotes::IssueDownload.new(Octokit)
  begin
    issues = downloader.download(repository)
  rescue Exception => exc
    fatal!(exc)
  end
  repository = Monotes::IssueRepository.build(repository: repository)
  repository.save(issues)
end
login() click to toggle source
# File lib/monotes/cli/application.rb, line 19
def login
  print "Username > "
  username = STDIN.gets.chomp
  validate!("username", username)
  print "Password > "
  password = STDIN.noecho(&:gets).chomp
  validate!("password", password)
  STDOUT.puts "\n"
  authenticator = Monotes::Authenticator.new(Octokit::Client)
  begin
    oauth_token = authenticator.get_oauth_token(username, password) do
      print "Two-Factor token > "
      token = STDIN.gets.chomp
      validate!("Two-Factor token", token)
      token
    end
  rescue Octokit::Unauthorized => unauthorized
    STDERR.puts "Unauthorized: #{unauthorized.message}"
    exit 77
  rescue Exception => e
    fatal!(e)

  else
    write_to_netrc(username, oauth_token.token)
  end
end
show(repository_name) click to toggle source
# File lib/monotes/cli/application.rb, line 60
def show(repository_name)
  repository = Monotes::IssueRepository.build(repository: repository_name)
  issues = repository.load
  issues.map do |issue|
    if issue.unsynced?
      STDOUT.puts "(new) - #{issue.title}"
    else
      STDOUT.puts "#{issue.number} - #{issue.title}"
    end
  end
end
sync(repository_name) click to toggle source
# File lib/monotes/cli/application.rb, line 81
def sync(repository_name)
  repository = Monotes::IssueRepository.build(repository: repository_name)
  issues = repository.load
  already_synced = issues.reject { |i| i.unsynced? }
  adapter = Octokit::Client.new(netrc: true)
  begin
    sync_list = Monotes::SyncList.new(list: issues, repo: repository_name, adapter: adapter)
    synced = sync_list.sync do |issue|
      STDOUT.puts "Synced issue #{issue.title}"
    end
  rescue Exception => exc
    fatal!(exc)
  end
  repository.save(already_synced.concat(synced))
end

Private Instance Methods

fatal!(exc) click to toggle source
# File lib/monotes/cli/application.rb, line 99
def fatal!(exc)
  STDERR.puts "FATAL: #{exc.message}"
  exit 74
end
split_repository_identifier(repo) click to toggle source
# File lib/monotes/cli/application.rb, line 111
def split_repository_identifier(repo)
  repo.split('/')
end
validate!(name, param) click to toggle source
# File lib/monotes/cli/application.rb, line 104
def validate!(name, param)
  if param.nil? || param.empty?
    STDERR.puts "Fatal: #{name} cannot be empty"
    exit 74
  end
end
write_to_netrc(username, token) click to toggle source
# File lib/monotes/cli/application.rb, line 115
def write_to_netrc(username, token)
  netrc_handle = Netrc.read
  netrc_handle["api.github.com"] = username, token
  netrc_handle.save
end