spandx 0.12.3 → 0.13.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +74 -25
  3. data/README.md +11 -7
  4. data/exe/spandx +1 -2
  5. data/ext/spandx/extconf.rb +5 -0
  6. data/ext/spandx/spandx.c +55 -0
  7. data/ext/spandx/spandx.h +6 -0
  8. data/lib/spandx.rb +6 -3
  9. data/lib/spandx/cli.rb +2 -0
  10. data/lib/spandx/cli/commands/build.rb +13 -2
  11. data/lib/spandx/cli/commands/scan.rb +11 -20
  12. data/lib/spandx/cli/main.rb +3 -2
  13. data/lib/spandx/core/cache.rb +38 -51
  14. data/lib/spandx/core/content.rb +5 -23
  15. data/lib/spandx/core/data_file.rb +66 -0
  16. data/lib/spandx/core/dependency.rb +47 -13
  17. data/lib/spandx/core/git.rb +8 -32
  18. data/lib/spandx/core/guess.rb +48 -40
  19. data/lib/spandx/core/http.rb +7 -2
  20. data/lib/spandx/core/index_file.rb +103 -0
  21. data/lib/spandx/core/license_plugin.rb +15 -4
  22. data/lib/spandx/core/parser.rb +10 -3
  23. data/lib/spandx/core/path_traversal.rb +35 -0
  24. data/lib/spandx/core/relation.rb +38 -0
  25. data/lib/spandx/core/report.rb +6 -12
  26. data/lib/spandx/core/spinner.rb +51 -0
  27. data/lib/spandx/dotnet/index.rb +21 -79
  28. data/lib/spandx/dotnet/parsers/csproj.rb +7 -7
  29. data/lib/spandx/dotnet/parsers/packages_config.rb +7 -7
  30. data/lib/spandx/dotnet/parsers/sln.rb +10 -13
  31. data/lib/spandx/dotnet/project_file.rb +3 -3
  32. data/lib/spandx/java/index.rb +5 -2
  33. data/lib/spandx/java/parsers/maven.rb +7 -7
  34. data/lib/spandx/js/parsers/npm.rb +6 -6
  35. data/lib/spandx/js/parsers/yarn.rb +7 -7
  36. data/lib/spandx/php/parsers/composer.rb +7 -7
  37. data/lib/spandx/python/index.rb +4 -33
  38. data/lib/spandx/python/parsers/pipfile_lock.rb +4 -4
  39. data/lib/spandx/python/pypi.rb +0 -2
  40. data/lib/spandx/python/source.rb +12 -0
  41. data/lib/spandx/ruby/parsers/gemfile_lock.rb +10 -9
  42. data/lib/spandx/spdx/catalogue.rb +5 -1
  43. data/lib/spandx/spdx/composite_license.rb +60 -0
  44. data/lib/spandx/spdx/expression.rb +114 -0
  45. data/lib/spandx/spdx/license.rb +4 -14
  46. data/lib/spandx/version.rb +1 -1
  47. data/spandx.gemspec +16 -10
  48. metadata +100 -30
  49. data/lib/spandx/core/null_gateway.rb +0 -11
  50. data/lib/spandx/core/table.rb +0 -29
  51. data/lib/spandx/core/thread_pool.rb +0 -38
@@ -61,14 +61,6 @@ module Spandx
61
61
  attributes[:referenceNumber] = value
62
62
  end
63
63
 
64
- def content
65
- @content ||= ::Spandx::Core::Content.new(raw_content)
66
- end
67
-
68
- def content=(value)
69
- @content = ::Spandx::Core::Content.new(value)
70
- end
71
-
72
64
  def <=>(other)
73
65
  id <=> other.id
74
66
  end
@@ -77,14 +69,12 @@ module Spandx
77
69
  id
78
70
  end
79
71
 
80
- def self.unknown(text)
81
- new(licenseId: 'Nonstandard', name: 'Unknown').tap { |x| x.content = text }
72
+ def inspect
73
+ "#<Spandx::Spdx::License id='#{id}'>"
82
74
  end
83
75
 
84
- private
85
-
86
- def raw_content
87
- @raw_content ||= (Spandx.git[:spdx].read("text/#{id}.txt") || '')
76
+ def self.unknown(text)
77
+ new(licenseId: 'Nonstandard', name: text)
88
78
  end
