Sha256: 97f18aaedf4324517428afa25bac8a3e08dd17ee9ddf17f8d9c377d9863a8b72

Contents?: true

Size: 1.18 KB

Versions: 2

Compression:

Stored size: 1.18 KB

Contents

require 'nokogiri'
require 'open-uri'
require 'date'
# Author:   Lee Chen (mailto: chung1350@hotmail.com)
# License:  MIT
module CodeBadges
  # This class get the user account as an input
  # return a hash of user's badges information
  class CodecademyBadges
    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'

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

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

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

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

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

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
codebadges-0.1.1 lib/codebadges/badges.rb
codebadges-0.1.0 lib/codebadges/badges.rb