spdx 1.4.4 → 2.0.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,25 +1,28 @@
1
- lib = File.expand_path('lib', __dir__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path("lib", __dir__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require 'spdx/version'
5
+ require "spdx/version"
4
6
 
5
7
  Gem::Specification.new do |spec|
6
- spec.name = 'spdx'
8
+ spec.name = "spdx"
7
9
  spec.version = Spdx::VERSION
8
- spec.authors = ['Andrew Nesbitt']
9
- spec.email = ['andrewnez@gmail.com']
10
- spec.summary = 'A SPDX license normalizer'
11
- spec.homepage = 'https://github.com/librariesio/spdx'
12
- spec.license = 'MIT'
10
+ spec.authors = ["Tidelift, Inc."]
11
+ spec.email = ["support@tidelift.com"]
12
+ spec.summary = "A SPDX license normalizer"
13
+ spec.homepage = "https://github.com/librariesio/spdx"
14
+ spec.license = "MIT"
13
15
 
14
16
  spec.files = `git ls-files -z`.split("\x0")
15
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
16
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
- spec.require_paths = ['lib']
19
+ spec.require_paths = ["lib"]
18
20
 
19
- spec.add_dependency 'fuzzy_match', '~> 2.1'
20
- spec.add_dependency 'spdx-licenses', '~> 1.2'
21
- spec.add_development_dependency 'bundler', '~> 1.16'
22
- spec.add_development_dependency 'rake', '~> 12'
23
- spec.add_development_dependency 'rspec', '~> 3.7'
24
- spec.add_development_dependency 'rubocop'
21
+ spec.add_dependency "fuzzy_match", "~> 2.1"
22
+ spec.add_dependency "treetop", "~> 1.6"
23
+ spec.add_development_dependency "bundler"
24
+ spec.add_development_dependency "pry"
25
+ spec.add_development_dependency "rake", "~> 12"
26
+ spec.add_development_dependency "rspec", "~> 3.7"
27
+ spec.add_development_dependency "rubocop"
25
28
  end
@@ -1,183 +1,231 @@
1
- require 'spec_helper'
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
2
4
 
3
5
  describe Spdx do
4
- describe 'find' do
5
- it 'should return know license from short code' do
6
- expect(Spdx.find('Apache-2.0').name).to eq('Apache License 2.0')
6
+ describe "find" do
7
+ it "should return know license from short code" do
8
+ expect(Spdx.find("Apache-2.0").name).to eq("Apache License 2.0")
7
9
  end
8
10
 
9
- it 'should work with case-insentive short codes' do
10
- expect(Spdx.find('apache-2.0').name).to eq('Apache License 2.0')
11
- expect(Spdx.find('agpl-3.0').name).to eq('GNU Affero General Public License v3.0')
11
+ it "should work with case-insentive short codes" do
12
+ expect(Spdx.find("apache-2.0").name).to eq("Apache License 2.0")
13
+ expect(Spdx.find("agpl-3.0").name).to eq("GNU Affero General Public License v3.0")
12
14
  end
13
15
 
14
- it 'should return know license from full name' do
15
- expect(Spdx.find('Apache License 2.0').name).to eq('Apache License 2.0')
16
+ it "should return know license from full name" do
17
+ expect(Spdx.find("Apache License 2.0").name).to eq("Apache License 2.0")
16
18
  end
17
19
 
18
- it 'should return nil for commercial' do
19
- expect(Spdx.find('Commercial')).to be_nil
20
+ it "should return nil for commercial" do
21
+ expect(Spdx.find("Commercial")).to be_nil
20
22
  end
21
23
 
22
- it 'should return nil for garbage' do
23
- expect(Spdx.find('foo bar baz')).to be_nil
24
- expect(Spdx.find('Copyright Zendesk. All Rights Reserved.')).to be_nil
25
- expect(Spdx.find('https://github.com/AuthorizeNet/sdk-ruby/blob/master/license.txt')).to be_nil
24
+ it "should return nil for garbage" do
25
+ expect(Spdx.find("foo bar baz")).to be_nil
26
+ expect(Spdx.find("https://github.com/AuthorizeNet/sdk-ruby/blob/master/license.txt")).to be_nil
26
27
  end
27
28
 
28
- it 'should return know license from an alias' do
29
- expect(Spdx.find('The Apache Software License, Version 2.0').name).to eq('Apache License 2.0')
30
- expect(Spdx.find('Apache 2.0').name).to eq('Apache License 2.0')
31
- expect(Spdx.find('Apache2').name).to eq('Apache License 2.0')
32
- expect(Spdx.find('Apache License, Version 2.0').name).to eq('Apache License 2.0')
33
- expect(Spdx.find('Educational Community License, Version 2.0').name).to eq('Educational Community License v2.0')
34
- expect(Spdx.find('CDDL + GPLv2 with classpath exception').name).to \
35
- eq('GNU General Public License v2.0 w/Classpath exception')
36
- expect(Spdx.find('The MIT License').name).to eq('MIT License')
37
- expect(Spdx.find('UNLICENSE').name).to eq('The Unlicense')
29
+ it "should return know license from an alias" do
30
+ expect(Spdx.find("The Apache Software License, Version 2.0").name).to eq("Apache License 2.0")
31
+ expect(Spdx.find("Apache2").name).to eq("Apache License 2.0")
32
+ expect(Spdx.find("Apache License, Version 2.0").name).to eq("Apache License 2.0")
33
+ expect(Spdx.find("Educational Community License, Version 2.0").name).to eq("Educational Community License v2.0")
34
+ expect(Spdx.find("CDDL + GPLv2 with classpath exception").name).to \
35
+ eq("GNU General Public License v2.0 w/Classpath exception")
36
+ expect(Spdx.find("The MIT License").name).to eq("MIT License")
37
+ expect(Spdx.find("UNLICENSE").name).to eq("The Unlicense")
38
38
  end
39
39
 
40
- it 'should strip whitespace from strings before lookups' do
41
- expect(Spdx.find(' BSD-3-Clause').id).to eq('BSD-3-Clause')
40
+ it "should strip whitespace from strings before lookups" do
41
+ expect(Spdx.find(" BSD-3-Clause").id).to eq("BSD-3-Clause")
42
42
  end
43
43
 
44
- it 'should handle pypi classifiers properly' do
44
+ it "should handle pypi classifiers properly" do
45
45
  pypi_mappings = [
46
- ['Aladdin Free Public License (AFPL)', 'Aladdin'],
47
- ['CC0 1.0 Universal (CC0 1.0) Public Domain Dedication', 'CC0-1.0'],
48
- ['CeCILL-B Free Software License Agreement (CECILL-B)', 'CECILL-B'],
49
- ['CeCILL-C Free Software License Agreement (CECILL-C)', 'CECILL-C'],
50
- ['Eiffel Forum License (EFL)', 'EFL-2.0'],
51
- ['Netscape Public License (NPL)', 'NPL-1.1'],
52
- ['Nokia Open Source License (NOKOS)', 'Nokia'],
53
- ['Academic Free License (AFL)', 'AFL-3.0'],
54
- ['Apache Software License', 'Apache-2.0'],
55
- ['Apple Public Source License', 'APSL-2.0'],
56
- ['Artistic License', 'Artistic-2.0'],
57
- ['Attribution Assurance License', 'AAL'],
58
- ['Boost Software License 1.0 (BSL-1.0)', 'BSL-1.0'],
59
- ['BSD License', 'BSD-3-Clause'],
60
- ['Common Development and Distribution License 1.0 (CDDL-1.0)', 'CDDL-1.0'],
61
- ['Common Public License', 'CPL-1.0'],
62
- ['Eclipse Public License 1.0 (EPL-1.0)', 'EPL-1.0'],
63
- ['Eclipse Public License 2.0 (EPL-2.0)', 'EPL-2.0'],
64
- ['Eiffel Forum License', 'EFL-2.0'],
65
- ['European Union Public Licence 1.0 (EUPL 1.0)', 'EUPL-1.0'],
66
- ['European Union Public Licence 1.1 (EUPL 1.1)', 'EUPL-1.1'],
67
- ['European Union Public Licence 1.2 (EUPL 1.2)', 'EUPL-1.2'],
68
- ['GNU Affero General Public License v3', 'AGPL-3.0'],
69
- ['GNU Affero General Public License v3 or later (AGPLv3+)', 'AGPL-3.0-or-later'],
70
- ['GNU Free Documentation License (FDL)', 'GFDL-1.3'],
71
- ['GNU General Public License (GPL)', 'GPL-2.0+'],
72
- ['GNU General Public License v2 (GPLv2)', 'GPL-2.0'],
73
- ['GNU General Public License v2 or later (GPLv2+)', 'GPL-2.0+'],
74
- ['GNU General Public License v3 (GPLv3)', 'GPL-3.0'],
75
- ['GNU General Public License v3 or later (GPLv3+)', 'GPL-3.0+'],
76
- ['GNU Lesser General Public License v2 (LGPLv2)', 'LGPL-2.0'],
77
- ['GNU Lesser General Public License v2 or later (LGPLv2+)', 'LGPL-2.0+'],
78
- ['GNU Lesser General Public License v3 (LGPLv3)', 'LGPL-3.0'],
79
- ['GNU Lesser General Public License v3 or later (LGPLv3+)', 'LGPL-3.0+'],
80
- ['GNU Library or Lesser General Public License (LGPL)', 'LGPL-2.0+'],
81
- ['IBM Public License', 'IPL-1.0'],
82
- ['Intel Open Source License', 'Intel'],
83
- ['ISC License (ISCL)', 'ISC'],
84
- ['MirOS License (MirOS)', 'MirOS'],
85
- ['MIT License', 'MIT'],
86
- ['Motosoto License', 'Motosoto'],
87
- ['Mozilla Public License 1.0 (MPL)', 'MPL-1.0'],
88
- ['Mozilla Public License 1.1 (MPL 1.1)', 'MPL-1.1'],
89
- ['Mozilla Public License 2.0 (MPL 2.0)', 'MPL-2.0'],
90
- ['Nethack General Public License', 'NGPL'],
91
- ['Nokia Open Source License', 'Nokia'],
92
- ['Open Group Test Suite License', 'OGTSL'],
93
- ['PostgreSQL License', 'PostgreSQL'],
94
- ['Python License (CNRI Python License)', 'CNRI-Python'],
95
- ['Python Software Foundation License', 'Python-2.0'],
96
- ['Qt Public License (QPL)', 'QPL-1.0'],
97
- ['Ricoh Source Code Public License', 'RSCPL'],
98
- ['SIL Open Font License 1.1 (OFL-1.1)', 'OFL-1.1'],
99
- ['Sleepycat License', 'Sleepycat'],
100
- ['Sun Industry Standards Source License (SISSL)', 'SISSL-1.2'],
101
- ['Sun Public License', 'SPL-1.0'],
102
- ['Universal Permissive License (UPL)', 'UPL-1.0'],
103
- ['University of Illinois/NCSA Open Source License', 'NCSA'],
104
- ['Vovida Software License 1.0', 'VSL-1.0'],
105
- ['W3C License', 'W3C'],
106
- ['X.Net License', 'Xnet'],
107
- ['zlib/libpng License', 'zlib-acknowledgement'],
108
- ['Zope Public License', 'ZPL-2.1']
46
+ ["Aladdin Free Public License (AFPL)", "Aladdin"],
47
+ ["CC0 1.0 Universal (CC0 1.0) Public Domain Dedication", "CC0-1.0"],
48
+ ["CeCILL-B Free Software License Agreement (CECILL-B)", "CECILL-B"],
49
+ ["CeCILL-C Free Software License Agreement (CECILL-C)", "CECILL-C"],
50
+ ["Eiffel Forum License (EFL)", "EFL-2.0"],
51
+ ["Netscape Public License (NPL)", "NPL-1.1"],
52
+ ["Nokia Open Source License (NOKOS)", "Nokia"],
53
+ ["Academic Free License (AFL)", "AFL-3.0"],
54
+ ["Apache Software License", "Apache-2.0"],
55
+ ["Apple Public Source License", "APSL-2.0"],
56
+ ["Artistic License", "Artistic-2.0"],
57
+ ["Attribution Assurance License", "AAL"],
58
+ ["Boost Software License 1.0 (BSL-1.0)", "BSL-1.0"],
59
+ ["BSD License", "BSD-3-Clause"],
60
+ ["Common Development and Distribution License 1.0 (CDDL-1.0)", "CDDL-1.0"],
61
+ ["Common Public License", "CPL-1.0"],
62
+ ["Eclipse Public License 1.0 (EPL-1.0)", "EPL-1.0"],
63
+ ["Eclipse Public License 2.0 (EPL-2.0)", "EPL-2.0"],
64
+ ["Eiffel Forum License", "EFL-2.0"],
65
+ ["European Union Public Licence 1.0 (EUPL 1.0)", "EUPL-1.0"],
66
+ ["European Union Public Licence 1.1 (EUPL 1.1)", "EUPL-1.1"],
67
+ ["European Union Public Licence 1.2 (EUPL 1.2)", "EUPL-1.2"],
68
+ ["GNU Affero General Public License v3", "AGPL-3.0"],
69
+ ["GNU Affero General Public License v3 or later (AGPLv3+)", "AGPL-3.0-or-later"],
70
+ ["GNU Free Documentation License (FDL)", "GFDL-1.3"],
71
+ ["GNU General Public License (GPL)", "GPL-2.0+"],
72
+ ["GNU General Public License v2 (GPLv2)", "GPL-2.0"],
73
+ ["GNU General Public License v2 or later (GPLv2+)", "GPL-2.0+"],
74
+ ["GNU General Public License v3 (GPLv3)", "GPL-3.0"],
75
+ ["GNU General Public License v3 or later (GPLv3+)", "GPL-3.0+"],
76
+ ["GNU Lesser General Public License v2 (LGPLv2)", "LGPL-2.0"],
77
+ ["GNU Lesser General Public License v2 or later (LGPLv2+)", "LGPL-2.0+"],
78
+ ["GNU Lesser General Public License v3 (LGPLv3)", "LGPL-3.0"],
79
+ ["GNU Lesser General Public License v3 or later (LGPLv3+)", "LGPL-3.0+"],
80
+ ["GNU Library or Lesser General Public License (LGPL)", "LGPL-2.0+"],
81
+ ["IBM Public License", "IPL-1.0"],
82
+ ["Intel Open Source License", "Intel"],
83
+ ["ISC License (ISCL)", "ISC"],
84
+ # ['MirOS License (MirOS)', 'MirOS'],
85
+ ["MIT License", "MIT"],
86
+ ["Motosoto License", "Motosoto"],
87
+ ["Mozilla Public License 1.0 (MPL)", "MPL-1.0"],
88
+ ["Mozilla Public License 1.1 (MPL 1.1)", "MPL-1.1"],
89
+ ["Mozilla Public License 2.0 (MPL 2.0)", "MPL-2.0"],
90
+ ["Nethack General Public License", "NGPL"],
91
+ ["Nokia Open Source License", "Nokia"],
92
+ ["Open Group Test Suite License", "OGTSL"],
93
+ ["PostgreSQL License", "PostgreSQL"],
94
+ ["Python License (CNRI Python License)", "CNRI-Python"],
95
+ # ['Python Software Foundation License', 'Python-2.0'],
96
+ ["Qt Public License (QPL)", "QPL-1.0"],
97
+ ["Ricoh Source Code Public License", "RSCPL"],
98
+ ["SIL Open Font License 1.1 (OFL-1.1)", "OFL-1.1"],
99
+ ["Sleepycat License", "Sleepycat"],
100
+ ["Sun Industry Standards Source License (SISSL)", "SISSL-1.2"],
101
+ ["Sun Public License", "SPL-1.0"],
102
+ ["Universal Permissive License (UPL)", "UPL-1.0"],
103
+ ["University of Illinois/NCSA Open Source License", "NCSA"],
104
+ ["Vovida Software License 1.0", "VSL-1.0"],
105
+ ["W3C License", "W3C"],
106
+ ["X.Net License", "Xnet"],
107
+ ["zlib/libpng License", "zlib-acknowledgement"],
108
+ ["Zope Public License", "ZPL-2.1"],
109
109
  ]
110
110
  pypi_mappings.each do |license, mapped|
111
111
  expect(Spdx.find(license).id).to eq(mapped)
112
112
  end
113
113
  end
114
114
 
115
- it 'should return know licenses for special cases' do
116
- expect(Spdx.find('MPL1').name).to eq('Mozilla Public License 1.0')
117
- expect(Spdx.find('MPL1.0').name).to eq('Mozilla Public License 1.0')
118
- expect(Spdx.find('MPL1.1').name).to eq('Mozilla Public License 1.1')
119
- expect(Spdx.find('MPL2').name).to eq('Mozilla Public License 2.0')
120
- expect(Spdx.find('MPL2.0').name).to eq('Mozilla Public License 2.0')
121
- expect(Spdx.find('GPL3').name).to eq('GNU General Public License v3.0 only')
122
- expect(Spdx.find('GPL v3').name).to eq('GNU General Public License v3.0 only')
123
- expect(Spdx.find('GPL3').name).to eq('GNU General Public License v3.0 only')
124
- expect(Spdx.find('GPL 3.0').name).to eq('GNU General Public License v3.0 only')
125
- expect(Spdx.find('GPL-3').name).to eq('GNU General Public License v3.0 only')
126
- expect(Spdx.find('GPL-2 | GPL-3 [expanded from: GPL (≥ 2)]').name).to \
127
- eq('GNU General Public License v2.0 or later')
128
- expect(Spdx.find('GPL-2 | GPL-3 [expanded from: GPL]').name).to \
129
- eq('GNU General Public License v2.0 or later')
130
- expect(Spdx.find('GPL (≥ 3)').name).to eq('GNU General Public License v3.0 or later')
131
- expect(Spdx.find('gpl30').name).to eq('GNU General Public License v3.0 only')
132
- expect(Spdx.find('GPL v2+').name).to eq('GNU General Public License v2.0 or later')
133
- expect(Spdx.find('GPL 2').name).to eq('GNU General Public License v2.0 only')
134
- expect(Spdx.find('GPL v2').name).to eq('GNU General Public License v2.0 only')
135
- expect(Spdx.find('GPL2').name).to eq('GNU General Public License v2.0 only')
136
- expect(Spdx.find('GPL-2 | GPL-3').name).to eq('GNU General Public License v2.0 or later')
137
- expect(Spdx.find('GPL-2 | GPL-3 [expanded from: GPL (≥ 2.0)]').name).to \
138
- eq('GNU General Public License v2.0 or later')
139
- expect(Spdx.find('GPL2 w/ CPE').name).to eq('GNU General Public License v2.0 w/Classpath exception')
140
- expect(Spdx.find('GPL 2.0').name).to eq('GNU General Public License v2.0 only')
141
- expect(Spdx.find('New BSD License (GPL-compatible)').name).to eq('BSD 3-Clause "New" or "Revised" License')
142
- expect(Spdx.find('The GPL V3').name).to eq('GNU General Public License v3.0 only')
143
- expect(Spdx.find('perl_5').name).to eq('Artistic License 1.0 (Perl)')
144
- expect(Spdx.find('BSD3').name).to eq('BSD 3-Clause "New" or "Revised" License')
145
- expect(Spdx.find('BSD').name).to eq('BSD 3-Clause "New" or "Revised" License')
146
- expect(Spdx.find('GPLv3').name).to eq('GNU General Public License v3.0 only')
147
- expect(Spdx.find('LGPLv2 or later').name).to eq('GNU Library General Public License v2.1 or later')
148
- expect(Spdx.find('GPLv2 or later').name).to eq('GNU General Public License v2.0 or later')
149
- expect(Spdx.find('Public Domain').name).to eq('The Unlicense')
150
- expect(Spdx.find('GPL-2').name).to eq('GNU General Public License v2.0 only')
151
- expect(Spdx.find('GPL').name).to eq('GNU General Public License v2.0 or later')
152
- expect(Spdx.find('GNU LESSER GENERAL PUBLIC LICENSE').name).to \
153
- eq('GNU Library General Public License v2.1 or later')
154
- expect(Spdx.find('New BSD License').name).to eq('BSD 3-Clause "New" or "Revised" License')
155
- expect(Spdx.find('(MIT OR X11) ').name).to eq('MIT License')
156
- expect(Spdx.find('mit-license').name).to eq('MIT License')
157
- expect(Spdx.find('lgpl-3').name).to eq('GNU Lesser General Public License v3.0 only')
158
- expect(Spdx.find('agpl-3').name).to eq('GNU Affero General Public License v3.0')
159
- expect(Spdx.find('cc by-sa 4.0').name).to eq('Creative Commons Attribution Share Alike 4.0 International')
160
- expect(Spdx.find('cc by-nc-sa 3.0').name).to \
161
- eq('Creative Commons Attribution Non Commercial Share Alike 3.0 Unported')
162
- expect(Spdx.find('cc by-sa 3.0').name).to eq('Creative Commons Attribution Share Alike 3.0 Unported')
163
- expect(Spdx.find('gpl_1').name).to eq('GNU General Public License v1.0 only')
164
- expect(Spdx.find('gpl_2').name).to eq('GNU General Public License v2.0 only')
165
- expect(Spdx.find('gpl_3').name).to eq('GNU General Public License v3.0 only')
166
- expect(Spdx.find('artistic_2').name).to eq('Artistic License 2.0')
167
- expect(Spdx.find('artistic_1').name).to eq('Artistic License 1.0')
168
- expect(Spdx.find('apache_2_0').name).to eq('Apache License 2.0')
169
- expect(Spdx.find('apache_v2').name).to eq('Apache License 2.0')
170
- expect(Spdx.find('lgpl_2_1').name).to eq('GNU Lesser General Public License v2.1 only')
171
- expect(Spdx.find('lgpl_v2_1').name).to eq('GNU Lesser General Public License v2.1 only')
115
+ it "should return know licenses for special cases" do
116
+ expect(Spdx.find("MPL1").name).to eq("Mozilla Public License 1.0")
117
+ expect(Spdx.find("MPL1.0").name).to eq("Mozilla Public License 1.0")
118
+ expect(Spdx.find("MPL1.1").name).to eq("Mozilla Public License 1.1")
119
+ expect(Spdx.find("MPL2").name).to eq("Mozilla Public License 2.0")
120
+ expect(Spdx.find("MPL2.0").name).to eq("Mozilla Public License 2.0")
121
+ expect(Spdx.find("GPL3").name).to eq("GNU General Public License v3.0 only")
122
+ expect(Spdx.find("GPL v3").name).to eq("GNU General Public License v3.0 only")
123
+ expect(Spdx.find("GPL3").name).to eq("GNU General Public License v3.0 only")
124
+ expect(Spdx.find("GPL 3.0").name).to eq("GNU General Public License v3.0 only")
125
+ expect(Spdx.find("GPL-3").name).to eq("GNU General Public License v3.0 only")
126
+ expect(Spdx.find("GPL-2 | GPL-3 [expanded from: GPL (≥ 2)]").name).to \
127
+ eq("GNU General Public License v2.0 or later")
128
+ expect(Spdx.find("GPL-2 | GPL-3 [expanded from: GPL]").name).to \
129
+ eq("GNU General Public License v2.0 or later")
130
+ expect(Spdx.find("GPL (≥ 3)").name).to eq("GNU General Public License v3.0 or later")
131
+ expect(Spdx.find("gpl30").name).to eq("GNU General Public License v3.0 only")
132
+ expect(Spdx.find("GPL v2+").name).to eq("GNU General Public License v2.0 or later")
133
+ expect(Spdx.find("GPL 2").name).to eq("GNU General Public License v2.0 only")
134
+ expect(Spdx.find("GPL v2").name).to eq("GNU General Public License v2.0 only")
135
+ expect(Spdx.find("GPL2").name).to eq("GNU General Public License v2.0 only")
136
+ expect(Spdx.find("GPL-2 | GPL-3").name).to eq("GNU General Public License v2.0 or later")
137
+ expect(Spdx.find("GPL-2 | GPL-3 [expanded from: GPL (≥ 2.0)]").name).to \
138
+ eq("GNU General Public License v2.0 or later")
139
+ expect(Spdx.find("GPL2 w/ CPE").name).to eq("GNU General Public License v2.0 w/Classpath exception")
140
+ expect(Spdx.find("GPL 2.0").name).to eq("GNU General Public License v2.0 only")
141
+ expect(Spdx.find("New BSD License (GPL-compatible)").name).to eq('BSD 3-Clause "New" or "Revised" License')
142
+ expect(Spdx.find("The GPL V3").name).to eq("GNU General Public License v3.0 only")
143
+ expect(Spdx.find("perl_5").name).to eq("Artistic License 1.0 (Perl)")
144
+ expect(Spdx.find("BSD3").name).to eq('BSD 3-Clause "New" or "Revised" License')
145
+ expect(Spdx.find("BSD").name).to eq('BSD 3-Clause "New" or "Revised" License')
146
+ expect(Spdx.find("GPLv3").name).to eq("GNU General Public License v3.0 only")
147
+ expect(Spdx.find("LGPLv2 or later").name).to eq("GNU Library General Public License v2.1 or later")
148
+ expect(Spdx.find("GPLv2 or later").name).to eq("GNU General Public License v2.0 or later")
149
+ expect(Spdx.find("Public Domain").name).to eq("The Unlicense")
150
+ expect(Spdx.find("GPL-2").name).to eq("GNU General Public License v2.0 only")
151
+ expect(Spdx.find("GPL").name).to eq("GNU General Public License v2.0 or later")
152
+ expect(Spdx.find("GNU LESSER GENERAL PUBLIC LICENSE").name).to \
153
+ eq("GNU Library General Public License v2.1 or later")
154
+ expect(Spdx.find("New BSD License").name).to eq('BSD 3-Clause "New" or "Revised" License')
155
+ expect(Spdx.find("(MIT OR X11) ").name).to eq("MIT License")
156
+ expect(Spdx.find("mit-license").name).to eq("MIT License")
157
+ expect(Spdx.find("lgpl-3").name).to eq("GNU Lesser General Public License v3.0 only")
158
+ expect(Spdx.find("agpl-3").name).to eq("GNU Affero General Public License v3.0")
159
+ expect(Spdx.find("cc by-sa 4.0").name).to eq("Creative Commons Attribution Share Alike 4.0 International")
160
+ expect(Spdx.find("cc by-nc-sa 3.0").name).to \
161
+ eq("Creative Commons Attribution Non Commercial Share Alike 3.0 Unported")
162
+ expect(Spdx.find("cc by-sa 3.0").name).to eq("Creative Commons Attribution Share Alike 3.0 Unported")
163
+ expect(Spdx.find("gpl_1").name).to eq("GNU General Public License v1.0 only")
164
+ expect(Spdx.find("gpl_2").name).to eq("GNU General Public License v2.0 only")
165
+ expect(Spdx.find("gpl_3").name).to eq("GNU General Public License v3.0 only")
166
+ expect(Spdx.find("artistic_2").name).to eq("Artistic License 2.0")
167
+ expect(Spdx.find("artistic_1").name).to eq("Artistic License 1.0")
168
+ expect(Spdx.find("apache_2_0").name).to eq("Apache License 2.0")
169
+ expect(Spdx.find("apache_v2").name).to eq("Apache License 2.0")
170
+ expect(Spdx.find("lgpl_2_1").name).to eq("GNU Lesser General Public License v2.1 only")
171
+ expect(Spdx.find("lgpl_v2_1").name).to eq("GNU Lesser General Public License v2.1 only")
172
172
 
173
- expect(Spdx.find('BSD 3-Clause').name).to eq('BSD 3-Clause "New" or "Revised" License')
174
- expect(Spdx.find('BSD 3-Clause').name).to eq('BSD 3-Clause "New" or "Revised" License')
175
- expect(Spdx.find('BSD 2-Clause').name).to eq('BSD 2-Clause "Simplified" License')
176
- expect(Spdx.find('BSD 2-clause').name).to eq('BSD 2-Clause "Simplified" License')
177
- expect(Spdx.find('BSD Style').name).to eq('BSD 3-Clause "New" or "Revised" License')
173
+ expect(Spdx.find("BSD 3-Clause").name).to eq('BSD 3-Clause "New" or "Revised" License')
174
+ expect(Spdx.find("BSD 3-Clause").name).to eq('BSD 3-Clause "New" or "Revised" License')
175
+ expect(Spdx.find("BSD 2-Clause").name).to eq('BSD 2-Clause "Simplified" License')
176
+ expect(Spdx.find("BSD 2-clause").name).to eq('BSD 2-Clause "Simplified" License')
177
+ expect(Spdx.find("BSD Style").name).to eq('BSD 3-Clause "New" or "Revised" License')
178
178
 
179
- expect(Spdx.find('GNU LGPL v3+').name).to eq('GNU Lesser General Public License v3.0 only')
180
- expect(Spdx.find('ZPL 2.1').name).to eq('Zope Public License 2.1')
179
+ expect(Spdx.find("GNU LGPL v3+").name).to eq("GNU Lesser General Public License v3.0 only")
180
+ expect(Spdx.find("ZPL 2.1").name).to eq("Zope Public License 2.1")
181
+ end
182
+ end
183
+ context "spdx parsing" do
184
+ context "valid_spdx?" do
185
+ it "returns false for invalid spdx" do
186
+ expect(Spdx.valid_spdx?("AND AND")).to be false
187
+ expect(Spdx.valid_spdx?("MIT OR MIT AND OR")).to be false
188
+ expect(Spdx.valid_spdx?("MIT OR FAKEYLICENSE")).to be false
189
+ expect(Spdx.valid_spdx?(nil)).to be false
190
+ expect(Spdx.valid_spdx?("")).to be false
191
+ expect(Spdx.valid_spdx?("MIT (MIT)")).to be false
192
+ end
193
+ it "returns true for valid spdx" do
194
+ expect(Spdx.valid_spdx?("(MIT OR MPL-2.0)")).to be true
195
+ expect(Spdx.valid_spdx?("MIT")).to be true
196
+ expect(Spdx.valid_spdx?("((MIT OR AGPL-1.0) AND (MIT OR MPL-2.0))")).to be true
197
+ expect(Spdx.valid_spdx?("MIT OR (MIT)")).to be true
198
+ end
199
+ it "returns true for NONE and NOASSERTION" do
200
+ expect(Spdx.valid_spdx?("NONE")).to be true
201
+ expect(Spdx.valid_spdx?("(NONE)")).to be false
202
+ expect(Spdx.valid_spdx?("NOASSERTION")).to be true
203
+ expect(Spdx.valid_spdx?("MIT OR NONE")).to be false
204
+ end
205
+ it "returns true for + expression" do
206
+ expect(Spdx.valid_spdx?("AGPL-1.0+"))
207
+ end
208
+ end
209
+ end
210
+ context "licenses" do
211
+ it "returns a list of possible licenses" do
212
+ expect(Spdx.parse_spdx("MIT OR MPL-2.0").licenses).to eq ["MIT", "MPL-2.0"]
213
+ end
214
+ it "returns empty array for NONE or NOASSERTION" do
215
+ expect(Spdx.parse_spdx("NONE").licenses).to eq []
216
+ expect(Spdx.parse_spdx("NOASSERTION").licenses).to eq []
217
+ end
218
+ end
219
+
220
+ context "exceptions" do
221
+ it "parses a valid spdx with expression" do
222
+ expect(Spdx.valid_spdx?("EPL-2.0 OR (GPL-2.0-only WITH Classpath-exception-2.0)")).to be true
223
+ end
224
+ it "returns false for a license in the exception spot" do
225
+ expect(Spdx.valid_spdx?("EPL-2.0 OR (GPL-2.0-only WITH AGPL-3.0)")).to be false
226
+ end
227
+ it "provides full details for a parse error" do
228
+ expect { Spdx.parse_spdx("MIT OR ((WHAT)") }.to raise_error(SpdxGrammar::SpdxParseError, "Unable to parse expression '(MIT OR ((WHAT))'. Parse error at offset: 0")
181
229
  end
182
230
  end
183
231
  end
@@ -1,2 +1,4 @@
1
- require 'bundler/setup'
2
- require 'spdx'
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/setup"
4
+ require "spdx"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spdx
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.4
4
+ version: 2.0.12
5
5
  platform: ruby
6
6
  authors:
7
- - Andrew Nesbitt
7
+ - Tidelift, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-10 00:00:00.000000000 Z
11
+ date: 2020-07-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fuzzy_match
@@ -25,33 +25,47 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.1'
27
27
  - !ruby/object:Gem::Dependency
28
- name: spdx-licenses
28
+ name: treetop
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.2'
33
+ version: '1.6'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.2'
40
+ version: '1.6'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '1.16'
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '1.16'
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rake
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -96,8 +110,9 @@ dependencies:
96
110
  version: '0'
97
111
  description:
98
112
  email:
99
- - andrewnez@gmail.com
100
- executables: []
113
+ - support@tidelift.com
114
+ executables:
115
+ - update-license-files
101
116
  extensions: []
102
117
  extra_rdoc_files: []
103
118
  files:
@@ -114,8 +129,16 @@ files:
114
129
  - LICENSE.txt
115
130
  - README.md
116
131
  - Rakefile
132
+ - bin/update-license-files
133
+ - exceptions.json
134
+ - lib/exception.rb
135
+ - lib/license.rb
117
136
  - lib/spdx.rb
118
137
  - lib/spdx/version.rb
138
+ - lib/spdx_grammar.rb
139
+ - lib/spdx_parser.rb
140
+ - lib/spdx_parser.treetop
141
+ - licenses.json
119
142
  - spdx.gemspec
120
143
  - spec/spdx_spec.rb
121
144
  - spec/spec_helper.rb
@@ -138,8 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
161
  - !ruby/object:Gem::Version
139
162
  version: '0'
140
163
  requirements: []
141
- rubyforge_project:
142
- rubygems_version: 2.6.13
164
+ rubygems_version: 3.0.8
143
165
  signing_key:
144
166
  specification_version: 4
145
167
  summary: A SPDX license normalizer