From f1b464b1edc633efa7509121c3be5ce6e623cef8 Mon Sep 17 00:00:00 2001 From: Jasper van Merle Date: Fri, 6 Nov 2020 22:51:23 +0100 Subject: [PATCH] Fix broken get_latest_version implementations --- lib/docs/scrapers/ansible.rb | 2 +- lib/docs/scrapers/babel.rb | 3 +-- lib/docs/scrapers/chef.rb | 4 ++-- lib/docs/scrapers/codeigniter.rb | 5 ++--- lib/docs/scrapers/dart.rb | 3 +-- lib/docs/scrapers/docker.rb | 6 +++--- lib/docs/scrapers/elixir.rb | 2 +- lib/docs/scrapers/erlang.rb | 3 +-- lib/docs/scrapers/fish.rb | 3 +-- lib/docs/scrapers/gnu_cobol.rb | 8 +++++--- lib/docs/scrapers/gnuplot.rb | 4 ++++ lib/docs/scrapers/godot.rb | 3 +-- lib/docs/scrapers/influxdata.rb | 4 +--- lib/docs/scrapers/moment.rb | 3 +-- lib/docs/scrapers/pandas.rb | 3 +-- lib/docs/scrapers/perl.rb | 3 +-- lib/docs/scrapers/php.rb | 5 ++--- lib/docs/scrapers/python.rb | 2 +- lib/docs/scrapers/react_native.rb | 4 ++-- lib/docs/scrapers/scikit_learn.rb | 3 +-- lib/docs/scrapers/statsmodels.rb | 3 +-- lib/docs/scrapers/vagrant.rb | 3 +-- 22 files changed, 35 insertions(+), 44 deletions(-) diff --git a/lib/docs/scrapers/ansible.rb b/lib/docs/scrapers/ansible.rb index 6826b393..5a19e393 100644 --- a/lib/docs/scrapers/ansible.rb +++ b/lib/docs/scrapers/ansible.rb @@ -71,7 +71,7 @@ module Docs def get_latest_version(opts) doc = fetch_doc('https://docs.ansible.com/ansible/latest/index.html', opts) - doc.at_css('.DocSiteProduct-CurrentVersion').content.strip + doc.at_css('.version').content.strip end end end diff --git a/lib/docs/scrapers/babel.rb b/lib/docs/scrapers/babel.rb index c8d716f1..f8784e80 100644 --- a/lib/docs/scrapers/babel.rb +++ b/lib/docs/scrapers/babel.rb @@ -24,8 +24,7 @@ module Docs end def get_latest_version(opts) - doc = fetch_doc('https://babeljs.io/docs/en/', opts) - doc.at_css('a[href="/versions"] > h3').content + get_latest_github_release('babel', 'babel', opts) end end end diff --git a/lib/docs/scrapers/chef.rb b/lib/docs/scrapers/chef.rb index f0b7d6b0..3295f2e4 100644 --- a/lib/docs/scrapers/chef.rb +++ b/lib/docs/scrapers/chef.rb @@ -49,8 +49,8 @@ module Docs end def get_latest_version(opts) - doc = fetch_doc('https://downloads.chef.io/chef', opts) - doc.at_css('h1.product-heading > span').content.strip + doc = fetch_doc('https://downloads.chef.io/products/infra', opts) + doc.at_css('#versions > option').content.strip end end end diff --git a/lib/docs/scrapers/codeigniter.rb b/lib/docs/scrapers/codeigniter.rb index 05258d9a..b108887b 100644 --- a/lib/docs/scrapers/codeigniter.rb +++ b/lib/docs/scrapers/codeigniter.rb @@ -40,9 +40,8 @@ module Docs 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] + tags = get_github_tags('codeigniter4', 'codeigniter4', opts) + tags[0]['name'][1..-1] end end end diff --git a/lib/docs/scrapers/dart.rb b/lib/docs/scrapers/dart.rb index e3b8c289..002cdce9 100644 --- a/lib/docs/scrapers/dart.rb +++ b/lib/docs/scrapers/dart.rb @@ -32,8 +32,7 @@ module Docs def get_latest_version(opts) doc = fetch_doc('https://api.dartlang.org/', opts) - label = doc.at_css('footer > span').content.strip - label.sub(/Dart /, '') + doc.at_css('footer > span').content.sub(/Dart/, '').strip end end end diff --git a/lib/docs/scrapers/docker.rb b/lib/docs/scrapers/docker.rb index 06c3344d..6328644b 100644 --- a/lib/docs/scrapers/docker.rb +++ b/lib/docs/scrapers/docker.rb @@ -260,9 +260,9 @@ module Docs 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] + doc = fetch_doc('https://docs.docker.com/engine/release-notes/', opts) + latest_version = doc.at_css('.content > section > h1[id^="version-"]').content.strip + latest_version.rpartition(' ')[-1] end end end diff --git a/lib/docs/scrapers/elixir.rb b/lib/docs/scrapers/elixir.rb index f3cc94b2..0888bd44 100644 --- a/lib/docs/scrapers/elixir.rb +++ b/lib/docs/scrapers/elixir.rb @@ -126,7 +126,7 @@ module Docs 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] + doc.at_css('.sidebar-projectVersion').content.strip[1..-1] end end end diff --git a/lib/docs/scrapers/erlang.rb b/lib/docs/scrapers/erlang.rb index 14a87cf5..a888e511 100644 --- a/lib/docs/scrapers/erlang.rb +++ b/lib/docs/scrapers/erlang.rb @@ -57,8 +57,7 @@ module Docs 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 /, '') + get_latest_github_release('erlang', 'otp', opts)[4..-1] end end end diff --git a/lib/docs/scrapers/fish.rb b/lib/docs/scrapers/fish.rb index 3dac427f..a8b1ce8b 100644 --- a/lib/docs/scrapers/fish.rb +++ b/lib/docs/scrapers/fish.rb @@ -54,8 +54,7 @@ module Docs 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] + get_latest_github_release('fish-shell', 'fish-shell', opts) end end end diff --git a/lib/docs/scrapers/gnu_cobol.rb b/lib/docs/scrapers/gnu_cobol.rb index 9965359d..a211ef49 100644 --- a/lib/docs/scrapers/gnu_cobol.rb +++ b/lib/docs/scrapers/gnu_cobol.rb @@ -18,9 +18,11 @@ module Docs HTML def get_latest_version(opts) - doc = fetch_doc('https://open-cobol.sourceforge.io/HTML/gnucobpg.html', opts) - title = doc.at_css('h1').content - title.scan(/([0-9.]+)/)[0][0] + fetch_doc('https://sourceforge.net/projects/gnucobol/files/gnucobol/', opts) + .css('#files_list > tbody > tr') + .map { |file| file['title'] } + .sort_by { |version| version.to_f } + .last end end end diff --git a/lib/docs/scrapers/gnuplot.rb b/lib/docs/scrapers/gnuplot.rb index 0682ade4..4753e195 100644 --- a/lib/docs/scrapers/gnuplot.rb +++ b/lib/docs/scrapers/gnuplot.rb @@ -37,5 +37,9 @@ module Docs Distributed under the gnuplot license (rights to distribute modified versions are withheld). HTML + def get_latest_version(opts) + doc = fetch_doc('https://sourceforge.net/projects/gnuplot/files/gnuplot/', opts) + doc.at_css('#files_list > tbody > tr:nth-child(2)')['title'] + end end end diff --git a/lib/docs/scrapers/godot.rb b/lib/docs/scrapers/godot.rb index 1ccf693f..03f8192e 100644 --- a/lib/docs/scrapers/godot.rb +++ b/lib/docs/scrapers/godot.rb @@ -44,8 +44,7 @@ module Docs end def get_latest_version(opts) - doc = fetch_doc('https://docs.godotengine.org/', opts) - doc.at_css('.version').content.strip + get_latest_github_release('godotengine', 'godot', opts).split('-')[0] end end end diff --git a/lib/docs/scrapers/influxdata.rb b/lib/docs/scrapers/influxdata.rb index db160f9c..6a6bff7e 100644 --- a/lib/docs/scrapers/influxdata.rb +++ b/lib/docs/scrapers/influxdata.rb @@ -48,9 +48,7 @@ module Docs HTML 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] + get_latest_github_release('influxdata', 'influxdb', opts) end end end diff --git a/lib/docs/scrapers/moment.rb b/lib/docs/scrapers/moment.rb index 5b7491ea..e74163be 100644 --- a/lib/docs/scrapers/moment.rb +++ b/lib/docs/scrapers/moment.rb @@ -24,8 +24,7 @@ module Docs HTML def get_latest_version(opts) - doc = fetch_doc('http://momentjs.com/', opts) - doc.at_css('.hero-title > h1 > span').content + get_github_tags('moment', 'moment', opts)[0]['name'] end end end diff --git a/lib/docs/scrapers/pandas.rb b/lib/docs/scrapers/pandas.rb index e333da7f..c92d6228 100644 --- a/lib/docs/scrapers/pandas.rb +++ b/lib/docs/scrapers/pandas.rb @@ -63,8 +63,7 @@ module Docs 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] + doc.at_css('#pandas-documentation').content.scan(/Version: ([0-9.]+)/)[0][0] end end end diff --git a/lib/docs/scrapers/perl.rb b/lib/docs/scrapers/perl.rb index ebf0a653..8c0462e5 100644 --- a/lib/docs/scrapers/perl.rb +++ b/lib/docs/scrapers/perl.rb @@ -46,8 +46,7 @@ module Docs def get_latest_version(opts) doc = fetch_doc('https://perldoc.perl.org/', opts) - header = doc.at_css('h2.h1').content - header.scan(/Perl ([0-9.]+)/)[0][0] + doc.at_css('#dropdownlink-stable').content end end end diff --git a/lib/docs/scrapers/php.rb b/lib/docs/scrapers/php.rb index 181d8b67..c6ab0581 100644 --- a/lib/docs/scrapers/php.rb +++ b/lib/docs/scrapers/php.rb @@ -68,9 +68,8 @@ module Docs HTML 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 + doc = fetch_doc('https://www.php.net/supported-versions.php', opts) + doc.at_css('table > tbody > .stable:last-of-type > td > a').content.strip end end end diff --git a/lib/docs/scrapers/python.rb b/lib/docs/scrapers/python.rb index 89f1c3c0..f9a9768e 100644 --- a/lib/docs/scrapers/python.rb +++ b/lib/docs/scrapers/python.rb @@ -60,7 +60,7 @@ module Docs def get_latest_version(opts) doc = fetch_doc('https://docs.python.org/', opts) - doc.at_css('.version_switcher_placeholder').content + doc.at_css('title').content.split(' ')[0] end end end diff --git a/lib/docs/scrapers/react_native.rb b/lib/docs/scrapers/react_native.rb index fe87e492..d00e55c2 100644 --- a/lib/docs/scrapers/react_native.rb +++ b/lib/docs/scrapers/react_native.rb @@ -32,8 +32,8 @@ module Docs HTML def get_latest_version(opts) - doc = fetch_doc('https://facebook.github.io/react-native/docs/getting-started.html', opts) - doc.at_css('header > a > h3').content + doc = fetch_doc('https://reactnative.dev/docs/getting-started', opts) + doc.at_css('meta[name="docsearch:version"]')['content'] end end end diff --git a/lib/docs/scrapers/scikit_learn.rb b/lib/docs/scrapers/scikit_learn.rb index 973c9d7e..933484f0 100644 --- a/lib/docs/scrapers/scikit_learn.rb +++ b/lib/docs/scrapers/scikit_learn.rb @@ -26,8 +26,7 @@ module Docs HTML def get_latest_version(opts) - doc = fetch_doc('https://scikit-learn.org/stable/documentation.html', opts) - doc.at_css('.body h1').content.scan(/([0-9.]+)/)[0][0] + get_latest_github_release('scikit-learn', 'scikit-learn', opts) end end end diff --git a/lib/docs/scrapers/statsmodels.rb b/lib/docs/scrapers/statsmodels.rb index 3e8a357c..74dcaf9c 100644 --- a/lib/docs/scrapers/statsmodels.rb +++ b/lib/docs/scrapers/statsmodels.rb @@ -22,8 +22,7 @@ module Docs HTML def get_latest_version(opts) - doc = fetch_doc('http://www.statsmodels.org/stable/', opts) - doc.at_css('.sphinxsidebarwrapper h3 + p > b').content[1..-1] + get_latest_github_release('statsmodels', 'statsmodels', opts) end end end diff --git a/lib/docs/scrapers/vagrant.rb b/lib/docs/scrapers/vagrant.rb index 7400fc8c..fe38cc55 100644 --- a/lib/docs/scrapers/vagrant.rb +++ b/lib/docs/scrapers/vagrant.rb @@ -20,8 +20,7 @@ module Docs HTML def get_latest_version(opts) - contents = get_github_file_contents('hashicorp', 'vagrant', 'website/config.rb', opts) - contents.scan(/version\s+=\s+"([0-9.]+)"/)[0][0] + get_github_tags('hashicorp', 'vagrant', opts)[0]['name'][1..-1] end end end