Quellcode durchsuchen

Refactoring and cleaning up

Jasper van Merle vor 6 Jahren
Ursprung
Commit
41e0a138a6
100 geänderte Dateien mit 351 neuen und 445 gelöschten Zeilen
  1. 17 15
      docs/Scraper-Reference.md
  2. 32 39
      lib/docs/core/doc.rb
  3. 2 2
      lib/docs/scrapers/angular.rb
  4. 2 2
      lib/docs/scrapers/angularjs.rb
  5. 3 4
      lib/docs/scrapers/ansible.rb
  6. 3 4
      lib/docs/scrapers/apache.rb
  7. 4 5
      lib/docs/scrapers/apache_pig.rb
  8. 3 5
      lib/docs/scrapers/async.rb
  9. 3 4
      lib/docs/scrapers/babel.rb
  10. 3 5
      lib/docs/scrapers/backbone.rb
  11. 3 5
      lib/docs/scrapers/bash.rb
  12. 2 2
      lib/docs/scrapers/bluebird.rb
  13. 3 4
      lib/docs/scrapers/bootstrap.rb
  14. 4 5
      lib/docs/scrapers/bottle.rb
  15. 2 2
      lib/docs/scrapers/bower.rb
  16. 5 6
      lib/docs/scrapers/c.rb
  17. 3 4
      lib/docs/scrapers/cakephp.rb
  18. 2 2
      lib/docs/scrapers/chai.rb
  19. 3 4
      lib/docs/scrapers/chef.rb
  20. 3 4
      lib/docs/scrapers/clojure.rb
  21. 4 5
      lib/docs/scrapers/cmake.rb
  22. 3 4
      lib/docs/scrapers/codeception.rb
  23. 2 2
      lib/docs/scrapers/codeceptjs.rb
  24. 4 5
      lib/docs/scrapers/codeigniter.rb
  25. 2 2
      lib/docs/scrapers/coffeescript.rb
  26. 8 7
      lib/docs/scrapers/cordova.rb
  27. 5 6
      lib/docs/scrapers/cpp.rb
  28. 3 4
      lib/docs/scrapers/crystal.rb
  29. 3 4
      lib/docs/scrapers/d.rb
  30. 2 2
      lib/docs/scrapers/d3.rb
  31. 4 5
      lib/docs/scrapers/dart.rb
  32. 3 4
      lib/docs/scrapers/django.rb
  33. 4 5
      lib/docs/scrapers/docker.rb
  34. 3 4
      lib/docs/scrapers/dojo.rb
  35. 8 7
      lib/docs/scrapers/drupal.rb
  36. 3 4
      lib/docs/scrapers/electron.rb
  37. 3 4
      lib/docs/scrapers/elixir.rb
  38. 3 4
      lib/docs/scrapers/ember.rb
  39. 3 4
      lib/docs/scrapers/erlang.rb
  40. 2 2
      lib/docs/scrapers/eslint.rb
  41. 2 2
      lib/docs/scrapers/express.rb
  42. 3 4
      lib/docs/scrapers/falcon.rb
  43. 3 4
      lib/docs/scrapers/fish.rb
  44. 2 2
      lib/docs/scrapers/flow.rb
  45. 3 4
      lib/docs/scrapers/git.rb
  46. 4 5
      lib/docs/scrapers/gnu/gcc.rb
  47. 4 5
      lib/docs/scrapers/gnu/gnu_fortran.rb
  48. 8 7
      lib/docs/scrapers/go.rb
  49. 3 4
      lib/docs/scrapers/godot.rb
  50. 3 4
      lib/docs/scrapers/graphite.rb
  51. 2 2
      lib/docs/scrapers/grunt.rb
  52. 2 2
      lib/docs/scrapers/handlebars.rb
  53. 5 6
      lib/docs/scrapers/haskell.rb
  54. 4 5
      lib/docs/scrapers/haxe.rb
  55. 2 4
      lib/docs/scrapers/homebrew.rb
  56. 2 2
      lib/docs/scrapers/immutable.rb
  57. 4 5
      lib/docs/scrapers/influxdata.rb
  58. 2 4
      lib/docs/scrapers/jasmine.rb
  59. 3 4
      lib/docs/scrapers/jekyll.rb
  60. 3 4
      lib/docs/scrapers/jest.rb
  61. 2 2
      lib/docs/scrapers/jquery/jquery_core.rb
  62. 3 5
      lib/docs/scrapers/jquery/jquery_mobile.rb
  63. 2 2
      lib/docs/scrapers/jquery/jquery_ui.rb
  64. 2 4
      lib/docs/scrapers/jsdoc.rb
  65. 2 4
      lib/docs/scrapers/julia.rb
  66. 2 4
      lib/docs/scrapers/knockout.rb
  67. 2 2
      lib/docs/scrapers/koa.rb
  68. 2 4
      lib/docs/scrapers/kotlin.rb
  69. 2 4
      lib/docs/scrapers/laravel.rb
  70. 4 5
      lib/docs/scrapers/leaflet.rb
  71. 4 5
      lib/docs/scrapers/less.rb
  72. 3 4
      lib/docs/scrapers/liquid.rb
  73. 3 4
      lib/docs/scrapers/lodash.rb
  74. 3 4
      lib/docs/scrapers/love.rb
  75. 3 4
      lib/docs/scrapers/lua.rb
  76. 2 2
      lib/docs/scrapers/marionette.rb
  77. 2 2
      lib/docs/scrapers/markdown.rb
  78. 2 4
      lib/docs/scrapers/matplotlib.rb
  79. 3 4
      lib/docs/scrapers/mdn/mdn.rb
  80. 3 4
      lib/docs/scrapers/meteor.rb
  81. 2 2
      lib/docs/scrapers/mocha.rb
  82. 2 2
      lib/docs/scrapers/modernizr.rb
  83. 3 4
      lib/docs/scrapers/moment.rb
  84. 4 5
      lib/docs/scrapers/mongoose.rb
  85. 4 5
      lib/docs/scrapers/nginx.rb
  86. 4 5
      lib/docs/scrapers/nginx_lua_module.rb
  87. 3 4
      lib/docs/scrapers/nim.rb
  88. 3 4
      lib/docs/scrapers/node.rb
  89. 2 4
      lib/docs/scrapers/nokogiri2.rb
  90. 2 4
      lib/docs/scrapers/npm.rb
  91. 2 4
      lib/docs/scrapers/numpy.rb
  92. 8 9
      lib/docs/scrapers/openjdk.rb
  93. 2 4
      lib/docs/scrapers/opentsdb.rb
  94. 2 4
      lib/docs/scrapers/padrino.rb
  95. 4 5
      lib/docs/scrapers/pandas.rb
  96. 3 4
      lib/docs/scrapers/perl.rb
  97. 3 4
      lib/docs/scrapers/phalcon.rb
  98. 2 4
      lib/docs/scrapers/phaser.rb
  99. 3 4
      lib/docs/scrapers/phoenix.rb
  100. 4 5
      lib/docs/scrapers/php.rb

+ 17 - 15
docs/Scraper-Reference.md

