class Fingerer::Server

Public Class Methods

start(options = {}) click to toggle source
# File lib/fingerer.rb, line 12
def self.start(options = {})
  options[:listen] ||= '0.0.0.0'
  options[:port] ||= 79

  Debug.info("Booting Fingerer")

  server = ::TCPServer.new(options[:listen], options[:port])

  Debug.info("Listening on tcp://#{options[:listen]}:#{options[:port]}");
  Debug.info("Ctrl-C to shutdown server\n");

  loop do
    Thread.start(server.accept) do |client|
      # start timer
      start_time = Time.now
      remote_ip = client.peeraddr[-1]
      username = client.gets.strip

      Debug.info("Started request for \"#{username}\" from #{remote_ip}")

      begin
        user = ::Octokit.user(username)

        client.puts(response(user))
      rescue Octokit::NotFound
        client.puts("No such user \"#{username}\"")
      rescue => e
        client.puts("Something went wrong")
        Debug.error(e.message)
      end

      client.close

      # end timer
      end_time = Time.now

      Debug.info("Completed request for \"#{username}\" from #{remote_ip} in #{(end_time.to_ms - start_time.to_ms)}ms")
    end
  end
end

Private Class Methods

biography(user) click to toggle source
# File lib/fingerer.rb, line 102
                     def self.biography(user)
  response = []

  if user.bio
    response << Table.header("Biography")
    response << Table.row("")

    user.bio.scan(/\S.{0,72}\S(?=\s|$)|\S+/).each do |line|
      response << Table.row(line)
    end

    response << Table.row("")
  end

  response << Table.line

  response.join("\n")
end
info(user) click to toggle source
# File lib/fingerer.rb, line 70
                     def self.info(user)
  response = []

  if user.type == 'User'
    response << Table.header("User")
  else
    response << Table.header("Organization")
  end

  response << Table.row("")
  response << Table.row("Username: #{user.login}", "Full Name: #{user.name}")
  response << Table.row("Website: #{user.blog}", "Email: #{user.email}") if user.blog || user.email
  response << Table.row("Location: #{user.location}") if user.location
  response << Table.row("")

  response.join("\n")
  response
end
response(user) click to toggle source
# File lib/fingerer.rb, line 53
                     def self.response(user)
  response = []

  info = info(user)
  stats = stats(user)
  biography = biography(user)

  response << ""
  response << info unless info.empty?
  response << stats unless stats.empty?
  response << biography unless biography.empty?
  response << ""
  response << "Member since #{user.created_at.strftime("%c")}"

  response.join("\n")
end
stats(user) click to toggle source
# File lib/fingerer.rb, line 89
                     def self.stats(user)
  response = []

  if user.type == 'User'
    response << Table.header("Stats")
    response << Table.row("")
    response << Table.row("Followers: #{user.followers}", "Following: #{user.following}", "Repositories: #{user.public_repos}")
    response << Table.row("")
  end

  response.join("\n")
end