Class: Brew::Vulns::Formula
- Inherits:
-
Object
- Object
- Brew::Vulns::Formula
- Defined in:
- lib/brew/vulns/formula.rb
Instance Attribute Summary collapse
-
#dependencies ⇒ Object
readonly
Returns the value of attribute dependencies.
-
#head_url ⇒ Object
readonly
Returns the value of attribute head_url.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#source_url ⇒ Object
readonly
Returns the value of attribute source_url.
-
#version ⇒ Object
readonly
Returns the value of attribute version.
Class Method Summary collapse
- .load_installed(formula_filter = nil) ⇒ Object
- .load_with_dependencies(formula_filter = nil) ⇒ Object
Instance Method Summary collapse
- #github? ⇒ Boolean
-
#initialize(data) ⇒ Formula
constructor
A new instance of Formula.
- #repo_url ⇒ Object
- #tag ⇒ Object
- #to_osv_query ⇒ Object
Constructor Details
#initialize(data) ⇒ Formula
Returns a new instance of Formula.
11 12 13 14 15 16 17 |
# File 'lib/brew/vulns/formula.rb', line 11 def initialize(data) @name = data["name"] || data["full_name"] @version = data.dig("versions", "stable") || data["version"] @source_url = data.dig("urls", "stable", "url") @head_url = data.dig("urls", "head", "url") @dependencies = data["dependencies"] || [] end |
Instance Attribute Details
#dependencies ⇒ Object (readonly)
Returns the value of attribute dependencies.
9 10 11 |
# File 'lib/brew/vulns/formula.rb', line 9 def dependencies @dependencies end |
#head_url ⇒ Object (readonly)
Returns the value of attribute head_url.
9 10 11 |
# File 'lib/brew/vulns/formula.rb', line 9 def head_url @head_url end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
9 10 11 |
# File 'lib/brew/vulns/formula.rb', line 9 def name @name end |
#source_url ⇒ Object (readonly)
Returns the value of attribute source_url.
9 10 11 |
# File 'lib/brew/vulns/formula.rb', line 9 def source_url @source_url end |
#version ⇒ Object (readonly)
Returns the value of attribute version.
9 10 11 |
# File 'lib/brew/vulns/formula.rb', line 9 def version @version end |
Class Method Details
.load_installed(formula_filter = nil) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/brew/vulns/formula.rb', line 41 def self.load_installed(formula_filter = nil) json, status = Open3.capture2("brew", "info", "--json=v2", "--installed") raise Error, "brew info failed with status #{status.exitstatus}" unless status.success? data = JSON.parse(json) formulae = data["formulae"].map { |f| new(f) } if formula_filter formulae.select! { |f| f.name == formula_filter || f.name.start_with?("#{formula_filter}@") } end formulae end |
.load_with_dependencies(formula_filter = nil) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/brew/vulns/formula.rb', line 55 def self.load_with_dependencies(formula_filter = nil) json, status = Open3.capture2("brew", "info", "--json=v2", "--installed") raise Error, "brew info failed with status #{status.exitstatus}" unless status.success? data = JSON.parse(json) all_formulae = data["formulae"].map { |f| new(f) } formulae_by_name = all_formulae.each_with_object({}) { |f, h| h[f.name] = f } if formula_filter filtered = all_formulae.select { |f| f.name == formula_filter || f.name.start_with?("#{formula_filter}@") } return [] if filtered.empty? deps_output, = Open3.capture2("brew", "deps", "--installed", formula_filter) dep_names = deps_output.split("\n").map(&:strip) result = filtered.each_with_object({}) { |f, h| h[f.name] = f } dep_names.each do |dep_name| dep = formulae_by_name[dep_name] result[dep_name] = dep if dep && !result[dep_name] end result.values else all_formulae end end |
Instance Method Details
#github? ⇒ Boolean
31 32 33 |
# File 'lib/brew/vulns/formula.rb', line 31 def github? repo_url&.include?("github.com") end |
#repo_url ⇒ Object
19 20 21 22 23 |
# File 'lib/brew/vulns/formula.rb', line 19 def repo_url return @repo_url if defined?(@repo_url) @repo_url = extract_repo_url(source_url) || extract_repo_url(head_url) end |
#tag ⇒ Object
25 26 27 28 29 |
# File 'lib/brew/vulns/formula.rb', line 25 def tag return @tag if defined?(@tag) @tag = extract_tag_from_url(source_url) end |
#to_osv_query ⇒ Object
35 36 37 38 39 |
# File 'lib/brew/vulns/formula.rb', line 35 def to_osv_query return nil unless repo_url && tag { repo_url: repo_url, version: tag, name: name } end |