class Gh::Trending::Parsers::DevelopersParser
Parses the trending developers page
Constants
- ANCHOR_WITH_HOT_REPOSITORY
- LIST_WITH_DEVS_NODES_HTML_CLASS
- REGEXP_FOR_FULLNAME
- SPAN_WITH_FULL_NAME
Public Instance Methods
parse(parser_args)
click to toggle source
# File lib/gh_trending/parsers/developers_parser.rb, line 11 def parse(parser_args) url = build_request_url_with(parser_args) page = agent.get(url) parsed_page = page.at(LIST_WITH_DEVS_NODES_HTML_CLASS) if parsed_page.nil? changed_page = :front_page_with_devs raise Gh::Trending::Parsers::HtmlChangedError.new(changed_page) end devs = parsed_page.search('li') build_developers_from_node devs end
resource_url()
click to toggle source
# File lib/gh_trending/parsers/developers_parser.rb, line 25 def resource_url 'https://github.com/trending/developers'.freeze end
Private Instance Methods
build_developers_from_node(developers_node)
click to toggle source
# File lib/gh_trending/parsers/developers_parser.rb, line 31 def build_developers_from_node(developers_node) developers_node.map do |dev_node| Developer.new extract_developer_info dev_node end end
extract_developer_info(developer_node)
click to toggle source
# File lib/gh_trending/parsers/developers_parser.rb, line 37 def extract_developer_info(developer_node) { full_name: get_full_name(developer_node), hot_repository_url: get_hot_repository_url(developer_node), user_profile_url: get_profile_url(developer_node) } end
get_full_name(dev_node)
click to toggle source
# File lib/gh_trending/parsers/developers_parser.rb, line 63 def get_full_name(dev_node) span_with_full_name = dev_node.search('div.d-flex')[0] .search('div.mx-2')[1] .search('h2')[0] .search('a')[0] .search(SPAN_WITH_FULL_NAME) return nil if span_with_full_name.empty? match = span_with_full_name .text .strip .match REGEXP_FOR_FULLNAME full_name_without_enclosing_parens = match[1] full_name_without_enclosing_parens end
get_hot_repository_url(dev_node)
click to toggle source
# File lib/gh_trending/parsers/developers_parser.rb, line 56 def get_hot_repository_url(dev_node) parsed_url = dev_node.search('div.d-flex')[0] .search(ANCHOR_WITH_HOT_REPOSITORY)[0] .attributes['href'].value build_github_url(parsed_url) end
get_profile_url(dev_node)
click to toggle source
# File lib/gh_trending/parsers/developers_parser.rb, line 45 def get_profile_url(dev_node) parsed_url = dev_node.search('div.d-flex')[0] .search('div.mx-2')[1] .search('h2')[0] .search('a')[0] .attributes['href'] .value build_github_url(parsed_url) end