89
79
  end
90
80
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Spandx
4
- VERSION = '0.12.3'
4
+ VERSION = '0.13.4'
5
5
  end
@@ -7,21 +7,22 @@ require 'spandx/version'
7
7
  Gem::Specification.new do |spec|
8
8
  spec.name = 'spandx'
9
9
  spec.version = Spandx::VERSION
10
- spec.authors = ['mo khan']
11
- spec.email = ['mo@mokhan.ca']
10
+ spec.authors = ['Can Eldem', 'mo khan']
11
+ spec.email = ['eldemcan@gmail.com', 'mo@mokhan.ca']
12
12
 
13
13
  spec.summary = 'A ruby interface to the SPDX catalogue.'
14
- spec.description = 'A ruby interface to the SPDX catalogue. With a CLI that can scan project lockfiles to list out software licenses for each dependency'
15
- spec.homepage = 'https://github.com/mokhan/spandx'
14
+ spec.description = 'Spanx is a ruby API for interacting with the spdx.org software license catalogue. This gem includes a command line interface to scan a software project for the software licenses that are associated with each dependency in the project. Spandx also allows you to hook additional information for each dependency found. For instance, you can add plugin to Spandx to find and report vulnerabilities for the dependencies it found.'
15
+ spec.homepage = 'https://spandx.github.io/'
16
16
  spec.license = 'MIT'
17
- spec.required_ruby_version = Gem::Requirement.new('>= 2.4.0')
17
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.5.0')
18
18
 
19
19
  spec.metadata['homepage_uri'] = spec.homepage
20
- spec.metadata['source_code_uri'] = 'https://github.com/mokhan/spandx'
21
- spec.metadata['changelog_uri'] = 'https://github.com/mokhan/spandx/blob/master/CHANGELOG.md'
20
+ spec.metadata['source_code_uri'] = 'https://github.com/spandx/spandx'
21
+ spec.metadata['changelog_uri'] = 'https://github.com/spandx/spandx/blob/master/CHANGELOG.md'
22
22
 
23
23
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
24
24
  Dir.glob('exe/*') +
25
+ Dir.glob('ext/**/**/*.{rb,c,h}') +
25
26
  Dir.glob('lib/**/**/*.{rb}') +
26
27
  Dir.glob('*.{md,gemspec,txt}')
27
28
  end
@@ -29,25 +30,30 @@ Gem::Specification.new do |spec|
29
30
  spec.bindir = 'exe'
30
31
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
32
  spec.require_paths = ['lib']
33
+ spec.extensions = ['ext/spandx/extconf.rb']
32
34
 
33
35
  spec.add_dependency 'addressable', '~> 2.7'
34
36
  spec.add_dependency 'bundler', '>= 1.16', '< 3.0.0'
37
+ spec.add_dependency 'nanospinner', '~> 1.0.0'
35
38
  spec.add_dependency 'net-hippie', '~> 0.3'
36
39
  spec.add_dependency 'nokogiri', '~> 1.10'
40
+ spec.add_dependency 'parslet', '~> 2.0'
41
+ spec.add_dependency 'terminal-table', '~> 1.8'
37
42
  spec.add_dependency 'thor'
43
+ spec.add_dependency 'tty-screen', '~> 0.7'
38
44
  spec.add_dependency 'zeitwerk', '~> 2.3'
39
45
 
46
+ spec.add_development_dependency 'benchmark-ips', '~> 2.8'
40
47
  spec.add_development_dependency 'bundler-audit', '~> 0.6'
41
48
  spec.add_development_dependency 'byebug', '~> 11.1'
42
- spec.add_development_dependency 'jaro_winkler', '~> 1.5'
43
49
  spec.add_development_dependency 'licensed', '~> 2.8'
44
- spec.add_development_dependency 'parallel_tests', '~> 2.32'
45
50
  spec.add_development_dependency 'rake', '~> 13.0'
51
+ spec.add_development_dependency 'rake-compiler', '~> 1.1'
46
52
  spec.add_development_dependency 'rspec', '~> 3.0'
47
53
  spec.add_development_dependency 'rspec-benchmark', '~> 0.5'
48
54
  spec.add_development_dependency 'rubocop', '~> 0.52'
