Class: Sbom::License::Scanner

Inherits:
Object
  • Object
show all
Defined in:
lib/sbom/license/scanner.rb

Constant Summary collapse

SPECIAL_VALUES =
%w[NOASSERTION NONE].freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeScanner

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

.instanceObject



11
12
13
# File 'lib/sbom/license/scanner.rb', line 11

def instance
  @instance ||= new
end

Instance Method Details

#deprecated?(license_id) ⇒ Boolean

Returns:

  • (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_versionObject



74
75
76
# File 'lib/sbom/license/scanner.rb', line 74

def license_list_version
  @license_list_version
end

#osi_approved?(license_id) ⇒ Boolean

Returns:

  • (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

Returns:

  • (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