licensee 8.8.1 → 8.8.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/licensee/content_helper.rb +19 -7
- data/lib/licensee/matchers/copyright_matcher.rb +1 -1
- data/lib/licensee/project_files/license_file.rb +5 -2
- data/lib/licensee/version.rb +1 -1
- data/spec/fixtures/gemspec/{project.gemspec → project._gemspec} +1 -0
- data/spec/licensee/content_helper_spec.rb +32 -9
- data/spec/licensee/project_files/license_file_spec.rb +8 -0
- data/spec/licensee/project_spec.rb +16 -0
- metadata +3 -4
- data/spec/fixtures/gemspec/lib/licensee-fixture-project/version.rb +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 619ad8c9ec5567bab5810856457d95baeb3116be
|
4
|
+
data.tar.gz: d14fdefea813eb729cc4019d761c80b0c66825f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ec4d52f35ceb0a363390cd8a6a9c0bd14d2a871e955ad99c528e7501f2935ef778c5739cbf3fe5fc62d8d2671713ef24f767494c495e14b0d3a2d817b0759e4c
|
7
|
+
data.tar.gz: 94e0d332a4d78d4a8344045d9db68ea7a3f871331a46c7c55bca084684505118da8e82715e1966be3bf4c3ba2ff8ef3620c0c5246fa9f62f45053aba1d6f7f82
|
@@ -43,14 +43,26 @@ module Licensee
|
|
43
43
|
@hash ||= DIGEST.hexdigest content_normalized
|
44
44
|
end
|
45
45
|
|
46
|
-
# Content with
|
46
|
+
# Content with the title and version removed
|
47
|
+
# The first time should normally be the attribution line
|
48
|
+
# Used to dry up `content_normalized` but we need the case sensitive
|
49
|
+
# content with attribution first to detect attribuion in LicenseFile
|
50
|
+
def content_without_title_and_version
|
51
|
+
@content_without_title_and_version ||= begin
|
52
|
+
string = content.strip
|
53
|
+
string = strip_title(string) while string =~ title_regex
|
54
|
+
strip_version(string).strip
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# Content without title, version, copyright, whitespace, or insturctions
|
47
59
|
def content_normalized
|
48
60
|
return unless content
|
49
61
|
@content_normalized ||= begin
|
50
|
-
string =
|
51
|
-
|
52
|
-
|
53
|
-
|
62
|
+
string = content_without_title_and_version.downcase
|
63
|
+
while string =~ Matchers::Copyright::REGEX
|
64
|
+
string = strip_copyright(string)
|
65
|
+
end
|
54
66
|
string = strip_hrs(string)
|
55
67
|
string, _partition, _instructions = string.partition(END_OF_TERMS_REGEX)
|
56
68
|
strip_whitespace(string)
|
@@ -66,7 +78,7 @@ module Licensee
|
|
66
78
|
end
|
67
79
|
|
68
80
|
def title_regex
|
69
|
-
/\A(the )
|
81
|
+
/\A\(?(the )?(#{Regexp.union(license_names).source}).*$/i
|
70
82
|
end
|
71
83
|
|
72
84
|
def strip_title(string)
|
@@ -78,7 +90,7 @@ module Licensee
|
|
78
90
|
end
|
79
91
|
|
80
92
|
def strip_copyright(string)
|
81
|
-
string.gsub(
|
93
|
+
string.gsub(Matchers::Copyright::REGEX, '').strip
|
82
94
|
end
|
83
95
|
|
84
96
|
# Strip HRs from MPL
|
@@ -6,7 +6,7 @@ module Licensee
|
|
6
6
|
|
7
7
|
# rubocop:disable Metrics/LineLength
|
8
8
|
COPYRIGHT_SYMBOLS = Regexp.union([/copyright/i, /\(c\)/i, "\u00A9", "\xC2\xA9"])
|
9
|
-
REGEX =
|
9
|
+
REGEX = /\A\s*#{COPYRIGHT_SYMBOLS}.*$/i
|
10
10
|
# rubocop:enable Metrics/LineLength
|
11
11
|
|
12
12
|
def initialize(file)
|
@@ -40,8 +40,11 @@ module Licensee
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def attribution
|
43
|
-
|
44
|
-
|
43
|
+
@attribution ||= begin
|
44
|
+
matches = Matchers::Copyright::REGEX
|
45
|
+
.match(content_without_title_and_version)
|
46
|
+
matches[0] if matches
|
47
|
+
end
|
45
48
|
end
|
46
49
|
|
47
50
|
# Is this file likely to result in a creative commons false positive?
|
data/lib/licensee/version.rb
CHANGED
@@ -2,7 +2,14 @@ class ContentHelperTestHelper
|
|
2
2
|
include Licensee::ContentHelper
|
3
3
|
attr_accessor :content
|
4
4
|
|
5
|
-
|
5
|
+
def initialize(content = nil)
|
6
|
+
@content = content
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
RSpec.describe Licensee::ContentHelper do
|
11
|
+
let(:content) do
|
12
|
+
<<-EOS.freeze
|
6
13
|
The MIT License
|
7
14
|
|
8
15
|
Copyright 2016 Ben Balter
|
@@ -10,15 +17,9 @@ Copyright 2016 Ben Balter
|
|
10
17
|
The made
|
11
18
|
up license.
|
12
19
|
-----------
|
13
|
-
|
14
|
-
|
15
|
-
def initialize(content = nil)
|
16
|
-
@content = content || DEFAULT_CONTENT
|
20
|
+
EOS
|
17
21
|
end
|
18
|
-
|
19
|
-
|
20
|
-
RSpec.describe Licensee::ContentHelper do
|
21
|
-
subject { ContentHelperTestHelper.new }
|
22
|
+
subject { ContentHelperTestHelper.new(content) }
|
22
23
|
let(:mit) { Licensee::License.find('mit') }
|
23
24
|
|
24
25
|
it 'creates the wordset' do
|
@@ -74,13 +75,17 @@ RSpec.describe Licensee::ContentHelper do
|
|
74
75
|
|
75
76
|
Licensee::License.all(hidden: true).each do |license|
|
76
77
|
context license.name do
|
78
|
+
let(:stripped_content) { subject.content_without_title_and_version }
|
79
|
+
|
77
80
|
it 'strips the title' do
|
78
81
|
regex = /\A#{license.name_without_version}/i
|
79
82
|
expect(license.content_normalized).to_not match(regex)
|
83
|
+
expect(stripped_content).to_not match(regex)
|
80
84
|
end
|
81
85
|
|
82
86
|
it 'strips the version' do
|
83
87
|
expect(license.content_normalized).to_not match(/\Aversion/i)
|
88
|
+
expect(stripped_content).to_not match(/\Aversion/i)
|
84
89
|
end
|
85
90
|
|
86
91
|
it 'strips the copyright' do
|
@@ -102,5 +107,23 @@ RSpec.describe Licensee::ContentHelper do
|
|
102
107
|
it 'normalize the content' do
|
103
108
|
expect(normalized_content).to eql 'the made up license.'
|
104
109
|
end
|
110
|
+
|
111
|
+
context 'a title in parenthesis' do
|
112
|
+
let(:content) { "(The MIT License)\n\nfoo" }
|
113
|
+
|
114
|
+
it 'strips the title' do
|
115
|
+
expect(normalized_content).to_not match('MIT')
|
116
|
+
expect(normalized_content).to eql('foo')
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
context 'multiple copyrights' do
|
121
|
+
let(:content) { "Copyright 2016 Ben Balter\nCopyright 2017 Bob\nFoo" }
|
122
|
+
|
123
|
+
it 'strips multiple copyrights' do
|
124
|
+
expect(normalized_content).to_not match('Ben')
|
125
|
+
expect(normalized_content).to eql('foo')
|
126
|
+
end
|
127
|
+
end
|
105
128
|
end
|
106
129
|
end
|
@@ -9,6 +9,14 @@ RSpec.describe Licensee::Project::LicenseFile do
|
|
9
9
|
expect(subject.attribution).to eql('Copyright (c) 2016 Ben Balter')
|
10
10
|
end
|
11
11
|
|
12
|
+
context "when there's a random copyright-like line" do
|
13
|
+
let(:content) { "Foo\nCopyright 2016 Ben Balter\nBar" }
|
14
|
+
|
15
|
+
it "doesn't match" do
|
16
|
+
expect(subject.attribution).to be_nil
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
12
20
|
context 'with an non-UTF-8-encoded license' do
|
13
21
|
let(:content) { "\x91License\x93".force_encoding('windows-1251') }
|
14
22
|
|
@@ -75,6 +75,22 @@
|
|
75
75
|
|
76
76
|
context 'package manager detection' do
|
77
77
|
let(:fixture) { 'gemspec' }
|
78
|
+
|
79
|
+
# Using a `.gemspec` extension in the fixture breaks `gem release`
|
80
|
+
before do
|
81
|
+
FileUtils.cp("#{path}/project._gemspec", "#{path}/project.gemspec")
|
82
|
+
if described_class == Licensee::GitProject
|
83
|
+
Dir.chdir path do
|
84
|
+
`git add project.gemspec`
|
85
|
+
`git commit -m 'add real gemspec'`
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
after do
|
91
|
+
FileUtils.rm("#{path}/project.gemspec")
|
92
|
+
end
|
93
|
+
|
78
94
|
subject { described_class.new(path, detect_packages: true) }
|
79
95
|
|
80
96
|
it 'returns the package file' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: licensee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 8.8.
|
4
|
+
version: 8.8.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Balter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-03-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rugged
|
@@ -130,8 +130,7 @@ files:
|
|
130
130
|
- spec/fixtures/case-sensitive/LiCeNsE.TxT
|
131
131
|
- spec/fixtures/cc-by-nc-sa/LICENSE
|
132
132
|
- spec/fixtures/cc-by-nd/LICENSE
|
133
|
-
- spec/fixtures/gemspec/
|
134
|
-
- spec/fixtures/gemspec/project.gemspec
|
133
|
+
- spec/fixtures/gemspec/project._gemspec
|
135
134
|
- spec/fixtures/gpl3-without-instructions/LICENSE
|
136
135
|
- spec/fixtures/lgpl/COPYING.lesser
|
137
136
|
- spec/fixtures/lgpl/LICENSE
|
File without changes
|