class Trendhub::Repositories

Constants

InvalidLanguage

Public Instance Methods

fetch(time_range, language = nil) click to toggle source
# File lib/trendhub/repositories.rb, line 12
def fetch(time_range, language = nil)
  validate_language(language)

  response = HTTP.get("https://github.com/trending/#{language}?since=#{time_range}")
  doc = Oga.parse_xml(response.to_s)
  doc.css(".repo-list li").map do |repo_doc|
    repo_link = repo_doc.at_css("div h3 a")
    repo_name = repo_link.text.strip
    repo_path = repo_link.attr('href').value
    repo_url = "https://github.com#{repo_path}"
    repo_desc = repo_doc.at_css("div p").text.strip
    repo_info = repo_doc.css("div")[3]
    repo_language = repo_info.at_css("span[itemprop='programmingLanguage']")&.text&.strip
    repo_stars = repo_info.at_css("a[href='#{repo_path}/stargazers']").text.strip
    repo_forks = repo_info.at_css("a[href='#{repo_path}/network']").text.strip
    repo_added_stars = repo_info.css("svg.octicon-star").last.parent.text.gsub(/[^\d,]/, '')

    Trendhub::Repository.new(
      name: repo_name,
      url: repo_url,
      desc: repo_desc,
      language: repo_language,
      added_stars: repo_added_stars,
      forks: repo_forks,
      stars: repo_stars,
      time_range: time_range
    )
  end
end

Private Instance Methods

languages() click to toggle source
# File lib/trendhub/repositories.rb, line 48
def languages
  @languages ||= Trendhub::Language.new.all
end
validate_language(language) click to toggle source
# File lib/trendhub/repositories.rb, line 44
def validate_language(language)
  raise InvalidLanguage if language && language == "developers"
end