49
55
  spec.add_development_dependency 'rubocop-rspec', '~> 1.22'
50
- spec.add_development_dependency 'text', '~> 1.3'
56
+ spec.add_development_dependency 'ruby-prof', '~> 1.3'
51
57
  spec.add_development_dependency 'vcr', '~> 5.0'
52
58
  spec.add_development_dependency 'webmock', '~> 3.7'
53
59
  end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spandx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.3
4
+ version: 0.13.4
5
5
  platform: ruby
6
6
  authors:
7
+ - Can Eldem
7
8
  - mo khan
8
9
  autorequire:
9
10
  bindir: exe
10
11
  cert_chain: []
11
- date: 2020-04-19 00:00:00.000000000 Z
12
+ date: 2020-05-26 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: addressable
@@ -44,6 +45,20 @@ dependencies:
44
45
  - - "<"
45
46
  - !ruby/object:Gem::Version
46
47
  version: 3.0.0
48
+ - !ruby/object:Gem::Dependency
49
+ name: nanospinner
50
+ requirement: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.0
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.0.0
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: net-hippie
49
64
  requirement: !ruby/object:Gem::Requirement
@@ -72,6 +87,34 @@ dependencies:
72
87
  - - "~>"
73
88
  - !ruby/object:Gem::Version
74
89
  version: '1.10'
90
+ - !ruby/object:Gem::Dependency
91
+ name: parslet
92
+ requirement: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.0'
97
+ type: :runtime
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '2.0'
104
+ - !ruby/object:Gem::Dependency
105
+ name: terminal-table
106
+ requirement: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.8'
111
+ type: :runtime
112
+ prerelease: false
113
+ version_requirements: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.8'
75
118
  - !ruby/object:Gem::Dependency
76
119
  name: thor
77
120
  requirement: !ruby/object:Gem::Requirement
@@ -86,6 +129,20 @@ dependencies:
86
129
  - - ">="
87
130
  - !ruby/object:Gem::Version
88
131
  version: '0'
132
+ - !ruby/object:Gem::Dependency
133
+ name: tty-screen
134
+ requirement: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0.7'
139
+ type: :runtime
140
+ prerelease: false
141
+ version_requirements: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '0.7'
89
146
  - !ruby/object:Gem::Dependency
90
147
  name: zeitwerk
91
148
  requirement: !ruby/object:Gem::Requirement
@@ -101,47 +158,47 @@ dependencies:
101
158
  - !ruby/object:Gem::Version
102
159
  version: '2.3'
103
160
  - !ruby/object:Gem::Dependency
104
- name: bundler-audit
161
+ name: benchmark-ips
105
162
  requirement: !ruby/object:Gem::Requirement
106
163
  requirements:
107
164
  - - "~>"
108
165
  - !ruby/object:Gem::Version
109
- version: '0.6'
166
+ version: '2.8'
110
167
  type: :development
111
168
  prerelease: false
112
169
  version_requirements: !ruby/object:Gem::Requirement
113
170
  requirements:
114
171
  - - "~>"
115
172
  - !ruby/object:Gem::Version
116
- version: '0.6'
173
+ version: '2.8'
117
174
  - !ruby/object:Gem::Dependency
118
- name: byebug
175
+ name: bundler-audit
119
176
  requirement: !ruby/object:Gem::Requirement
120
177
  requirements:
121
178
  - - "~>"
122
179
  - !ruby/object:Gem::Version
123
- version: '11.1'
180
+ version: '0.6'
124
181
  type: :development
125
182
  prerelease: false
126
183
  version_requirements: !ruby/object:Gem::Requirement
127
184
  requirements:
128
185
  - - "~>"
129
186
  - !ruby/object:Gem::Version
130
- version: '11.1'
187
+ version: '0.6'
131
188
  - !ruby/object:Gem::Dependency
132
- name: jaro_winkler
189
+ name: byebug
133
190
  requirement: !ruby/object:Gem::Requirement
134
191
  requirements:
135
192
  - - "~>"
136
193
  - !ruby/object:Gem::Version
137
- version: '1.5'
194
+ version: '11.1'
138
195
  type: :development
139
196
  prerelease: false
140
197
  version_requirements: !ruby/object:Gem::Requirement
