class Octokom::Client

Constants

KEY
URL

Attributes

token[R]

Public Class Methods

authenticate() click to toggle source
# File lib/octokom/client.rb, line 13
def self.authenticate
  new.authenticate
end

Public Instance Methods

authenticate() click to toggle source

Use the existing credentials form the ~/.netrc file to verify API requests to GitHub. When no credentials exist, ask for login and password to request a new token from GitHub.

# File lib/octokom/client.rb, line 20
def authenticate
  _, @token = netrc[KEY]

  unless token
    login, password = ask_for_credentials
    create_authorization(login, password)
  end

  self
end
client() click to toggle source
# File lib/octokom/client.rb, line 31
def client
  require 'octokit'
  Octokit::Client.new(access_token: token)
end

Private Instance Methods

api_note() click to toggle source
# File lib/octokom/client.rb, line 91
def api_note
  "Octokom #{hostname}@#{Time.now.usec}"
end
ask_for_credentials() click to toggle source
# File lib/octokom/client.rb, line 54
def ask_for_credentials
  login = ask_for_login
  password = ask_for_password
  puts # newline
  [login, password]
end
ask_for_login() click to toggle source
# File lib/octokom/client.rb, line 61
def ask_for_login
  print 'GitHub Login: '
  STDIN.gets.chomp
end
ask_for_password() click to toggle source
# File lib/octokom/client.rb, line 66
def ask_for_password
  print 'Password: '
  STDIN.noecho(&:gets).chomp
end
create_authorization(login, password) click to toggle source
# File lib/octokom/client.rb, line 71
def create_authorization(login, password)
  require 'octokit'

  begin
    client = Octokit::Client.new(login: login, password: password)
    auth   = client.create_authorization(scopes: ['repo'], note: api_note, note_url: URL)
  rescue Octokit::Unauthorized
    puts "Unable to authorise user @#{login}"
    exit(1)
  end

  @token = auth.token
  save_token_to_netrc(login)
end
data() click to toggle source
# File lib/octokom/client.rb, line 46
def data
  @data ||= Netrc.parse(Netrc.lex(file.each_line.to_a))
end
file() click to toggle source
# File lib/octokom/client.rb, line 42
def file
  @file ||= File.open(path, File::RDWR|File::CREAT, 0600)
end
hostname() click to toggle source
# File lib/octokom/client.rb, line 95
def hostname
  `hostname`.chomp
end
netrc() click to toggle source
# File lib/octokom/client.rb, line 50
def netrc
  @netrc ||= Netrc.new(path, data)
end
path() click to toggle source
# File lib/octokom/client.rb, line 38
def path
  @path ||= Netrc.default_path
end
save_token_to_netrc(login) click to toggle source
# File lib/octokom/client.rb, line 86
def save_token_to_netrc(login)
  netrc[KEY] = login, @token
  netrc.save
end