module Ghtrend

Constants

VERSION

Public Class Methods

trend() click to toggle source
# File lib/ghtrend.rb, line 6
def self.trend
  doc = Oga.parse_html(Net::HTTP.get URI.parse('https://github.com/trending'))
  doc.css('li.repo-list-item').map do |repo|
    {
      name: repo_name(repo),
      url: URI.join('https://github.com/', repo_path(repo)).to_s,
      description: repo_description(repo),
      meta: repo_meta(repo),
    }
  end
end

Private Class Methods

repo_description(node) click to toggle source
# File lib/ghtrend.rb, line 28
def self.repo_description(node)
  node.css('.repo-list-description').map { |e| trim(e.text) }.join(' ').force_encoding('UTF-8')
end
repo_meta(node) click to toggle source
# File lib/ghtrend.rb, line 32
def self.repo_meta(node)
  node.css('.repo-list-meta').text.split('•').map { |s| trim(s) }.slice(0, 2).join(', ')
end
repo_name(node) click to toggle source
# File lib/ghtrend.rb, line 20
def self.repo_name(node)
  node.css('.repo-list-name > a').map { |e| trim(e.text) }.join
end
repo_path(node) click to toggle source
# File lib/ghtrend.rb, line 24
def self.repo_path(node)
  node.at_css('.repo-list-name > a').get('href')
end
trim(s) click to toggle source
# File lib/ghtrend.rb, line 36
def self.trim(s)
  s.gsub(/\n[ ]*/, '').chomp
end