Class: Bundler::Advise::Advisory

Inherits:
Object
  • Object
show all
Defined in:
lib/bundler/advise/advisory.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(fields = {}) ⇒ Advisory

Returns a new instance of Advisory.



22
23
24
25
26
# File 'lib/bundler/advise/advisory.rb', line 22

def initialize(fields={})
  fields.each do |k, v|
    instance_variable_set("@#{k}", v)
  end
end

Instance Attribute Details

#gem_specObject

Not always guaranteed to be set, but will be set by GemAdviser when scanning a lockfile.



18
19
20
# File 'lib/bundler/advise/advisory.rb', line 18

def gem_spec
  @gem_spec
end

Class Method Details

.fieldsObject



10
11
12
13
# File 'lib/bundler/advise/advisory.rb', line 10

def self.fields
  [:gem, :cve, :cvss_v2, :date, :description, :framework, :osvdb, :patched_versions,
   :platform, :related, :title, :unaffected_versions, :url, :vendor_patch]
end

.from_yml(yml_filename) ⇒ Object



5
6
7
8
# File 'lib/bundler/advise/advisory.rb', line 5

def self.from_yml(yml_filename)
  id = File.basename(yml_filename, '.yml')
  new(YAML.load(File.read(yml_filename)).tap { |h| h[:id] = id })
end

Instance Method Details

#is_affected?(gem_version) ⇒ Boolean

Returns:

  • (Boolean)


40
41
42
# File 'lib/bundler/advise/advisory.rb', line 40

def is_affected?(gem_version)
  is_not_patched?(gem_version) && is_not_unaffected?(gem_version)
end

#is_not_patched?(gem_version) ⇒ Boolean

Returns:

  • (Boolean)


44
45
46
47
48
# File 'lib/bundler/advise/advisory.rb', line 44

def is_not_patched?(gem_version)
  patched_versions.detect do |pv|
    pv.satisfied_by?(Gem::Version.create(gem_version))
  end.nil?
end

#is_not_unaffected?(gem_version) ⇒ Boolean

Returns:

  • (Boolean)


50
51
52
53
54
# File 'lib/bundler/advise/advisory.rb', line 50

def is_not_unaffected?(gem_version)
  unaffected_versions.detect do |pv|
    pv.satisfied_by?(Gem::Version.create(gem_version))
  end.nil?
end

#patched_versionsObject



36
37
38
# File 'lib/bundler/advise/advisory.rb', line 36

def patched_versions
  Array(@patched_versions).map { |v| Gem::Requirement.create(v.split(",")) }
end

#to_yamlObject



28
29
30
# File 'lib/bundler/advise/advisory.rb', line 28

def to_yaml
  self.class.fields.reduce({}) { |h, f| v = instance_variable_get("@#{f}"); h[f.to_s] = v if v; h }.to_yaml
end

#unaffected_versionsObject



32
33
34
# File 'lib/bundler/advise/advisory.rb', line 32

def unaffected_versions
  Array(@unaffected_versions).map { |v| Gem::Requirement.create(v.split(",")) }
end