module Docs class Angular < UrlScraper self.name = 'Angular.js' self.slug = 'angular' self.type = 'angular' self.version = '1.2.12' self.base_url = 'http://docs.angularjs.org/partials/api/' html_filters.insert_before 'normalize_paths', 'angular/clean_html' html_filters.push 'angular/entries', 'title' text_filters.push 'angular/clean_urls' options[:title] = false options[:root_title] = 'Angular.js' options[:fix_urls] = ->(url) do url.sub! '/partials/api/api/', '/partials/api/' url.sub! '/partials/api/guide/', '/guide/' url.sub! %r{/partials/api/(.+?)(?<!\.html)(?:\z|(#.*))}, '/partials/api/\1.html\2' url.gsub! '/partials/api/(.+?)\:', '/partials/api/\1%3A' url end options[:skip] = %w(ng.html) options[:attribution] = <<-HTML © 2010–2014 Google, Inc.<br> Licensed under the Creative Commons Attribution License 3.0. HTML private def request_one(url) stub_root_page if url == root_url.to_s super end def request_all(urls, &block) stub_root_page super end def stub_root_page response = Typhoeus::Response.new( effective_url: root_url.to_s, code: 200, headers: { 'Content-Type' => 'text/html' }, body: get_root_page_body) Typhoeus.stub(root_url.to_s).and_return(response) end def get_root_page_body require 'capybara' Capybara.current_driver = :selenium Capybara.visit('http://docs.angularjs.org/api/') Capybara.find('.side-navigation')['innerHTML'] end end end