1
0
mirror of https://github.com/github/choosealicense.com synced 2024-12-22 12:50:24 +01:00

spec_helper: Extract FSF approval from wking.github.io/fsf-api

Ideally the FSF would be maintaining the API (or any API), but until
someone can talk them into that I think we can save work by
collaborating on the mock API.  Using a JSON API also allows us to
drop the Nokogiri dependency.

The parens feel excessive, and I'm not familiar with Ruby, so they
might be.  However, removing the parens from the libre check resulted
in:

  $ ./script/check-approval ISC
  ./script/check-approval:8:in `require_relative': /.../choosealicense.com/spec/spec_helper.rb:108: syntax error, unexpected tSTRING_BEG, expecting keyword_then or ';' or '\n' (SyntaxError)
  ...gs') && meta['tags'].include? 'libre'
  ...                               ^
  /.../choosealicense.com/spec/spec_helper.rb:116: syntax error, unexpected keyword_end, expecting end-of-input
          from ./script/check-approval:8:in `<main>'
This commit is contained in:
W. Trevor King 2018-01-03 11:17:19 -08:00
parent 3ad9bf7f0f
commit 84a7bbbf96
2 changed files with 7 additions and 17 deletions

View File

@ -17,7 +17,6 @@ end
group :test do group :test do
gem 'html-proofer', '~> 3.0' gem 'html-proofer', '~> 3.0'
gem 'licensee' gem 'licensee'
gem 'nokogiri'
gem 'rake' gem 'rake'
gem 'rspec' gem 'rspec'
gem 'rubocop' gem 'rubocop'

View File

@ -4,7 +4,6 @@ require 'jekyll'
require 'json' require 'json'
require 'licensee' require 'licensee'
require 'open-uri' require 'open-uri'
require 'nokogiri'
module SpecHelper module SpecHelper
class << self class << self
@ -102,23 +101,15 @@ end
def fsf_approved_licenses def fsf_approved_licenses
SpecHelper.fsf_approved_licenses ||= begin SpecHelper.fsf_approved_licenses ||= begin
url = 'https://www.gnu.org/licenses/license-list.en.html' url = 'https://wking.github.io/fsf-api/licenses-full.json'
doc = Nokogiri::HTML(open(url).read) object = JSON.parse(open(url).read)
list = doc.css('.green dt')
licenses = {} licenses = {}
list.each do |license| object.each_value do |meta|
a = license.css('a').find { |link| !link.text.nil? && !link.text.empty? && link.attr('id') } next unless (meta.include? 'identifiers') && (meta['identifiers'].include? 'spdx') && (meta.include? 'tags') && (meta['tags'].include? 'libre')
next if a.nil? meta['identifiers']['spdx'].each do |identifier|
id = a.attr('id').downcase licenses[identifier.downcase] = meta['name']
name = a.text.strip
licenses[id] = name
end end
# FSF approved the Clear BSD, but doesn't use its SPDX ID or Name
if licenses.keys.include? 'clearbsd'
licenses['bsd-3-clause-clear'] = licenses['clearbsd']
end end
licenses licenses
end end
end end