Class: Sbom::License::Scanner
- Inherits:
-
Object
- Object
- Sbom::License::Scanner
- Defined in:
- lib/sbom/license/scanner.rb
Constant Summary collapse
- SPECIAL_VALUES =
%w[NOASSERTION NONE].freeze
Class Method Summary collapse
Instance Method Summary collapse
- #deprecated?(license_id) ⇒ Boolean
- #find_license(license_id) ⇒ Object
-
#initialize ⇒ Scanner
constructor
A new instance of Scanner.
- #license_list_version ⇒ Object
- #osi_approved?(license_id) ⇒ Boolean
- #valid?(license_id) ⇒ Boolean
- #validate_expression(expression) ⇒ Object
Constructor Details
#initialize ⇒ Scanner
Returns a new instance of Scanner.
16 17 18 19 20 21 |
# File 'lib/sbom/license/scanner.rb', line 16 def initialize @licenses = {} @license_names = {} @deprecated = {} load_license_data end |
Class Method Details
.instance ⇒ Object
11 12 13 |
# File 'lib/sbom/license/scanner.rb', line 11 def instance @instance ||= new end |
Instance Method Details
#deprecated?(license_id) ⇒ Boolean
48 49 50 |
# File 'lib/sbom/license/scanner.rb', line 48 def deprecated?(license_id) @deprecated[license_id] || false end |
#find_license(license_id) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/sbom/license/scanner.rb', line 23 def find_license(license_id) return "UNKNOWN" if license_id.nil? || license_id.empty? return license_id if SPECIAL_VALUES.include?(license_id.upcase) return license_id if license_id.start_with?("LicenseRef") normalized = license_id.strip return @licenses[normalized] if @licenses.key?(normalized) downcased = normalized.downcase @licenses.each do |id, _| return id if id.downcase == downcased end @license_names.each do |name, id| return id if name.downcase == downcased end "UNKNOWN" end |
#license_list_version ⇒ Object
74 75 76 |
# File 'lib/sbom/license/scanner.rb', line 74 def license_list_version @license_list_version end |
#osi_approved?(license_id) ⇒ Boolean
52 53 54 55 56 |
# File 'lib/sbom/license/scanner.rb', line 52 def osi_approved?(license_id) return false unless @licenses.key?(license_id) @licenses[license_id][:osi_approved] end |
#valid?(license_id) ⇒ Boolean
44 45 46 |
# File 'lib/sbom/license/scanner.rb', line 44 def valid?(license_id) find_license(license_id) != "UNKNOWN" end |
#validate_expression(expression) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/sbom/license/scanner.rb', line 58 def validate_expression(expression) return "NOASSERTION" if expression.nil? || expression.empty? tokens = expression.split(/\s+(AND|OR|WITH)\s+/i) tokens.map do |token| next token if %w[AND OR WITH].include?(token.upcase) cleaned = token.gsub(/[()]/, "").strip next token if cleaned.empty? found = find_license(cleaned) found == "UNKNOWN" ? "NOASSERTION" : token end.join(" ") end |