licensee 9.15.1 → 9.15.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/lib/licensee/commands/detect.rb +1 -1
  3. data/lib/licensee/commands/diff.rb +2 -4
  4. data/lib/licensee/content_helper.rb +3 -3
  5. data/lib/licensee/license.rb +3 -4
  6. data/lib/licensee/matchers/copyright.rb +1 -1
  7. data/lib/licensee/matchers/dice.rb +5 -7
  8. data/lib/licensee/project_files/license_file.rb +5 -7
  9. data/lib/licensee/projects/git_project.rb +5 -7
  10. data/lib/licensee/projects/project.rb +13 -19
  11. data/lib/licensee/version.rb +1 -1
  12. data/lib/licensee.rb +6 -3
  13. data/licensee.gemspec +1 -0
  14. data/spec/fixtures/detect.json +1 -1
  15. data/spec/fixtures/license-hashes.json +3 -2
  16. data/spec/licensee/content_helper_spec.rb +1 -1
  17. data/spec/licensee/license_spec.rb +3 -3
  18. data/spec/licensee/matchers/dice_matcher_spec.rb +1 -1
  19. data/spec/licensee/project_files/license_file_spec.rb +1 -1
  20. data/spec/licensee/project_files/package_info_spec.rb +2 -2
  21. data/spec/licensee/project_spec.rb +3 -2
  22. data/spec/licensee_spec.rb +8 -2
  23. data/spec/vendored_license_spec.rb +0 -2
  24. data/vendor/choosealicense.com/_licenses/0bsd.txt +4 -2
  25. data/vendor/choosealicense.com/_licenses/afl-3.0.txt +12 -12
  26. data/vendor/choosealicense.com/_licenses/bsd-3-clause.txt +2 -2
  27. data/vendor/choosealicense.com/_licenses/cc-by-4.0.txt +1 -1
  28. data/vendor/choosealicense.com/_licenses/cc-by-sa-4.0.txt +1 -1
  29. data/vendor/choosealicense.com/_licenses/isc.txt +8 -8
  30. data/vendor/choosealicense.com/_licenses/mulanpsl-2.0.txt +226 -0
  31. data/vendor/choosealicense.com/_licenses/odbl-1.0.txt +1 -1
  32. data/vendor/choosealicense.com/_licenses/osl-3.0.txt +1 -1
  33. data/vendor/choosealicense.com/_licenses/upl-1.0.txt +1 -1
  34. data/vendor/license-list-XML/src/0BSD.xml +5 -1
  35. data/vendor/license-list-XML/src/AGPL-3.0.xml +4 -4
  36. data/vendor/license-list-XML/src/Apache-2.0.xml +1 -1
  37. data/vendor/license-list-XML/src/BSD-2-Clause.xml +1 -1
  38. data/vendor/license-list-XML/src/BSD-3-Clause.xml +1 -1
  39. data/vendor/license-list-XML/src/CC-BY-4.0.xml +13 -11
  40. data/vendor/license-list-XML/src/CC-BY-SA-4.0.xml +13 -11
  41. data/vendor/license-list-XML/src/GPL-3.0.xml +5 -5
  42. data/vendor/license-list-XML/src/ISC.xml +7 -5
  43. data/vendor/license-list-XML/src/LGPL-3.0.xml +1 -1
  44. data/vendor/license-list-XML/src/MPL-2.0.xml +1 -1
  45. data/vendor/license-list-XML/src/MulanPSL-2.0.xml +167 -0
  46. metadata +7 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dff748195c8e0488eee7b7a9d15b90c1683059c0d52a30721f36250cdeac8935
4
- data.tar.gz: 30f85a2b7d664c4b1345a8a76d98e8c059ef550b5b4ce878484f47f296d70a33
3
+ metadata.gz: 334874469d14f16839113e4311ba232c18a8bc8d0ee0c618034ec30e16497f47
4
+ data.tar.gz: aaca8fc841545017ee7dc58e02a8ce41845d3253a281153b599f187218c6fc6a
5
5
  SHA512:
