Class: Trendhub::Repositories

Inherits:
Object
  • Object
show all
Defined in:
lib/trendhub/repositories.rb

Constant Summary collapse

InvalidLanguage =
Class.new(StandardError)

Instance Method Summary collapse

Instance Method Details

#fetch(time_range, language = nil) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 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