@@ -187,39 +187,41 @@ More information about how filters work is available on the [Filter Reference](.
 
 ## Keeping scrapers up-to-date
 
-In order to keep scrapers up-to-date the `get_latest_version(options, &block)` method should be overridden. If `self.release` is defined, this should return the latest version of the documentation. If `self.release` is not defined, it should return the Epoch time when the documentation was last modified. If the documentation will never change, simply return `1.0.0`. The result of this method is periodically reported in a "Documentation versions report" issue which helps maintainers keep track of outdated documentations.
+In order to keep scrapers up-to-date the `get_latest_version(opts)` method should be overridden. If `self.release` is defined, this should return the latest version of the documentation. If `self.release` is not defined, it should return the Epoch time when the documentation was last modified. If the documentation will never change, simply return `1.0.0`. The result of this method is periodically reported in a "Documentation versions report" issue which helps maintainers keep track of outdated documentations.
 
 To make life easier, there are a few utility methods that you can use in `get_latest_version`:
-* `fetch(url, options, &block)`
+* `fetch(url, opts)`
 
-  Makes a GET request to the url and calls `&block` with the body.
+  Makes a GET request to the url and returns the response body.
 
   Example: [lib/docs/scrapers/bash.rb](../lib/docs/scrapers/bash.rb)
-* `fetch_doc(url, options, &block)`
+* `fetch_doc(url, opts)`
 
-  Makes a GET request to the url and calls `&block` with the HTML body converted to a Nokogiri document.
+  Makes a GET request to the url and returns the HTML body converted to a Nokogiri document.
 
   Example: [lib/docs/scrapers/git.rb](../lib/docs/scrapers/git.rb)
-* `fetch_json(url, options, &block)`
+* `fetch_json(url, opts)`
 
-  Makes a GET request to the url and calls `&block` with the JSON body converted to a dictionary.
-* `get_npm_version(package, options, &block)`
+  Makes a GET request to the url and returns the JSON body converted to a dictionary.
 
-  Calls `&block` with the latest version of the given npm package.
+  Example: [lib/docs/scrapers/mdn/mdn.rb](../lib/docs/scrapers/mdn/mdn.rb)
+* `get_npm_version(package, opts)`
+
+  Returns the latest version of the given npm package.
 
   Example: [lib/docs/scrapers/bower.rb](../lib/docs/scrapers/bower.rb)
-* `get_latest_github_release(owner, repo, options, &block)`
+* `get_latest_github_release(owner, repo, opts)`
 
-  Calls `&block` with the latest GitHub release of the given repository ([format](https://developer.github.com/v3/repos/releases/#get-the-latest-release)).
+  Returns the latest GitHub release of the given repository ([format](https://developer.github.com/v3/repos/releases/#get-the-latest-release)).
 
   Example: [lib/docs/scrapers/jsdoc.rb](../lib/docs/scrapers/jsdoc.rb)
-* `get_github_tags(owner, repo, options, &block)`
+* `get_github_tags(owner, repo, opts)`
 
-  Calls `&block` with the list of tags on the given repository ([format](https://developer.github.com/v3/repos/#list-tags)).
+  Returns the list of tags on the given repository ([format](https://developer.github.com/v3/repos/#list-tags)).
 
   Example: [lib/docs/scrapers/liquid.rb](../lib/docs/scrapers/liquid.rb)
-* `get_github_file_contents(owner, repo, path, options, &block)`
+* `get_github_file_contents(owner, repo, path, opts)`
 
-  Calls `&block` with the contents of the requested file in the default branch of the given repository.
+  Returns the contents of the requested file in the default branch of the given repository.
 
   Example: [lib/docs/scrapers/minitest.rb](../lib/docs/scrapers/minitest.rb)

+ 32 - 39
lib/docs/core/doc.rb

@@ -164,16 +164,15 @@ module Docs
       raise NotImplementedError
     end
 
-    def get_scraper_version(opts, &block)
+    def get_scraper_version(opts)
       if self.class.method_defined?(:options) and !options[:release].nil?
-        block.call options[:release]
+        options[:release]
       else
         # If options[:release] does not exist, we return the Epoch timestamp of when the doc was last modified in DevDocs production
-        fetch_json('https://devdocs.io/docs.json', opts) do |json|
-          items = json.select {|item| item['name'] == self.class.name}
-          items = items.map {|item| item['mtime']}
-          block.call items.max
-        end
+        json = fetch_json('https://devdocs.io/docs.json', opts)
+        items = json.select {|item| item['name'] == self.class.name}
+        items = items.map {|item| item['mtime']}
+        items.max
       end
     end
 
@@ -181,7 +180,7 @@ module Docs
     # If options[:release] is defined, it should be in the same format
     # If options[:release] is not defined, it should return the Epoch timestamp of when the documentation was last updated
     # If the docs will never change, simply return '1.0.0'
-    def get_latest_version(options, &block)
+    def get_latest_version(opts)
       raise NotImplementedError
     end
 
@@ -216,55 +215,49 @@ module Docs
     # Utility methods for get_latest_version
     #
 
-    def fetch(url, options, &block)
+    def fetch(url, opts)
       headers = {}
 
-      if options.key?(:github_token) and url.start_with?('https://api.github.com/')
-        headers['Authorization'] = "token #{options[:github_token]}"
+      if opts.key?(:github_token) and url.start_with?('https://api.github.com/')
+        headers['Authorization'] = "token #{opts[:github_token]}"
       end
 
-      options[:logger].debug("Fetching #{url}")
+      opts[:logger].debug("Fetching #{url}")
+      response = Request.run(url, { headers: headers })
 
-      Request.run(url, { headers: headers }) do |response|
-        if response.success?
-          block.call response.body
-        else
-          options[:logger].error("Couldn't fetch #{url} (response code #{response.code})")
-          block.call nil
-        end
+      if response.success?
+        response.body
+      else
+        opts[:logger].error("Couldn't fetch #{url} (response code #{response.code})")
+        nil
       end
     end
 
-    def fetch_doc(url, options, &block)
-      fetch(url, options) do |body|
-        block.call Nokogiri::HTML.parse(body, nil, 'UTF-8')
-      end
+    def fetch_doc(url, opts)
+      body = fetch(url, opts)
+      Nokogiri::HTML.parse(body, nil, 'UTF-8')
     end
 
-    def fetch_json(url, options, &block)
-      fetch(url, options) do |body|
-        block.call JSON.parse(body)
-      end
+    def fetch_json(url, opts)
+      JSON.parse fetch(url, opts)
     end
 
-    def get_npm_version(package, options, &block)
-      fetch_json("https://registry.npmjs.com/#{package}", options) do |json|
-        block.call json['dist-tags']['latest']
-      end
+    def get_npm_version(package, opts)
+      json = fetch_json("https://registry.npmjs.com/#{package}", opts)
+      json['dist-tags']['latest']
     end
 
-    def get_latest_github_release(owner, repo, options, &block)
-      fetch_json("https://api.github.com/repos/#{owner}/#{repo}/releases/latest", options, &block)
+    def get_latest_github_release(owner, repo, opts)
+      fetch_json("https://api.github.com/repos/#{owner}/#{repo}/releases/latest", opts)
     end
 
-    def get_github_tags(owner, repo, options, &block)
-      fetch_json("https://api.github.com/repos/#{owner}/#{repo}/tags", options, &block)
+    def get_github_tags(owner, repo, opts)
+      fetch_json("https://api.github.com/repos/#{owner}/#{repo}/tags", opts)
     end
 
-    def get_github_file_contents(owner, repo, path, options, &block)
-      fetch_json("https://api.github.com/repos/#{owner}/#{repo}/contents/#{path}", options) do |json|
-        block.call(Base64.decode64(json['content']))
-      end
+    def get_github_file_contents(owner, repo, path, opts)
+      json = fetch_json("https://api.github.com/repos/#{owner}/#{repo}/contents/#{path}", opts)
+      Base64.decode64(json['content'])
     end
   end
 end

+ 2 - 2
lib/docs/scrapers/angular.rb

@@ -155,8 +155,8 @@ module Docs
       end
     end
 
-    def get_latest_version(options, &block)
-      get_npm_version('@angular/core', options, &block)
+    def get_latest_version(opts)
+      get_npm_version('@angular/core', opts)
     end
 
     private

+ 2 - 2
lib/docs/scrapers/angularjs.rb

@@ -70,8 +70,8 @@ module Docs
       self.base_url = "https://code.angularjs.org/#{release}/docs/partials/"
     end
 
-    def get_latest_version(options, &block)
-      get_npm_version('angular', options, &block)
+    def get_latest_version(opts)
+      get_npm_version('angular', opts)
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/ansible.rb

@@ -88,10 +88,9 @@ module Docs
         list_of_all_modules.html)
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://docs.ansible.com/ansible/latest/index.html', options) do |doc|
-        block.call doc.at_css('.DocSiteProduct-CurrentVersion').content.strip
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://docs.ansible.com/ansible/latest/index.html', opts)
+      doc.at_css('.DocSiteProduct-CurrentVersion').content.strip
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/apache.rb

@@ -34,10 +34,9 @@ module Docs
       Licensed under the Apache License, Version 2.0.
     HTML
 
-    def get_latest_version(options, &block)
-      fetch_doc('http://httpd.apache.org/docs/', options) do |doc|
-        block.call doc.at_css('#apcontents > ul a')['href'][0...-1]
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('http://httpd.apache.org/docs/', opts)
+      doc.at_css('#apcontents > ul a')['href'][0...-1]
     end
   end
 end

+ 4 - 5
lib/docs/scrapers/apache_pig.rb

@@ -43,11 +43,10 @@ module Docs
       self.base_url = "https://pig.apache.org/docs/r#{release}/"
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://pig.apache.org/', options) do |doc|
-        item = doc.at_css('div[id="menu_1.2"] > .menuitem:last-child')
-        block.call item.content.strip.sub(/Release /, '')
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://pig.apache.org/', opts)
+      item = doc.at_css('div[id="menu_1.2"] > .menuitem:last-child')
+      item.content.strip.sub(/Release /, '')
     end
   end
 end

+ 3 - 5
lib/docs/scrapers/async.rb

@@ -18,11 +18,9 @@ module Docs
       Licensed under the MIT License.
     HTML
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://caolan.github.io/async/', options) do |doc|
-        version = doc.at_css('#version-dropdown > a').content.strip[1..-1]
-        block.call version
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://caolan.github.io/async/', opts)
+      doc.at_css('#version-dropdown > a').content.strip[1..-1]
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/babel.rb

@@ -23,10 +23,9 @@ module Docs
       '<div></div>'
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://babeljs.io/docs/en/', options) do |doc|
-        block.call doc.at_css('a[href="/versions"] > h3').content
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://babeljs.io/docs/en/', opts)
+      doc.at_css('a[href="/versions"] > h3').content
     end
   end
 end

+ 3 - 5
lib/docs/scrapers/backbone.rb

@@ -21,11 +21,9 @@ module Docs
       Licensed under the MIT License.
     HTML
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://backbonejs.org/', options) do |doc|
-        version = doc.at_css('.version').content
-        block.call version[1...-1]
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://backbonejs.org/', opts)
+      doc.at_css('.version').content[1...-1]
     end
   end
 end

+ 3 - 5
lib/docs/scrapers/bash.rb

@@ -18,11 +18,9 @@ module Docs
       Licensed under the GNU Free Documentation License.
     HTML
 
-    def get_latest_version(options, &block)
-      fetch('https://www.gnu.org/software/bash/manual/html_node/index.html', options) do |body|
-        version = body.scan(/, Version ([0-9.]+)/)[0][0]
-        block.call version[0...-1]
-      end
+    def get_latest_version(opts)
+      body = fetch('https://www.gnu.org/software/bash/manual/html_node/index.html', opts)
+      body.scan(/, Version ([0-9.]+)/)[0][0][0...-1]
     end
   end
 end

+ 2 - 2
lib/docs/scrapers/bluebird.rb

@@ -19,8 +19,8 @@ module Docs
       Licensed under the MIT License.
     HTML
 
-    def get_latest_version(options, &block)
-      get_npm_version('bluebird', options, &block)
+    def get_latest_version(opts)
+      get_npm_version('bluebird', opts)
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/bootstrap.rb

@@ -35,10 +35,9 @@ module Docs
       options[:only] = %w(getting-started/ css/ components/ javascript/)
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://getbootstrap.com/', options) do |doc|
-        block.call doc.at_css('#bd-versions').content.strip[1..-1]
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://getbootstrap.com/', opts)
+      doc.at_css('#bd-versions').content.strip[1..-1]
     end
   end
 end

+ 4 - 5
lib/docs/scrapers/bottle.rb

@@ -28,11 +28,10 @@ module Docs
       self.base_url = "https://bottlepy.org/docs/#{self.version}/"
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://bottlepy.org/docs/stable/', options) do |doc|
-        label = doc.at_css('.sphinxsidebarwrapper > ul > li > b')
-        block.call label.content.sub(/Bottle /, '')
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://bottlepy.org/docs/stable/', opts)
+      label = doc.at_css('.sphinxsidebarwrapper > ul > li > b')
+      label.content.sub(/Bottle /, '')
     end
   end
 end

+ 2 - 2
lib/docs/scrapers/bower.rb

@@ -20,8 +20,8 @@ module Docs
       Licensed under the MIT License.
     HTML
 
-    def get_latest_version(options, &block)
-      get_npm_version('bower', options, &block)
+    def get_latest_version(opts)
+      get_npm_version('bower', opts)
     end
   end
 end

+ 5 - 6
lib/docs/scrapers/c.rb

@@ -26,12 +26,11 @@ module Docs
       Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
     HTML
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://en.cppreference.com/w/Cppreference:Archives', options) do |doc|
-        link = doc.at_css('a[title^="File:"]')
-        date = link.content.scan(/(\d+)\./)[0][0]
-        block.call DateTime.strptime(date, '%Y%m%d').to_time.to_i
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://en.cppreference.com/w/Cppreference:Archives', opts)
+      link = doc.at_css('a[title^="File:"]')
+      date = link.content.scan(/(\d+)\./)[0][0]
+      DateTime.strptime(date, '%Y%m%d').to_time.to_i
     end
 
     private

+ 3 - 4
lib/docs/scrapers/cakephp.rb

@@ -71,10 +71,9 @@ module Docs
       self.base_url = 'https://api.cakephp.org/2.7/'
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://api.cakephp.org/3.7/', options) do |doc|
-        block.call doc.at_css('.version-picker .dropdown-toggle').content.strip
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://api.cakephp.org/3.7/', opts)
+      doc.at_css('.version-picker .dropdown-toggle').content.strip
     end
 
     private

+ 2 - 2
lib/docs/scrapers/chai.rb

@@ -24,8 +24,8 @@ module Docs
       Licensed under the MIT License.
     HTML
 
-    def get_latest_version(options, &block)
-      get_npm_version('chai', options, &block)
+    def get_latest_version(opts)
+      get_npm_version('chai', opts)
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/chef.rb

@@ -48,10 +48,9 @@ module Docs
       options[:only_patterns] = [/\A#{client_path}\//, /\A#{server_path}\//]
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://downloads.chef.io/chef', options) do |doc|
-        block.call doc.at_css('h1.product-heading > span').content.strip
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://downloads.chef.io/chef', opts)
+      doc.at_css('h1.product-heading > span').content.strip
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/clojure.rb

@@ -28,10 +28,9 @@ module Docs
       self.base_url = 'https://clojure.github.io/clojure/branch-clojure-1.7.0/'
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('http://clojure.github.io/clojure/index.html', options) do |doc|
-        block.call doc.at_css('#header-version').content[1..-1]
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('http://clojure.github.io/clojure/index.html', opts)
+      doc.at_css('#header-version').content[1..-1]
     end
   end
 end

+ 4 - 5
lib/docs/scrapers/cmake.rb

@@ -60,11 +60,10 @@ module Docs
       self.base_url = 'https://cmake.org/cmake/help/v3.5/'
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://cmake.org/documentation/', options) do |doc|
-        link = doc.at_css('.entry-content ul > li > strong > a > big')
-        block.call link.content.scan(/([0-9.]+)/)[0][0]
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://cmake.org/documentation/', opts)
+      link = doc.at_css('.entry-content ul > li > strong > a > big')
+      link.content.scan(/([0-9.]+)/)[0][0]
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/codeception.rb

@@ -19,10 +19,9 @@ module Docs
       Licensed under the MIT License.
     HTML
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://codeception.com/changelog', options) do |doc|
-        block.call doc.at_css('#page > h4').content
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://codeception.com/changelog', opts)
+      doc.at_css('#page > h4').content
     end
   end
 end

+ 2 - 2
lib/docs/scrapers/codeceptjs.rb

@@ -22,8 +22,8 @@ module Docs
       Licensed under the MIT License.
     HTML
 
-    def get_latest_version(options, &block)
-      get_npm_version('codeceptjs', options, &block)
+    def get_latest_version(opts)
+      get_npm_version('codeceptjs', opts)
     end
   end
 end

+ 4 - 5
lib/docs/scrapers/codeigniter.rb

@@ -39,11 +39,10 @@ module Docs
       self.release = '3.1.8'
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://codeigniter.com/user_guide/changelog.html', options) do |doc|
-        header = doc.at_css('#change-log h2')
-        block.call header.content.scan(/([0-9.]+)/)[0][0]
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://codeigniter.com/user_guide/changelog.html', opts)
+      header = doc.at_css('#change-log h2')
+      header.content.scan(/([0-9.]+)/)[0][0]
     end
   end
 end

+ 2 - 2
lib/docs/scrapers/coffeescript.rb

@@ -31,8 +31,8 @@ module Docs
       options[:container] = '.container'
     end
 
-    def get_latest_version(options, &block)
-      get_npm_version('coffeescript', options, &block)
+    def get_latest_version(opts)
+      get_npm_version('coffeescript', opts)
     end
   end
 end

+ 8 - 7
lib/docs/scrapers/cordova.rb

@@ -43,13 +43,14 @@ module Docs
       self.base_url = 'https://cordova.apache.org/docs/en/6.x/'
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://cordova.apache.org/docs/en/latest/', options) do |doc|
-        label = doc.at_css('#versionDropdown').content.strip
-        version = label.scan(/([0-9.]+)/)[0][0]
-        version = version[0...-1] if version.end_with?('.')
-        block.call version
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://cordova.apache.org/docs/en/latest/', opts)
+
+      label = doc.at_css('#versionDropdown').content.strip
+      version = label.scan(/([0-9.]+)/)[0][0]
+      version = version[0...-1] if version.end_with?('.')
+
+      version
     end
   end
 end

+ 5 - 6
lib/docs/scrapers/cpp.rb

@@ -35,12 +35,11 @@ module Docs
     HTML
 
     # Same as get_latest_version in lib/docs/scrapers/c.rb
-    def get_latest_version(options, &block)
-      fetch_doc('https://en.cppreference.com/w/Cppreference:Archives', options) do |doc|
-        link = doc.at_css('a[title^="File:"]')
-        date = link.content.scan(/(\d+)\./)[0][0]
-        block.call DateTime.strptime(date, '%Y%m%d').to_time.to_i
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://en.cppreference.com/w/Cppreference:Archives', opts)
+      link = doc.at_css('a[title^="File:"]')
+      date = link.content.scan(/(\d+)\./)[0][0]
+      DateTime.strptime(date, '%Y%m%d').to_time.to_i
     end
 
     private

+ 3 - 4
lib/docs/scrapers/crystal.rb

@@ -35,10 +35,9 @@ module Docs
       end
     }
 
-    def get_latest_version(options, &block)
-      fetch('https://crystal-lang.org/api', options) do |body|
-        block.call body.scan(/Crystal Docs ([0-9.]+)/)[0][0]
-      end
+    def get_latest_version(opts)
+      body = fetch('https://crystal-lang.org/api', opts)
+      body.scan(/Crystal Docs ([0-9.]+)/)[0][0]
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/d.rb

@@ -27,10 +27,9 @@ module Docs
       %w(https://dlang.org/phobos/index.html https://dlang.org/spec/intro.html)
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://dlang.org/changelog/', options) do |doc|
-        block.call doc.at_css('#content > ul > li:nth-child(2) > a')['id']
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://dlang.org/changelog/', opts)
+      doc.at_css('#content > ul > li:nth-child(2) > a')['id']
     end
   end
 end

+ 2 - 2
lib/docs/scrapers/d3.rb

@@ -59,8 +59,8 @@ module Docs
       options[:only_patterns] = [/\.md\z/]
     end
 
-    def get_latest_version(options, &block)
-      get_npm_version('d3', options, &block)
+    def get_latest_version(opts)
+      get_npm_version('d3', opts)
     end
   end
 end

+ 4 - 5
lib/docs/scrapers/dart.rb

@@ -32,11 +32,10 @@ module Docs
       self.base_url = "https://api.dartlang.org/stable/#{release}/"
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://api.dartlang.org/', options) do |doc|
-        label = doc.at_css('footer > span').content.strip
-        block.call label.sub(/Dart /, '')
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://api.dartlang.org/', opts)
+      label = doc.at_css('footer > span').content.strip
+      label.sub(/Dart /, '')
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/django.rb

@@ -64,10 +64,9 @@ module Docs
       self.base_url = 'https://docs.djangoproject.com/en/1.8/'
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://docs.djangoproject.com/', options) do |doc|
-        block.call doc.at_css('#doc-versions > li.current > span > strong').content
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://docs.djangoproject.com/', opts)
+      doc.at_css('#doc-versions > li.current > span > strong').content
     end
   end
 end

+ 4 - 5
lib/docs/scrapers/docker.rb

@@ -138,11 +138,10 @@ module Docs
       options[:only_patterns] << /\Aswarm\//
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://docs.docker.com/', options) do |doc|
-        label = doc.at_css('.nav-container button.dropdown-toggle').content.strip
-        block.call label.scan(/([0-9.]+)/)[0][0]
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://docs.docker.com/', opts)
+      label = doc.at_css('.nav-container button.dropdown-toggle').content.strip
+      label.scan(/([0-9.]+)/)[0][0]
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/dojo.rb

@@ -36,10 +36,9 @@ module Docs
       urls.map { |url| "<a href='#{url}'>#{url}</a>" }.join
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://dojotoolkit.org/api/', options) do |doc|
-        block.call doc.at_css('#versionSelector > option[selected]').content
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://dojotoolkit.org/api/', opts)
+      doc.at_css('#versionSelector > option[selected]').content
     end
 
     private

+ 8 - 7
lib/docs/scrapers/drupal.rb

@@ -99,13 +99,14 @@ module Docs
       ]
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('http://cgit.drupalcode.org/drupal', options) do |doc|
-        version = doc.at_css('td.form > form > select > option[selected]').content
-        version = version.scan(/([0-9.]+)/)[0][0]
-        version = version[0...-1] if version.end_with?('.')
-        block.call version
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('http://cgit.drupalcode.org/drupal', opts)
+
+      version = doc.at_css('td.form > form > select > option[selected]').content
+      version = version.scan(/([0-9.]+)/)[0][0]
+      version = version[0...-1] if version.end_with?('.')
+
+      version
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/electron.rb

@@ -23,10 +23,9 @@ module Docs
       Licensed under the MIT license.
     HTML
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://electronjs.org/docs', options) do |doc|
-        block.call doc.at_css('.docs-version').content
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://electronjs.org/docs', opts)
+      doc.at_css('.docs-version').content
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/elixir.rb

@@ -98,10 +98,9 @@ module Docs
       ]
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://hexdocs.pm/elixir/api-reference.html', options) do |doc|
-        block.call doc.at_css('h2.sidebar-projectVersion').content.strip[1..-1]
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://hexdocs.pm/elixir/api-reference.html', opts)
+      doc.at_css('h2.sidebar-projectVersion').content.strip[1..-1]
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/ember.rb

@@ -57,10 +57,9 @@ module Docs
       )
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://emberjs.com/api/ember/release', options) do |doc|
-        block.call doc.at_css('.sidebar > .select-container .ember-power-select-selected-item').content.strip
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://emberjs.com/api/ember/release', opts)
+      doc.at_css('.sidebar > .select-container .ember-power-select-selected-item').content.strip
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/erlang.rb

@@ -56,10 +56,9 @@ module Docs
       self.release = '18.3'
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://www.erlang.org/downloads', options) do |doc|
-        block.call doc.at_css('.col-lg-3 > ul > li').content.strip.sub(/OTP /, '')
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://www.erlang.org/downloads', opts)
+      doc.at_css('.col-lg-3 > ul > li').content.strip.sub(/OTP /, '')
     end
   end
 end

+ 2 - 2
lib/docs/scrapers/eslint.rb

@@ -21,8 +21,8 @@ module Docs
       Licensed under the MIT License.
     HTML
 
-    def get_latest_version(options, &block)
-      get_npm_version('eslint', options, &block)
+    def get_latest_version(opts)
+      get_npm_version('eslint', opts)
     end
   end
 end

+ 2 - 2
lib/docs/scrapers/express.rb

@@ -29,8 +29,8 @@ module Docs
       Licensed under the Creative Commons Attribution-ShareAlike License v3.0.
     HTML
 
-    def get_latest_version(options, &block)
-      get_npm_version('express', options, &block)
+    def get_latest_version(opts)
+      get_npm_version('express', opts)
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/falcon.rb

@@ -34,10 +34,9 @@ module Docs
       self.base_url = "https://falcon.readthedocs.io/en/#{self.release}/"
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://falcon.readthedocs.io/en/stable/changes/index.html', options) do |doc|
-        block.call doc.at_css('#changelogs ul > li > a').content
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://falcon.readthedocs.io/en/stable/changes/index.html', opts)
+      doc.at_css('#changelogs ul > li > a').content
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/fish.rb

@@ -47,10 +47,9 @@ module Docs
       self.base_url = "https://fishshell.com/docs/#{version}/"
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('http://fishshell.com/docs/current/index.html', options) do |doc|
-        block.call doc.at_css('#toc-index').content.scan(/([0-9.]+)/)[0][0]
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('http://fishshell.com/docs/current/index.html', opts)
+      doc.at_css('#toc-index').content.scan(/([0-9.]+)/)[0][0]
     end
   end
 end

+ 2 - 2
lib/docs/scrapers/flow.rb

@@ -19,8 +19,8 @@ module Docs
       Licensed under the MIT License.
     HTML
 
-    def get_latest_version(options, &block)
-      get_npm_version('flow-bin', options, &block)
+    def get_latest_version(opts)
+      get_npm_version('flow-bin', opts)
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/git.rb

@@ -20,10 +20,9 @@ module Docs
       Licensed under the GNU General Public License version 2.
     HTML
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://git-scm.com/', options) do |doc|
-        block.call doc.at_css('.version').content.strip
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://git-scm.com/', opts)
+      doc.at_css('.version').content.strip
     end
   end
 end

+ 4 - 5
lib/docs/scrapers/gnu/gcc.rb

@@ -100,11 +100,10 @@ module Docs
       options[:replace_paths] = CPP_PATHS
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://gcc.gnu.org/onlinedocs/', options) do |doc|
-        label = doc.at_css('ul > li > ul > li > a').content.strip
-        block.call label.scan(/([0-9.]+)/)[0][0]
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://gcc.gnu.org/onlinedocs/', opts)
+      label = doc.at_css('ul > li > ul > li > a').content.strip
+      label.scan(/([0-9.]+)/)[0][0]
     end
   end
 end

+ 4 - 5
lib/docs/scrapers/gnu/gnu_fortran.rb

@@ -26,11 +26,10 @@ module Docs
       self.base_url = "https://gcc.gnu.org/onlinedocs/gcc-#{release}/gfortran/"
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://gcc.gnu.org/onlinedocs/', options) do |doc|
-        label = doc.at_css('ul > li > ul > li > a').content.strip
-        block.call label.scan(/([0-9.]+)/)[0][0]
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://gcc.gnu.org/onlinedocs/', opts)
+      label = doc.at_css('ul > li > ul > li > a').content.strip
+      label.scan(/([0-9.]+)/)[0][0]
     end
   end
 end

+ 8 - 7
lib/docs/scrapers/go.rb

@@ -24,13 +24,14 @@ module Docs
       Licensed under the Creative Commons Attribution License 3.0.
     HTML
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://golang.org/pkg/', options) do |doc|
-        footer = doc.at_css('#footer').content
-        version = footer.scan(/go([0-9.]+)/)[0][0]
-        version = version[0...-1] if version.end_with?('.')
-        block.call version
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://golang.org/pkg/', opts)
+
+      footer = doc.at_css('#footer').content
+      version = footer.scan(/go([0-9.]+)/)[0][0]
+      version = version[0...-1] if version.end_with?('.')
+
+      version
     end
 
     private

+ 3 - 4
lib/docs/scrapers/godot.rb

@@ -38,10 +38,9 @@ module Docs
       self.base_url = "http://docs.godotengine.org/en/#{self.version}/"
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://docs.godotengine.org/', options) do |doc|
-        block.call doc.at_css('.version').content.strip
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://docs.godotengine.org/', opts)
+      doc.at_css('.version').content.strip
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/graphite.rb

@@ -18,10 +18,9 @@ module Docs
       Licensed under the Apache License, Version 2.0.
     HTML
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://graphite.readthedocs.io/en/latest/releases.html', options) do |doc|
-        block.call doc.at_css('#release-notes li > a').content
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://graphite.readthedocs.io/en/latest/releases.html', opts)
+      doc.at_css('#release-notes li > a').content
     end
   end
 end

+ 2 - 2
lib/docs/scrapers/grunt.rb

@@ -27,8 +27,8 @@ module Docs
       Licensed under the MIT License.
     HTML
 
-    def get_latest_version(options, &block)
-      get_npm_version('grunt-cli', options, &block)
+    def get_latest_version(opts)
+      get_npm_version('grunt-cli', opts)
     end
   end
 end

+ 2 - 2
lib/docs/scrapers/handlebars.rb

@@ -20,8 +20,8 @@ module Docs
       Licensed under the MIT License.
     HTML
 
-    def get_latest_version(options, &block)
-      get_npm_version('handlebars', options, &block)
+    def get_latest_version(opts)
+      get_npm_version('handlebars', opts)
     end
   end
 end

+ 5 - 6
lib/docs/scrapers/haskell.rb

@@ -69,12 +69,11 @@ module Docs
       options[:only_patterns] = [/\Alibraries\//]
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://downloads.haskell.org/~ghc/latest/docs/html/', options) do |doc|
-        links = doc.css('a').to_a
-        versions = links.map {|link| link['href'].scan(/ghc-([0-9.]+)/)}
-        block.call versions.find {|version| !version.empty?}[0][0]
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://downloads.haskell.org/~ghc/latest/docs/html/', opts)
+      links = doc.css('a').to_a
+      versions = links.map {|link| link['href'].scan(/ghc-([0-9.]+)/)}
+      versions.find {|version| !version.empty?}[0][0]
     end
   end
 end

+ 4 - 5
lib/docs/scrapers/haxe.rb

@@ -67,11 +67,10 @@ module Docs
       self.base_url = 'https://api.haxe.org/python/'
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://api.haxe.org/', options) do |doc|
-        label = doc.at_css('.container.main-content h1 > small').content
-        block.call label.sub(/version /, '')
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://api.haxe.org/', opts)
+      label = doc.at_css('.container.main-content h1 > small').content
+      label.sub(/version /, '')
     end
   end
 end

+ 2 - 4
lib/docs/scrapers/homebrew.rb

@@ -20,10 +20,8 @@ module Docs
       Licensed under the BSD 2-Clause License.
     HTML
 
-    def get_latest_version(options, &block)
-      get_latest_github_release('Homebrew', 'brew', options) do |release|
-        block.call release['name']
-      end
+    def get_latest_version(opts)
+      get_latest_github_release('Homebrew', 'brew', opts)['name']
     end
   end
 end

+ 2 - 2
lib/docs/scrapers/immutable.rb

@@ -55,8 +55,8 @@ module Docs
       capybara.html
     end
 
-    def get_latest_version(options, &block)
-      get_npm_version('immutable', options, &block)
+    def get_latest_version(opts)
+      get_npm_version('immutable', opts)
     end
   end
 end

+ 4 - 5
lib/docs/scrapers/influxdata.rb

@@ -47,11 +47,10 @@ module Docs
       Licensed under the MIT license.
     HTML
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://docs.influxdata.com/influxdb/', options) do |doc|
-        label = doc.at_css('.navbar--current-product').content.strip
-        block.call label.scan(/([0-9.]+)/)[0][0]
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://docs.influxdata.com/influxdb/', opts)
+      label = doc.at_css('.navbar--current-product').content.strip
+      label.scan(/([0-9.]+)/)[0][0]
     end
   end
 end

+ 2 - 4
lib/docs/scrapers/jasmine.rb

@@ -18,10 +18,8 @@ module Docs
       Licensed under the MIT License.
     HTML
 
-    def get_latest_version(options, &block)
-      get_latest_github_release('jasmine', 'jasmine', options) do |release|
-        block.call release['name']
-      end
+    def get_latest_version(opts)
+      get_latest_github_release('jasmine', 'jasmine', opts)['name']
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/jekyll.rb

@@ -29,10 +29,9 @@ module Docs
       Licensed under the MIT license.
     HTML
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://jekyllrb.com/docs/', options) do |doc|
-        block.call doc.at_css('.meta a').content[1..-1]
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://jekyllrb.com/docs/', opts)
+      doc.at_css('.meta a').content[1..-1]
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/jest.rb

@@ -18,10 +18,9 @@ module Docs
       Licensed under the BSD License.
     HTML
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://jestjs.io/docs/en/getting-started', options) do |doc|
-        block.call doc.at_css('header > a > h3').content
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://jestjs.io/docs/en/getting-started', opts)
+      doc.at_css('header > a > h3').content
     end
   end
 end

+ 2 - 2
lib/docs/scrapers/jquery/jquery_core.rb

@@ -23,8 +23,8 @@ module Docs
       /index/i
     ]
 
-    def get_latest_version(options, &block)
-      get_npm_version('jquery', options, &block)
+    def get_latest_version(opts)
+      get_npm_version('jquery', opts)
     end
   end
 end

+ 3 - 5
lib/docs/scrapers/jquery/jquery_mobile.rb

@@ -17,11 +17,9 @@ module Docs
       url.sub! 'http://api.jquerymobile.com/', 'https://api.jquerymobile.com/'
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://jquerymobile.com/', options) do |doc|
-        label = doc.at_css('.download-box > .download-option:last-child > span').content
-        block.call label.sub(/Version /, '')
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://jquerymobile.com/', opts)
+      doc.at_css('.download-box > .download-option:last-child > span').content.sub(/Version /, '')
     end
   end
 end

+ 2 - 2
lib/docs/scrapers/jquery/jquery_ui.rb

@@ -16,8 +16,8 @@ module Docs
       url.sub! 'http://api.jqueryui.com/', 'https://api.jqueryui.com/'
     end
 
-    def get_latest_version(options, &block)
-      get_npm_version('jquery-ui', options, &block)
+    def get_latest_version(opts)
+      get_npm_version('jquery-ui', opts)
     end
   end
 end

+ 2 - 4
lib/docs/scrapers/jsdoc.rb

@@ -22,10 +22,8 @@ module Docs
       Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
     HTML
 
-    def get_latest_version(options, &block)
-      get_latest_github_release('jsdoc3', 'jsdoc', options) do |release|
-        block.call release['tag_name']
-      end
+    def get_latest_version(opts)
+      get_latest_github_release('jsdoc3', 'jsdoc', opts)['tag_name']
     end
   end
 end

+ 2 - 4
lib/docs/scrapers/julia.rb

@@ -50,10 +50,8 @@ module Docs
       html_filters.push 'julia/entries_sphinx', 'julia/clean_html_sphinx', 'sphinx/clean_html'
     end
 
-    def get_latest_version(options, &block)
-      get_latest_github_release('JuliaLang', 'julia', options) do |release|
-        block.call release['tag_name'][1..-1]
-      end
+    def get_latest_version(opts)
+      get_latest_github_release('JuliaLang', 'julia', opts)['tag_name'][1..-1]
     end
   end
 end

+ 2 - 4
lib/docs/scrapers/knockout.rb

@@ -34,10 +34,8 @@ module Docs
       Licensed under the MIT License.
     HTML
 
-    def get_latest_version(options, &block)
-      get_latest_github_release('knockout', 'knockout', options) do |release|
-        block.call release['tag_name'][1..-1]
-      end
+    def get_latest_version(opts)
+      get_latest_github_release('knockout', 'knockout', opts)['tag_name'][1..-1]
     end
   end
 end

+ 2 - 2
lib/docs/scrapers/koa.rb

@@ -35,8 +35,8 @@ module Docs
       Licensed under the MIT License.
     HTML
 
-    def get_latest_version(options, &block)
-      get_npm_version('koa', options, &block)
+    def get_latest_version(opts)
+      get_npm_version('koa', opts)
     end
   end
 end

+ 2 - 4
lib/docs/scrapers/kotlin.rb

@@ -29,10 +29,8 @@ module Docs
       Licensed under the Apache License, Version 2.0.
     HTML
 
-    def get_latest_version(options, &block)
-      get_latest_github_release('JetBrains', 'kotlin', options) do |release|
-        block.call release['tag_name'][1..-1]
-      end
+    def get_latest_version(opts)
+      get_latest_github_release('JetBrains', 'kotlin', opts)['tag_name'][1..-1]
     end
   end
 end

+ 2 - 4
lib/docs/scrapers/laravel.rb

@@ -134,10 +134,8 @@ module Docs
       end
     end
 
-    def get_latest_version(options, &block)
-      get_latest_github_release('laravel', 'laravel', options) do |release|
-        block.call release['tag_name'][1..-1]
-      end
+    def get_latest_version(opts)
+      get_latest_github_release('laravel', 'laravel', opts)['tag_name'][1..-1]
     end
   end
 end

+ 4 - 5
lib/docs/scrapers/leaflet.rb

@@ -39,11 +39,10 @@ module Docs
       self.base_url = "https://leafletjs.com/reference-#{release}.html"
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://leafletjs.com/index.html', options) do |doc|
-        link = doc.css('ul > li > a').to_a.select {|node| node.content == 'Docs'}.first
-        block.call link['href'].scan(/reference-([0-9.]+)\.html/)[0][0]
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://leafletjs.com/index.html', opts)
+      link = doc.css('ul > li > a').to_a.select {|node| node.content == 'Docs'}.first
+      link['href'].scan(/reference-([0-9.]+)\.html/)[0][0]
     end
   end
 end

+ 4 - 5
lib/docs/scrapers/less.rb

@@ -22,11 +22,10 @@ module Docs
       Licensed under the Creative Commons Attribution License 3.0.
     HTML
 
-    def get_latest_version(options, &block)
-      fetch_doc('http://lesscss.org/features/', options) do |doc|
-        label = doc.at_css('.footer-links > li').content
-        block.call label.scan(/([0-9.]+)/)[0][0]
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('http://lesscss.org/features/', opts)
+      label = doc.at_css('.footer-links > li').content
+      label.scan(/([0-9.]+)/)[0][0]
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/liquid.rb

@@ -20,10 +20,9 @@ module Docs
       Licensed under the MIT License.
     HTML
 
-    def get_latest_version(options, &block)
-      get_github_tags('Shopify', 'liquid', options) do |tags|
-        block.call tags[0]['name'][1..-1]
-      end
+    def get_latest_version(opts)
+      tags = get_github_tags('Shopify', 'liquid', opts)
+      tags[0]['name'][1..-1]
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/lodash.rb

@@ -33,10 +33,9 @@ module Docs
       self.base_url = "https://lodash.com/docs/#{release}"
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://lodash.com/docs/', options) do |doc|
-        block.call doc.at_css('#version > option[selected]').content
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://lodash.com/docs/', opts)
+      doc.at_css('#version > option[selected]').content
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/love.rb

@@ -40,10 +40,9 @@ module Docs
       Licensed under the GNU Free Documentation License, Version 1.3.
     HTML
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://love2d.org/wiki/Version_History', options) do |doc|
-        block.call doc.at_css('#mw-content-text table a').content
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://love2d.org/wiki/Version_History', opts)
+      doc.at_css('#mw-content-text table a').content
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/lua.rb

@@ -27,10 +27,9 @@ module Docs
       self.base_url = 'https://www.lua.org/manual/5.1/'
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://www.lua.org/manual/', options) do |doc|
-        block.call doc.at_css('p.menubar > a').content
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://www.lua.org/manual/', opts)
+      doc.at_css('p.menubar > a').content
     end
   end
 end

+ 2 - 2
lib/docs/scrapers/marionette.rb

@@ -39,8 +39,8 @@ module Docs
       html_filters.push 'marionette/entries_v2'
     end
 
-    def get_latest_version(options, &block)
-      get_npm_version('backbone.marionette', options, &block)
+    def get_latest_version(opts)
+      get_npm_version('backbone.marionette', opts)
     end
   end
 end

+ 2 - 2
lib/docs/scrapers/markdown.rb

@@ -14,8 +14,8 @@ module Docs
       Licensed under the BSD License.
     HTML
 
-    def get_latest_version(options, &block)
-      block.call '1.0.0'
+    def get_latest_version(opts)
+      '1.0.0'
     end
   end
 end

+ 2 - 4
lib/docs/scrapers/matplotlib.rb

@@ -65,10 +65,8 @@ module Docs
       ]
     end
 
-    def get_latest_version(options, &block)
-      get_latest_github_release('matplotlib', 'matplotlib', options) do |release|
-        block.call release['tag_name'][1..-1]
-      end
+    def get_latest_version(opts)
+      get_latest_github_release('matplotlib', 'matplotlib', opts)['tag_name'][1..-1]
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/mdn/mdn.rb

@@ -21,10 +21,9 @@ module Docs
       Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
     HTML
 
-    def get_latest_version(opts, &block)
-      fetch_json("https://developer.mozilla.org/en-US/docs/feeds/json/tag/#{options[:mdn_tag]}", opts) do |json|
-        block.call DateTime.parse(json[0]['pubdate']).to_time.to_i
-      end
+    def get_latest_version(opts)
+      json = fetch_json("https://developer.mozilla.org/en-US/docs/feeds/json/tag/#{options[:mdn_tag]}", opts)
+      DateTime.parse(json[0]['pubdate']).to_time.to_i
     end
 
     private

+ 3 - 4
lib/docs/scrapers/meteor.rb

@@ -46,10 +46,9 @@ module Docs
       options[:fix_urls] = nil
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://docs.meteor.com/#/full/', options) do |doc|
-        block.call doc.at_css('select.version-select > option').content
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://docs.meteor.com/#/full/', opts)
+      doc.at_css('select.version-select > option').content
     end
   end
 end

+ 2 - 2
lib/docs/scrapers/mocha.rb

@@ -19,8 +19,8 @@ module Docs
       Licensed under the Creative Commons Attribution 4.0 International License.
     HTML
 
-    def get_latest_version(options, &block)
-      get_npm_version('mocha', options, &block)
+    def get_latest_version(opts)
+      get_npm_version('mocha', opts)
     end
   end
 end

+ 2 - 2
lib/docs/scrapers/modernizr.rb

@@ -16,8 +16,8 @@ module Docs
       Licensed under the MIT License.
     HTML
 
-    def get_latest_version(options, &block)
-      get_npm_version('modernizr', options, &block)
+    def get_latest_version(opts)
+      get_npm_version('modernizr', opts)
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/moment.rb

@@ -23,10 +23,9 @@ module Docs
       Licensed under the MIT License.
     HTML
 
-    def get_latest_version(options, &block)
-      fetch_doc('http://momentjs.com/', options) do |doc|
-        block.call doc.at_css('.hero-title > h1 > span').content
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('http://momentjs.com/', opts)
+      doc.at_css('.hero-title > h1 > span').content
     end
   end
 end

+ 4 - 5
lib/docs/scrapers/mongoose.rb

@@ -27,11 +27,10 @@ module Docs
       Licensed under the MIT License.
     HTML
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://mongoosejs.com/docs/', options) do |doc|
-        label = doc.at_css('.pure-menu-link').content.strip
-        block.call label.sub(/Version /, '')
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://mongoosejs.com/docs/', opts)
+      label = doc.at_css('.pure-menu-link').content.strip
+      label.sub(/Version /, '')
     end
   end
 end

+ 4 - 5
lib/docs/scrapers/nginx.rb

@@ -26,11 +26,10 @@ module Docs
       Licensed under the BSD License.
     HTML
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://nginx.org/en/download.html', options) do |doc|
-        table = doc.at_css('#content > table').inner_html
-        block.call table.scan(/nginx-([0-9.]+)</)[0][0]
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://nginx.org/en/download.html', opts)
+      table = doc.at_css('#content > table').inner_html
+      table.scan(/nginx-([0-9.]+)</)[0][0]
     end
   end
 end

+ 4 - 5
lib/docs/scrapers/nginx_lua_module.rb

@@ -19,11 +19,10 @@ module Docs
       Licensed under the BSD License.
     HTML
 
-    def get_latest_version(options, &block)
-      get_github_tags('openresty', 'lua-nginx-module', options) do |tags|
-        tag = tags.find { |tag| !tag['name'].include?('rc') }
-        block.call tag['name'][1..-1]
-      end
+    def get_latest_version(opts)
+      tags = get_github_tags('openresty', 'lua-nginx-module', opts)
+      tag = tags.find {|tag| !tag['name'].include?('rc')}
+      tag['name'][1..-1]
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/nim.rb

@@ -18,10 +18,9 @@ module Docs
       Licensed under the MIT License.
     HTML
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://nim-lang.org/docs/overview.html', options) do |doc|
-        block.call doc.at_css('.container > .docinfo > tbody > tr:last-child > td').content.strip
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://nim-lang.org/docs/overview.html', opts)
+      doc.at_css('.container > .docinfo > tbody > tr:last-child > td').content.strip
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/node.rb

@@ -47,10 +47,9 @@ module Docs
       self.base_url = 'https://nodejs.org/dist/latest-v4.x/docs/api/'
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://nodejs.org/en/', options) do |doc|
-        block.call doc.at_css('#home-intro > .home-downloadblock:last-of-type > a')['data-version'][1..-1]
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://nodejs.org/en/', opts)
+      doc.at_css('#home-intro > .home-downloadblock:last-of-type > a')['data-version'][1..-1]
     end
   end
 end

+ 2 - 4
lib/docs/scrapers/nokogiri2.rb

@@ -20,10 +20,8 @@ module Docs
       Licensed under the MIT License.
     HTML
 
-    def get_latest_version(options, &block)
-      get_latest_github_release('sparklemotion', 'nokogiri', options) do |release|
-        block.call release['tag_name'][1..-1]
-      end
+    def get_latest_version(opts)
+      get_latest_github_release('sparklemotion', 'nokogiri', opts)['tag_name'][1..-1]
     end
   end
 end

+ 2 - 4
lib/docs/scrapers/npm.rb

@@ -30,10 +30,8 @@ module Docs
       npm is a trademark of npm, Inc.
     HTML
 
-    def get_latest_version(options, &block)
-      get_latest_github_release('npm', 'cli', options) do |release|
-        block.call release['tag_name'][1..-1]
-      end
+    def get_latest_version(opts)
+      get_latest_github_release('npm', 'cli', opts)['tag_name'][1..-1]
     end
   end
 end

+ 2 - 4
lib/docs/scrapers/numpy.rb

@@ -50,10 +50,8 @@ module Docs
       self.base_url = "https://docs.scipy.org/doc/numpy-#{self.release}/reference/"
     end
 
-    def get_latest_version(options, &block)
-      get_latest_github_release('numpy', 'numpy', options) do |release|
-        block.call release['tag_name'][1..-1]
-      end
+    def get_latest_version(opts)
+      get_latest_github_release('numpy', 'numpy', opts)['tag_name'][1..-1]
     end
   end
 end

+ 8 - 9
lib/docs/scrapers/openjdk.rb

@@ -87,7 +87,7 @@ module Docs
       File.read(path).force_encoding('iso-8859-1').encode('utf-8') rescue nil
     end
 
-    def get_latest_version(options, &block)
+    def get_latest_version(opts)
       latest_version = 8
       current_attempt = latest_version
       attempts = 0
@@ -95,17 +95,16 @@ module Docs
       while attempts < 3
         current_attempt += 1
 
-        fetch_doc("https://packages.debian.org/sid/openjdk-#{current_attempt}-doc", options) do |doc|
-          if doc.at_css('.perror').nil?
-            latest_version = current_attempt
-            attempts = 0
-          else
-            attempts += 1
-          end
+        doc = fetch_doc("https://packages.debian.org/sid/openjdk-#{current_attempt}-doc", opts)
+        if doc.at_css('.perror').nil?
+          latest_version = current_attempt
+          attempts = 0
+        else
+          attempts += 1
         end
       end
 
-      block.call latest_version
+      latest_version
     end
   end
 end

+ 2 - 4
lib/docs/scrapers/opentsdb.rb

@@ -19,10 +19,8 @@ module Docs
       Licensed under the GNU LGPLv2.1+ and GPLv3+ licenses.
     HTML
 
-    def get_latest_version(options, &block)
-      get_latest_github_release('OpenTSDB', 'opentsdb', options) do |release|
-        block.call release['tag_name'][1..-1]
-      end
+    def get_latest_version(opts)
+      get_latest_github_release('OpenTSDB', 'opentsdb', opts)['tag_name'][1..-1]
     end
   end
 end

+ 2 - 4
lib/docs/scrapers/padrino.rb

@@ -24,10 +24,8 @@ module Docs
       request_one(url_for('index')).body
     end
 
-    def get_latest_version(options, &block)
-      get_github_tags('padrino', 'padrino-framework', options) do |tags|
-        block.call tags[0]['name']
-      end
+    def get_latest_version(opts)
+      get_github_tags('padrino', 'padrino-framework', opts)[0]['name']
     end
   end
 end

+ 4 - 5
lib/docs/scrapers/pandas.rb

@@ -50,11 +50,10 @@ module Docs
       self.base_url = "http://pandas.pydata.org/pandas-docs/version/#{self.release}/"
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('http://pandas.pydata.org/pandas-docs/stable/', options) do |doc|
-        label = doc.at_css('.body > .section > p').content
-        block.call label.scan(/Version: ([0-9.]+)/)[0][0]
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('http://pandas.pydata.org/pandas-docs/stable/', opts)
+      label = doc.at_css('.body > .section > p').content
+      label.scan(/Version: ([0-9.]+)/)[0][0]
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/perl.rb

@@ -44,10 +44,9 @@ module Docs
       self.base_url = "https://perldoc.perl.org/#{self.release}/"
     end
 
-    def get_latest_version(options, &block)
-      fetch('https://perldoc.perl.org/static/perlversion.js', options) do |body|
-        block.call body.scan(/>Perl ([0-9.]+)/)[0][0]
-      end
+    def get_latest_version(opts)
+      body = fetch('https://perldoc.perl.org/static/perlversion.js', opts)
+      body.scan(/>Perl ([0-9.]+)/)[0][0]
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/phalcon.rb

@@ -30,10 +30,9 @@ module Docs
       self.base_url = 'https://docs.phalconphp.com/en/2.0.0/'
     end
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://docs.phalconphp.com/', options) do |doc|
-        block.call doc.at_css('.custom-select__version').content.strip.sub(/Version /, '')
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://docs.phalconphp.com/', opts)
+      doc.at_css('.custom-select__version').content.strip.sub(/Version /, '')
     end
   end
 end

+ 2 - 4
lib/docs/scrapers/phaser.rb

@@ -26,10 +26,8 @@ module Docs
       Licensed under the MIT License.
     HTML
 
-    def get_latest_version(options, &block)
-      get_latest_github_release('photonstorm', 'phaser', options) do |release|
-        block.call release['tag_name'][1..-1]
-      end
+    def get_latest_version(opts)
+      get_latest_github_release('photonstorm', 'phaser', opts)['tag_name'][1..-1]
     end
   end
 end

+ 3 - 4
lib/docs/scrapers/phoenix.rb

@@ -47,10 +47,9 @@ module Docs
       end
     }
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://hexdocs.pm/phoenix/Phoenix.html', options) do |doc|
-        block.call doc.at_css('.sidebar-projectVersion').content.strip[1..-1]
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://hexdocs.pm/phoenix/Phoenix.html', opts)
+      doc.at_css('.sidebar-projectVersion').content.strip[1..-1]
     end
   end
 end

+ 4 - 5
lib/docs/scrapers/php.rb

@@ -67,11 +67,10 @@ module Docs
       Licensed under the Creative Commons Attribution License v3.0 or later.
     HTML
 
-    def get_latest_version(options, &block)
-      fetch_doc('https://secure.php.net/manual/en/doc.changelog.php', options) do |doc|
-        label = doc.at_css('tbody.gen-changelog > tr > td').content
-        block.call label.split(',').last.strip
-      end
+    def get_latest_version(opts)
+      doc = fetch_doc('https://secure.php.net/manual/en/doc.changelog.php', opts)
+      label = doc.at_css('tbody.gen-changelog > tr > td').content
+      label.split(',').last.strip
     end
   end
 end

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.