6
- metadata.gz: 3dfa1f6ece5593ef76abf731cf3787b4e616803735f4c241c462f7081c333cee0d88da6854dcbe4bb43a6aefcd35414340f45a2cb3057ddb7d434a27acc0b461
7
- data.tar.gz: 2444b1b8e714a4385baaeb8863bd8af26fb62b9bf31dd810e62b189158459cc0fcd23056adbdcc670df1c690f916e2f8cc3f62953704eae8b7651a624ea14613
6
+ metadata.gz: 7cd4ba6ef792da1ca97536e14b78d92c2fddf01dd14405fb859ad74db0f30018af62ea67af39a754f4a568f83f14a932d501772d83f1b5d19d22833fd8937e20
7
+ data.tar.gz: 9fa7c61dde8ce35d2003c1119206047c3a35179e17484d0d5528e145f99bab29882c3da004a22214c777f758ade7607289a0d73a696135cc3a9c49467ed24238
@@ -95,7 +95,7 @@ class LicenseeCLI < Thor
95
95
  def licenses_by_similarity(matched_file)
96
96
  matcher = Licensee::Matchers::Dice.new(matched_file)
97
97
  potential_licenses = Licensee.licenses(hidden: true).select(&:wordset)
98
- matcher.instance_variable_set('@potential_licenses', potential_licenses)
98
+ matcher.instance_variable_set(:@potential_licenses, potential_licenses)
99
99
  matcher.licenses_by_similarity
100
100
  end
101
101
 
@@ -41,11 +41,9 @@ class LicenseeCLI < Thor
41
41
 
42
42
  def license_to_diff
43
43
  return options[:license_to_diff] if options[:license_to_diff]
44
- return project.license_file if remote? || $stdin.tty? && project.license_file
44
+ return project.license_file if remote? || ($stdin.tty? && project.license_file)
45
45
 
46
- @license_to_diff ||= begin
47
- Licensee::ProjectFiles::LicenseFile.new($stdin.read, 'LICENSE')
48
- end
46
+ @license_to_diff ||= Licensee::ProjectFiles::LicenseFile.new($stdin.read, 'LICENSE')
49
47
  end
50
48
 
51
49
  def expected_license
@@ -7,7 +7,7 @@ module Licensee
7
7
  module ContentHelper
8
8
  DIGEST = Digest::SHA1
9
9
  START_REGEX = /\A\s*/.freeze
