Class: CodeBadges::CodecademyBadges

Inherits:
Object
  • Object
show all
Defined in:
lib/codebadges/badges.rb

Overview

This class get the user account as an input return a hash of user’s badges information

Constant Summary collapse

TITLE_XPATH =
"//div[@class = 'grid-row']//h5[@class = 'margin-top--1']"
DATE_XPATH =
"//small[@class = 'text--ellipsis']"
USERS_URL =
'http://www.codecademy.com/users'
ACHIEVEMENTS_DIR =
'achievements'

Class Method Summary collapse

Class Method Details

.get_badges(username) ⇒ Object



15
16
17
18
19
20
# File 'lib/codebadges/badges.rb', line 15

def self.get_badges(username)
  doc = get_html(username)
  titles = get_titles(doc)
  dates = get_dates(doc)
  integrate(titles, dates)
end

.get_dates(document) ⇒ Object



32
33
34
35
# File 'lib/codebadges/badges.rb', line 32

def self.get_dates(document)
  dates = document.xpath(DATE_XPATH)
  dates.map { |d| Date.parse(d) }
end

.get_html(username) ⇒ Object



22
23
24
25
# File 'lib/codebadges/badges.rb', line 22

def self.get_html(username)
  url = "#{USERS_URL}/#{username}/#{ACHIEVEMENTS_DIR}"
  Nokogiri::HTML(open(url))
end

.get_titles(document) ⇒ Object



27
28
29
30
# File 'lib/codebadges/badges.rb', line 27

def self.get_titles(document)
  titles = document.xpath(TITLE_XPATH)
  titles.map { |t| t.text }
end

.integrate(titles, dates) ⇒ Object



37
38
39
40
41
42
# File 'lib/codebadges/badges.rb', line 37

def self.integrate(titles, dates)
  badge_array = titles.each_with_index.map do |_, index|
    [titles[index], dates[index]]
  end
  Hash[badge_array]
end