spandx 0.15.0 → 0.18.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ee3b447710888b33bf24ecf467ce1bf41e3cf6f2c91d2c3c381f256d0fa1ea6f
4
- data.tar.gz: cd802eabfd2f0e383ae198217992ce465c28ac7d53587264ca1a2f4746e9e9ce
3
+ metadata.gz: d25ff66ba00edb25cf87b9d9af71ed9433bf084a819a80f86676714754359b34
4
+ data.tar.gz: 59e6783d2cba9287e0a65836aeae6705434fc0c9ccdfb093763d83b23d673207
5
5
  SHA512:
6
- metadata.gz: ed0fec87962da7ad1576131d6a463324deeaa9ea2b9a6b289dc9c639d1eb9dda98e2bd7aa02df2f9d40526fc4793cedafe3311c9c5fb6c6aedba5594b68fcc1f
7
- data.tar.gz: f6bdc294db3b95093c8e3872bb5113879c0a12f9d45ec718557281ff9397f925d0b0a443ba41fad0c5a48e86c77babf95b855b7315d795ec8e869bf8c1dbd6c4
6
+ metadata.gz: c75d55cc57a24d00912a98d0a339b22f21e04fb0c84459ce9b769b900cce83f5877557cbe70e2cdff522d1869ba4d89688b9e9d67913719247cc53897216cb01
7
+ data.tar.gz: 770105bb92091a740afc3d886194712eb54908718af73e2769acfd512afe553d3f00de0e1ada81930b3d5c09a0a6053dfcc3cd8c9f48ecdb76673e1534ad9fff
data/CHANGELOG.md CHANGED
@@ -1,4 +1,4 @@
1
- Version 0.15.0
1
+ Version 0.18.0
2
2
 
3
3
  # Changelog
4
4
 
@@ -9,6 +9,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
+ ## [0.18.0] - 2021-05-10
13
+ ### Added
14
+ - Add support for parsing `.terraform.lock.hcl` files.
15
+
16
+ ## [0.17.0] - 2020-12-28
17
+ ### Added
18
+ - Allow indexing gems from index.rubygems.org.
19
+
20
+ ## [0.16.1] - 2020-11-19
21
+ ### Fixed
22
+ - Start spinner for table printer only
23
+
24
+ ## [0.16.0] - 2020-11-19
25
+ ### Changed
26
+ - Pull smaller license cache.
27
+ - Print index files after building them.
28
+
29
+ ## [0.15.1] - 2020-11-18
30
+ ### Fixed
31
+ - Rebuild index after pulling latest cache.
32
+
12
33
  ## [0.15.0] - 2020-11-18
13
34
  ### Added
14
35
  - Parse `/var/lib/dpkg/status` file.
@@ -207,7 +228,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
207
228
  ### Added
208
229
  - Provide ruby API to the latest SPDX catalogue.
209
230
 
210
- [Unreleased]: https://github.com/spandx/spandx/compare/v0.15.0...HEAD
231
+ [Unreleased]: https://github.com/spandx/spandx/compare/v0.18.0...HEAD
232
+ [0.18.0]: https://github.com/spandx/spandx/compare/v0.17.0...v0.18.0
233
+ [0.17.0]: https://github.com/spandx/spandx/compare/v0.16.1...v0.17.0
234
+ [0.16.1]: https://github.com/spandx/spandx/compare/v0.16.0...v0.16.1
235
+ [0.16.0]: https://github.com/spandx/spandx/compare/v0.15.1...v0.16.0
236
+ [0.15.1]: https://github.com/spandx/spandx/compare/v0.15.0...v0.15.1
211
237
  [0.15.0]: https://github.com/spandx/spandx/compare/v0.14.0...v0.15.0
212
238
  [0.14.0]: https://github.com/spandx/spandx/compare/v0.13.5...v0.14.0
213
239
  [0.13.5]: https://github.com/spandx/spandx/compare/v0.13.4...v0.13.5
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # Spandx ![badge](https://github.com/spandx/spandx/workflows/ci/badge.svg)
6
6
 