10
- END_OF_TERMS_REGEX = /^[\s#*_]*end of terms and conditions[\s#*_]*$/i.freeze
10
+ END_OF_TERMS_REGEX = /^[\s#*_]*end of (the )?terms and conditions[\s#*_]*$/i.freeze
11
11
  REGEXES = {
12
12
  bom: /#{START_REGEX}\xEF\xBB\xBF/,
13
13
  hrs: /^\s*[=\-*]{3,}\s*$/,
@@ -128,7 +128,7 @@ module Licensee
128
128
  overlap = (wordset_fieldless & other.wordset).size
129
129
  total = wordset_fieldless.size + other.wordset.size -
130
130
  fields_normalized_set.size
131
- (overlap * 200.0) / (total + variation_adjusted_length_delta(other) / 4)
131
+ (overlap * 200.0) / (total + (variation_adjusted_length_delta(other) / 4))
132
132
  end
133
133
 
134
134
  # SHA1 of the normalized content
@@ -341,7 +341,7 @@ module Licensee
341
341
  # Use that if it's present, otherwise, just return the simple delta.
342
342
  return delta unless respond_to?(:spdx_alt_segments, true)
343
343
 
344
- adjusted_delta = delta - [fields_normalized.size, spdx_alt_segments].max * 4
344
+ adjusted_delta = delta - ([fields_normalized.size, spdx_alt_segments].max * 4)
345
345
  adjusted_delta.positive? ? adjusted_delta : 0
346
346
  end
347
347
  end
@@ -145,6 +145,7 @@ module Licensee
145
145
  return @title_regex if defined? @title_regex
146
146
 
147
147
  string = name.downcase.sub('*', 'u')
148
+ simple_title_regex = Regexp.new string, 'i'
148
149
  string.sub!(/\Athe /i, '')
149
150
  string.sub!(/,? version /, ' ')
150
151
  string.sub!(/v(\d+\.\d+)/, '\1')
@@ -159,7 +160,7 @@ module Licensee
159
160
  string << '(?:\ licen[sc]e)?'
160
161
  key_regex = Regexp.new string, 'i'
161
162
 
162
- parts = [title_regex, key_regex]
163
+ parts = [simple_title_regex, title_regex, key_regex]
163
164
  parts.push Regexp.new meta.nickname.sub(/\bGNU /i, '(?:GNU )?') if meta.nickname
164
165
 
165
166
  @title_regex = Regexp.union parts
@@ -238,9 +239,7 @@ module Licensee
238
239
  # Returns a string with `[fields]` replaced by `{{{fields}}}`
239
240
  # Does not mangle non-supported fields in the form of `[field]`
240
241
  def content_for_mustache
241
- @content_for_mustache ||= begin
242
- content.gsub(LicenseField::FIELD_REGEX, '{{{\1}}}')
243
- end
242
+ @content_for_mustache ||= content.gsub(LicenseField::FIELD_REGEX, '{{{\1}}}')
244
243
  end
245
244
 
246
245
  private
@@ -6,7 +6,7 @@ module Licensee
6
6
  attr_reader :file
7
7
 
8
8
  COPYRIGHT_SYMBOLS = Regexp.union([/copyright/i, /\(c\)/i, "\u00A9", "\xC2\xA9"])
9
- REGEX = /#{ContentHelper::START_REGEX}(?:portions )?([_*\-\s]*#{COPYRIGHT_SYMBOLS}.*$)+$/i.freeze
9
+ REGEX = /#{ContentHelper::START_REGEX}([_*\-\s]*#{COPYRIGHT_SYMBOLS}.*$)+$/i.freeze
10
10
  def match
11
11
  # NOTE: must use content, and not content_normalized here
12
12
  Licensee::License.find('no-license') if /#{REGEX}+\z/io.match?(file.content.strip)
@@ -21,13 +21,11 @@ module Licensee
21
21
  # 2. The percentage change in file length may not exceed the inverse
22
22
  # of the confidence threshold
23
23
  def potential_matches
24
- @potential_matches ||= begin
25
- super.select do |license|
26
- if license.creative_commons? && file.potential_false_positive?
27
- false
28
- else
29
- license.wordset
30
- end
24
+ @potential_matches ||= super.select do |license|
25
+ if license.creative_commons? && file.potential_false_positive?
26
+ false
27
+ else
28
+ license.wordset
31
29
  end
32
30
  end
33
31
  end
@@ -62,13 +62,11 @@ module Licensee
62
62
  end
63
63
 
64
64
  def attribution
65
- @attribution ||= begin
66
- if copyright? || license.content&.include?('[fullname]')
67
- matches = Matchers::Copyright::REGEX
68
- .match(content_without_title_and_version)
69
- matches[0] if matches
70
- end
71
- end
65
+ @attribution ||= if copyright? || license.content&.include?('[fullname]')
66
+ matches = Matchers::Copyright::REGEX
67
+ .match(content_without_title_and_version)
68
+ matches[0] if matches
69
+ end
72
70
  end
73
71
 
74
72
  # Is this file likely to result in a creative commons false positive?
@@ -27,13 +27,11 @@ module Licensee
27
27
  end
28
28
 
29
29
  def repository
30
- @repository ||= begin
31
- if @raw_repo.is_a? Rugged::Repository
32
- @raw_repo
33
- else
34
- Rugged::Repository.new(@raw_repo)
35
- end
36
- end
30
+ @repository ||= if @raw_repo.is_a? Rugged::Repository
31
+ @raw_repo
32
+ else
33
+ Rugged::Repository.new(@raw_repo)
34
+ end
37
35
  rescue Rugged::OSError, Rugged::RepositoryError
38
36
  raise InvalidRepository
39
37
  end
@@ -43,9 +43,7 @@ module Licensee
43
43
 
44
44
  # Returns an array of matches LicenseFiles
45
45
  def matched_files
46
- @matched_files ||= begin
47
- project_files.select(&:license)
48
- end
46
+ @matched_files ||= project_files.select(&:license)
49
47
  end
50
48
 
51
49
  # Returns the LicenseFile used to determine the License
@@ -54,19 +52,17 @@ module Licensee
54
52
  end
55
53
 
56
54
  def license_files
57
- @license_files ||= begin
58
- if files.empty? || files.nil?
59
- []
60
- else
61
- files = find_files do |n|
62
- Licensee::ProjectFiles::LicenseFile.name_score(n)
63
- end
64
- files = files.map do |file|
65
- Licensee::ProjectFiles::LicenseFile.new(load_file(file), file)
66
- end
67
- prioritize_lgpl(files)
68
- end
69
- end
55
+ @license_files ||= if files.empty? || files.nil?
56
+ []
57
+ else
58
+ files = find_files do |n|
59
+ Licensee::ProjectFiles::LicenseFile.name_score(n)
60
+ end
61
+ files = files.map do |file|
62
+ Licensee::ProjectFiles::LicenseFile.new(load_file(file), file)
63
+ end
64
+ prioritize_lgpl(files)
65
+ end
70
66
  end
71
67
 
72
68
  def readme_file
@@ -155,9 +151,7 @@ module Licensee
155
151
  # Returns an array of matches licenses, excluding the COPYRIGHT file
156
152
  # which can often be ignored for purposes of determing dual licensing
157
153
  def licenses_without_copyright
158
- @licenses_without_copyright ||= begin
159
- matched_files.reject(&:copyright?).map(&:license).uniq
160
- end
154
+ @licenses_without_copyright ||= matched_files.reject(&:copyright?).map(&:license).uniq
161
155
  end
162
156
 
163
157
  def files
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Licensee
4
- VERSION = '9.15.1'
4
+ VERSION = '9.15.2'
5
5
  end
data/lib/licensee.rb CHANGED
@@ -24,8 +24,6 @@ module Licensee
24
24
  DOMAIN = 'http://choosealicense.com'
25
25
 
26
26
  class << self
27
- attr_writer :confidence_threshold
28
-
29
27
  # Returns an array of Licensee::License instances
30
28
  def licenses(options = {})
31
29
  Licensee::License.all(options)
@@ -50,11 +48,16 @@ module Licensee
50
48
  @confidence_threshold ||= CONFIDENCE_THRESHOLD
51
49
  end
52
50
 
51
+ def confidence_threshold=(value)
52
+ @confidence_threshold = value
53
+ @inverse_confidence_threshold = nil
54
+ end
55
+
53
56
  # Inverse of the confidence threshold, represented as a float
54
57
  # By default this will be 0.02
55
58
  def inverse_confidence_threshold
56
59
  @inverse_confidence_threshold ||=
57
- (1 - Licensee.confidence_threshold / 100.0).round(2)
60
+ (1 - (Licensee.confidence_threshold / 100.0)).round(2)
58
61
  end
59
62
  end
60
63
  end
data/licensee.gemspec CHANGED
@@ -16,6 +16,7 @@ Gem::Specification.new do |gem|
16
16
  gem.email = 'ben.balter@github.com'
17
17
  gem.homepage = 'https://github.com/benbalter/licensee'
18
18
  gem.license = 'MIT'
19
+ gem.metadata['rubygems_mfa_required'] = 'true'
19
20
 
20
21
  gem.bindir = 'bin'
21
22
  gem.executables << 'licensee'
@@ -93,7 +93,7 @@
93
93
  },
94
94
  {
95
95
  "filename": "licensee.gemspec",
96
- "content": "# frozen_string_literal: true\n\nrequire File.expand_path('lib/licensee/version', __dir__)\n\nGem::Specification.new do |gem|\n gem.name = 'licensee'\n gem.version = Licensee::VERSION\n\n gem.summary = 'A Ruby Gem to detect open source project licenses'\n gem.description = <<-DESC\n Licensee automates the process of reading LICENSE files and\n compares their contents to known licenses using a fancy maths.\n DESC\n\n gem.authors = ['Ben Balter']\n gem.email = 'ben.balter@github.com'\n gem.homepage = 'https://github.com/benbalter/licensee'\n gem.license = 'MIT'\n\n gem.bindir = 'bin'\n gem.executables << 'licensee'\n\n gem.add_dependency('dotenv', '~> 2.0')\n gem.add_dependency('octokit', '~> 4.20')\n gem.add_dependency('reverse_markdown', '~> 1.0')\n gem.add_dependency('rugged', '>= 0.24', '<2.0')\n gem.add_dependency('thor', '>= 0.19', '< 2.0')\n\n gem.add_development_dependency('gem-release', '~> 2.0')\n gem.add_development_dependency('mustache', '>= 0.9', '< 2.0')\n gem.add_development_dependency('pry', '~> 0.9')\n gem.add_development_dependency('rspec', '~> 3.5')\n gem.add_development_dependency('rubocop', '~> 1.0')\n gem.add_development_dependency('rubocop-performance', '~> 1.5')\n gem.add_development_dependency('rubocop-rspec', '~> 2.0')\n gem.add_development_dependency('simplecov', '~> 0.16')\n gem.add_development_dependency('webmock', '~> 3.1')\n\n gem.required_ruby_version = '>= 2.5'\n\n # ensure the gem is built out of versioned files\n gem.files = Dir[\n '{bin,lib,man,test,vendor,spec}/**/*',\n 'README*', 'LICENSE*'\n ] & `git ls-files -z`.split(\"\\0\")\nend\n",
96
+ "content": "# frozen_string_literal: true\n\nrequire File.expand_path('lib/licensee/version', __dir__)\n\nGem::Specification.new do |gem|\n gem.name = 'licensee'\n gem.version = Licensee::VERSION\n\n gem.summary = 'A Ruby Gem to detect open source project licenses'\n gem.description = <<-DESC\n Licensee automates the process of reading LICENSE files and\n compares their contents to known licenses using a fancy maths.\n DESC\n\n gem.authors = ['Ben Balter']\n gem.email = 'ben.balter@github.com'\n gem.homepage = 'https://github.com/benbalter/licensee'\n gem.license = 'MIT'\n gem.metadata['rubygems_mfa_required'] = 'true'\n\n gem.bindir = 'bin'\n gem.executables << 'licensee'\n\n gem.add_dependency('dotenv', '~> 2.0')\n gem.add_dependency('octokit', '~> 4.20')\n gem.add_dependency('reverse_markdown', '~> 1.0')\n gem.add_dependency('rugged', '>= 0.24', '<2.0')\n gem.add_dependency('thor', '>= 0.19', '< 2.0')\n\n gem.add_development_dependency('gem-release', '~> 2.0')\n gem.add_development_dependency('mustache', '>= 0.9', '< 2.0')\n gem.add_development_dependency('pry', '~> 0.9')\n gem.add_development_dependency('rspec', '~> 3.5')\n gem.add_development_dependency('rubocop', '~> 1.0')\n gem.add_development_dependency('rubocop-performance', '~> 1.5')\n gem.add_development_dependency('rubocop-rspec', '~> 2.0')\n gem.add_development_dependency('simplecov', '~> 0.16')\n gem.add_development_dependency('webmock', '~> 3.1')\n\n gem.required_ruby_version = '>= 2.5'\n\n # ensure the gem is built out of versioned files\n gem.files = Dir[\n '{bin,lib,man,test,vendor,spec}/**/*',\n 'README*', 'LICENSE*'\n ] & `git ls-files -z`.split(\"\\0\")\nend\n",
97
97
  "content_hash": null,
98
98
  "content_normalized": null,
99
99
  "matcher": {
@@ -10,7 +10,7 @@
10
10
  "bsd-4-clause": "3b2917580b2b6f13efaaea37546b8b7a53716a30",
11
11
  "bsl-1.0": "27e28f20b57048cf04be07e1532b6fb501a0753b",
12
12
  "cc-by-4.0": "b2089be110aca4cf4a562a88f0ecfd082ce32167",
13
- "cc-by-sa-4.0": "20e2ae68f7dd2125beb70f732cd52d376687597f",
13
+ "cc-by-sa-4.0": "0684e2df6671166351097b387abc0d1170d26f2f",
14
14
  "cc0-1.0": "94c8187ec82b2b4a69fb990f80833fbe6e3c95e7",
15
15
  "cecill-2.1": "edb804827a40bcdcf3e82b6bab3bd1f5b923ac74",
16
16
  "ecl-2.0": "296976ce9e84ba380866e4519b68a779c2059b3a",
@@ -29,8 +29,9 @@
29
29
  "mpl-2.0": "820048a1dbef5dfac65547bd9eb935beb76b2257",
30
30
  "ms-pl": "1a7eb02101924998c296c8ede182005d2f77ae4a",
31
31
  "ms-rl": "9f0c4c8be853cf1836a619cd0abaf0e0235d76ad",
32
+ "mulanpsl-2.0": "c9b54da98007cb8baa0a658b34dbe3a55a80baa8",
32
33
  "ncsa": "0d481a7ff9345e19cfdd9b7fea46caea1ebd08ee",
33
- "odbl-1.0": "72a4e9321a871bca3c5dd0f06ffe498d340e8d76",
34
+ "odbl-1.0": "e3bb38ce8a932d226829dcb6fd2143e5977d13e7",
34
35
  "ofl-1.1": "f92ca13e3976f94f20b49a007f7592631b4f8e96",
35
36
  "osl-3.0": "bdde11f936b834bd06451d1ad8aad790d4a7c72c",
36
37
  "postgresql": "6bddd8a2425baa88ee240b1c54b532d6208028bd",
@@ -67,7 +67,7 @@ RSpec.describe Licensee::ContentHelper do
67
67
 
68
68
  it 'knows the similarity' do
69
69
  expect(mit.similarity(subject)).to be_within(1).of(4)
70
- expect(mit.similarity(mit)).to be(100.0)
70
+ expect(mit.similarity(mit)).to eq(100.0)
71
71
  end
72
72
 
73
73
  it 'calculates simple delta for similarity' do
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe Licensee::License do
4
- let(:license_count) { 42 }
5
- let(:hidden_license_count) { 29 }
4
+ let(:license_count) { 43 }
5
+ let(:hidden_license_count) { 30 }
6
6
  let(:featured_license_count) { 3 }
7
7
  let(:pseudo_license_count) { 2 }
8
8
  let(:non_featured_license_count) do
@@ -300,7 +300,7 @@ RSpec.describe Licensee::License do
300
300
  end
301
301
 
302
302
  it 'knows equality' do
303
- expect(mit).to eql(mit)
303
+ expect(described_class.find('mit')).to eql(mit)
304
304
  expect(gpl).not_to eql(mit)
305
305
  end
306
306
 
@@ -27,7 +27,7 @@ RSpec.describe Licensee::Matchers::Dice do
27
27
  end
28
28
 
29
29
  it 'returns the match confidence' do
30
- expect(subject.confidence).to be(100.0)
30
+ expect(subject.confidence).to eq(100.0)
31
31
  end
32
32
 
33
33
  context 'without a match' do
@@ -24,7 +24,7 @@ RSpec.describe Licensee::ProjectFiles::LicenseFile do
24
24
  context 'with an non-UTF-8-encoded license' do
25
25
  let(:content) { "\x91License\x93".dup.force_encoding('windows-1251') }
26
26
 
27
- it "doesn't blow up " do
27
+ it "doesn't blow up" do
28
28
  expect(subject.attribution).to be_nil
29
29
  end
30
30
  end
@@ -31,7 +31,7 @@ RSpec.describe Licensee::ProjectFiles::PackageManagerFile do
31
31
  context 'matchers' do
32
32
  let(:possible_matchers) { subject.possible_matchers }
33
33
 
34
- context 'with a gemspec ' do
34
+ context 'with a gemspec' do
35
35
  let(:filename) { 'project.gemspec' }
36
36
 
37
37
  it 'returns the gemspec matcher' do
@@ -39,7 +39,7 @@ RSpec.describe Licensee::ProjectFiles::PackageManagerFile do
39
39
  end
40
40
  end
41
41
 
42
- context 'with cabal file ' do
42
+ context 'with cabal file' do
43
43
  let(:filename) { 'test.cabal' }
44
44
 
45
45
  it 'returns the cabal matcher' do
@@ -66,7 +66,7 @@
66
66
  let(:revision) { subject.repository.last_commit.oid }
67
67
 
68
68
  before do
69
- subject.instance_variable_set('@revision', revision)
69
+ subject.instance_variable_set(:@revision, revision)
70
70
  end
71
71
 
72
72
  it 'returns the commit' do
@@ -116,11 +116,12 @@
116
116
 
117
117
  if described_class == Licensee::Projects::FSProject
118
118
  context 'with search root argument' do
119
+ subject { described_class.new(path, search_root: search_root) }
120
+
119
121
  let(:fixture) { 'license-in-parent-folder/license-folder/package' }
120
122
  let(:path) { fixture_path(fixture) }
121
123
  let(:license_folder) { 'license-in-parent-folder/license-folder' }
122
124
  let(:search_root) { fixture_path(license_folder) }
123
- let(:subject) { described_class.new(path, search_root: search_root) }
124
125
  let(:files) { subject.send(:files) }
125
126
 
126
127
  it 'looks for licenses in parent directories up to the search root' do
@@ -4,7 +4,7 @@ RSpec.describe Licensee do
4
4
  let(:project_path) { fixture_path('mit') }
5
5
  let(:license_path) { fixture_path('mit/LICENSE.txt') }
6
6
  let(:mit_license) { Licensee::License.find('mit') }
7
- let(:hidden_license_count) { 42 }
7
+ let(:hidden_license_count) { 43 }
8
8
 
9
9
  it 'exposes licenses' do
10
10
  expect(described_class.licenses).to be_an(Array)
@@ -43,7 +43,7 @@ RSpec.describe Licensee do
43
43
  end
44
44
 
45
45
  it 'exposes the inverse of the confidence threshold' do
46
- expect(described_class.inverse_confidence_threshold).to be(0.02)
46
+ expect(described_class.inverse_confidence_threshold).to eq(0.02)
47
47
  end
48
48
 
49
49
  context 'user overridden' do
@@ -54,6 +54,12 @@ RSpec.describe Licensee do
54
54
  it 'lets the user override the confidence threshold' do
55
55
  expect(described_class.confidence_threshold).to be(50)
56
56
  end
57
+
58
+ it 'resets inverse confidence threshold when confidence threshold changes' do
59
+ expect(described_class.inverse_confidence_threshold).to be(0.5)
60
+ described_class.confidence_threshold = Licensee::CONFIDENCE_THRESHOLD
61
+ expect(described_class.inverse_confidence_threshold).to be(0.02)
62
+ end
57
63
  end
58
64
  end
59
65
  end
@@ -5,8 +5,6 @@ RSpec.describe 'vendored licenses' do
5
5
  let(:license_file) do
6
6
  Licensee::ProjectFiles::LicenseFile.new(content, filename)
7
7
  end
8
- let(:detected_license) { license_file&.license }
9
- let(:wtfpl) { Licensee::License.find('wtfpl') }
10
8
 
11
9
  Licensee.licenses(hidden: true).each do |license|
12
10
  next if license.pseudo_license?
@@ -7,9 +7,9 @@ description: The BSD Zero Clause license goes further than the BSD 2-Clause lice
7
7
  how: Create a text file (typically named LICENSE or LICENSE.txt) in the root of your source code and copy the text of the license into the file. Replace [year] with the current year and [fullname] with the name (or names) of the copyright holders. You may take the additional step of removing the copyright notice.
8
8
 
9
9
  using:
10
- PickMeUp: https://github.com/nazar-pc/PickMeUp/blob/master/copying.md
11
- smoltcp: https://github.com/m-labs/smoltcp/blob/master/LICENSE-0BSD.txt
10
+ gatsby-starter-default: https://github.com/gatsbyjs/gatsby-starter-default/blob/master/LICENSE
12
11
  Toybox: https://github.com/landley/toybox/blob/master/LICENSE
12
+ PickMeUp: https://github.com/nazar-pc/PickMeUp/blob/master/copying.md
13
13
 
14
14
  permissions:
15
15
  - commercial-use
@@ -25,6 +25,8 @@ limitations:
25
25
 
26
26
  ---
27
27
 
28
+ BSD Zero Clause License
29
+
28
30
  Copyright (c) [year] [fullname]
29
31
 
30
32
  Permission to use, copy, modify, and/or distribute this software for any
@@ -33,27 +33,27 @@ authorship (the "Original Work") whose owner (the "Licensor") has placed the
33
33
  following licensing notice adjacent to the copyright notice for the Original
34
34
  Work:
35
35
 
36
- Licensed under the Academic Free License version 3.0
36
+ Licensed under the Academic Free License version 3.0
37
37
 
38
38
  1) Grant of Copyright License. Licensor grants You a worldwide, royalty-free,
39
39
  non-exclusive, sublicensable license, for the duration of the copyright, to do
40
40
  the following:
41
41
 
42
- a) to reproduce the Original Work in copies, either alone or as part of a
43
- collective work;
42
+ a) to reproduce the Original Work in copies, either alone or as part of a
43
+ collective work;
44
44
 
45
- b) to translate, adapt, alter, transform, modify, or arrange the Original
46
- Work, thereby creating derivative works ("Derivative Works") based upon
47
- the Original Work;
45
+ b) to translate, adapt, alter, transform, modify, or arrange the Original
46
+ Work, thereby creating derivative works ("Derivative Works") based upon the
47
+ Original Work;
48
48
 
