module Linodians

Module for parsing Linode employee info

Define the version

Constants

DATA_URL
PHOTO_URL
VERSION

Public Class Methods

load_data(data = nil) click to toggle source
# File lib/linodians.rb, line 19
def load_data(data = nil)
  (data || download_data).map { |x| Employee.new x }
end
new(*args) click to toggle source

Insert a helper .new() method for creating a new Group object

# File lib/linodians.rb, line 15
def new(*args)
  self::Group.new(*args)
end

Private Class Methods

download_data() click to toggle source
# File lib/linodians.rb, line 25
def download_data
  raw_data.map do |username, block|
    parse_user(username, block).merge parse_social(block)
  end
end
parse_class(text) click to toggle source
# File lib/linodians.rb, line 58
def parse_class(text)
  text.split.last.split('-').last.to_sym
end
parse_handle(type, link) click to toggle source
# File lib/linodians.rb, line 62
def parse_handle(type, link)
  return link if type == :linkedin
  link.split('/').last
end
parse_social(block) click to toggle source
# File lib/linodians.rb, line 48
def parse_social(block)
  links = block.css('a.employee-link').map do |link|
    # Social site name from CSS class, link target
    [parse_class(link[:class]), link['href']]
  end
  links = Hash[links]
  links.each { |k, v| links[k] = parse_handle(k, v) }
  links.merge(social: links.keys)
end
parse_user(username, block) click to toggle source
# File lib/linodians.rb, line 40
def parse_user(username, block)
  {
    username: username,
    fullname: block.at_css('strong').text,
    title: block.at_css('small').text
  }
end
raw_data() click to toggle source
# File lib/linodians.rb, line 31
def raw_data
  page = open(DATA_URL) # rubocop:disable Security/Open
  Nokogiri::HTML(page).css('div').map do |block|
    internal_block = block.at_xpath('div/div[@class="employee-display"]')
    next unless internal_block
    [block[:id], internal_block]
  end.compact
end