7
- A ruby API for interacting with the https://spdx.org software license catalogue.
7
+ A Ruby API for interacting with the https://spdx.org software license catalogue.
8
8
  This gem includes a command line interface to scan a software project for the
9
9
  software licenses that are associated with each dependency in the project.
10
10
  `spandx` leverages an offline cache of software licenses for known dependencies.
@@ -104,7 +104,7 @@ end
104
104
 
105
105
  ## Development
106
106
 
107
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/cibuild` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
107
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
108
108
 
109
109
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
110
110
 
data/ext/spandx/spandx.c CHANGED
@@ -52,4 +52,6 @@ void Init_spandx(void)
52
52
  rb_mCore = rb_define_module_under(rb_mSpandx, "Core");
53
53
  rb_mCsvParser = rb_define_module_under(rb_mCore, "CsvParser");
54
54
  rb_define_module_function(rb_mCsvParser, "parse", parse, 1);
55
+
56
+ rb_gc_register_mark_object(rb_mCsvParser);
55
57
  }
data/lib/spandx.rb CHANGED
@@ -11,6 +11,7 @@ require 'nokogiri'
11
11
  require 'oj'
12
12
  require 'parslet'
13
13
  require 'pathname'
14
+ require 'sorted_set'
14
15
  require 'yaml'
15
16
  require 'zeitwerk'
16
17
  require 'spandx/spandx'
@@ -45,7 +46,7 @@ module Spandx
45
46
  @git ||= {
46
47
  cache: ::Spandx::Core::Git.new(url: 'https://github.com/spandx/cache.git'),
47
48
  rubygems: ::Spandx::Core::Git.new(url: 'https://github.com/spandx/rubygems-cache.git'),
48
- spdx: ::Spandx::Core::Git.new(url: 'https://github.com/spdx/license-list-data.git'),
49
+ spdx: ::Spandx::Core::Git.new(url: 'https://github.com/spdx/license-list-data.git', default_branch: 'master'),
49
50
  }
50
51
  end
51
52
  end
@@ -5,10 +5,11 @@ module Spandx
5
5
  module Commands
6
6
  class Build
7
7
  INDEXES = {
8
+ dotnet: Spandx::Dotnet::Index,
8
9
  maven: Spandx::Java::Index,
9
10
  nuget: Spandx::Dotnet::Index,
10
- dotnet: Spandx::Dotnet::Index,
11
11
  pypi: Spandx::Python::Index,
12
+ rubygems: Spandx::Ruby::Index,
12
13
  }.freeze
13
14
 
14
15
  def initialize(options)
@@ -4,17 +4,56 @@ module Spandx
4
4
  module Cli
5
5
  module Commands
6
6
  class Pull
7
+ attr_reader :cache_dir, :rubygems_cache_dir
8
+
7
9
  def initialize(options)
8
10
  @options = options
11
+ @cache_dir = Spandx.git[:cache].root.join('.index')
12
+ @rubygems_cache_dir = Spandx.git[:rubygems].root.join('.index')
9
13
  end
10
14
 
11
- def execute(output: $stdout)
12
- Spandx.git.each_value do |db|
13
- output.puts "Updating #{db.url}..."
14
- db.update!
15
+ def execute(output: $stderr)
16
+ sync(output)
17
+ build(output, ::Spandx::Core::Dependency::PACKAGE_MANAGERS.values.uniq)
18
+ index_files_in(cache_dir, rubygems_cache_dir).each do |item|
19
+ output.puts item.to_s.gsub(Dir.home, '~')
15
20
  end
16
21
  output.puts 'OK'
17
22
  end
23
+
24
+ private
25
+
26
+ def sync(output)
27
+ Spandx.git.each_value do |db|
28
+ with_spinner("Updating #{db.url}...", output: output) do
29
+ db.update!
30
+ end
31
+ end
32
+ end
33
+
34
+ def build(output, sources)
35
+ with_spinner('Building index...', output: output) do
36
+ sources.each do |source|
37
+ Spandx::Core::Cache.new(source, root: cache_dir).rebuild_index
38
+ end
39
+ Spandx::Core::Cache.new(:rubygems, root: rubygems_cache_dir).rebuild_index
40
+ end
41
+ end
42
+
43
+ def with_spinner(message, output:)
44
+ spinner = TTY::Spinner.new("[:spinner] #{message}", output: output)
45
+ spinner.auto_spin
46
+ yield
47
+ spinner.success('(done)')
48
+ rescue StandardError => error
49
+ spinner.error("(#{error.message})")
50
+ ensure
51
+ spinner.stop
52
+ end
53
+
54
+ def index_files_in(*dirs)
55
+ dirs.map { |x| x.glob('**/*.idx') }.flatten.sort
56
+ end
18
57
  end
19
58
  end
20
59
  end
@@ -12,15 +12,11 @@ module Spandx
12
12
  method_option :pull, aliases: '-p', type: :boolean, desc: 'Pull the latest cache before the scan', default: false
13
13
  method_option :require, aliases: '-r', type: :string, desc: 'Causes spandx to load the library using require.', default: nil
14
14
  def scan(lockfile = Pathname.pwd)
15
- if options[:help]
16
- invoke :help, ['scan']
17
- else
18
- Oj.default_options = { mode: :strict }
19
- Spandx.airgap = options[:airgap]
20
- Spandx.logger = Logger.new(options[:logfile])
21
- pull if options[:pull]
22
- Spandx::Cli::Commands::Scan.new(lockfile, options).execute
23
- end
15
+ return invoke :help, ['scan'] if options[:help]
16
+
17
+ prepare(options)
18
+ pull if options[:pull]
19
+ Spandx::Cli::Commands::Scan.new(lockfile, options).execute
24
20
  end
25
21
 
26
22
  desc 'pull', 'Pull the latest offline cache'
@@ -52,6 +48,14 @@ module Spandx
52
48
  puts "v#{Spandx::VERSION}"
53
49
  end
54
50
  map %w[--version -v] => :version
51
+
52
+ private
53
+
54
+ def prepare(options)
55
+ Oj.default_options = { mode: :strict }
56
+ Spandx.airgap = options[:airgap]
57
+ Spandx.logger = Logger.new(options[:logfile])
58
+ end
55
59
  end
56
60
  end
57
61
  end
@@ -6,8 +6,8 @@ module Spandx
6
6
  class Table < Printer
7
7
  HEADINGS = ['Name', 'Version', 'Licenses', 'Location'].freeze
8
8
 
9
- def initialize
10
- @spinner = TTY::Spinner.new(output: $stderr)
9
+ def initialize(output: $stderr)
10
+ @spinner = TTY::Spinner.new('[:spinner] Scanning...', output: output, clear: true, format: :dots)
11
11
  end
12
12
 
13
13
  def match?(format)
@@ -15,8 +15,8 @@ module Spandx
15
15
  end
16
16
 
17
17
  def print_header(_io)
18
- @dependencies = SortedSet.new
19
18
  @spinner.auto_spin
19
+ @dependencies = SortedSet.new
20
20
  end
21
21
 
22
22
  def print_line(dependency, _io)
@@ -25,6 +25,7 @@ module Spandx
25
25
 
26
26
  def print_footer(io)
27
27
  @spinner.stop
28
+ @spinner.reset
28
29
  io.puts(to_table(@dependencies.map(&:to_a)))
29
30
  end
30
31
 
@@ -56,6 +56,10 @@ module Spandx
56
56
  @index ||= IndexFile.new(self)
57
57
  end
58
58
 
59
+ def to_s
60
+ absolute_path.to_s
61
+ end
62
+
59
63
  private
60
64
 
61
65
  def to_csv(array)
@@ -3,10 +3,11 @@
3
3
  module Spandx
4
4
  module Core
5
5
  class Git
6
- attr_reader :root, :url
6
+ attr_reader :root, :url, :default_branch
7
7
 
8
- def initialize(url:)
8
+ def initialize(url:, default_branch: 'main')
9
9
  @url = url
10
+ @default_branch = default_branch
10
11
  @root = path_for(url)
11
12
  end
12
13
 
@@ -31,14 +32,15 @@ module Spandx
31
32
  root.join('.git').directory?
32
33
  end
33
34
 
34
- def clone!
35
+ def clone!(branch: default_branch)
35
36
  system('rm', '-rf', root.to_s) if root.exist?
36
- system('git', 'clone', '--quiet', '--depth=1', '--single-branch', '--branch', 'master', url, root.to_s)
37
+ system('git', 'clone', '--quiet', '--depth=1', '--single-branch', '--branch', branch, url, root.to_s)
37
38
  end
38
39
 
39
- def pull!
40
+ def pull!(remote: 'origin', branch: default_branch)
40
41
  Dir.chdir(root) do
41
- system('git', 'pull', '--no-rebase', '--quiet', 'origin', 'master')
42
+ system('git', 'fetch', '--quiet', '--depth=1', '--prune', '--no-tags', remote)
43
+ system('git', 'checkout', '--quiet', branch)
42
44
  end
43
45
  end
44
46
  end
@@ -8,8 +8,21 @@ module Spandx
8
8
  @http = http
9
9
  end
10
10
 
11
+ def each
12
+ response = http.get('https://index.rubygems.org/versions')
13
+ return unless http.ok?(response)
14
+
15
+ parse_each_from(StringIO.new(response.body)) do |item|
16
+ yield item
17
+ end
18
+ end
19
+
11
20
  def licenses_for(dependency)
12
- details_on(dependency.name, dependency.version)['licenses'] || []
21
+ licenses(dependency.name, dependency.version)
22
+ end
23
+
24
+ def licenses(name, version)
25
+ details_on(name, version)['licenses'] || []
13
26
  end
14
27
 
15
28
  def matches?(dependency)
@@ -20,6 +33,17 @@ module Spandx
20
33
 
21
34
  attr_reader :http
22
35
 
36
+ def parse_each_from(io)
37
+ _created_at = io.readline
38
+ _triple_dash = io.readline
39
+ until io.eof?
40
+ name, versions, _digest = io.readline.split(' ')
41
+ versions.split(',').each do |version|
42
+ yield({ name: name, version: version })
43
+ end
44
+ end
45
+ end
46
+
23
47
  def details_on(name, version)
24
48
  url = "https://rubygems.org/api/v2/rubygems/#{name}/versions/#{version}.json"
25
49
  response = http.get(url, default: {})
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spandx
4
+ module Ruby
5
+ class Index
6
+ include Enumerable
7
+
8
+ attr_reader :directory, :name, :rubygems
9
+
10
+ def initialize(directory:)
11
+ @directory = directory
12
+ @name = 'rubygems'
13
+ @cache = ::Spandx::Core::Cache.new(@name, root: directory)
14
+ @rubygems = ::Spandx::Ruby::Gateway.new
15
+ end
16
+
17
+ def update!(*)
18
+ queue = Queue.new
19
+ [fetch(queue), save(queue)].each(&:join)
20
+ cache.rebuild_index
21
+ end
22
+
23
+ private
24
+
25
+ attr_reader :cache
26
+
27
+ def fetch(queue)
28
+ Thread.new do
29
+ rubygems.each do |item|
30
+ queue.enq(
31
+ item.merge(
32
+ licenses: rubygems.licenses(item[:name], item[:version])
33
+ )
34
+ )
35
+ end
36
+ queue.enq(:stop)
37
+ end
38
+ end
39
+
40
+ def save(queue)
41
+ Thread.new do
42
+ loop do
43
+ item = queue.deq
44
+ break if item == :stop
45
+
46
+ cache.insert(item[:name], item[:version], item[:licenses])
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,103 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spandx
4
+ module Terraform
5
+ module Parsers
6
+ class Hcl < Parslet::Parser
7
+ rule(:alpha) { match['a-zA-Z'] }
8
+ rule(:assign) { str('=') }
9
+ rule(:comma) { str(',') }
10
+ rule(:comment) { (str('#') | str('//')) >> ((str("\n") >> str("\r").maybe).absent? >> any).repeat >> eol }
11
+ rule(:crlf) { match('[\r\n]') }
12
+ rule(:digit) { match('\d') }
13
+ rule(:dot) { str('.') }
14
+ rule(:eol) { whitespace? >> crlf.repeat }
15
+ rule(:greater_than_or_equal_to) { str('>=') }
16
+ rule(:hyphen) { str('-') }
17
+ rule(:lbracket) { str('[') }
18
+ rule(:lcurly) { str('{') }
19
+ rule(:major) { number }
20
+ rule(:major_minor) { (number >> dot >> number) }
21
+ rule(:major_minor_patch) { number >> dot >> number >> dot >> number }
22
+ rule(:multiline_comment) { str('/*') >> (str('*/').absent? >> any).repeat >> str('*/') }
23
+ rule(:number) { digit.repeat }
24
+ rule(:pre_release) { hyphen >> (alpha | digit).repeat }
25
+ rule(:pre_release?) { pre_release.maybe }
26
+ rule(:quote) { str('"') }
27
+ rule(:rbracket) { str(']') }
28
+ rule(:rcurly) { str('}') }
29
+ rule(:space) { match('\s') }
30
+ rule(:tilda_wacka) { str('~>') }
31
+ rule(:version) { number >> dot >> number >> dot >> number >> pre_release? }
32
+ rule(:whitespace) { (multiline_comment | comment | space).repeat }
33
+ rule(:whitespace?) { whitespace.maybe }
34
+
35
+ rule(:pessimistic_version_constraint) do
36
+ tilda_wacka >> whitespace >> (
37
+ major_minor_patch |
38
+ major_minor |
39
+ major
40
+ )
41
+ end
42
+
43
+ rule(:greater_than_or_equal_to_version) do
44
+ greater_than_or_equal_to >> whitespace >> (
45
+ major_minor_patch |
46
+ major_minor |
47
+ major
48
+ )
49
+ end
50
+
51
+ rule(:version_constraint) do
52
+ pessimistic_version_constraint | greater_than_or_equal_to_version
53
+ end
54
+
55
+ rule :version_assignment do
56
+ str('version') >> whitespace >> assign >> whitespace >> quote >> version.as(:version) >> quote
57
+ end
58
+
59
+ rule :constraint_assignment do
60
+ str('constraints') >> whitespace >> assign >> whitespace >> quote >> version_constraint.as(:constraints) >> quote
61
+ end
62
+
63
+ rule :string do
64
+ quote >> match('[0-9A-Za-z.~> :=/]').repeat.as(:value) >> quote
65
+ end
66
+
67
+ rule :array_item do
68
+ whitespace >> string >> comma >> eol
69
+ end
70
+
71
+ rule :array do
72
+ lbracket >> eol >> array_item.repeat >> rbracket
73
+ end
74
+
75
+ rule :argument do
76
+ alpha.repeat.as(:name) >> whitespace >> assign >> whitespace >> (array.as(:values) | string)
77
+ end
78
+
79
+ rule :arguments do
80
+ (argument >> eol).repeat
81
+ end
82
+
83
+ rule :identifier do
84
+ whitespace >> quote >> ((alpha | match('[./]')).repeat).as(:name) >> quote >> whitespace
85
+ end
86
+
87
+ rule :block_body do
88
+ arguments.as(:arguments)
89
+ end
90
+
91
+ rule :block do
92
+ whitespace? >> (alpha.repeat).as(:type) >> identifier >> whitespace >> lcurly >> eol >> block_body >> rcurly >> eol
93
+ end
94
+
95
+ rule :blocks do
96
+ block.repeat.as(:blocks)
97
+ end
98
+
99
+ root(:blocks)
100
+ end
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spandx
4
+ module Terraform
5
+ module Parsers
6
+ class LockFile < ::Spandx::Core::Parser
7
+ def initialize
8
+ @parser = Spandx::Terraform::Parsers::Hcl.new
9
+ end
10
+
11
+ def match?(pathname)
12
+ basename = pathname.basename
13
+ basename.fnmatch?('.terraform.lock.hcl')
14
+ end
15
+
16
+ def parse(path)
17
+ tree = @parser.parse(path.read)
18
+ tree[:blocks].map do |block|
19
+ version_arg = version_arg_from(block)
20
+ ::Spandx::Core::Dependency.new(
21
+ name: block[:name].to_s,
22
+ version: version_arg[:value]&.to_s,
23
+ path: path
24
+ )
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def version_arg_from(block)
31
+ block[:arguments].find do |x|
32
+ x[:name] == 'version'
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Spandx
4
- VERSION = '0.15.0'
4
+ VERSION = '0.18.0'
5
5
  end
data/spandx.gemspec CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
 
19
19
  spec.metadata['homepage_uri'] = spec.homepage
20
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'
21
+ spec.metadata['changelog_uri'] = 'https://github.com/spandx/spandx/blob/main/CHANGELOG.md'
22
22
 
23
23
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
24
24
  Dir.glob('exe/*') +
@@ -38,6 +38,7 @@ Gem::Specification.new do |spec|
38
38
  spec.add_dependency 'nokogiri', '~> 1.10'
39
39
  spec.add_dependency 'oj', '~> 3.10'
40
40
  spec.add_dependency 'parslet', '~> 2.0'
41
+ spec.add_dependency 'sorted_set', '~> 1.0'
41
42
  spec.add_dependency 'terminal-table', '~> 1.8'
42
43
  spec.add_dependency 'thor'
43
44
  spec.add_dependency 'tty-spinner', '~> 0.9'
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spandx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.0
4
+ version: 0.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Can Eldem
8
8
  - mo khan
9
- autorequire:
9
+ autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2020-11-18 00:00:00.000000000 Z
12
+ date: 2021-05-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: addressable
@@ -101,6 +101,20 @@ dependencies:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
103
  version: '2.0'
104
+ - !ruby/object:Gem::Dependency
105
+ name: sorted_set
106
+ requirement: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.0'
111
+ type: :runtime
112
+ prerelease: false
113
+ version_requirements: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.0'
104
118
  - !ruby/object:Gem::Dependency
105
119
  name: terminal-table
106
120
  requirement: !ruby/object:Gem::Requirement
@@ -413,12 +427,15 @@ files:
413
427
  - lib/spandx/python/pypi.rb
414
428
  - lib/spandx/python/source.rb
415
429
  - lib/spandx/ruby/gateway.rb
430
+ - lib/spandx/ruby/index.rb
416
431
  - lib/spandx/ruby/parsers/gemfile_lock.rb
417
432
  - lib/spandx/spdx/catalogue.rb
418
433
  - lib/spandx/spdx/composite_license.rb
419
434
  - lib/spandx/spdx/expression.rb
420
435
  - lib/spandx/spdx/gateway.rb
421
436
  - lib/spandx/spdx/license.rb
437
+ - lib/spandx/terraform/parsers/hcl.rb
438
+ - lib/spandx/terraform/parsers/lock_file.rb
422
439
  - lib/spandx/version.rb
423
440
  - spandx.gemspec
424
441
  homepage: https://spandx.github.io/
@@ -427,8 +444,8 @@ licenses:
427
444
  metadata:
428
445
  homepage_uri: https://spandx.github.io/
429
446
  source_code_uri: https://github.com/spandx/spandx
430
- changelog_uri: https://github.com/spandx/spandx/blob/master/CHANGELOG.md
431
- post_install_message:
447
+ changelog_uri: https://github.com/spandx/spandx/blob/main/CHANGELOG.md
448
+ post_install_message:
432
449
  rdoc_options: []
433
450
  require_paths:
434
451
  - lib
@@ -443,8 +460,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
443
460
  - !ruby/object:Gem::Version
444
461
  version: '0'
445
462
  requirements: []
446
- rubygems_version: 3.1.4
447
- signing_key:
463
+ rubygems_version: 3.2.3
464
+ signing_key:
448
465
  specification_version: 4
449
466
  summary: A ruby interface to the SPDX catalogue.
450
467
  test_files: []