141
198
  requirements:
142
199
  - - "~>"
143
200
  - !ruby/object:Gem::Version
144
- version: '1.5'
201
+ version: '11.1'
145
202
  - !ruby/object:Gem::Dependency
146
203
  name: licensed
147
204
  requirement: !ruby/object:Gem::Requirement
@@ -157,33 +214,33 @@ dependencies:
157
214
  - !ruby/object:Gem::Version
158
215
  version: '2.8'
159
216
  - !ruby/object:Gem::Dependency
160
- name: parallel_tests
217
+ name: rake
161
218
  requirement: !ruby/object:Gem::Requirement
162
219
  requirements:
163
220
  - - "~>"
164
221
  - !ruby/object:Gem::Version
165
- version: '2.32'
222
+ version: '13.0'
166
223
  type: :development
167
224
  prerelease: false
168
225
  version_requirements: !ruby/object:Gem::Requirement
169
226
  requirements:
170
227
  - - "~>"
171
228
  - !ruby/object:Gem::Version
172
- version: '2.32'
229
+ version: '13.0'
173
230
  - !ruby/object:Gem::Dependency
174
- name: rake
231
+ name: rake-compiler
175
232
  requirement: !ruby/object:Gem::Requirement
176
233
  requirements:
177
234
  - - "~>"
178
235
  - !ruby/object:Gem::Version
179
- version: '13.0'
236
+ version: '1.1'
180
237
  type: :development
181
238
  prerelease: false
182
239
  version_requirements: !ruby/object:Gem::Requirement
183
240
  requirements:
184
241
  - - "~>"
185
242
  - !ruby/object:Gem::Version
186
- version: '13.0'
243
+ version: '1.1'
187
244
  - !ruby/object:Gem::Dependency
188
245
  name: rspec
189
246
  requirement: !ruby/object:Gem::Requirement
@@ -241,7 +298,7 @@ dependencies:
241
298
  - !ruby/object:Gem::Version
242
299
  version: '1.22'
243
300
  - !ruby/object:Gem::Dependency
244
- name: text
301
+ name: ruby-prof
245
302
  requirement: !ruby/object:Gem::Requirement
246
303
  requirements:
247
304
  - - "~>"
@@ -282,19 +339,28 @@ dependencies:
282
339
  - - "~>"
283
340
  - !ruby/object:Gem::Version
284
341
  version: '3.7'
285
- description: A ruby interface to the SPDX catalogue. With a CLI that can scan project
286
- lockfiles to list out software licenses for each dependency
342
+ description: Spanx is a ruby API for interacting with the spdx.org software license
343
+ catalogue. This gem includes a command line interface to scan a software project
344
+ for the software licenses that are associated with each dependency in the project.
345
+ Spandx also allows you to hook additional information for each dependency found.
346
+ For instance, you can add plugin to Spandx to find and report vulnerabilities for
347
+ the dependencies it found.
287
348
  email:
349
+ - eldemcan@gmail.com
288
350
  - mo@mokhan.ca
289
351
  executables:
290
352
  - spandx
291
- extensions: []
353
+ extensions:
354
+ - ext/spandx/extconf.rb
292
355
  extra_rdoc_files: []
293
356
  files:
294
357
  - CHANGELOG.md
295
358
  - LICENSE.txt
296
359
  - README.md
297
360
  - exe/spandx
361
+ - ext/spandx/extconf.rb
362
+ - ext/spandx/spandx.c
363
+ - ext/spandx/spandx.h
298
364
  - lib/spandx.rb
299
365
  - lib/spandx/cli.rb
300
366
  - lib/spandx/cli/commands/build.rb
@@ -304,20 +370,22 @@ files:
304
370
  - lib/spandx/core/cache.rb
305
371
  - lib/spandx/core/circuit.rb
306
372
  - lib/spandx/core/content.rb
373
+ - lib/spandx/core/data_file.rb
307
374
  - lib/spandx/core/dependency.rb
308
375
  - lib/spandx/core/gateway.rb
309
376
  - lib/spandx/core/git.rb
310
377
  - lib/spandx/core/guess.rb
311
378
  - lib/spandx/core/http.rb
379
+ - lib/spandx/core/index_file.rb
312
380
  - lib/spandx/core/license_plugin.rb
