spandx 0.17.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d884c729b0d1cb14391435f68b78a77cfb2a73860b8757d4421bda9ff06276bd
4
- data.tar.gz: 2fe44244d7285b7fc5bd9ddf8660b2bd4b435d8908b6c5e67d305181e6356658
3
+ metadata.gz: d25ff66ba00edb25cf87b9d9af71ed9433bf084a819a80f86676714754359b34
4
+ data.tar.gz: 59e6783d2cba9287e0a65836aeae6705434fc0c9ccdfb093763d83b23d673207
5
5
  SHA512:
6
- metadata.gz: a6f25542efd0f506dbe65f5dbd179d562fbb37fd9498cffc1cee2ac8a0bfdfabab614269920aa2799736a198529408300277c2d87c7303f3463bd37e0ff67ee8
7
- data.tar.gz: ebe7266727203ec7a84e741e2dfa5fa76db8a9da30dbfbb258618adbda6e7463a04174fd0c706c23c65068857f06584eef2fcdd25e05fe1ad0ebf5dbd9489c06
6
+ metadata.gz: c75d55cc57a24d00912a98d0a339b22f21e04fb0c84459ce9b769b900cce83f5877557cbe70e2cdff522d1869ba4d89688b9e9d67913719247cc53897216cb01
7
+ data.tar.gz: 770105bb92091a740afc3d886194712eb54908718af73e2769acfd512afe553d3f00de0e1ada81930b3d5c09a0a6053dfcc3cd8c9f48ecdb76673e1534ad9fff
data/CHANGELOG.md CHANGED
@@ -1,4 +1,4 @@
1
- Version 0.17.0
1
+ Version 0.18.0
2
2
 
3
3
  # Changelog
4
4
 
@@ -8,6 +8,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
8
8
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
9
9
 
10
10
  ## [Unreleased]
11
+
12
+ ## [0.18.0] - 2021-05-10
13
+ ### Added
14
+ - Add support for parsing `.terraform.lock.hcl` files.
15
+
11
16
  ## [0.17.0] - 2020-12-28
12
17
  ### Added
13
18
  - Allow indexing gems from index.rubygems.org.
@@ -223,7 +228,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
223
228
  ### Added
224
229
  - Provide ruby API to the latest SPDX catalogue.
225
230
 
226
- [Unreleased]: https://github.com/spandx/spandx/compare/v0.17.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
227
233
  [0.17.0]: https://github.com/spandx/spandx/compare/v0.16.1...v0.17.0
228
234
  [0.16.1]: https://github.com/spandx/spandx/compare/v0.16.0...v0.16.1
229
235
  [0.16.0]: https://github.com/spandx/spandx/compare/v0.15.1...v0.16.0
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
 
@@ -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.17.0'
4
+ VERSION = '0.18.0'
5
5
  end
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.17.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-12-29 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
@@ -434,6 +434,8 @@ files:
434
434
  - lib/spandx/spdx/expression.rb
435
435
  - lib/spandx/spdx/gateway.rb
436
436
  - lib/spandx/spdx/license.rb
437
+ - lib/spandx/terraform/parsers/hcl.rb
438
+ - lib/spandx/terraform/parsers/lock_file.rb
437
439
  - lib/spandx/version.rb
438
440
  - spandx.gemspec
439
441
  homepage: https://spandx.github.io/
@@ -443,7 +445,7 @@ metadata:
443
445
  homepage_uri: https://spandx.github.io/
444
446
  source_code_uri: https://github.com/spandx/spandx
445
447
  changelog_uri: https://github.com/spandx/spandx/blob/main/CHANGELOG.md
446
- post_install_message:
448
+ post_install_message:
447
449
  rdoc_options: []
448
450
  require_paths:
449
451
  - lib
@@ -459,7 +461,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
459
461
  version: '0'
460
462
  requirements: []
461
463
  rubygems_version: 3.2.3
462
- signing_key:
464
+ signing_key:
463
465
  specification_version: 4
464
466
  summary: A ruby interface to the SPDX catalogue.
465
467
  test_files: []