49
- c) to distribute or communicate copies of the Original Work and
50
- Derivative Works to the public, under any license of your choice that
51
- does not contradict the terms and conditions, including Licensor's
52
- reserved rights and remedies, in this Academic Free License;
49
+ c) to distribute or communicate copies of the Original Work and Derivative
50
+ Works to the public, under any license of your choice that does not
51
+ contradict the terms and conditions, including Licensor's reserved rights
52
+ and remedies, in this Academic Free License;
53
53
 
54
- d) to perform the Original Work publicly; and
54
+ d) to perform the Original Work publicly; and
55
55
 
56
- e) to display the Original Work publicly.
56
+ e) to display the Original Work publicly.
57
57
 
58
58
  2) Grant of Patent License. Licensor grants You a worldwide, royalty-free,
59
59
  non-exclusive, sublicensable license, under patent claims owned or controlled
@@ -3,12 +3,12 @@ title: BSD 3-Clause "New" or "Revised" License
3
3
  spdx-id: BSD-3-Clause
4
4
  hidden: false
5
5
 
6
- description: A permissive license similar to the <a href="/licenses/bsd-2-clause/">BSD 2-Clause License</a>, but with a 3rd clause that prohibits others from using the name of the project or its contributors to promote derived products without written consent.
6
+ description: A permissive license similar to the <a href="/licenses/bsd-2-clause/">BSD 2-Clause License</a>, but with a 3rd clause that prohibits others from using the name of the copyright holder or its contributors to promote derived products without written consent.
7
7
 