313
- - lib/spandx/core/null_gateway.rb
314
381
  - lib/spandx/core/parser.rb
382
+ - lib/spandx/core/path_traversal.rb
315
383
  - lib/spandx/core/plugin.rb
316
384
  - lib/spandx/core/registerable.rb
385
+ - lib/spandx/core/relation.rb
317
386
  - lib/spandx/core/report.rb
318
387
  - lib/spandx/core/score.rb
319
- - lib/spandx/core/table.rb
320
- - lib/spandx/core/thread_pool.rb
388
+ - lib/spandx/core/spinner.rb
321
389
  - lib/spandx/dotnet/index.rb
322
390
  - lib/spandx/dotnet/nuget_gateway.rb
323
391
  - lib/spandx/dotnet/package_reference.rb
@@ -342,17 +410,19 @@ files:
342
410
  - lib/spandx/ruby/gateway.rb
343
411
  - lib/spandx/ruby/parsers/gemfile_lock.rb
344
412
  - lib/spandx/spdx/catalogue.rb
413
+ - lib/spandx/spdx/composite_license.rb
414
+ - lib/spandx/spdx/expression.rb
345
415
  - lib/spandx/spdx/gateway.rb
346
416
  - lib/spandx/spdx/license.rb
347
417
  - lib/spandx/version.rb
348
418
  - spandx.gemspec
349
- homepage: https://github.com/mokhan/spandx
419
+ homepage: https://spandx.github.io/
350
420
  licenses:
351
421
  - MIT
352
422
  metadata:
353
- homepage_uri: https://github.com/mokhan/spandx
354
- source_code_uri: https://github.com/mokhan/spandx
355
- changelog_uri: https://github.com/mokhan/spandx/blob/master/CHANGELOG.md
423
+ homepage_uri: https://spandx.github.io/
424
+ source_code_uri: https://github.com/spandx/spandx
425
+ changelog_uri: https://github.com/spandx/spandx/blob/master/CHANGELOG.md
356
426
  post_install_message:
357
427
  rdoc_options: []
358
428
  require_paths:
@@ -361,14 +431,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
361
431
  requirements:
362
432
  - - ">="
363
433
  - !ruby/object:Gem::Version
364
- version: 2.4.0
434
+ version: 2.5.0
365
435
  required_rubygems_version: !ruby/object:Gem::Requirement
366
436
  requirements:
367
437
  - - ">="
368
438
  - !ruby/object:Gem::Version
369
439
  version: '0'
370
440
  requirements: []
371
- rubygems_version: 3.1.2
441
+ rubygems_version: 3.1.3
372
442
  signing_key:
373
443
  specification_version: 4
374
444
  summary: A ruby interface to the SPDX catalogue.
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Spandx
4
- module Core
5
- class NullGateway
6
- def licenses_for(*_args)
7
- []
8
- end
9
- end
10
- end
11
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Spandx
4
- module Core
5
- class Table
6
- def initialize
7
- @rows = []
8
- @max_justification = 0
9
- yield self
10
- end
11
-
12
- def <<(item)
13
- row = item.to_a
14
- new_max = row[0].size
15
- @max_justification = new_max + 1 if new_max > @max_justification
16
- @rows << row
17
- end
18
-
19
- def to_s
20
- @rows.map do |row|
21
- row.each.with_index.map do |cell, index|
22
- justification = index.zero? ? @max_justification : 15
23
- Array(cell).join(', ').ljust(justification, ' ')
24
- end.join
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Spandx
4
- module Core
5
- class ThreadPool
6
- def initialize(size: Etc.nprocessors)
7
- @size = size
8
- @jobs = Queue.new
9
- @pool = size.times { start_worker_thread }
10
- end
11
-
12
- def schedule(*args, &block)
13
- @jobs << [block, args]
14
- end
15
-
16
- def shutdown
17
- @size.times do
18
- schedule { throw :exit }
19
- end
20
-
21
- @pool.map(&:join)
22
- end
23
-
24
- private
25
-
26
- def start_worker_thread
27
- Thread.new do
28
- catch(:exit) do
29
- loop do
30
- job, args = @jobs.deq
31
- job.call(*args)
32
- end
33
- end
34
- end
35
- end
36
- end
37
- end
38
- end