8
8
  how: Create a text file (typically named LICENSE or LICENSE.txt) in the root of your source code and copy the text of the license into the file. Replace [year] with the current year and [fullname] with the name (or names) of the copyright holders.
9
9
 
10
10
  using:
11
- d3: https://github.com/d3/d3/blob/master/LICENSE
11
+ Flutter: https://github.com/flutter/flutter/blob/master/LICENSE
12
12
  LevelDB: https://github.com/google/leveldb/blob/master/LICENSE
13
13
  Quill: https://github.com/quilljs/quill/blob/develop/LICENSE
14
14
 
@@ -8,7 +8,7 @@ how: Create a text file (typically named LICENSE or LICENSE.txt) in the root of
8
8
 
9
9
  using:
10
10
  caniuse: https://github.com/Fyrd/caniuse/blob/master/LICENSE
11
- WHATWG HTML standard: https://github.com/whatwg/html/blob/master/LICENSE
11
+ FiveThirtyEight data: https://github.com/fivethirtyeight/data/blob/master/LICENSE
12
12
  Kubernetes documentation: https://github.com/kubernetes/website/blob/master/LICENSE
13
13
 
14
14
  permissions:
@@ -335,8 +335,8 @@ apply to Your use of the Licensed Material:
335
335
  contents in a database in which You have Sui Generis Database
336
336
  Rights, then the database in which You have Sui Generis Database
337
337
  Rights (but not its individual contents) is Adapted Material,
338
-
339
338
  including for purposes of Section 3(b); and
339
+
340
340
  c. You must comply with the conditions in Section 3(a) if You Share
341
341
  all or a substantial portion of the contents of the database.
342
342
 
@@ -28,16 +28,16 @@ limitations:
28
28
 
29
29
  ISC License
30
30
 
31
- Copyright (c) [year], [fullname]
31
+ Copyright (c) [year] [fullname]
32
32
 
33
33
  Permission to use, copy, modify, and/or distribute this software for any
34
34
  purpose with or without fee is hereby granted, provided that the above
35
35
  copyright notice and this permission notice appear in all copies.
36
36
 
37
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
38
- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
39
- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
40
- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
41
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
42
- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
43
- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
37
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
38
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
39
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
40
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
41
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
42
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
43
+ PERFORMANCE OF THIS SOFTWARE.